diff --git a/.circleci/config.yml b/.circleci/config.yml index a18c8c4..ab3637a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,7 +6,7 @@ jobs: - image: cimg/aws:2023.01 environment: CODEARTIFACT_ENV: PROD - ECR_ENV: QA + ECR_ENV: DEV SERVICE_NAME: "domain-challenge" OUT_DIR: "buildscripts" steps: @@ -48,5 +48,5 @@ workflows: filters: branches: only: - - fix/update + - feature/autopilot - main diff --git a/package.json b/package.json index a10ff83..97d6f48 100644 --- a/package.json +++ b/package.json @@ -19,17 +19,21 @@ "author": "Rakib Ansary ", "license": "ISC", "dependencies": { + "@aws-sdk/client-lambda": "^3.294.0", + "@aws-sdk/util-utf8-node": "^3.259.0", "@grpc/grpc-js": "^1.7.1", "@opensearch-project/opensearch": "^2.2.0", - "@topcoder-framework/domain-acl": "^0.6.4", + "@topcoder-framework/domain-acl": "^0.7.0", + "@topcoder-framework/lib-common": "^0.7.0", "axios": "^1.2.2", + "dayjs": "^1.11.7", "dotenv": "^16.0.3", "grpc-server-reflection": "^0.1.5", "lodash": "^4.17.21", "moment": "^2.29.4", "source-map-support": "^0.5.21", "tc-core-library-js": "appirio-tech/tc-core-library-js.git#v2.6.4", - "topcoder-interface": "github:topcoder-platform/plat-interface-definition#v0.0.26", + "topcoder-interface": "github:topcoder-platform/plat-interface-definition#v0.0.29", "uuidv4": "^6.2.13", "xss": "^1.0.14" }, diff --git a/src/common/Constants.ts b/src/common/Constants.ts index 4454fec..dc2e4d5 100644 --- a/src/common/Constants.ts +++ b/src/common/Constants.ts @@ -41,5 +41,6 @@ export const ResourceInfoIds = { }; export const ChallengeStatuses = { - New: 'New', + New: "New", + Active: "Active", }; diff --git a/src/common/ConversionMap.ts b/src/common/ConversionMap.ts index a402bbb..988049d 100644 --- a/src/common/ConversionMap.ts +++ b/src/common/ConversionMap.ts @@ -5,19 +5,15 @@ const V5_TRACK_IDS = { DESIGN: "5fa04185-041f-49a6-bfd1-fe82533cd6c8", DEVELOPMENT: "9b6fc876-f4d9-4ccb-9dfd-419247628825", QA: "36e6a8d0-7e1e-4608-a673-64279d99c115", + CMP: "9d6e0de8-df14-4c76-ba0a-a9a8cb03a4ea", }; -const V5_TYPE_IDS = { - CHALLENGE: "927abff4-7af9-4145-8ba1-577c16e64e2e", - TASK: "ecd58c69-238f-43a4-a4bb-d172719b9f31", - FIRST_2_FINISH: "dc876fa4-ef2d-4eee-b701-b555fcc6544c", -}; - -export const V5_TRACK_NAMES_TO_IDS: { [key: string]: string } = { +const V5_TRACK_NAMES_TO_IDS = { DESIGN: V5_TRACK_IDS.DESIGN, DEVELOPMENT: V5_TRACK_IDS.DEVELOPMENT, "DATA SCIENCE": V5_TRACK_IDS.DATA_SCIENCE, "QUALITY ASSURANCE": V5_TRACK_IDS.QA, + "COMPETITIVE PROGRAMMING": V5_TRACK_IDS.CMP, }; const V5_TRACK_IDS_TO_NAMES = { @@ -25,9 +21,21 @@ const V5_TRACK_IDS_TO_NAMES = { [V5_TRACK_IDS.DESIGN]: "Design", [V5_TRACK_IDS.DEVELOPMENT]: "Development", [V5_TRACK_IDS.QA]: "Quality Assurance", + [V5_TRACK_IDS.CMP]: "Competitive Programming", }; -export const V5_TYPE_NAMES_TO_IDS: { [key: string]: string } = { +const V5_TYPE_IDS = { + CHALLENGE: "927abff4-7af9-4145-8ba1-577c16e64e2e", + TASK: "ecd58c69-238f-43a4-a4bb-d172719b9f31", + FIRST_2_FINISH: "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + PC: "34602883-a58d-45a9-b370-749574b6890d", + MM: "929bc408-9cf2-4b3e-ba71-adfbf693046c", + RDM: "78b37a69-92d5-4ad7-bf85-c79b65420c79", + SKL: "ddc4252a-270c-408f-a15d-2f31c2141cd3", + MA: "f9a5e88c-a815-4146-8b7a-169a3692feaf", +}; + +const V5_TYPE_NAMES_TO_IDS = { CHALLENGE: V5_TYPE_IDS.CHALLENGE, FIRST2FINISH: V5_TYPE_IDS.FIRST_2_FINISH, TASK: V5_TYPE_IDS.TASK, @@ -37,6 +45,11 @@ const V5_TYPE_IDS_TO_NAMES = { [V5_TYPE_IDS.CHALLENGE]: "Challenge", [V5_TYPE_IDS.TASK]: "Task", [V5_TYPE_IDS.FIRST_2_FINISH]: "First2Finish", + [V5_TYPE_IDS.PC]: "Practice Challenge", + [V5_TYPE_IDS.MM]: "Marathon Match", + [V5_TYPE_IDS.RDM]: "Rapid Development Match", + [V5_TYPE_IDS.SKL]: "Skill Builder", + [V5_TYPE_IDS.MA]: "Match", }; const V4_TRACKS = { @@ -85,8 +98,7 @@ const V4_SUBTRACKS = { SECURITY: "SECURITY", }; -export const MARATHON_MATCH_TAG: string = "Marathon Match"; -export const DATA_SCIENCE_MATCH_TAG: string = "Data Science Match"; +const MARATHON_MATCH_TAG = "Marathon Match"; const DATA_SCIENCE_TAG = "Data Science"; const FE_DESIGN_TAG = "Front-End Design"; @@ -123,7 +135,7 @@ export const V5_TO_V4 = { [V5_TYPE_IDS.CHALLENGE]: (tags: string[]) => { if ( _.includes(tags, MARATHON_MATCH_TAG) || - _.includes(tags, DATA_SCIENCE_MATCH_TAG) + _.includes(tags, DATA_SCIENCE_TAG) ) { return buildV4Data( V4_TRACKS.DATA_SCIENCE, @@ -141,6 +153,36 @@ export const V5_TO_V4 = { buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.FIRST_2_FINISH, false, []), [V5_TYPE_IDS.TASK]: () => buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.FIRST_2_FINISH, true, []), + [V5_TYPE_IDS.PC]: () => + buildV4Data( + V4_TRACKS.DATA_SCIENCE, + V4_SUBTRACKS.MARATHON_MATCH, + false, + [] + ), + [V5_TYPE_IDS.MM]: () => + buildV4Data( + V4_TRACKS.DATA_SCIENCE, + V4_SUBTRACKS.MARATHON_MATCH, + false, + [] + ), + [V5_TYPE_IDS.RDM]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.SKL]: () => + buildV4Data( + V4_TRACKS.DATA_SCIENCE, + V4_SUBTRACKS.MARATHON_MATCH, + false, + [] + ), + [V5_TYPE_IDS.MA]: () => + buildV4Data( + V4_TRACKS.DATA_SCIENCE, + V4_SUBTRACKS.MARATHON_MATCH, + false, + [] + ), }, [V5_TRACK_IDS.DESIGN]: { [V5_TYPE_IDS.CHALLENGE]: () => @@ -159,6 +201,21 @@ export const V5_TO_V4 = { true, [] ), + [V5_TYPE_IDS.PC]: () => + buildV4Data(V4_TRACKS.DESIGN, V4_SUBTRACKS.WEB_DESIGNS, false, []), + [V5_TYPE_IDS.MM]: () => + buildV4Data( + V4_TRACKS.DATA_SCIENCE, + V4_SUBTRACKS.MARATHON_MATCH, + false, + [] + ), + [V5_TYPE_IDS.RDM]: () => + buildV4Data(V4_TRACKS.DESIGN, V4_SUBTRACKS.WEB_DESIGNS, false, []), + [V5_TYPE_IDS.SKL]: () => + buildV4Data(V4_TRACKS.DESIGN, V4_SUBTRACKS.WEB_DESIGNS, false, []), + [V5_TYPE_IDS.MA]: () => + buildV4Data(V4_TRACKS.DESIGN, V4_SUBTRACKS.WEB_DESIGNS, false, []), }, [V5_TRACK_IDS.DEVELOPMENT]: { [V5_TYPE_IDS.CHALLENGE]: () => @@ -167,6 +224,21 @@ export const V5_TO_V4 = { buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.FIRST_2_FINISH, false, []), [V5_TYPE_IDS.TASK]: () => buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.FIRST_2_FINISH, true, []), + [V5_TYPE_IDS.PC]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.MM]: () => + buildV4Data( + V4_TRACKS.DATA_SCIENCE, + V4_SUBTRACKS.MARATHON_MATCH, + false, + [] + ), + [V5_TYPE_IDS.RDM]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.SKL]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.MA]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), }, [V5_TRACK_IDS.QA]: { [V5_TYPE_IDS.CHALLENGE]: () => @@ -175,6 +247,44 @@ export const V5_TO_V4 = { buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.FIRST_2_FINISH, false, []), [V5_TYPE_IDS.TASK]: () => buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.FIRST_2_FINISH, true, []), + [V5_TYPE_IDS.PC]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.MM]: () => + buildV4Data( + V4_TRACKS.DATA_SCIENCE, + V4_SUBTRACKS.MARATHON_MATCH, + false, + [] + ), + [V5_TYPE_IDS.RDM]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.SKL]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.MA]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + }, + [V5_TRACK_IDS.CMP]: { + [V5_TYPE_IDS.CHALLENGE]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.BUG_HUNT, false, []), + [V5_TYPE_IDS.FIRST_2_FINISH]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.FIRST_2_FINISH, false, []), + [V5_TYPE_IDS.TASK]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.FIRST_2_FINISH, true, []), + [V5_TYPE_IDS.PC]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.MM]: () => + buildV4Data( + V4_TRACKS.DATA_SCIENCE, + V4_SUBTRACKS.MARATHON_MATCH, + false, + [] + ), + [V5_TYPE_IDS.RDM]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.SKL]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), + [V5_TYPE_IDS.MA]: () => + buildV4Data(V4_TRACKS.DEVELOP, V4_SUBTRACKS.CODE, false, []), }, }; @@ -183,7 +293,7 @@ export const V4_TO_V5 = { // categorizes non competitive programming marathon matches as Data Science Match [V4_SUBTRACKS.MARATHON_MATCH]: () => buildV5Data(V5_TRACK_IDS.DATA_SCIENCE, V5_TYPE_IDS.CHALLENGE, [ - DATA_SCIENCE_MATCH_TAG, + DATA_SCIENCE_TAG, ]), }, [V4_TRACKS.DESIGN]: { diff --git a/src/common/CoreOperations.ts b/src/common/CoreOperations.ts index db9660f..713f780 100644 --- a/src/common/CoreOperations.ts +++ b/src/common/CoreOperations.ts @@ -285,12 +285,12 @@ abstract class CoreOperations< index = this.entityIndexList[criteria.key].index!; } - return Filter.fromJSON({ + return { name: criteria.key, // TODO: Map operator from topcoder.common.Operator to PartiQL.Operator operator: Operator.OPERATOR_EQUAL, value: this.toValue(criteria.key, criteria.value), - }); + }; }); return { diff --git a/src/domain/Challenge.ts b/src/domain/Challenge.ts index 089b1bc..2c7f776 100644 --- a/src/domain/Challenge.ts +++ b/src/domain/Challenge.ts @@ -15,6 +15,10 @@ import xss from "xss"; import CoreOperations from "../common/CoreOperations"; import { Value } from "../dal/models/nosql/parti_ql"; import IdGenerator from "../helpers/IdGenerator"; +import { + DomainHelper, + Value as ProtobufValue, +} from "@topcoder-framework/lib-common"; import { Challenge, ChallengeList, @@ -62,6 +66,7 @@ import legacyMapper from "../util/LegacyMapper"; import { CreateResult, Operator } from "@topcoder-framework/lib-common"; import { StatusBuilder } from "@grpc/grpc-js"; import { Status } from "@grpc/grpc-js/build/src/constants"; +import ChallengeScheduler from "../util/ChallengeScheduler"; if (!process.env.GRPC_ACL_SERVER_HOST || !process.env.GRPC_ACL_SERVER_PORT) { throw new Error( @@ -113,6 +118,7 @@ interface GetGroupsResult { class ChallengeDomain extends CoreOperations { private esClient = ElasticSearch.getESClient(); + protected toEntity(item: { [key: string]: Value }): Challenge { for (const key of [ "phases", @@ -123,6 +129,23 @@ class ChallengeDomain extends CoreOperations { "prizeSets", ]) { try { + if (key === "metadata") { + if (item["metadata"].kind?.$case === "listValue") { + item["metadata"] = { + kind: { + $case: "listValue", + listValue: item["metadata"].kind.listValue.map((v) => { + try { + return JSON.stringify(JSON.parse(v.toString())); + } catch (e) { + return v; + } + }), + }, + }; + } + } + item[key] = JSON.parse(item[key].toString()); } catch (e) { // do nothing @@ -175,10 +198,6 @@ class ChallengeDomain extends CoreOperations { try { // prettier-ignore const legacyChallengeCreateInput = LegacyCreateChallengeInput.fromPartial(legacyMapper.mapChallengeDraftUpdateInput(input)); - console.log( - "legacy-challenge-create-input", - legacyChallengeCreateInput - ); // prettier-ignore const legacyChallengeCreateResponse = await legacyChallengeDomain.create(legacyChallengeCreateInput); if (legacyChallengeCreateResponse.kind?.$case === "integerId") { @@ -209,6 +228,19 @@ class ChallengeDomain extends CoreOperations { legacyId: legacyChallengeId != null ? legacyChallengeId : undefined, description: xss(input.description ?? ""), privateDescription: xss(input.privateDescription ?? ""), + metadata: + input.metadata.map((m) => { + let parsedValue = m.value; + try { + parsedValue = JSON.parse(m.value); + } catch (e) { + // ignore error and use unparsed value + } + return { + name: m.name, + value: parsedValue, + }; + }) ?? [], }; return super.create(challenge); @@ -1197,13 +1229,32 @@ class ChallengeDomain extends CoreOperations { // console.log(input); console.log(_.omit(input, ["id"])); - return super.update(scanCriteria, _.omit(input, ["id"])); + const challengeList = await super.update( + scanCriteria, + _.omit(input, ["id"]) + ); + + if (input.phases && input.phases.length) { + await ChallengeScheduler.schedule({ + action: "schedule", + challengeId: input.id, + phases: input.phases.map((phase) => ({ + name: phase.name, + scheduledStartDate: phase.scheduledStartDate, + scheduledEndDate: phase.scheduledEndDate, + })), + }); + } + + return challengeList; } public async updateForAcl( scanCriteria: ScanCriteria[], input: UpdateChallengeInputForACL_UpdateInputForACL ): Promise { + console.log("updateforacl", JSON.stringify(input.phases)); + console.log("scan-criteria", scanCriteria); const updatedBy = "tcwebservice"; // TODO: Extract from interceptors let challenge: Challenge | undefined = undefined; const id = scanCriteria[0].value; @@ -1212,7 +1263,9 @@ class ChallengeDomain extends CoreOperations { data.status = input.status; } if (!_.isUndefined(input.phases)) { + console.log("setting phases"); data.phases = input.phases.phases; + console.log("done setting phases"); data.currentPhase = input.currentPhase; data.registrationEndDate = input.registrationStartDate; data.registrationEndDate = input.registrationEndDate; @@ -1221,18 +1274,30 @@ class ChallengeDomain extends CoreOperations { data.startDate = input.startDate; data.endDate = input.endDate; } + console.log("current-phase"); if (!_.isUndefined(input.currentPhaseNames)) { data.currentPhaseNames = input.currentPhaseNames.currentPhaseNames; } + console.log("done-phase"); if (!_.isUndefined(input.legacy)) { if (_.isUndefined(challenge)) { - challenge = await this.lookup({ key: "id", value: id }); + console.log("lookup challenge"); + try { + challenge = await this.lookup( + DomainHelper.getLookupCriteria("id", id) + ); + } catch (err) { + console.error(err); + throw err; + } + console.log("done lookoing up challenge"); } data.legacy = _.assign({}, challenge.legacy, input.legacy); } + console.log("done-legacy"); if (!_.isUndefined(input.prizeSets)) { if (_.isUndefined(challenge)) { - challenge = await this.lookup({ key: "id", value: id }); + challenge = await this.lookup(DomainHelper.getLookupCriteria("id", id)); } const prizeSets = _.filter( [ @@ -1258,15 +1323,21 @@ class ChallengeDomain extends CoreOperations { } data.prizeSets = prizeSets; } + console.log("done with prizesets"); if (!_.isUndefined(input.overview)) { data.overview = input.overview; } + console.log("done with overview"); if (!_.isUndefined(input.winners)) { data.winners = input.winners.winners; } + console.log("done with winners"); + data.updated = new Date(); data.updatedBy = updatedBy; - super.update( + + console.log("Updating...", JSON.stringify(data, null, 2)); + await super.update( scanCriteria, _.omit(data, [ "currentPhase", @@ -1277,6 +1348,19 @@ class ChallengeDomain extends CoreOperations { "submissionEndDate", ]) ); + + if (input.phases?.phases && input.phases.phases.length) { + await ChallengeScheduler.schedule({ + action: "schedule", + challengeId: id, + phases: input.phases.phases.map((phase) => ({ + name: phase.name, + scheduledStartDate: phase.scheduledStartDate, + scheduledEndDate: phase.scheduledEndDate, + })), + }); + } + await this.esClient.update({ index: ES_INDEX, refresh: ES_REFRESH, diff --git a/src/models/domain-layer/challenge/challenge.ts b/src/models/domain-layer/challenge/challenge.ts index 885973e..a1389d8 100644 --- a/src/models/domain-layer/challenge/challenge.ts +++ b/src/models/domain-layer/challenge/challenge.ts @@ -95,6 +95,12 @@ export interface Challenge_Phase { phaseId: string; id: string; isOpen: boolean; + constraints: Challenge_Phase_Constraint[]; +} + +export interface Challenge_Phase_Constraint { + name: string; + value: number; } export interface Challenge_Winner { @@ -1160,6 +1166,7 @@ function createBaseChallenge_Phase(): Challenge_Phase { phaseId: "", id: "", isOpen: false, + constraints: [], }; } @@ -1192,6 +1199,9 @@ export const Challenge_Phase = { if (message.isOpen === true) { writer.uint32(72).bool(message.isOpen); } + for (const v of message.constraints) { + Challenge_Phase_Constraint.encode(v!, writer.uint32(82).fork()).ldelim(); + } return writer; }, @@ -1229,6 +1239,9 @@ export const Challenge_Phase = { case 9: message.isOpen = reader.bool(); break; + case 10: + message.constraints.push(Challenge_Phase_Constraint.decode(reader, reader.uint32())); + break; default: reader.skipType(tag & 7); break; @@ -1248,6 +1261,9 @@ export const Challenge_Phase = { phaseId: isSet(object.phaseId) ? String(object.phaseId) : "", id: isSet(object.id) ? String(object.id) : "", isOpen: isSet(object.isOpen) ? Boolean(object.isOpen) : false, + constraints: Array.isArray(object?.constraints) + ? object.constraints.map((e: any) => Challenge_Phase_Constraint.fromJSON(e)) + : [], }; }, @@ -1262,6 +1278,11 @@ export const Challenge_Phase = { message.phaseId !== undefined && (obj.phaseId = message.phaseId); message.id !== undefined && (obj.id = message.id); message.isOpen !== undefined && (obj.isOpen = message.isOpen); + if (message.constraints) { + obj.constraints = message.constraints.map((e) => e ? Challenge_Phase_Constraint.toJSON(e) : undefined); + } else { + obj.constraints = []; + } return obj; }, @@ -1280,6 +1301,69 @@ export const Challenge_Phase = { message.phaseId = object.phaseId ?? ""; message.id = object.id ?? ""; message.isOpen = object.isOpen ?? false; + message.constraints = object.constraints?.map((e) => Challenge_Phase_Constraint.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseChallenge_Phase_Constraint(): Challenge_Phase_Constraint { + return { name: "", value: 0 }; +} + +export const Challenge_Phase_Constraint = { + encode(message: Challenge_Phase_Constraint, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + if (message.value !== 0) { + writer.uint32(16).int32(message.value); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Challenge_Phase_Constraint { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseChallenge_Phase_Constraint(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + message.value = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): Challenge_Phase_Constraint { + return { + name: isSet(object.name) ? String(object.name) : "", + value: isSet(object.value) ? Number(object.value) : 0, + }; + }, + + toJSON(message: Challenge_Phase_Constraint): unknown { + const obj: any = {}; + message.name !== undefined && (obj.name = message.name); + message.value !== undefined && (obj.value = Math.round(message.value)); + return obj; + }, + + create, I>>(base?: I): Challenge_Phase_Constraint { + return Challenge_Phase_Constraint.fromPartial(base ?? {}); + }, + + fromPartial, I>>(object: I): Challenge_Phase_Constraint { + const message = createBaseChallenge_Phase_Constraint(); + message.name = object.name ?? ""; + message.value = object.value ?? 0; return message; }, }; diff --git a/src/schema/Challenge.ts b/src/schema/Challenge.ts index 2f3d536..85f850c 100644 --- a/src/schema/Challenge.ts +++ b/src/schema/Challenge.ts @@ -9,7 +9,7 @@ export const ChallengeSchema = { }, { name: "phases", - type: DataType.DATA_TYPE_STRING, + type: DataType.DATA_TYPE_LIST, }, { name: "legacyId", @@ -29,7 +29,7 @@ export const ChallengeSchema = { }, { name: "legacy", - type: DataType.DATA_TYPE_NUMBER, + type: DataType.DATA_TYPE_MAP, }, { name: "billing", diff --git a/src/util/ChallengeScheduler.ts b/src/util/ChallengeScheduler.ts new file mode 100644 index 0000000..dc25b85 --- /dev/null +++ b/src/util/ChallengeScheduler.ts @@ -0,0 +1,29 @@ +import { InvokeCommand, LambdaClient } from "@aws-sdk/client-lambda"; +import { fromUtf8 } from "@aws-sdk/util-utf8-node"; + +export interface IChallengeScheduler { + action: "schedule" | "remove"; + challengeId: string; + phases: { + name: string; + scheduledStartDate?: string; + scheduledEndDate?: string; + }[]; +} + +export default new (class { + #client: LambdaClient = new LambdaClient({ region: process.env.AWS_REGION }); + + async schedule(challenge: IChallengeScheduler) { + const invokeCommand = new InvokeCommand({ + FunctionName: process.env.CHALLENGE_SCHEDULER_LAMBDA_ARN, + Payload: fromUtf8(JSON.stringify(challenge)), + }); + + try { + await this.#client.send(invokeCommand); + } catch (error) { + console.error(error); + } + } +})(); diff --git a/src/util/DateUtil.ts b/src/util/DateUtil.ts new file mode 100644 index 0000000..262c108 --- /dev/null +++ b/src/util/DateUtil.ts @@ -0,0 +1,24 @@ +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import timezone from "dayjs/plugin/timezone"; + +dayjs.extend(utc); +dayjs.extend(timezone); + +export const IFX_TIMEZONE = "America/New_York"; +export const dateFormatIfx = "YYYY-MM-DD HH:mm:ss"; + +class DateUtil { + public formatDateForIfx(date: string): string | undefined { + const parsedDate = dayjs(date); + return parsedDate.isValid() + ? parsedDate.tz(IFX_TIMEZONE).format(dateFormatIfx) + : undefined; + } + + public isValidDate(date: string) { + return dayjs(date).isValid(); + } +} + +export default new DateUtil(); diff --git a/src/util/LegacyMapper.ts b/src/util/LegacyMapper.ts index 33550c4..0af4d38 100644 --- a/src/util/LegacyMapper.ts +++ b/src/util/LegacyMapper.ts @@ -2,6 +2,7 @@ import _ from "lodash"; import { PrizeSetTypes } from "../common/Constants"; import { V5_TO_V4 } from "../common/ConversionMap"; import { legacyChallengeStatusesMap } from "./constants"; +import DateUtil from "./DateUtil"; class LegacyMapper { // To be used on challenge:update calls that change state from New -> Draft @@ -29,12 +30,16 @@ class LegacyMapper { phases: input.phases.map((phase: any, index: number) => ({ phaseTypeId: this.mapPhaseNameToPhaseTypeId(phase.name), phaseStatusId: 1, - fixedStartTime: index == 1 ? phase.scheduledStartDate : undefined, - scheduledStartTime: phase.scheduledStartDate, - scheduledEndTime: phase.scheduledEndDate, - actualStartTime: phase.actualStartDate, - actualEndTime: phase.actualEndDate, + fixedStartTime: + index == 0 + ? DateUtil.formatDateForIfx(phase.scheduledStartDate) + : undefined, // Registration Phase needs a fixedStartTime + scheduledStartTime: DateUtil.formatDateForIfx(phase.scheduledStartDate), + scheduledEndTime: DateUtil.formatDateForIfx(phase.scheduledEndDate), + actualStartTime: DateUtil.formatDateForIfx(phase.actualStartDate), + actualEndTime: DateUtil.formatDateForIfx(phase.actualEndDate), duration: phase.duration, + phaseCriteria: this.mapPhaseCriteria(phase), })), reviewType: input.legacy?.reviewType ?? "INTERNAL", confidentialityType: input.legacy?.confidentialityType ?? "public", @@ -146,6 +151,35 @@ class LegacyMapper { }; } + private mapPhaseCriteria(phase: any) { + const reviewPhaseConstraint = phase.constraints?.find( + (constraint: { name: string; value: number }) => + constraint.name === "Number of Reviewers" + ); + + const submissionPhaseConstraint = phase.constraints?.find( + (constraint: { name: string; value: number }) => + constraint.name === "Number of Submissions" + ); + + return { + 1: phase.name === "Review" ? 30001610 : undefined, // Scorecard ID + 2: phase.name === "Registration" ? 1 : undefined, // Registration Number + 3: + phase.name === "Submission" + ? submissionPhaseConstraint?.value ?? + reviewPhaseConstraint?.value != null + ? 1 + : undefined + : undefined, // Submission Number + 4: undefined, // View Response During Appeals + 5: undefined, // Manual Screening + 6: + phase.name === "Review" ? reviewPhaseConstraint?.value ?? 2 : undefined, // Reviewer Number + 7: undefined, // View Reviews During Review + }; + } + private mapPhaseNameToPhaseTypeId(name: string) { if (name == "Registration") { return 1; diff --git a/yarn.lock b/yarn.lock index a21cf1a..dfc34bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,744 @@ # yarn lockfile v1 +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/abort-controller@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.292.0.tgz#37c43fd2ce5bcb158aa62e3a5632045ee8a7e3cc" + integrity sha512-lf+OPptL01kvryIJy7+dvFux5KbJ6OTwLPPEekVKZ2AfEvwcVtOZWFUhyw3PJCBTVncjKB1Kjl3V/eTS3YuPXQ== + dependencies: + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/client-lambda@^3.294.0": + version "3.294.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.294.0.tgz#725705142560601af6e3cd212b13567cce72fd43" + integrity sha512-zqkRsODF7R/4d597mjPExqyrRqwut+PCffQvLsfmxCnRHQPWVmMRBVl9xAvmsPM0mWlvrqcwa/GGOJplG3z/vQ== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.294.0" + "@aws-sdk/config-resolver" "3.292.0" + "@aws-sdk/credential-provider-node" "3.294.0" + "@aws-sdk/fetch-http-handler" "3.292.0" + "@aws-sdk/hash-node" "3.292.0" + "@aws-sdk/invalid-dependency" "3.292.0" + "@aws-sdk/middleware-content-length" "3.292.0" + "@aws-sdk/middleware-endpoint" "3.292.0" + "@aws-sdk/middleware-host-header" "3.292.0" + "@aws-sdk/middleware-logger" "3.292.0" + "@aws-sdk/middleware-recursion-detection" "3.292.0" + "@aws-sdk/middleware-retry" "3.293.0" + "@aws-sdk/middleware-serde" "3.292.0" + "@aws-sdk/middleware-signing" "3.292.0" + "@aws-sdk/middleware-stack" "3.292.0" + "@aws-sdk/middleware-user-agent" "3.293.0" + "@aws-sdk/node-config-provider" "3.292.0" + "@aws-sdk/node-http-handler" "3.292.0" + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/smithy-client" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/url-parser" "3.292.0" + "@aws-sdk/util-base64" "3.292.0" + "@aws-sdk/util-body-length-browser" "3.292.0" + "@aws-sdk/util-body-length-node" "3.292.0" + "@aws-sdk/util-defaults-mode-browser" "3.292.0" + "@aws-sdk/util-defaults-mode-node" "3.292.0" + "@aws-sdk/util-endpoints" "3.293.0" + "@aws-sdk/util-retry" "3.292.0" + "@aws-sdk/util-user-agent-browser" "3.292.0" + "@aws-sdk/util-user-agent-node" "3.292.0" + "@aws-sdk/util-utf8" "3.292.0" + "@aws-sdk/util-waiter" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/client-sso-oidc@3.294.0": + version "3.294.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.294.0.tgz#eeb1689c5ee1cc77d92ea341fcd919e04d45372d" + integrity sha512-/ZfDud76MdSPJ/TxjV2xLE30XbBQDZwKQ32axwoK1eziPvrAIUBYVgpBwj+m0quhoiQhBKkg3aFl6j39AF2thw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/config-resolver" "3.292.0" + "@aws-sdk/fetch-http-handler" "3.292.0" + "@aws-sdk/hash-node" "3.292.0" + "@aws-sdk/invalid-dependency" "3.292.0" + "@aws-sdk/middleware-content-length" "3.292.0" + "@aws-sdk/middleware-endpoint" "3.292.0" + "@aws-sdk/middleware-host-header" "3.292.0" + "@aws-sdk/middleware-logger" "3.292.0" + "@aws-sdk/middleware-recursion-detection" "3.292.0" + "@aws-sdk/middleware-retry" "3.293.0" + "@aws-sdk/middleware-serde" "3.292.0" + "@aws-sdk/middleware-stack" "3.292.0" + "@aws-sdk/middleware-user-agent" "3.293.0" + "@aws-sdk/node-config-provider" "3.292.0" + "@aws-sdk/node-http-handler" "3.292.0" + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/smithy-client" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/url-parser" "3.292.0" + "@aws-sdk/util-base64" "3.292.0" + "@aws-sdk/util-body-length-browser" "3.292.0" + "@aws-sdk/util-body-length-node" "3.292.0" + "@aws-sdk/util-defaults-mode-browser" "3.292.0" + "@aws-sdk/util-defaults-mode-node" "3.292.0" + "@aws-sdk/util-endpoints" "3.293.0" + "@aws-sdk/util-retry" "3.292.0" + "@aws-sdk/util-user-agent-browser" "3.292.0" + "@aws-sdk/util-user-agent-node" "3.292.0" + "@aws-sdk/util-utf8" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/client-sso@3.294.0": + version "3.294.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.294.0.tgz#27391306759fd071fdb715ff3bb0693ae6053a84" + integrity sha512-+FuxQTi5WvnaXM5JbNLkBIzQ3An4gA0ox61N1u+3xled+nywKb1yQ7WmRpyMG5bLbkmnj3aqoo5/uskFc4c4EA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/config-resolver" "3.292.0" + "@aws-sdk/fetch-http-handler" "3.292.0" + "@aws-sdk/hash-node" "3.292.0" + "@aws-sdk/invalid-dependency" "3.292.0" + "@aws-sdk/middleware-content-length" "3.292.0" + "@aws-sdk/middleware-endpoint" "3.292.0" + "@aws-sdk/middleware-host-header" "3.292.0" + "@aws-sdk/middleware-logger" "3.292.0" + "@aws-sdk/middleware-recursion-detection" "3.292.0" + "@aws-sdk/middleware-retry" "3.293.0" + "@aws-sdk/middleware-serde" "3.292.0" + "@aws-sdk/middleware-stack" "3.292.0" + "@aws-sdk/middleware-user-agent" "3.293.0" + "@aws-sdk/node-config-provider" "3.292.0" + "@aws-sdk/node-http-handler" "3.292.0" + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/smithy-client" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/url-parser" "3.292.0" + "@aws-sdk/util-base64" "3.292.0" + "@aws-sdk/util-body-length-browser" "3.292.0" + "@aws-sdk/util-body-length-node" "3.292.0" + "@aws-sdk/util-defaults-mode-browser" "3.292.0" + "@aws-sdk/util-defaults-mode-node" "3.292.0" + "@aws-sdk/util-endpoints" "3.293.0" + "@aws-sdk/util-retry" "3.292.0" + "@aws-sdk/util-user-agent-browser" "3.292.0" + "@aws-sdk/util-user-agent-node" "3.292.0" + "@aws-sdk/util-utf8" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/client-sts@3.294.0": + version "3.294.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.294.0.tgz#1d89acb6d49d02b0840c5a8b93e1b14acfb43b23" + integrity sha512-AefqwhFjTDzelZuSYhriJbiI+GQwf2yKiKAnCt0gRj6rswewStM63Gtlhfb01sFPp+ZiqPcyQ47LqUaHp1mz/g== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/config-resolver" "3.292.0" + "@aws-sdk/credential-provider-node" "3.294.0" + "@aws-sdk/fetch-http-handler" "3.292.0" + "@aws-sdk/hash-node" "3.292.0" + "@aws-sdk/invalid-dependency" "3.292.0" + "@aws-sdk/middleware-content-length" "3.292.0" + "@aws-sdk/middleware-endpoint" "3.292.0" + "@aws-sdk/middleware-host-header" "3.292.0" + "@aws-sdk/middleware-logger" "3.292.0" + "@aws-sdk/middleware-recursion-detection" "3.292.0" + "@aws-sdk/middleware-retry" "3.293.0" + "@aws-sdk/middleware-sdk-sts" "3.292.0" + "@aws-sdk/middleware-serde" "3.292.0" + "@aws-sdk/middleware-signing" "3.292.0" + "@aws-sdk/middleware-stack" "3.292.0" + "@aws-sdk/middleware-user-agent" "3.293.0" + "@aws-sdk/node-config-provider" "3.292.0" + "@aws-sdk/node-http-handler" "3.292.0" + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/smithy-client" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/url-parser" "3.292.0" + "@aws-sdk/util-base64" "3.292.0" + "@aws-sdk/util-body-length-browser" "3.292.0" + "@aws-sdk/util-body-length-node" "3.292.0" + "@aws-sdk/util-defaults-mode-browser" "3.292.0" + "@aws-sdk/util-defaults-mode-node" "3.292.0" + "@aws-sdk/util-endpoints" "3.293.0" + "@aws-sdk/util-retry" "3.292.0" + "@aws-sdk/util-user-agent-browser" "3.292.0" + "@aws-sdk/util-user-agent-node" "3.292.0" + "@aws-sdk/util-utf8" "3.292.0" + fast-xml-parser "4.1.2" + tslib "^2.3.1" + +"@aws-sdk/config-resolver@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.292.0.tgz#c5c9b86a2a75aa591bc7acdbe94557367a2a7d90" + integrity sha512-cB3twnNR7vYvlt2jvw8VlA1+iv/tVzl+/S39MKqw2tepU+AbJAM0EHwb/dkf1OKSmlrnANXhshx80MHF9zL4mA== + dependencies: + "@aws-sdk/signature-v4" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/util-config-provider" "3.292.0" + "@aws-sdk/util-middleware" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-env@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.292.0.tgz#bde3333b7bee715c8a41113f1c6deb0e896a59da" + integrity sha512-YbafSG0ZEKE2969CJWVtUhh3hfOeLPecFVoXOtegCyAJgY5Ghtu4TsVhL4DgiGAgOC30ojAmUVQEXzd7xJF5xA== + dependencies: + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-imds@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.292.0.tgz#557e59c637c3852cac54534319c75eb015aa3081" + integrity sha512-W/peOgDSRYulgzFpUhvgi1pCm6piBz6xrVN17N4QOy+3NHBXRVMVzYk6ct2qpLPgJUSEZkcpP+Gds+bBm8ed1A== + dependencies: + "@aws-sdk/node-config-provider" "3.292.0" + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/url-parser" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-ini@3.294.0": + version "3.294.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.294.0.tgz#b4ff9f5da2c46b12c61acf85caab9eb3ed5330cd" + integrity sha512-pdTPbaAb5bWA+DnuKoL2TpXeNDp6Ejpv/OYt+bw2gdzl9w5r/ZCtUTTbW+Vvejr4WL5s3c1bY96kwdqCn7iLqA== + dependencies: + "@aws-sdk/credential-provider-env" "3.292.0" + "@aws-sdk/credential-provider-imds" "3.292.0" + "@aws-sdk/credential-provider-process" "3.292.0" + "@aws-sdk/credential-provider-sso" "3.294.0" + "@aws-sdk/credential-provider-web-identity" "3.292.0" + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/shared-ini-file-loader" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-node@3.294.0": + version "3.294.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.294.0.tgz#0475d63f9627e3e429cda19b8b0f164fc01437a0" + integrity sha512-zUL1Qhb4BsQIZCs/TPpG4oIYH/9YsGiS+Se1tasSGjTOLfBy7jhOZ0QIdpEeyAx/EP8blOBredM9xWfEXgiHVA== + dependencies: + "@aws-sdk/credential-provider-env" "3.292.0" + "@aws-sdk/credential-provider-imds" "3.292.0" + "@aws-sdk/credential-provider-ini" "3.294.0" + "@aws-sdk/credential-provider-process" "3.292.0" + "@aws-sdk/credential-provider-sso" "3.294.0" + "@aws-sdk/credential-provider-web-identity" "3.292.0" + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/shared-ini-file-loader" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-process@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.292.0.tgz#52caa9d46d227e02fda5807d32a177a0819eee97" + integrity sha512-CFVXuMuUvg/a4tknzRikEDwZBnKlHs1LZCpTXIGjBdUTdosoi4WNzDLzGp93ZRTtcgFz+4wirz2f7P3lC0NrQw== + dependencies: + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/shared-ini-file-loader" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-sso@3.294.0": + version "3.294.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.294.0.tgz#719ad377a41c80bdf087ca11e80890c3b8cbb8f4" + integrity sha512-UxrcAA/0l7j9+3tolYcG5M61D/IE1Bjd/9H87H1i2A2BrwUUBhW1Dp/vvROEDrrywlMDG3CDF3T/7ADtTak+sg== + dependencies: + "@aws-sdk/client-sso" "3.294.0" + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/shared-ini-file-loader" "3.292.0" + "@aws-sdk/token-providers" "3.294.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-web-identity@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.292.0.tgz#60e180eadd0947891ed041f6a4574fa2074d0d4c" + integrity sha512-4DbtIEM9gGVfqYlMdYXg3XY+vBhemjB1zXIequottW8loLYM8Vuz4/uGxxKNze6evVVzowsA0wKrYclE1aj/Rg== + dependencies: + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/fetch-http-handler@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.292.0.tgz#a99d915e019e888bfdfa3e5da68606bfc4c80522" + integrity sha512-zh3bhUJbL8RSa39ZKDcy+AghtUkIP8LwcNlwRIoxMQh3Row4D1s4fCq0KZCx98NJBEXoiTLyTQlZxxI//BOb1Q== + dependencies: + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/querystring-builder" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/util-base64" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/hash-node@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.292.0.tgz#4f62e36a7cdefd0f4bca4c1d16261d36a4596442" + integrity sha512-1yLxmIsvE+eK36JXEgEIouTITdykQLVhsA5Oai//Lar6Ddgu1sFpLDbdkMtKbrh4I0jLN9RacNCkeVQjZPTCCQ== + dependencies: + "@aws-sdk/types" "3.292.0" + "@aws-sdk/util-buffer-from" "3.292.0" + "@aws-sdk/util-utf8" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/invalid-dependency@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.292.0.tgz#0e5b47cacf459db6ae8dddc02d613a5bd0ff3555" + integrity sha512-39OUV78CD3TmEbjhpt+V+Fk4wAGWhixqHxDSN8+4WL0uB4Fl7k5m3Z9hNY78AttHQSl2twR7WtLztnXPAFsriw== + dependencies: + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/is-array-buffer@3.201.0": + version "3.201.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz#06e557adc284fac2f26071c2944ae01f61b95854" + integrity sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/is-array-buffer@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.292.0.tgz#d599c7ad4ad104918d52b8d2160091ca5b0a1971" + integrity sha512-kW/G5T/fzI0sJH5foZG6XJiNCevXqKLxV50qIT4B1pMuw7regd4ALIy0HwSqj1nnn9mSbRWBfmby0jWCJsMcwg== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/middleware-content-length@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.292.0.tgz#f2035aee536abf553b743202879ee86171c4c3c7" + integrity sha512-2gMWzQus5mj14menolpPDbYBeaOYcj7KNFZOjTjjI3iQ0KqyetG6XasirNrcJ/8QX1BRmpTol8Xjp2Ue3Gbzwg== + dependencies: + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-endpoint@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.292.0.tgz#c6809a2e001ab03cac223dfae48439e893da627b" + integrity sha512-cPMkiSxpZGG6tYlW4OS+ucS6r43f9ddX9kcUoemJCY10MOuogdPjulCAjE0HTs2PLKSOrrG4CTP4Q4wWDrH4Bw== + dependencies: + "@aws-sdk/middleware-serde" "3.292.0" + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/signature-v4" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/url-parser" "3.292.0" + "@aws-sdk/util-config-provider" "3.292.0" + "@aws-sdk/util-middleware" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-host-header@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.292.0.tgz#513b011fcabedf29e0a6706a4aa3867bc7d813e4" + integrity sha512-mHuCWe3Yg2S5YZ7mB7sKU6C97XspfqrimWjMW9pfV2usAvLA3R0HrB03jpR5vpZ3P4q7HB6wK3S6CjYMGGRNag== + dependencies: + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-logger@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.292.0.tgz#dd5ca0f20b06b1b74f918ddf0264ece1e9887aa1" + integrity sha512-yZNY1XYmG3NG+uonET7jzKXNiwu61xm/ZZ6i/l51SusuaYN+qQtTAhOFsieQqTehF9kP4FzbsWgPDwD8ZZX9lw== + dependencies: + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-recursion-detection@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.292.0.tgz#d422bbc9efa2df2481ad56d0db553b0c0652e615" + integrity sha512-kA3VZpPko0Zqd7CYPTKAxhjEv0HJqFu2054L04dde1JLr43ro+2MTdX7vsHzeAFUVRphqatFFofCumvXmU6Mig== + dependencies: + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-retry@3.293.0": + version "3.293.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.293.0.tgz#e7706c926cce1f21e5dbea2ab8d2828e50d6a303" + integrity sha512-7tiaz2GzRecNHaZ6YnF+Nrtk3au8qF6oiipf11R7MJiqJ0fkMLnz/iRrlakDziS9qF/a9v+3yxb4W4NHK3f4Tw== + dependencies: + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/service-error-classification" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/util-middleware" "3.292.0" + "@aws-sdk/util-retry" "3.292.0" + tslib "^2.3.1" + uuid "^8.3.2" + +"@aws-sdk/middleware-sdk-sts@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.292.0.tgz#927cecb0167b84aceddc959039f368ea2a593e87" + integrity sha512-GN5ZHEqXZqDi+HkVbaXRX9HaW/vA5rikYpWKYsmxTUZ7fB7ijvEO3co3lleJv2C+iGYRtUIHC4wYNB5xgoTCxg== + dependencies: + "@aws-sdk/middleware-signing" "3.292.0" + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/signature-v4" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-serde@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.292.0.tgz#4834ee9b03c50e11349306753c27086bac4dac08" + integrity sha512-6hN9mTQwSvV8EcGvtXbS/MpK7WMCokUku5Wu7X24UwCNMVkoRHLIkYcxHcvBTwttuOU0d8hph1/lIX4dkLwkQw== + dependencies: + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-signing@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.292.0.tgz#51868199d23d28d264a06adcec52373c8da88c85" + integrity sha512-GVfoSjDjEQ4TaO6x9MffyP3uRV+2KcS5FtexLCYOM9pJcnE9tqq9FJOrZ1xl1g+YjUVKxo4x8lu3tpEtIb17qg== + dependencies: + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/signature-v4" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/util-middleware" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-stack@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.292.0.tgz#279f4b688d91f9757cedd5311ae86ad6e3e6ac63" + integrity sha512-WdQpRkuMysrEwrkByCM1qCn2PPpFGGQ2iXqaFha5RzCdZDlxJni9cVNb6HzWUcgjLEYVTXCmOR9Wxm3CNW44Qg== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/middleware-user-agent@3.293.0": + version "3.293.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.293.0.tgz#ce802bc73c5d4db043b5454e894e4dd1663442b2" + integrity sha512-gZ7/e6XwpKk9mvgA78q4Ffc796jTn02TUKx2qMDnkLVbeJXBNN2jnvYEKq8v70+o7fd/ALRudg8gBDmkkhM/Hw== + dependencies: + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/util-endpoints" "3.293.0" + tslib "^2.3.1" + +"@aws-sdk/node-config-provider@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.292.0.tgz#52817db9e056fedb967704b156fde4b5516dacf1" + integrity sha512-S3NnC9dQ5GIbJYSDIldZb4zdpCOEua1tM7bjYL3VS5uqCEM93kIi/o/UkIUveMp/eqTS2LJa5HjNIz5Te6je0A== + dependencies: + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/shared-ini-file-loader" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/node-http-handler@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.292.0.tgz#f7a8fca359932ba56acf65eafd169db9d2cebc9d" + integrity sha512-L/E3UDSwXLXjt1XWWh0RBD55F+aZI1AEdPwdES9i1PjnZLyuxuDhEDptVibNN56+I9/4Q3SbmuVRVlOD0uzBag== + dependencies: + "@aws-sdk/abort-controller" "3.292.0" + "@aws-sdk/protocol-http" "3.292.0" + "@aws-sdk/querystring-builder" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/property-provider@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.292.0.tgz#2bdf9f6e15521350936636107a2057a19c1e55ec" + integrity sha512-dHArSvsiqhno/g55N815gXmAMrmN8DP7OeFNqJ4wJG42xsF2PFN3DAsjIuHuXMwu+7A3R1LHqIpvv0hA9KeoJQ== + dependencies: + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/protocol-http@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.292.0.tgz#1829036bdec59698f44daadb590e3fa552494955" + integrity sha512-NLi4fq3k41aXIh1I97yX0JTy+3p6aW1NdwFwdMa674z86QNfb4SfRQRZBQe9wEnAZ/eWHVnlKIuII+U1URk/Kg== + dependencies: + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/querystring-builder@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.292.0.tgz#a2fd9c2540a80718fb2f52c606926f8d2e08a695" + integrity sha512-XElIFJaReIm24eEvBtV2dOtZvcm3gXsGu/ftG8MLJKbKXFKpAP1q+K6En0Bs7/T88voKghKdKpKT+eZUWgTqlg== + dependencies: + "@aws-sdk/types" "3.292.0" + "@aws-sdk/util-uri-escape" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/querystring-parser@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.292.0.tgz#32645c834b4dd1660176bf0b6df201d688242c66" + integrity sha512-iTYpYo7a8X9RxiPbjjewIpm6XQPx2EOcF1dWCPRII9EFlmZ4bwnX+PDI36fIo9oVs8TIKXmwNGODU9nsg7CSAw== + dependencies: + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/service-error-classification@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.292.0.tgz#8fef4ee8e553218234eca91dd479902092b12bac" + integrity sha512-X1k3sixCeC45XSNHBe+kRBQBwPDyTFtFITb8O5Qw4dS9XWGhrUJT4CX0qE5aj8qP3F9U5nRizs9c2mBVVP0Caw== + +"@aws-sdk/shared-ini-file-loader@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.292.0.tgz#08260536116c4e0b44ebd0d0bd197ff15815090f" + integrity sha512-Av2TTYg1Jig2kbkD56ybiqZJB6vVrYjv1W5UQwY/q3nA/T2mcrgQ20ByCOt5Bv9VvY7FSgC+znj+L4a7RLGmBg== + dependencies: + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/signature-v4@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.292.0.tgz#1fbb9ceea4c80c079b64f836af365985970f2a5f" + integrity sha512-+rw47VY5mvBecn13tDQTl1ipGWg5tE63faWgmZe68HoBL87ZiDzsd7bUKOvjfW21iMgWlwAppkaNNQayYRb2zg== + dependencies: + "@aws-sdk/is-array-buffer" "3.292.0" + "@aws-sdk/types" "3.292.0" + "@aws-sdk/util-hex-encoding" "3.292.0" + "@aws-sdk/util-middleware" "3.292.0" + "@aws-sdk/util-uri-escape" "3.292.0" + "@aws-sdk/util-utf8" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/smithy-client@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.292.0.tgz#232b7bac2115d52390057bab6a79d14cffe06698" + integrity sha512-S8PKzjPkZ6SXYZuZiU787dMsvQ0d/LFEhw2OI4Oe2An9Fc2IwJ2FYukyHoQJOV2tV0DiuMebPo7eMyQyjKElvA== + dependencies: + "@aws-sdk/middleware-stack" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/token-providers@3.294.0": + version "3.294.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.294.0.tgz#cac10f395f89680fda464015723439bcdabc0903" + integrity sha512-6nwO04LtC5f4AsUvGZXyjaswuEK4Rr2VsuANpMKrPCgunRfI58a8YXLniudOSXN6e7CFJ6M3uo/h5YXqtnzGug== + dependencies: + "@aws-sdk/client-sso-oidc" "3.294.0" + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/shared-ini-file-loader" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/types@3.292.0", "@aws-sdk/types@^3.222.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.292.0.tgz#54aa7347123116ac368f08df5e02954207328c63" + integrity sha512-1teYAY2M73UXZxMAxqZxVS2qwXjQh0OWtt7qyLfha0TtIk/fZ1hRwFgxbDCHUFcdNBSOSbKH/ESor90KROXLCQ== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/url-parser@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.292.0.tgz#b8b81d1c099e248813afbc33206e24b97f14228a" + integrity sha512-NZeAuZCk1x6TIiWuRfbOU6wHPBhf0ly2qOHzWut4BCH+b4RrDmFF8EmXcH1auEfGhE7yRyR6XqIN0t3S+hYACA== + dependencies: + "@aws-sdk/querystring-parser" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/util-base64@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64/-/util-base64-3.292.0.tgz#b07fc9752edad18b32ad4b1cc752b5df2d133377" + integrity sha512-zjNCwNdy617yFvEjZorepNWXB2sQCVfsShCwFy/kIQ5iW5tT2jQKaqc0K77diU9atkooxw9p1W9m9sOgrkOFNw== + dependencies: + "@aws-sdk/util-buffer-from" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/util-body-length-browser@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.292.0.tgz#1baefd126c8881ff140c83111aeb79c6d5b21cb3" + integrity sha512-Wd/BM+JsMiKvKs/bN3z6TredVEHh2pKudGfg3CSjTRpqFpOG903KDfyHBD42yg5PuCHoHoewJvTPKwgn7/vhaw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-body-length-node@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.292.0.tgz#9f3f91c80e9b4e2afb226550e9a0b3acde8bcd02" + integrity sha512-BBgipZ2P6RhogWE/qj0oqpdlyd3iSBYmb+aD/TBXwB2lA/X8A99GxweBd/kp06AmcJRoMS9WIXgbWkiiBlRlSA== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-buffer-from@3.208.0": + version "3.208.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz#285e86f6dc9030148a4147d65239e75cb254a1b0" + integrity sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw== + dependencies: + "@aws-sdk/is-array-buffer" "3.201.0" + tslib "^2.3.1" + +"@aws-sdk/util-buffer-from@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.292.0.tgz#b2d0eff4e63b0cc8a5d5dc133b76c3fe3daee2fc" + integrity sha512-RxNZjLoXNxHconH9TYsk5RaEBjSgTtozHeyIdacaHPj5vlQKi4hgL2hIfKeeNiAfQEVjaUFF29lv81xpNMzVMQ== + dependencies: + "@aws-sdk/is-array-buffer" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/util-config-provider@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.292.0.tgz#6a9c7b7e29028135862ba880c615e2f975d68c6d" + integrity sha512-t3noYll6bPRSxeeNNEkC5czVjAiTPcsq00OwfJ2xyUqmquhLEfLwoJKmrT1uP7DjIEXdUtfoIQ2jWiIVm/oO5A== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-defaults-mode-browser@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.292.0.tgz#8890ee4ff8939c9ada363cae14ec7196269ff14c" + integrity sha512-7+zVUlMGfa8/KT++9humHo6IDxTnxMCmWUj5jVNlkpk6h7Ecmppf7aXotviyVIA43lhtz0p2AErs0N0ekEUK+w== + dependencies: + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/types" "3.292.0" + bowser "^2.11.0" + tslib "^2.3.1" + +"@aws-sdk/util-defaults-mode-node@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.292.0.tgz#fc7f54cd935b8974d1b16d6c8bed8b9ae99af20e" + integrity sha512-SSIw85eF4BVs0fOJRyshT+R3b/UmBPhiVKCUZm2rq6+lIGkDPiSwQU3d/80AhXtiL5SFT/IzAKKgQd8qMa7q3A== + dependencies: + "@aws-sdk/config-resolver" "3.292.0" + "@aws-sdk/credential-provider-imds" "3.292.0" + "@aws-sdk/node-config-provider" "3.292.0" + "@aws-sdk/property-provider" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/util-endpoints@3.293.0": + version "3.293.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.293.0.tgz#fd3ecd35a84b91a8ba1672f6e2e92cf39ef205ba" + integrity sha512-R/99aNV49Refpv5guiUjEUrZYlvnfaNBniB+/ZtMO3ixxUopapssCrUivuJrmhccmrYaTCZw7dRzIWjU1jJhKg== + dependencies: + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/util-hex-encoding@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.292.0.tgz#a8b8b989fcf518a18606cb6d81f90d92b0660db4" + integrity sha512-qBd5KFIUywQ3qSSbj814S2srk0vfv8A6QMI+Obs1y2LHZFdQN5zViptI4UhXhKOHe+NnrHWxSuLC/LMH6q3SmA== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.292.0.tgz#cba0911be4fdf1db31a0b379cc6229a5a0ba1ae0" + integrity sha512-6xnFJXZI9pKw5lQCDvuWA5PnOaUtNRKWwdxvGkkLx5orboFaoVMS6zowjSQxwVNRjW82u6dYNkhmj9mZ8VSjWg== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-middleware@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.292.0.tgz#d4819246c66229df405850004d9e3ae4a6fca8ea" + integrity sha512-KjhS7flfoBKDxbiBZjLjMvEizXgjfQb7GQEItgzGoI9rfGCmZtvqCcqQQoIlxb8bIzGRggAUHtBGWnlLbpb+GQ== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-retry@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-retry/-/util-retry-3.292.0.tgz#a72dd74760864aa03feb00f2cee8b97c25c297c4" + integrity sha512-JEHyF7MpVeRF5uR4LDYgpOKcFpOPiAj8TqN46SVOQQcL1K+V7cSr7O7N7J6MwJaN9XOzAcBadeIupMm7/BFbgw== + dependencies: + "@aws-sdk/service-error-classification" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/util-uri-escape@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.292.0.tgz#306a36e3574af3509c542c7224669082f6abc633" + integrity sha512-hOQtUMQ4VcQ9iwKz50AoCp1XBD5gJ9nly/gJZccAM7zSA5mOO8RRKkbdonqquVHxrO0CnYgiFeCh3V35GFecUw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-user-agent-browser@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.292.0.tgz#26c4e5ffbe046cebe9d15c357839ea38ada95c56" + integrity sha512-dld+lpC3QdmTQHdBWJ0WFDkXDSrJgfz03q6mQ8+7H+BC12ZhT0I0g9iuvUjolqy7QR00OxOy47Y9FVhq8EC0Gg== + dependencies: + "@aws-sdk/types" "3.292.0" + bowser "^2.11.0" + tslib "^2.3.1" + +"@aws-sdk/util-user-agent-node@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.292.0.tgz#9065307641eb246f32fee78eec5d961cffbba6a9" + integrity sha512-f+NfIMal5E61MDc5WGhUEoicr7b1eNNhA+GgVdSB/Hg5fYhEZvFK9RZizH5rrtsLjjgcr9nPYSR7/nDKCJLumw== + dependencies: + "@aws-sdk/node-config-provider" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-utf8-node@^3.259.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-3.259.0.tgz#8a4024e735f948f5e045a79e486a98dee2689860" + integrity sha512-2sbGdmrkODKeJb6kbEOKpX8cYtS9IO16XRAtINcN7sInWfspAITDofrabf0i0tFQF0hsJtbC5dyJRn87w0gYIQ== + dependencies: + "@aws-sdk/util-buffer-from" "3.208.0" + tslib "^2.3.1" + +"@aws-sdk/util-utf8@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8/-/util-utf8-3.292.0.tgz#c12049a01de36f1133232f95cbb0c0177e8d3c36" + integrity sha512-FPkj+Z59/DQWvoVu2wFaRncc3KVwe/pgK3MfVb0Lx+Ibey5KUx+sNpJmYcVYHUAe/Nv/JeIpOtYuC96IXOnI6w== + dependencies: + "@aws-sdk/util-buffer-from" "3.292.0" + tslib "^2.3.1" + +"@aws-sdk/util-waiter@3.292.0": + version "3.292.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.292.0.tgz#860b6615f1d5d0cd545b2d5fefd0bb3c03b0a32d" + integrity sha512-+7j+mcWUY4GwU8nTK4MvLWpOzS34SJZL85qLxQ04pysoCSHkInyS51D1ejBVNlJdbUSFvIcU0WHU0y6MDDeJzg== + dependencies: + "@aws-sdk/abort-controller" "3.292.0" + "@aws-sdk/types" "3.292.0" + tslib "^2.3.1" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -115,35 +853,35 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@topcoder-framework/client-relational@^0.6.4": - version "0.6.4" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/client-relational/-/client-relational-0.6.4.tgz#c18ea40eef7cfc231f7b034797ff9e6f6c841992" - integrity sha512-v3AZUdogJblzTtErzb8pJwjruGFFSPDCdfRw6lnrqreAMDzZNoq8FFNRkd4QCRikRa9it4KU3wUoEm2rFLz4UQ== +"@topcoder-framework/client-relational@^0.7.0": + version "0.7.0" + resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/client-relational/-/client-relational-0.7.0.tgz#bd219fb466ce2d436ca393b1f1bb4bdd0f05be80" + integrity sha512-AXkKyzmKfQap+eib9FehQZbZ7oAYGW+41gMXNFpxmqrZ0/TMgh8znnaw6uPmwyalVPh1bZdvxIGadCQxgi3jWw== dependencies: "@grpc/grpc-js" "^1.8.0" - "@topcoder-framework/lib-common" "^0.6.4" - topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.27" + "@topcoder-framework/lib-common" "^0.7.0" + topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.29" tslib "^2.4.1" -"@topcoder-framework/domain-acl@^0.6.4": - version "0.6.4" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/domain-acl/-/domain-acl-0.6.4.tgz#ef2dcf6cbe94c0755657d3f08a80551849bd93f5" - integrity sha512-bUuxa/kRNbNEclukZCdlAZ5QAh9H6eVFdUay5N2oFLNkypFhTeQuOAq7tG+1fu+ZQGs+4p6e0/g3PB1AG9hFUw== +"@topcoder-framework/domain-acl@^0.7.0": + version "0.7.0" + resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/domain-acl/-/domain-acl-0.7.0.tgz#76d8c2090a7df2a9aa476d4344b6cc2edf504482" + integrity sha512-g3PLnglWIrETT/ESDe3GBP2VIIk6DAykuuMTdGe95Xx8czHbSrN6Oav3konxvVlCuilRxN62D/kwxEZivEpvYQ== dependencies: "@grpc/grpc-js" "^1.8.7" - "@topcoder-framework/client-relational" "^0.6.4" - "@topcoder-framework/lib-common" "^0.6.4" - topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.27" + "@topcoder-framework/client-relational" "^0.7.0" + "@topcoder-framework/lib-common" "^0.7.0" + topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.29" tslib "^2.4.1" -"@topcoder-framework/lib-common@^0.6.4": - version "0.6.4" - resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/lib-common/-/lib-common-0.6.4.tgz#04970c0beb5b7a98dc93ecc31c34a17a7ee40048" - integrity sha512-cwX6AqANAyv4Ir1U0LPYmvuDsdLT1QKhM/KomqUIYHD6NBNthh4mQ4pX65UPFd5n9ALsPO82lNT9nReaiMfquQ== +"@topcoder-framework/lib-common@^0.7.0": + version "0.7.0" + resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/lib-common/-/lib-common-0.7.0.tgz#557900413fe2e0b67d233f04c63db2e81eac5dbc" + integrity sha512-3qjcRYGHqRiBWPbOM2C/BwpZEswIqCbc+scskIHmtY/FYn52lTT1w7Cm/KOcgBpE3S/mmWq0YwtZKNNzbRwglA== dependencies: "@grpc/grpc-js" "^1.8.0" rimraf "^3.0.2" - topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.27" + topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.29" tslib "^2.4.1" "@tsconfig/node10@^1.0.7": @@ -406,6 +1144,11 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -543,6 +1286,11 @@ dataloader@^1.4.0: resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw== +dayjs@^1.11.7: + version "1.11.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + debug@4, debug@^4.1.0, debug@^4.3.1: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -653,6 +1401,13 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-xml-parser@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz#5a98c18238d28a57bbdfa9fe4cda01211fff8f4a" + integrity sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg== + dependencies: + strnum "^1.0.5" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1409,6 +2164,11 @@ strip-json-comments@^2.0.0: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -1434,13 +2194,9 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -"topcoder-interface@github:topcoder-platform/plat-interface-definition#v0.0.26": - version "1.0.0" - resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/345395b5165eba9277eccdd920a68385378219f3" - -"topcoder-interface@github:topcoder-platform/plat-interface-definition#v0.0.27": +"topcoder-interface@github:topcoder-platform/plat-interface-definition#v0.0.29": version "1.0.0" - resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/aa222aa5609f5e7ad703b66fa1c3ab4f968bffbd" + resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/6ad366c0dc28a8452bd71ed87d718ac559bee62b" tough-cookie@~2.5.0: version "2.5.0" @@ -1528,7 +2284,12 @@ tsconfig@^7.0.0: strip-bom "^3.0.0" strip-json-comments "^2.0.0" -tslib@^2.4.1: +tslib@^1.11.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.1, tslib@^2.4.1: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -1557,7 +2318,7 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -uuid@8.3.2: +uuid@8.3.2, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==