diff --git a/.circleci/config.yml b/.circleci/config.yml index 58e48cf..1df58a3 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: PROD SERVICE_NAME: "domain-challenge" OUT_DIR: "buildscripts" steps: @@ -48,5 +48,4 @@ workflows: filters: branches: only: - - fix/update-pre-release - main diff --git a/.prettierrc b/.prettierrc index 0967ef4..de753c5 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1 +1,3 @@ -{} +{ + "printWidth": 100 +} diff --git a/Dockerfile b/Dockerfile index c33d1b4..8ca335c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,5 +36,6 @@ ENV AUTH0_CLIENT_ID="" ENV AUTH0_CLIENT_SECRET="" ENV AUTH0_PROXY_SERVER_URL="" ENV AUTH0_URL="" +ENV TOPCODER_API_URL="" CMD ["server.js"] diff --git a/package.json b/package.json index 97d6f48..1707340 100644 --- a/package.json +++ b/package.json @@ -23,18 +23,22 @@ "@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.7.0", - "@topcoder-framework/lib-common": "^0.7.0", + "@topcoder-framework/domain-acl": "^0.10.13", + "@topcoder-framework/lib-common": "^0.10.13", + "@types/uuid": "^9.0.1", + "aws-sdk": "^2.1339.0", "axios": "^1.2.2", "dayjs": "^1.11.7", "dotenv": "^16.0.3", + "elasticsearch": "^16.7.3", "grpc-server-reflection": "^0.1.5", + "http-aws-es": "^6.0.0", "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.29", - "uuidv4": "^6.2.13", + "topcoder-interface": "github:topcoder-platform/plat-interface-definition#v0.0.46", + "uuid": "^9.0.0", "xss": "^1.0.14" }, "volta": { @@ -43,6 +47,7 @@ "yarn": "1.22.19" }, "devDependencies": { + "@types/elasticsearch": "^5.0.40", "@types/lodash": "^4.14.191", "@types/node": "^18.11.17", "ts-node-dev": "^2.0.0", diff --git a/src/api/v5Api.ts b/src/api/v5Api.ts index 8be4036..5f7faa9 100644 --- a/src/api/v5Api.ts +++ b/src/api/v5Api.ts @@ -1,10 +1,7 @@ -const { V4_TECHNOLOGIES_API_URL, V4_PLATFORMS_API_URL, V4_CHALLENGE_API_URL } = - process.env; - import _ from "lodash"; import axios from "axios"; -export const getRequest = async (url:string, token:string): Promise => { - const res = await axios.get(url, { headers: { authorization: `Bearer ${token}` }}) +export const getRequest = async (url: string, token: string): Promise => { + const res = await axios.get(url, { headers: { authorization: `Bearer ${token}` } }); return res.data; -} +}; diff --git a/src/common/Constants.ts b/src/common/Constants.ts index dc2e4d5..c128b72 100644 --- a/src/common/Constants.ts +++ b/src/common/Constants.ts @@ -43,4 +43,26 @@ export const ResourceInfoIds = { export const ChallengeStatuses = { New: "New", Active: "Active", + Draft: "Draft", +}; + +export const PhaseTypeIds = { + Registration: 1, + Submission: 2, + Screening: 3, + Review: 4, + Appeals: 5, + AppealsResponse: 6, + Aggregation: 7, + AggregationReview: 8, + FinalFix: 9, + FinalReview: 10, + Approval: 11, + PostMortem: 12, + SpecificationSubmission: 13, + SpecificationReview: 14, + CheckpointSubmission: 15, + CheckpointScreening: 16, + CheckpointReview: 17, + IterativeReview: 18, }; diff --git a/src/common/ConversionMap.ts b/src/common/ConversionMap.ts index 988049d..39901ae 100644 --- a/src/common/ConversionMap.ts +++ b/src/common/ConversionMap.ts @@ -58,7 +58,7 @@ const V4_TRACKS = { DESIGN: "DESIGN", }; -const V4_SUBTRACKS = { +export const V4_SUBTRACKS = { MARATHON_MATCH: "MARATHON_MATCH", DESIGN_FIRST_2_FINISH: "DESIGN_FIRST_2_FINISH", APPLICATION_FRONT_END_DESIGN: "APPLICATION_FRONT_END_DESIGN", diff --git a/src/common/CoreOperations.ts b/src/common/CoreOperations.ts index 713f780..d88e9d7 100644 --- a/src/common/CoreOperations.ts +++ b/src/common/CoreOperations.ts @@ -2,11 +2,7 @@ import { noSqlClient } from "../dal/client/nosql"; // TODO: Import from @topcoder-framework/lib-common -import { - LookupCriteria, - ScanCriteria, - ScanResult, -} from "../models/common/common"; +import { LookupCriteria, ScanCriteria, ScanResult } from "../models/common/common"; // TODO: Import from @topcoder-framework/lib-common import { Value } from "../models/google/protobuf/struct"; @@ -25,7 +21,7 @@ import { UpdateType, Value as PartiQLValue, } from "../dal/models/nosql/parti_ql"; -import { StatusBuilder } from "@grpc/grpc-js"; +import { Metadata, StatusBuilder } from "@grpc/grpc-js"; import { Status } from "@grpc/grpc-js/build/src/constants"; export type ValueType = @@ -44,24 +40,20 @@ export type DynamoTableIndex = { }; }; -abstract class CoreOperations< - T extends { [key: string]: any }, - I extends { [key: string]: any } -> { +abstract class CoreOperations { public constructor( private entityName: string, private entityAttributes: Attribute[], private entityIndexList: DynamoTableIndex ) {} - private attributesKeyTypeMap: { [key: string]: DataType } = - this.entityAttributes.reduce( - (map, attribute) => ({ - ...map, - [attribute.name]: attribute.type, - }), - {} - ); + private attributesKeyTypeMap: { [key: string]: DataType } = this.entityAttributes.reduce( + (map, attribute) => ({ + ...map, + [attribute.name]: attribute.type, + }), + {} + ); public async lookup(lookupCriteria: LookupCriteria): Promise { const selectQuery: SelectQuery = { @@ -150,7 +142,7 @@ abstract class CoreOperations< }; } - protected async create(entity: I & T): Promise { + protected async create(entity: I & T, metadata?: Metadata): Promise { const queryRequest: QueryRequest = { kind: { $case: "query", @@ -177,7 +169,8 @@ abstract class CoreOperations< public async update( scanCriteria: ScanCriteria[], - entity: unknown + entity: unknown, + metadata?: Metadata ): Promise<{ items: T[] }> { if (typeof entity != "object" || entity == null) { throw new Error("Expected key-value pairs to update"); @@ -193,12 +186,14 @@ abstract class CoreOperations< update: { table: this.entityName, // TODO: Write a convenience method in @topcoder-framework/lib-common to support additional update operations like LIST_APPEND, SET_ADD, SET_REMOVE, etc - updates: Object.entries(entity).map(([key, value]) => ({ - action: UpdateAction.UPDATE_ACTION_SET, - type: UpdateType.UPDATE_TYPE_VALUE, - attribute: key, - value: this.toValue(key, value), - })), + updates: Object.entries(entity) + .filter(([key, value]) => value !== undefined) + .map(([key, value]) => ({ + action: UpdateAction.UPDATE_ACTION_SET, + type: UpdateType.UPDATE_TYPE_VALUE, + attribute: key, + value: this.toValue(key, value), + })), filters, returnValue: ReturnValue.RETURN_VALUE_ALL_NEW, }, @@ -330,9 +325,7 @@ abstract class CoreOperations< break; default: - throw new Error( - "Lookups are only supported for string, number & boolean value" - ); + throw new Error("Lookups are only supported for string, number & boolean value"); } return value; diff --git a/src/dal/models/nosql/google/protobuf/struct.ts b/src/dal/models/nosql/google/protobuf/struct.ts index 2fd4c31..d2c6c53 100644 --- a/src/dal/models/nosql/google/protobuf/struct.ts +++ b/src/dal/models/nosql/google/protobuf/struct.ts @@ -115,15 +115,20 @@ export const Struct = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + const entry1 = Struct_FieldsEntry.decode(reader, reader.uint32()); if (entry1.value !== undefined) { message.fields[entry1.key] = entry1.value; } - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -209,15 +214,24 @@ export const Struct_FieldsEntry = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.key = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -282,27 +296,52 @@ export const Value = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.kind = { $case: "nullValue", nullValue: nullValueFromJSON(reader.int32()) }; - break; + continue; case 2: + if (tag != 17) { + break; + } + message.kind = { $case: "numberValue", numberValue: reader.double() }; - break; + continue; case 3: + if (tag != 26) { + break; + } + message.kind = { $case: "stringValue", stringValue: reader.string() }; - break; + continue; case 4: + if (tag != 32) { + break; + } + message.kind = { $case: "boolValue", boolValue: reader.bool() }; - break; + continue; case 5: + if (tag != 42) { + break; + } + message.kind = { $case: "structValue", structValue: Struct.unwrap(Struct.decode(reader, reader.uint32())) }; - break; + continue; case 6: + if (tag != 50) { + break; + } + message.kind = { $case: "listValue", listValue: ListValue.unwrap(ListValue.decode(reader, reader.uint32())) }; - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -435,12 +474,17 @@ export const ListValue = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.values.push(Value.unwrap(Value.decode(reader, reader.uint32()))); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/dal/models/nosql/parti_ql.ts b/src/dal/models/nosql/parti_ql.ts index e3db89a..c5b7766 100644 --- a/src/dal/models/nosql/parti_ql.ts +++ b/src/dal/models/nosql/parti_ql.ts @@ -675,12 +675,17 @@ export const StringSet = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.values.push(reader.string()); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -732,19 +737,26 @@ export const NumberSet = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: - if ((tag & 7) === 2) { + if (tag == 9) { + message.values.push(reader.double()); + continue; + } + + if (tag == 10) { const end2 = reader.uint32() + reader.pos; while (reader.pos < end2) { message.values.push(reader.double()); } - } else { - message.values.push(reader.double()); + + continue; } - break; - default: - reader.skipType(tag & 7); + break; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -820,36 +832,73 @@ export const Value = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.kind = { $case: "boolean", boolean: reader.bool() }; - break; + continue; case 2: + if (tag != 18) { + break; + } + message.kind = { $case: "binary", binary: reader.bytes() as Buffer }; - break; + continue; case 3: + if (tag != 26) { + break; + } + message.kind = { $case: "listValue", listValue: ListValue.unwrap(ListValue.decode(reader, reader.uint32())) }; - break; + continue; case 4: + if (tag != 34) { + break; + } + message.kind = { $case: "mapValue", mapValue: Struct.unwrap(Struct.decode(reader, reader.uint32())) }; - break; + continue; case 5: + if (tag != 40) { + break; + } + message.kind = { $case: "nullValue", nullValue: nullValueFromJSON(reader.int32()) }; - break; + continue; case 6: + if (tag != 49) { + break; + } + message.kind = { $case: "numberValue", numberValue: reader.double() }; - break; + continue; case 7: + if (tag != 58) { + break; + } + message.kind = { $case: "numberSetValue", numberSetValue: NumberSet.decode(reader, reader.uint32()) }; - break; + continue; case 8: + if (tag != 66) { + break; + } + message.kind = { $case: "stringValue", stringValue: reader.string() }; - break; + continue; case 9: + if (tag != 74) { + break; + } + message.kind = { $case: "stringSetValue", stringSetValue: StringSet.decode(reader, reader.uint32()) }; - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -972,15 +1021,24 @@ export const Attribute = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.name = reader.string(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.type = dataTypeFromJSON(reader.int32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1037,18 +1095,31 @@ export const Filter = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.name = reader.string(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.operator = operatorFromJSON(reader.int32()); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.value = Value.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1114,24 +1185,45 @@ export const SelectQuery = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.table = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.index = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.attributes.push(Attribute.decode(reader, reader.uint32())); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.filters.push(Filter.decode(reader, reader.uint32())); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.nextToken = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1202,15 +1294,24 @@ export const InsertQuery = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.table = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.attributes = Struct.unwrap(Struct.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1275,21 +1376,38 @@ export const UpdateOperation = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.action = updateActionFromJSON(reader.int32()); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.attribute = reader.string(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.type = updateTypeFromJSON(reader.int32()); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.value = Value.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1355,21 +1473,38 @@ export const UpdateQuery = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.table = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.updates.push(UpdateOperation.decode(reader, reader.uint32())); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.filters.push(Filter.decode(reader, reader.uint32())); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.returnValue = returnValueFromJSON(reader.int32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1441,18 +1576,31 @@ export const DeleteQuery = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.table = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.filters.push(Filter.decode(reader, reader.uint32())); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.returnValues = returnValueFromJSON(reader.int32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1511,12 +1659,17 @@ export const ReadQuery = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.queries.push(SelectQuery.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1574,18 +1727,31 @@ export const WriteQuery = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.kind = { $case: "insert", insert: InsertQuery.decode(reader, reader.uint32()) }; - break; + continue; case 2: + if (tag != 18) { + break; + } + message.kind = { $case: "update", update: UpdateQuery.decode(reader, reader.uint32()) }; - break; + continue; case 3: + if (tag != 26) { + break; + } + message.kind = { $case: "delete", delete: DeleteQuery.decode(reader, reader.uint32()) }; - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1652,12 +1818,17 @@ export const BulkWriteQuery = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.queries.push(WriteQuery.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1712,15 +1883,24 @@ export const BulkQuery = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.kind = { $case: "read", read: ReadQuery.decode(reader, reader.uint32()) }; - break; + continue; case 2: + if (tag != 18) { + break; + } + message.kind = { $case: "bulkWriteQueries", bulkWriteQueries: WriteQuery.decode(reader, reader.uint32()) }; - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1799,21 +1979,38 @@ export const Query = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.kind = { $case: "select", select: SelectQuery.decode(reader, reader.uint32()) }; - break; + continue; case 2: + if (tag != 18) { + break; + } + message.kind = { $case: "insert", insert: InsertQuery.decode(reader, reader.uint32()) }; - break; + continue; case 3: + if (tag != 26) { + break; + } + message.kind = { $case: "update", update: UpdateQuery.decode(reader, reader.uint32()) }; - break; + continue; case 4: + if (tag != 34) { + break; + } + message.kind = { $case: "delete", delete: DeleteQuery.decode(reader, reader.uint32()) }; - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1890,15 +2087,24 @@ export const Response = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.items.push(Struct.unwrap(Struct.decode(reader, reader.uint32()))); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.nextToken = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1958,15 +2164,24 @@ export const QueryRequest = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.kind = { $case: "query", query: Query.decode(reader, reader.uint32()) }; - break; + continue; case 2: + if (tag != 18) { + break; + } + message.kind = { $case: "queries", queries: BulkQuery.decode(reader, reader.uint32()) }; - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -2026,12 +2241,17 @@ export const ResponseError = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.message = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -2082,15 +2302,24 @@ export const QueryResponse = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.kind = { $case: "response", response: Response.decode(reader, reader.uint32()) }; - break; + continue; case 2: + if (tag != 18) { + break; + } + message.kind = { $case: "error", error: ResponseError.decode(reader, reader.uint32()) }; - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/domain/Challenge.ts b/src/domain/Challenge.ts index c7fc2f5..8bb226e 100644 --- a/src/domain/Challenge.ts +++ b/src/domain/Challenge.ts @@ -1,24 +1,9 @@ -const { - V5_TERMS_API_URL, - V5_RESOURCES_API_URL, - COPILOT_ROLE_ID, - COPILOT_PAYMENT_TYPE, - V5_GROUPS_API_URL, - V5_TERMS_NDA_ID, - LEGACY_TERMS_NDA_ID, - LEGACY_TERMS_STANDARD_ID, - LEGACY_SUBMITTER_ROLE_ID, - V5_TERMS_STANDARD_ID, -} = process.env; -import moment from "moment"; +import { ChallengeDomain as LegacyChallengeDomain } from "@topcoder-framework/domain-acl"; +import { DomainHelper } from "@topcoder-framework/lib-common"; 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, @@ -33,101 +18,29 @@ import { } from "../models/domain-layer/challenge/challenge"; import { ChallengeSchema } from "../schema/Challenge"; -import { - ChallengeDomain as LegacyChallengeDomain, - GroupContestEligibilityDomain as LegacyGroupContestEligibilityDomain, - PaymentDomain as LegacyPaymentDomain, - PhaseDomain as LegacyPhaseDomain, - PrizeDomain as LegacyPrizeDomain, - ProjectInfoDomain as LegacyProjectInfoDomain, - ResourceDomain as LegacyResourceDomain, - ReviewDomain as LegacyReviewDomain, - TermDomain as LegacyTermDomain, - CreateChallengeInput as LegacyCreateChallengeInput, -} from "@topcoder-framework/domain-acl"; +import { Metadata, StatusBuilder } from "@grpc/grpc-js"; +import { Status } from "@grpc/grpc-js/build/src/constants"; +import { CreateChallengeInput as LegacyCreateChallengeInput } from "@topcoder-framework/domain-acl"; import _ from "lodash"; -import * as v5Api from "../api/v5Api"; -import { - PaymentTypeIds, - PrizeSetTypes, - PrizeTypeIds, - ProjectInfoIds, - ProjectPaymentTypeIds, - ResourceRoleTypes, - ES_INDEX, - ES_REFRESH, - ChallengeStatuses, -} from "../common/Constants"; -import m2m from "../helpers/MachineToMachineToken"; +import { ChallengeStatuses, ES_INDEX, ES_REFRESH } from "../common/Constants"; import ElasticSearch from "../helpers/ElasticSearch"; import { ScanCriteria } from "../models/common/common"; -import constants from "../util/constants"; 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( - "Missing required configurations GRPC_ACL_SERVER_HOST and GRPC_ACL_SERVER_PORT" - ); + throw new Error("Missing required configurations GRPC_ACL_SERVER_HOST and GRPC_ACL_SERVER_PORT"); } -const legacyPrizeDomain = new LegacyPrizeDomain( - process.env.GRPC_ACL_SERVER_HOST, - process.env.GRPC_ACL_SERVER_PORT -); const legacyChallengeDomain = new LegacyChallengeDomain( process.env.GRPC_ACL_SERVER_HOST, process.env.GRPC_ACL_SERVER_PORT ); -const legacyProjectInfoDomain = new LegacyProjectInfoDomain( - process.env.GRPC_ACL_SERVER_HOST, - process.env.GRPC_ACL_SERVER_PORT -); -const legacyPaymentDomain = new LegacyPaymentDomain( - process.env.GRPC_ACL_SERVER_HOST, - process.env.GRPC_ACL_SERVER_PORT -); -const legacyResourceDomain = new LegacyResourceDomain( - process.env.GRPC_ACL_SERVER_HOST, - process.env.GRPC_ACL_SERVER_PORT -); -const legacyReviewDomain = new LegacyReviewDomain( - process.env.GRPC_ACL_SERVER_HOST, - process.env.GRPC_ACL_SERVER_PORT -); -const legacyPhaseDomain = new LegacyPhaseDomain( - process.env.GRPC_ACL_SERVER_HOST, - process.env.GRPC_ACL_SERVER_PORT -); -const legacyGroupContestEligibilityDomain = - new LegacyGroupContestEligibilityDomain( - process.env.GRPC_ACL_SERVER_HOST, - process.env.GRPC_ACL_SERVER_PORT - ); -const legacyTermDomain = new LegacyTermDomain( - process.env.GRPC_ACL_SERVER_HOST, - process.env.GRPC_ACL_SERVER_PORT -); -interface GetGroupsResult { - groupsToBeAdded: any[]; - groupsToBeDeleted: any[]; -} class ChallengeDomain extends CoreOperations { private esClient = ElasticSearch.getESClient(); protected toEntity(item: { [key: string]: Value }): Challenge { - for (const key of [ - "phases", - "terms", - "tags", - "metadata", - "events", - "prizeSets", - ]) { + for (const key of ["phases", "terms", "tags", "metadata", "events", "prizeSets"]) { try { if (key === "metadata") { if (item["metadata"].kind?.$case === "listValue") { @@ -154,77 +67,118 @@ class ChallengeDomain extends CoreOperations { return Challenge.fromJSON(item); } - public async create(input: CreateChallengeInput): Promise { - input.name = xss(input.name); + private async createLegacyChallenge( + input: CreateChallengeInput, + legacy: Challenge_Legacy | undefined, + status: string, + trackId: string, + typeId: string, + tags: string[], + metadata: Metadata = new Metadata() + ) { + let legacyChallengeId: number | null = null; - if (Array.isArray(input.discussions)) { - for (const discussion of input.discussions) { - discussion.id = IdGenerator.generateUUID(); - discussion.name = xss(discussion.name.substring(0, 100)); + if (legacy == null || legacy.pureV5Task !== true) { + const { track, subTrack, isTask, technologies } = legacyMapper.mapTrackAndType( + trackId, + typeId, + tags + ); + + if (input.legacy == null) { + input.legacy = { + track, + subTrack, + directProjectId: 0, + reviewType: "INTERNAL", + confidentialityType: "private", + }; } - } - let placementPrizes = 0; - if (input.prizeSets) { - for (const { type, prizes } of input.prizeSets) { - if (type === "placement") { - for (const { value } of prizes) { - placementPrizes += value; + legacy = { + ...legacy, + track, + subTrack, + pureV5Task: isTask, + forumId: 0, + directProjectId: legacy == null ? 0 : legacy.directProjectId, + reviewType: legacy == null ? "INTERNAL" : legacy.reviewType, + confidentialityType: legacy == null ? "private" : legacy.confidentialityType, + }; + + if (status === ChallengeStatuses.Draft) { + try { + // prettier-ignore + const legacyChallengeCreateInput = LegacyCreateChallengeInput.fromPartial(await legacyMapper.mapChallengeDraftUpdateInput(input)); + // prettier-ignore + const legacyChallengeCreateResponse = await legacyChallengeDomain.create(legacyChallengeCreateInput, metadata); + + if (legacyChallengeCreateResponse.kind?.$case === "integerId") { + legacyChallengeId = legacyChallengeCreateResponse.kind.integerId; } + } catch (err) { + console.log("err", err); + throw new StatusBuilder() + .withCode(Status.INTERNAL) + .withDetails("Failed to create legacy challenge") + .build(); } } } - const now = new Date().getTime(); - - // Begin Anti-Corruption Layer + return { + legacy, + legacyChallengeId, + }; + } - const { track, subTrack, isTask, technologies } = - legacyMapper.mapTrackAndType(input.trackId, input.typeId, input.tags); + public async create(input: CreateChallengeInput, metadata: Metadata): Promise { + input.name = xss(input.name); - input.legacy = { - ...input.legacy, - track, - subTrack, - pureV5Task: isTask, - forumId: 0, - directProjectId: input.legacy!.directProjectId, - reviewType: input.legacy!.reviewType, - confidentialityType: input.legacy!.confidentialityType, - }; + // prettier-ignore + const handle = metadata?.get("handle").length > 0 ? metadata?.get("handle")?.[0].toString() : "tcwebservice"; - let legacyChallengeId: number | null = null; - if (input.status === "Draft") { - try { - // prettier-ignore - const legacyChallengeCreateInput = LegacyCreateChallengeInput.fromPartial(legacyMapper.mapChallengeDraftUpdateInput(input)); - // prettier-ignore - const legacyChallengeCreateResponse = await legacyChallengeDomain.create(legacyChallengeCreateInput); - if (legacyChallengeCreateResponse.kind?.$case === "integerId") { - legacyChallengeId = legacyChallengeCreateResponse.kind.integerId; - } - } catch (err) { - console.log("err", err); - throw new StatusBuilder() - .withCode(Status.INTERNAL) - .withDetails("Failed to create legacy challenge") - .build(); + if (Array.isArray(input.discussions)) { + for (const discussion of input.discussions) { + discussion.id = IdGenerator.generateUUID(); + discussion.name = xss(discussion.name.substring(0, 100)); } } + const totalPrizes = this.calculateTotalPrizesInCents(input.prizeSets ?? []); + const now = new Date().getTime(); + + // Begin Anti-Corruption Layer + + // prettier-ignore + const { legacy, legacyChallengeId } = await this.createLegacyChallenge(input, input.legacy, input.status, input.trackId, input.typeId, input.tags, metadata); + // End Anti-Corruption Layer const challenge: Challenge = { id: IdGenerator.generateUUID(), created: now, - createdBy: "tcwebservice", // TODO: extract from JWT + createdBy: handle, updated: now, - updatedBy: "tcwebservice", // TODO: extract from JWT + updatedBy: handle, winners: [], overview: { - totalPrizes: placementPrizes, + totalPrizes: totalPrizes / 100, + totalPrizesInCents: totalPrizes, }, ...input, + prizeSets: (input.prizeSets ?? []).map((prizeSet) => { + return { + ...prizeSet, + prizes: (prizeSet.prizes ?? []).map((prize) => { + return { + ...prize, + value: prize.amountInCents! / 100, + }; + }), + }; + }), + legacy, legacyId: legacyChallengeId != null ? legacyChallengeId : undefined, description: xss(input.description ?? ""), privateDescription: xss(input.privateDescription ?? ""), @@ -243,1061 +197,120 @@ class ChallengeDomain extends CoreOperations { }) ?? [], }; - return super.create(challenge); - } - - async syncChallengePhases( - legacyId: number, - v5Phases: any[], - isSelfService: boolean, - numOfReviewers: number, - isBeingActivated: boolean - ) { - const { phaseTypes } = await legacyPhaseDomain.getPhaseTypes({}); - const { projectPhases: phasesFromIFx } = - await legacyPhaseDomain.getProjectPhases({ projectId: legacyId }); - console.log(`Phases from v5: ${JSON.stringify(v5Phases)}`); - console.log(`Phases from IFX: ${JSON.stringify(phasesFromIFx)}`); - let phaseGroups: any = {}; - _.forEach(phasesFromIFx, (p) => { - if (!phaseGroups[p.phaseTypeId]) { - phaseGroups[p.phaseTypeId] = []; - } - phaseGroups[p.phaseTypeId].push(p); - }); - _.forEach(_.cloneDeep(phaseGroups), (pg, pt) => { - phaseGroups[pt] = _.sortBy(pg, "scheduledStartTime"); - }); - - for (const key of _.keys(phaseGroups)) { - let phaseOrder = 0; - let v5Equivalents = undefined; - for (const phase of phaseGroups[key]) { - const phaseName = _.get( - _.find(phaseTypes, (pt) => pt.phaseTypeId === phase.phaseTypeId), - "name" - ); - if (_.isUndefined(v5Equivalents)) { - v5Equivalents = _.sortBy( - _.filter(v5Phases, (p) => p.name === phaseName), - "scheduledStartDate" - ); - } - if (v5Equivalents.length > 0) { - if (v5Equivalents.length === phaseGroups[key].length) { - const v5Equivalent = v5Equivalents[phaseOrder]; - console.log( - `Will update phase ${phaseName}/${v5Equivalent.name} from ${ - phase.duration - } to duration ${v5Equivalent.duration * 1000} milli` - ); - let newStatus = _.toInteger(phase.phaseStatusId); - if ( - v5Equivalent.isOpen && - _.toInteger(phase.phaseStatusId) === - constants.PhaseStatusTypes.Closed - ) { - newStatus = constants.PhaseStatusTypes.Scheduled; - } - - if ( - isBeingActivated && - ["Registration", "Submission"].indexOf(v5Equivalent.name) != -1 - ) { - const scheduledStartDate = v5Equivalent.scheduledStartDate; - const now = new Date().getTime(); - if ( - scheduledStartDate != null && - new Date(scheduledStartDate).getTime() < now - ) { - newStatus = constants.PhaseStatusTypes.Open; - } - - console.log( - `Challenge phase ${v5Equivalent.name} status is being set to: ${newStatus} on challenge activation.` - ); - } - console.log({ - projectPhaseId: phase.projectPhaseId, - phaseStatusId: newStatus, - fixedStartTime: moment(phase.fixedStartTime).format( - "yyyy-MM-DD HH:mm:ss" - ) - ? moment(v5Equivalent.scheduledStartDate).format( - "yyyy-MM-DD HH:mm:ss" - ) - : undefined, - scheduledStartTime: moment( - v5Equivalent.scheduledStartDate - ).format("yyyy-MM-DD HH:mm:ss"), - scheduledEndTime: moment(v5Equivalent.scheduledEndDate).format( - "yyyy-MM-DD HH:mm:ss" - ), - duration: v5Equivalent.duration * 1000, - ...(isBeingActivated && - newStatus == constants.PhaseStatusTypes.Open - ? { actualStartTime: moment().format("yyyy-MM-DD HH:mm:ss") } - : {}), - }); - - await legacyPhaseDomain.updateProjectPhase({ - projectPhaseId: phase.projectPhaseId, - phaseStatusId: newStatus, - ...(phaseOrder === 0 ? { - fixedStartTime: moment(phase.fixedStartTime).format( - "yyyy-MM-DD HH:mm:ss" - ) - ? moment(v5Equivalent.scheduledStartDate).format( - "yyyy-MM-DD HH:mm:ss" - ) - : undefined, - } : {}), - scheduledStartTime: moment( - v5Equivalent.scheduledStartDate - ).format("yyyy-MM-DD HH:mm:ss"), - scheduledEndTime: moment(v5Equivalent.scheduledEndDate).format( - "yyyy-MM-DD HH:mm:ss" - ), - duration: v5Equivalent.duration * 1000, - }); - } else { - console.log(`number of ${phaseName} does not match`); - } - } else { - console.log(`No v5 Equivalent Found for ${phaseName}`); - } - if (isSelfService && phaseName === "Review") { - // make sure to set the required reviewers to 2 - const { phaseCriteriaList } = - await legacyPhaseDomain.getPhaseCriteria({ - projectPhaseId: phase.projectPhaseId, - phaseCriteriaTypeId: 6, // TODO: fix magic number here - }); - if (phaseCriteriaList && phaseCriteriaList.length > 0) { - // delete existing criteria - await legacyPhaseDomain.deletePhaseCriteria({ - projectPhaseId: phase.projectPhaseId, - phaseCriteriaTypeId: 6, - }); - } - // create - await legacyPhaseDomain.createPhaseCriteria({ - projectPhaseId: phase.projectPhaseId, - phaseCriteriaTypeId: 6, - parameter: _.toString(numOfReviewers), - }); - } - phaseOrder = phaseOrder + 1; - } - } - // TODO: What about iterative reviews? There can be many for the same challenge. - // TODO: handle timeline template updates - } - - async addPhaseConstraints(legacyId: number, v5Phases: any[]) { - console.log( - `addPhaseConstraints :: start: ${legacyId}, ${JSON.stringify(v5Phases)}` - ); - - const { phaseTypes } = await legacyPhaseDomain.getPhaseTypes({}); // TODO: Update framework to not require any params - console.log( - `addPhaseConstraints :: phaseTypes: ${JSON.stringify(phaseTypes)}` - ); - - const { projectPhases: phasesFromIFx } = - await legacyPhaseDomain.getProjectPhases({ - projectId: legacyId, - }); - - for (const phase of v5Phases) { - console.log( - `addPhaseConstraints :: phase: ${legacyId} -> ${JSON.stringify(phase)}` - ); - if (phase.constraints == null || phase.constraints.length === 0) continue; - - const phaseLegacyId = _.get( - _.find(phaseTypes, (pt) => pt.name === phase.name), - "phaseTypeId" - ); - const existingLegacyPhase = _.find( - phasesFromIFx, - (p) => p.phaseTypeId === phaseLegacyId - ); - - const projectPhaseId = _.get(existingLegacyPhase, "projectPhaseId"); - if (!projectPhaseId) { - console.log(`Could not find phase ${phase.name} on legacy!`); - continue; - } - - let constraintName: any = null; - let constraintValue = null; - let phaseCriteriaTypeId = null; - - if (phase.name === "Submission") { - const numSubmissionsConstraint = phase.constraints.find( - (c: any) => c.name === "Number of Submissions" - ); - if (numSubmissionsConstraint) { - constraintName = "Submission Number"; - constraintValue = numSubmissionsConstraint.value; - phaseCriteriaTypeId = 3; - } - } - - if (phase.name === "Registration") { - const numRegistrantsConstraint = phase.constraints.find( - (c: any) => c.name === "Number of Registrants" - ); - if (numRegistrantsConstraint) { - constraintName = "Registration Number"; - constraintValue = numRegistrantsConstraint.value; - phaseCriteriaTypeId = 2; - } - } - - if (phase.name === "Review") { - const numReviewersConstraint = phase.constraints.find( - (c: any) => c.name === "Number of Reviewers" - ); - if (numReviewersConstraint) { - constraintName = "Reviewer Number"; - constraintValue = numReviewersConstraint.value; - phaseCriteriaTypeId = 6; - } - } - - // We have an interesting situation if a submission phase constraint was added but - // no registgration phase constraint was added. This ends up opening Post-Mortem - // phase if registration closes with 0 submissions. - // For now I'll leave it as is and handle this better in the new Autopilot implementation - // A quick solution would have been adding a registration constraint with value 1 if none is provided when there is a submission phase constraint - - if (constraintName && constraintValue) { - constraintValue = _.toString(constraintValue); - const { phaseCriteriaList } = await legacyPhaseDomain.getPhaseCriteria({ - projectPhaseId, - }); - console.log( - `phaseCriteriaList: ${JSON.stringify( - phaseCriteriaList - )} for projectPhaseId: ${projectPhaseId}` - ); - if (phaseCriteriaList && phaseCriteriaList.length > 0) { - console.log( - `Will create phase constraint ${constraintName} with value ${constraintValue}` - ); - // Ideally we should update the existing phase criteria, but this processor will go away in weeks - // and it's a backend processor, so we can just drop and recreate without slowing down anything - await legacyPhaseDomain.deletePhaseCriteria({ - projectPhaseId, - phaseCriteriaTypeId: phaseCriteriaTypeId as number, - }); - await legacyPhaseDomain.createPhaseCriteria({ - projectPhaseId, - phaseCriteriaTypeId: phaseCriteriaTypeId as number, - parameter: constraintValue, - }); - } else { - console.log( - `Could not find phase criteria type for ${constraintName}. Will create it with value ${constraintValue}` - ); - await legacyPhaseDomain.createPhaseCriteria({ - projectPhaseId, - phaseCriteriaTypeId: phaseCriteriaTypeId as number, - parameter: constraintValue, - }); - } - } - } - console.log("addPhaseConstraints :: end"); - } - - private async updateMemberPayments(legacyId: number, v5PrizeSets: any) { - const { prizes: prizesFromIfx } = await legacyPrizeDomain.get({ - criteria: [ - { - key: "projectId", - value: legacyId, - operator: Operator.OPERATOR_EQUAL, - }, - { - key: "prizeTypeId", - value: PrizeTypeIds.Contest, - operator: Operator.OPERATOR_EQUAL, - }, - ], - }); - const { prizes: checkpointPrizes } = await legacyPrizeDomain.get({ - criteria: [ - { - key: "projectId", - value: legacyId, - operator: Operator.OPERATOR_EQUAL, - }, - { - key: "prizeTypeId", - value: PrizeTypeIds.Checkpoint, - operator: Operator.OPERATOR_EQUAL, - }, - ], - }); - - const checkpointPrizesFromIfx = checkpointPrizes - ? checkpointPrizes[0] - : null; - const v5Prizes = _.map( - _.get( - _.find(v5PrizeSets, (p) => p.type === PrizeSetTypes.ChallengePrizes), - "prizes", - [] - ), - (prize) => prize.value - ); - const v5CheckPointPrizes = _.map( - _.get( - _.find(v5PrizeSets, (p) => p.type === PrizeSetTypes.CheckPoint), - "prizes", - [] - ), - (prize) => prize.value - ); - // compare prizes - if (v5Prizes && v5Prizes.length > 0) { - v5Prizes.sort((a, b) => b - a); - for (let i = 0; i < v5Prizes.length; i += 1) { - const ifxPrize = _.find(prizesFromIfx, (p) => p.place === i + 1); - if (ifxPrize) { - if (_.toInteger(ifxPrize.prizeAmount) !== v5Prizes[i]) { - await legacyPrizeDomain.update({ - updateCriteria: { - prizeId: ifxPrize.prizeId, - place: i + 1, - projectId: legacyId, - }, - updateInput: { - prizeAmount: v5Prizes[i], - }, - }); - } - } else { - await legacyPrizeDomain.create({ - projectId: legacyId, - place: i + 1, - prizeAmount: v5Prizes[i], - prizeTypeId: PrizeTypeIds.Contest, - numberOfSubmissions: 1, - }); - } - } - if (prizesFromIfx.length > v5Prizes.length) { - const prizesToDelete = _.filter( - prizesFromIfx, - (p) => p.place > v5Prizes.length - ); - for (const prizeToDelete of prizesToDelete) { - await legacyPrizeDomain.delete({ - prizeId: prizeToDelete.prizeId, - projectId: legacyId, - }); - } - } - } - // compare checkpoint prizes - if ( - checkpointPrizesFromIfx && - v5CheckPointPrizes && - v5CheckPointPrizes.length > 0 - ) { - // we assume that all checkpoint prizes will be the same - if ( - v5CheckPointPrizes.length !== - checkpointPrizesFromIfx.numberOfSubmissions || - v5CheckPointPrizes[0] !== - _.toInteger(checkpointPrizesFromIfx.prizeAmount) - ) { - await legacyPrizeDomain.update({ - updateCriteria: { - prizeId: checkpointPrizesFromIfx.prizeId, - projectId: legacyId, - }, - updateInput: { - prizeAmount: v5CheckPointPrizes[0], - numberOfSubmissions: v5CheckPointPrizes.length, - }, - }); - } - } else if (checkpointPrizesFromIfx) { - await legacyPrizeDomain.delete({ - prizeId: checkpointPrizesFromIfx.prizeId, - projectId: legacyId, - }); - } - } - - async associateChallengeTerms(v5Terms: any[], legacyChallengeId: number) { - // console.log(`v5Terms Terms Array: ${JSON.stringify(v5Terms)}`) - const { terms: legacyTermsArray } = - await legacyTermDomain.GetProjectRoleTermsOfUseXrefs({ - projectId: legacyChallengeId, - }); - // console.log(`Legacy Terms Array: ${JSON.stringify(legacyTermsArray)}`) - const nda = _.find(v5Terms, (e: any) => e.id === V5_TERMS_NDA_ID); - const legacyNDA: any = _.find( - legacyTermsArray, - (e: any) => _.toNumber(e.termsOfUseId) === _.toNumber(LEGACY_TERMS_NDA_ID) - ); - - const standardTerms = _.find(v5Terms, (e) => e.id === V5_TERMS_STANDARD_ID); - const legacyStandardTerms: any = _.find( - legacyTermsArray, - (e: any) => - _.toNumber(e.termsOfUseId) === _.toNumber(LEGACY_TERMS_STANDARD_ID) - ); - - // console.log(`NDA: ${config.V5_TERMS_NDA_ID} - ${JSON.stringify(nda)}`) - // console.log(`Standard Terms: ${config.V5_TERMS_STANDARD_ID} - ${JSON.stringify(standardTerms)}`) - // console.log(`Legacy NDA: ${JSON.stringify(legacyNDA)}`) - // console.log(`Legacy Standard Terms: ${JSON.stringify(legacyStandardTerms)}`) - - const m2mToken = await m2m.getM2MToken(); - if (standardTerms && standardTerms.id && !legacyStandardTerms) { - console.log( - "Associate Challenge Terms - v5 Standard Terms exist, not in legacy. Adding to Legacy." - ); - const v5StandardTerm = await v5Api.getRequest( - `${V5_TERMS_API_URL}/${standardTerms.id}`, - m2mToken - ); - await legacyTermDomain.createProjectRoleTermsOfUseXref({ - projectId: legacyChallengeId, - resourceRoleId: _.toInteger(LEGACY_SUBMITTER_ROLE_ID), - termsOfUseId: v5StandardTerm.legacyId, - }); - } else if ( - !standardTerms && - legacyStandardTerms && - legacyStandardTerms.id - ) { - console.log( - "Associate Challenge Terms - Legacy NDA exist, not in V5. Removing from Legacy." - ); - await legacyTermDomain.deleteProjectRoleTermsOfUseXref({ - projectId: legacyChallengeId, - resourceRoleId: _.toInteger(LEGACY_SUBMITTER_ROLE_ID), - termsOfUseId: legacyStandardTerms.id, - }); - } - - if (nda && nda.id && !legacyNDA) { - console.log( - "Associate Challenge Terms - v5 NDA exist, not in legacy. Adding to Legacy." - ); - const v5NDATerm = await v5Api.getRequest( - `${V5_TERMS_API_URL}/${nda.id}`, - m2mToken - ); - await legacyTermDomain.createProjectRoleTermsOfUseXref({ - projectId: legacyChallengeId, - resourceRoleId: _.toInteger(LEGACY_SUBMITTER_ROLE_ID), - termsOfUseId: v5NDATerm.legacyId, - }); - } else if (!nda && legacyNDA && legacyNDA.id) { - console.log( - "Associate Challenge Terms - Legacy NDA exist, not in V5. Removing from Legacy." - ); - await legacyTermDomain.deleteProjectRoleTermsOfUseXref({ - projectId: legacyChallengeId, - resourceRoleId: _.toInteger(LEGACY_SUBMITTER_ROLE_ID), - termsOfUseId: legacyNDA.id, - }); - } - - // console.log('Associate Challenge Terms - Nothing to Do') - } - - async getGroup(v5GroupId: string) { - const token = await m2m.getM2MToken(); - return await v5Api.getRequest(`${V5_GROUPS_API_URL}/${v5GroupId}`, token); - } - - async getGroups(v5Groups: any[], legacyId: number): Promise { - const { contestEligibilities } = - await legacyGroupContestEligibilityDomain.getContestEligibilities({ - contestId: legacyId, - }); - const v4GroupIds = []; - for (const ce of contestEligibilities) { - const { groupContestEligibilities } = - await legacyGroupContestEligibilityDomain.getGroupContestEligibilities({ - contestEligibilityId: ce.contestEligibilityId, - }); - for (const gce of groupContestEligibilities) { - v4GroupIds.push(gce.groupId); - } - } - // get groupContestEligibilities -> groupId - let groupsToBeAdded: any[] = []; - let groupsToBeDeleted: any[] = []; - if (v5Groups && v5Groups.length > 0) { - const oldGroups = _.map(v4GroupIds, (g) => _.toString(g)); - const newGroups = []; - - for (const group of v5Groups) { - try { - const groupInfo = await this.getGroup(group); - if (!_.isEmpty(_.get(groupInfo, "oldId"))) { - newGroups.push(_.toString(_.get(groupInfo, "oldId"))); - } - } catch (e) { - console.log(`Failed to load details for group ${group}`); - } - } - groupsToBeAdded = _.difference(newGroups, oldGroups); - groupsToBeDeleted = _.difference(oldGroups, newGroups); - if (groupsToBeAdded.length > 0) { - console.log( - `parsePayload :: Adding Groups ${JSON.stringify(groupsToBeAdded)}` - ); - } - if (groupsToBeDeleted.length > 0) { - console.log( - `parsePayload :: Deleting Groups ${JSON.stringify(groupsToBeDeleted)}` - ); - } - } else if (v4GroupIds && v4GroupIds.length > 0) { - groupsToBeDeleted = _.map(v4GroupIds, (g) => _.toString(g)); - } - return { - groupsToBeAdded, - groupsToBeDeleted, - }; - } - - async associateChallengeGroups( - v5groups: any[], - legacyId: number, - isStudio: number - ) { - const { groupsToBeAdded, groupsToBeDeleted } = await this.getGroups( - v5groups, - legacyId - ); - console.log( - `Groups to add to challenge: ${legacyId}: ${JSON.stringify( - groupsToBeAdded - )}` - ); - for (const group of groupsToBeAdded) { - // await groupService.addGroupToChallenge(legacyId, group) - const createdContestEligibility: CreateResult = - await legacyGroupContestEligibilityDomain.createContestEligibility({ - contestEligibilityId: group, - contestId: legacyId, - isStudio, - }); - const ceId = createdContestEligibility.kind - ? _.get( - createdContestEligibility.kind, - createdContestEligibility.kind?.$case, - undefined - ) - : undefined; - if (!ceId) throw new Error("cannot create contest eligibility"); - await legacyGroupContestEligibilityDomain.createGroupContestEligibility({ - contestEligibilityId: ceId, - groupId: group, - }); - } - console.log( - `Groups to remove from challenge: ${legacyId}: ${JSON.stringify( - groupsToBeDeleted - )}` - ); - for (const group of groupsToBeDeleted) { - // await groupService.removeGroupFromChallenge(legacyId, group) - const { contestEligibilities } = - await legacyGroupContestEligibilityDomain.getContestEligibilities({ - contestId: legacyId, - }); - const contestEligibilityToRemove = _.find( - contestEligibilities, - (ce) => ce.contestEligibilityId === group - ); - if (contestEligibilityToRemove) { - await legacyGroupContestEligibilityDomain.deleteContestEligibility({ - contestEligibilityId: contestEligibilityToRemove.contestEligibilityId, - }); - await legacyGroupContestEligibilityDomain.deleteGroupContestEligibility( - { - contestEligibilityId: - contestEligibilityToRemove.contestEligibilityId, - groupId: group, - } - ); - } - } - } - - async setCopilotPayment( - challengeId: string, - legacyChallengeId: number, - prizeSets: any = [] - ) { - try { - const token = await m2m.getM2MToken(); - const amount = _.get( - _.find(prizeSets, (p) => p.type === COPILOT_PAYMENT_TYPE), - "prizes[0].value", - 0 - ); - console.log("Fetching challenge copilot..."); - const [copilotResource] = await v5Api.getRequest( - `${V5_RESOURCES_API_URL}?challengeId=${challengeId}&roleId=${COPILOT_ROLE_ID}`, - token - ); - if (!copilotResource) { - console.log( - `Copilot does not exist for challenge ${challengeId} (legacy: ${legacyChallengeId})` - ); - return; - } - console.log( - `Setting Copilot Payment: ${amount} for legacyId ${legacyChallengeId} for copilot ${copilotResource.memberId}` - ); - const { resources } = await legacyResourceDomain.getResources({ - projectId: legacyChallengeId, - resourceRoleId: ResourceRoleTypes.Copilot, - }); - if (resources && resources.length > 0) { - const { resourceInfos } = await legacyResourceDomain.getResourceInfos({ - resourceId: resources[0].resourceId, - resourceInfoTypeId: PaymentTypeIds.Copilot, - }); - if (resourceInfos && resourceInfos.length > 0) { - // update - await legacyResourceDomain.updateResourceInfos({ - resourceId: resources[0].resourceId, - resourceInfoTypeId: PaymentTypeIds.Copilot, - value: "true", - }); - } else { - // create - await legacyResourceDomain.createResourceInfos({ - resourceId: resources[0].resourceId, - resourceInfoTypeId: PaymentTypeIds.Copilot, - value: "true", - }); - } - - // Set payment - const { projectPayments } = await legacyPaymentDomain.get({ - resourceId: resources[0].resourceId, - projectPaymentTypeId: ProjectPaymentTypeIds.Copilot, - }); - const copilotProjectPayment = - projectPayments?.length > 0 ? projectPayments[0] : undefined; - - const { projectInfos } = await legacyProjectInfoDomain.getProjectInfo({ - projectId: legacyChallengeId, - projectInfoTypeId: ProjectInfoIds.CopilotPayment, - }); - const copilotPayment = - projectInfos?.length > 0 ? projectInfos[0] : undefined; - - if (amount !== null && amount >= 0) { - if (copilotPayment) { - await legacyProjectInfoDomain.update({ - projectId: legacyChallengeId, - projectInfoTypeId: ProjectInfoIds.CopilotPayment, - value: amount, - }); - } else { - console.log( - `Creating copilot payment: ${amount}... with project id: ${legacyChallengeId} and project info type id: ${ProjectInfoIds.CopilotPayment}...` - ); - try { - await legacyProjectInfoDomain.create({ - projectId: legacyChallengeId, - projectInfoTypeId: ProjectInfoIds.CopilotPayment, - value: amount, - }); - } catch (e) { - console.log("Failed to create copilot payment!"); - console.log(e); - } - } - if (copilotProjectPayment) { - await legacyPaymentDomain.update({ - resourceId: resources[0].resourceId, - projectPaymentTypeId: ProjectPaymentTypeIds.Copilot, - amount, - }); - } else { - await legacyPaymentDomain.create({ - resourceId: resources[0].resourceId, - projectPaymentTypeId: ProjectPaymentTypeIds.Copilot, - amount, - }); - } - } else { - await legacyPaymentDomain.delete({ - resourceId: resources[0].resourceId, - projectPaymentTypeId: ProjectPaymentTypeIds.Copilot, - }); - await legacyProjectInfoDomain.delete({ - projectId: legacyChallengeId, - projectInfoTypeId: ProjectInfoIds.CopilotPayment, - }); - } - } - } catch (e) { - console.log("Failed to set the copilot payment!"); - console.log(e); - } + return super.create(challenge, metadata); } public async update( scanCriteria: ScanCriteria[], - input: UpdateChallengeInput_UpdateInput + input: UpdateChallengeInput_UpdateInput, + metadata: Metadata ): Promise { - // TODO: Use legacyChallengeDomain to backfill data in informix - const createdByUserId = 22838965; // TODO: Extract from interceptors - const updatedByUserId = 22838965; // TODO: Extract from interceptors + const { items } = await this.scan(scanCriteria, undefined); + let challenge = items[0] as Challenge; - if (!input?.legacyId && input?.status && input?.status !== ChallengeStatuses.New) { - console.log(`Legacy ID does not exist. Creating challenge in legacy...`); - const { track, subTrack, isTask, technologies } = - legacyMapper.mapTrackAndType( - input.trackId as string, - input.typeId as string, - input.tags - ); - - input.legacy = { - ...input.legacy, - track, - subTrack, - pureV5Task: isTask, - forumId: 0, - directProjectId: input.legacy!.directProjectId, - reviewType: input.legacy!.reviewType, - confidentialityType: input.legacy!.confidentialityType, - }; - - let legacyChallengeId: number | null = null; - - try { - // prettier-ignore - const legacyChallengeCreateInput = LegacyCreateChallengeInput.fromPartial(legacyMapper.mapChallengeDraftUpdateInput(input)); - // prettier-ignore - const legacyChallengeCreateResponse = await legacyChallengeDomain.create(legacyChallengeCreateInput); - if (legacyChallengeCreateResponse.kind?.$case === "integerId") { - legacyChallengeId = legacyChallengeCreateResponse.kind.integerId; - } - } catch (err) { - console.log("err", err); - throw new StatusBuilder() - .withCode(Status.INTERNAL) - .withDetails("Failed to create legacy challenge") - .build(); - } - input.legacyId = legacyChallengeId as number; - } - - console.log(`Updating challenge in legacy...`); - if (input?.legacyId) { - const legacyId = input.legacyId; - const legacyChallenge = await legacyChallengeDomain.getLegacyChallenge({ - legacyChallengeId: legacyId, - }); - - // Handle metadata (project_info) - let metaValue; - const { projectInfos } = await legacyProjectInfoDomain.getProjectInfo({ - projectId: legacyId, - }); - for (const metadataKey of _.keys(constants.supportedMetadata)) { - try { - metaValue = _.toString( - constants.supportedMetadata[metadataKey].method( - input, - constants.supportedMetadata[metadataKey].defaultValue - ) - ); - if (metaValue !== null && metaValue !== "") { - if ( - !_.find( - projectInfos, - (pi: any) => pi.projectInfoTypeId === _.toInteger(metadataKey) - ) - ) { - await legacyProjectInfoDomain.create({ - projectId: legacyId, - projectInfoTypeId: _.toInteger(metadataKey), - value: metaValue, - }); - } else { - await legacyProjectInfoDomain.update({ - projectId: legacyId, - projectInfoTypeId: _.toInteger(metadataKey), - value: metaValue, - }); - } - } - } catch (e) { - console.log( - `Failed to set ${constants.supportedMetadata[metadataKey].description} to ${metaValue} for challenge ${legacyId}` - ); - console.log(e); - } - } - - // updateMemberPayments - await this.updateMemberPayments(legacyId, input.prizeSets); - // associateChallengeGroups - await this.associateChallengeGroups( - input.groups, - legacyId, - _.includes( - constants.STUDIO_CATEGORY_TYPES, - legacyChallenge.projectCategoryId - ) - ? 1 - : 0 - ); - // associateChallengeTerms - await this.associateChallengeTerms(input.terms, legacyId); - // setCopilotPayment - await this.setCopilotPayment( - input.id, - legacyId, - _.get(input, "prizeSets") - ); - - // If iterative review is open - if ( - _.find( - _.get(input, "phases"), - (p) => p.isOpen && p.name === "Iterative Review" - ) - ) { - // Try to read reviews and insert them into informix DB - if (input.metadata && input.legacy?.reviewScorecardId) { - let orReviewFeedback: any = _.find( - input.metadata, - (meta) => meta.name === "or_review_feedback" - ); - let orReviewScore: any = _.find( - input.metadata, - (meta) => meta.name === "or_review_score" - ); - if ( - !_.isUndefined(orReviewFeedback) && - !_.isUndefined(orReviewScore) - ) { - orReviewFeedback = JSON.parse(_.toString(orReviewFeedback)); - const reviewResponses: any[] = []; - _.each(orReviewFeedback, (value, key) => { - if (input?.legacy?.reviewScorecardId) { - const questionId = _.get( - _.find( - _.get( - constants.scorecardQuestionMapping, - input.legacy.reviewScorecardId - ), - (item) => - _.toString(item.questionId) === _.toString(key) || - _.toLower(item.description) === _.toLower(key) - ), - "questionId" - ); - reviewResponses.push({ - questionId, - answer: value, - }); - } - }); - orReviewScore = _.toNumber(orReviewFeedback); - const { resources } = await legacyResourceDomain.getResources({ - projectId: input.legacyId, - resourceRoleId: ResourceRoleTypes.IterativeReviewer, - }); - if (resources.length === 0) - throw new Error("Cannot find iterative reviewer"); - const iterativeReviewer = resources[0]; - const submission = await legacyReviewDomain.getSubmission({ - projectId: input.legacyId, - resourceId: iterativeReviewer.resourceId, - }); - if (!submission) throw new Error("Cannot find submission"); - const { projectPhases } = await legacyPhaseDomain.getProjectPhases({ - projectId: input.legacyId, - phaseTypeId: 18, - }); - if (projectPhases.length === 0) - throw new Error("Cannot find project phase"); - const projectPhase = projectPhases[0]; - const review = await legacyReviewDomain.createReview({ - resourceId: iterativeReviewer.resourceId, - submissionId: submission.submissionId, - projectPhaseId: projectPhase.projectPhaseId, - scorecardId: input.legacy.reviewScorecardId, - committed: 1, - score: orReviewScore, - initialScore: orReviewScore, - }); - const reviewId = review.kind - ? _.get(review.kind, review.kind?.$case, undefined) - : undefined; - if (!reviewId) throw new Error("Cannot create review"); - for (let i = 0; i < reviewResponses.length; i += 1) { - await legacyReviewDomain.createReviewItem({ - reviewId, - scorecardQuestionId: reviewResponses[i].questionId, - uploadId: submission.uploadId, - answer: reviewResponses[i], - sort: i, - }); - } - } + // Begin Anti-Corruption Layer + let legacyId: number | null = null; + if (challenge.legacy!.pureV5Task !== true) { + if (input.status === ChallengeStatuses.Draft) { + if (items.length === 0 || items[0] == null) { + throw new StatusBuilder() + .withCode(Status.NOT_FOUND) + .withDetails("Challenge not found") + .build(); } - } - - let isBeingActivated = false; + // prettier-ignore + const createChallengeInput: CreateChallengeInput = { + name: input.name ?? challenge!.name, + typeId: input.typeId ?? challenge!.typeId, + trackId: input.trackId ?? challenge!.trackId, + billing: challenge.billing, + metadata: input.metadataUpdate != null ? input.metadataUpdate.metadata : challenge!.metadata, + phases: input.phaseUpdate != null ? input.phaseUpdate.phases : challenge!.phases, + events: input.eventUpdate != null ? input.eventUpdate.events : challenge!.events, + terms: input.termUpdate != null ? input.termUpdate.terms : challenge!.terms, + prizeSets: input.prizeSetUpdate != null ? input.prizeSetUpdate.prizeSets : challenge!.prizeSets, + tags: input.tagUpdate != null ? input.tagUpdate.tags : challenge!.tags, + status: input.status ?? challenge!.status, + attachments: input.attachmentUpdate != null ? input.attachmentUpdate.attachments : challenge!.attachments, + groups: input.groupUpdate != null ? input.groupUpdate.groups : challenge!.groups, + discussions: input.discussionUpdate != null ? input.discussionUpdate.discussions : challenge!.discussions, + }; - if (input.status && legacyChallenge) { - if ( - input.status === constants.challengeStatuses.Active && - legacyChallenge.projectStatusId !== - constants.legacyChallengeStatusesMap.Active - ) { - isBeingActivated = true; - console.log("Activating challenge..."); - await legacyChallengeDomain.activate({ - legacyChallengeId: legacyId, - }); - console.log(`Activated! `); - // make sure autopilot is on - if (!_.find(projectInfos, (pi) => pi.projectInfoTypeId === 9)) { - try { - await legacyProjectInfoDomain.create({ - projectId: legacyId, - projectInfoTypeId: 9, - value: "On", - }); - } catch (e) { - console.log("Failed to set autopilot to On"); - console.log(e); - } - } else { - await legacyProjectInfoDomain.update({ - projectId: legacyId, - projectInfoTypeId: 9, - value: "On", - }); - } - } - if ( - input.status === constants.challengeStatuses.Completed && - legacyChallenge.projectStatusId !== - constants.legacyChallengeStatusesMap.Completed - ) { - if (input.task?.isTask) { - console.log("Challenge is a TASK"); - if (!input.winners || input.winners.length === 0) { - throw new Error("Cannot close challenge without winners"); - } - const winnerId = _.find( - input.winners, - (winner) => winner.placement === 1 - )?.userId; - console.log( - `Will close the challenge with ID ${legacyId}. Winner ${winnerId}!` - ); - if (!winnerId) throw new Error("Cannot find winner"); - await legacyChallengeDomain.closeChallenge({ - projectId: legacyId, - winnerId, - }); - } else { - console.log( - "Challenge type is not a task.. Skip closing challenge..." - ); - } - } + // prettier-ignore + const { legacy, legacyChallengeId } = await this.createLegacyChallenge(createChallengeInput, input.legacy, input.status, challenge!.trackId, challenge!.typeId, challenge!.tags, metadata); - if (!_.get(input, "task.isTask")) { - const numOfReviewers = 2; - await this.syncChallengePhases( - legacyId, - input.phases, - _.get(input, "legacy.selfService", false), - numOfReviewers, - isBeingActivated - ); - await this.addPhaseConstraints(legacyId, input.phases); - } else { - console.log("Will skip syncing phases as the challenge is a task..."); - } - if ( - input.status === constants.challengeStatuses.CancelledClientRequest && - legacyChallenge.projectStatusId !== - constants.legacyChallengeStatusesMap.CancelledClientRequest - ) { - console.log("Cancelling challenge..."); - await legacyChallengeDomain.update({ - projectId: legacyId, - projectStatusId: - constants.legacyChallengeStatusesMap.CancelledClientRequest, - }); + input.legacy = legacy; + legacyId = legacyChallengeId; + } else if (challenge.status !== ChallengeStatuses.New) { + // prettier-ignore + const updateChallengeInput = await legacyMapper.mapChallengeUpdateInput(challenge.legacyId!, challenge.legacy?.subTrack!, input); + const { updatedCount } = await legacyChallengeDomain.update(updateChallengeInput, metadata); + + if (updatedCount === 0) { + throw new StatusBuilder() + .withCode(Status.ABORTED) + .withDetails("Failed to update challenge") + .build(); } } } - console.log("Challenge updated successfully in legacy"); - - // toEntity parses the below properties thus we should now stringify them again - // for (const key of ["phases", - // "terms", - // "tags", - // "metadata", - // "events", - // "prizeSets"]) { - // _.set(input, key, JSON.stringify(_.get(input, key))) - // } - console.log('------ before save --------'); - - // console.log(input); - console.log(_.omit(input, ["id"])); - - const challengeList = await super.update(scanCriteria, { - ..._.omit(input, ["id", ...(!input.legacyId ? ["legacyId"] : [])]), - // prizeSets: input.prizeSets.map((ps) => JSON.stringify(ps)), - }); + // End Anti-Corruption Layer - console.log("------ after save --------"); + // prettier-ignore + const totalPrizesInCents = this.calculateTotalPrizesInCents(input.prizeSetUpdate?.prizeSets ?? challenge.prizeSets ?? []); - // 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; + return super.update( + scanCriteria, + // prettier-ignore + { + name: input.name != null ? xss(input.name) : undefined, + typeId: input.typeId != null ? input.typeId : undefined, + trackId: input.trackId != null ? input.trackId : undefined, + timelineTemplateId: input.timelineTemplateId != null ? input.timelineTemplateId : undefined, + legacy: input.legacy != null ? input.legacy : undefined, + billing: input.billing != null ? input.billing : undefined, + description: input.description != null ? xss(input.description) : undefined, + privateDescription: input.privateDescription != null ? xss(input.privateDescription) : undefined, + descriptionFormat: input.descriptionFormat != null ? input.descriptionFormat : undefined, + task: input.task != null ? input.task : undefined, + winners: input.winnerUpdate != null ? input.winnerUpdate.winners : undefined, + discussions: input.discussionUpdate != null ? input.discussionUpdate.discussions : undefined, + metadata: input.metadataUpdate != null ? input.metadataUpdate.metadata : undefined, + phases: input.phaseUpdate != null ? input.phaseUpdate.phases : undefined, + events: input.eventUpdate != null ? input.eventUpdate.events : undefined, + terms: input.termUpdate != null ? input.termUpdate.terms : undefined, + prizeSets: input.prizeSetUpdate != null ? input.prizeSetUpdate.prizeSets.map((prizeSet) => { + return { + ...prizeSet, + prizes: (prizeSet.prizes ?? []).map((prize) => { + return { + ...prize, + value: prize.amountInCents! / 100, + }; + }), + }; + }) : undefined, + tags: input.tagUpdate != null ? input.tagUpdate.tags : undefined, + status: input.status != null ? input.status : undefined, + attachments: input.attachmentUpdate != null ? input.attachmentUpdate.attachments : undefined, + groups: input.groupUpdate != null ? input.groupUpdate.groups : undefined, + projectId: input.projectId != null ? input.projectId : undefined, + startDate: input.startDate != null ? input.startDate : undefined, + endDate: input.endDate != null ? input.endDate : undefined, + overview: input.overview != null ? { + totalPrizes: totalPrizesInCents / 100, + totalPrizesInCents, + } : undefined, + legacyId: legacyId != null ? legacyId : undefined, + }, + metadata + ); } 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; @@ -1306,9 +319,7 @@ 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; @@ -1317,43 +328,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)) { - console.log("lookup challenge"); try { - challenge = await this.lookup( - DomainHelper.getLookupCriteria("id", id) - ); + 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(DomainHelper.getLookupCriteria("id", id)); } const prizeSets = _.filter( [ - ..._.intersectionBy( - input.prizeSets.prizeSets, - challenge.prizeSets, - "type" - ), - ..._.differenceBy( - challenge.prizeSets, - input.prizeSets.prizeSets, - "type" - ), + ..._.intersectionBy(input.prizeSets.prizeSets, challenge.prizeSets, "type"), + ..._.differenceBy(challenge.prizeSets, input.prizeSets.prizeSets, "type"), ], (entry) => entry.type !== "copilot" ); @@ -1364,22 +362,29 @@ class ChallengeDomain extends CoreOperations { if (!_.isEmpty(copilotPayments)) { prizeSets.push(...copilotPayments); } - data.prizeSets = prizeSets; + data.prizeSets = prizeSets.map((prizeSet) => { + return { + ...prizeSet, + prizes: prizeSet.prizes.map((prize) => ({ + ...prize, + value: prize.amountInCents! / 100, + })), + }; + }); } - console.log("done with prizesets"); if (!_.isUndefined(input.overview)) { - data.overview = input.overview; + data.overview = { + ...input.overview, + totalPrizes: input.overview.totalPrizesInCents! / 100, + }; } - 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; - console.log("Updating...", JSON.stringify(data, null, 2)); await super.update( scanCriteria, _.omit(data, [ @@ -1406,6 +411,7 @@ class ChallengeDomain extends CoreOperations { await this.esClient.update({ index: ES_INDEX, + type: process.env.OPENSEARCH === "true" ? undefined : "_doc", refresh: ES_REFRESH, id, body: { @@ -1413,6 +419,19 @@ class ChallengeDomain extends CoreOperations { }, }); } + + private calculateTotalPrizesInCents(prizeSets: Challenge_PrizeSet[]): number { + let totalPrizes = 0; + if (prizeSets) { + for (const { prizes } of prizeSets) { + for (const { amountInCents } of prizes) { + totalPrizes += amountInCents!; + } + } + } + + return totalPrizes; + } } interface IUpdateDataFromACL { diff --git a/src/helpers/ElasticSearch.ts b/src/helpers/ElasticSearch.ts index 27ebb5f..291ef0f 100644 --- a/src/helpers/ElasticSearch.ts +++ b/src/helpers/ElasticSearch.ts @@ -1,26 +1,49 @@ -import { Client as ESClient } from "@opensearch-project/opensearch" +import { Client as ESClient } from "@opensearch-project/opensearch"; +import elasticsearch from "elasticsearch"; +import AWS from "aws-sdk"; class ElasticSearch { - private esClient: any; - private esHost: string | undefined; + private esClient: any; + private esHost: string | undefined; - constructor() { - const { ES_HOST } = process.env; - this.esHost = ES_HOST - } + public useOpenSearch: boolean = process.env.OPENSEARCH === "true"; + + constructor() { + const { ES_HOST } = process.env; + this.esHost = ES_HOST; + } - getESClient() { - if (this.esClient) { - return this.esClient; - } - this.esClient = new ESClient({ - node: this.esHost, - ssl: { - rejectUnauthorized: false, - }, + getESClient() { + if (this.esClient) { + return this.esClient; + } + if (this.useOpenSearch) { + if (/.*amazonaws.*/.test(this.esHost!)) { + AWS.config.update({ + region: "us-east-1", + credentials: new AWS.EnvironmentCredentials("AWS"), + }); + this.esClient = new elasticsearch.Client({ + apiVersion: "6.8", + hosts: this.esHost!, + connectionClass: require("http-aws-es"), // eslint-disable-line global-require + }); + } else { + this.esClient = new elasticsearch.Client({ + apiVersion: "6.8", + hosts: this.esHost!, }); - return this.esClient; + } + } else { + this.esClient = new ESClient({ + node: this.esHost, + ssl: { + rejectUnauthorized: false, + }, + }); } + return this.esClient; + } } export default new ElasticSearch(); diff --git a/src/helpers/IdGenerator.ts b/src/helpers/IdGenerator.ts index 53223f1..ab6aef1 100644 --- a/src/helpers/IdGenerator.ts +++ b/src/helpers/IdGenerator.ts @@ -1,8 +1,7 @@ -import { uuid } from "uuidv4"; - +import { v4 as uuidv4 } from "uuid"; class IdGenerator { public generateUUID(): string { - return uuid(); + return uuidv4(); } } diff --git a/src/interceptors/InterceptorWrapper.ts b/src/interceptors/InterceptorWrapper.ts new file mode 100644 index 0000000..d6b280d --- /dev/null +++ b/src/interceptors/InterceptorWrapper.ts @@ -0,0 +1,103 @@ +import { + handleUnaryCall, + sendUnaryData, + ServerUnaryCall, + UntypedServiceImplementation, +} from "@grpc/grpc-js"; +import { GrpcError } from "../util/ErrorHelper"; +import { AttachmentServer, AttachmentService } from "../service/AttachmentService"; +import { ChallengeServer, ChallengeService } from "../service/ChallengeService"; +import { + ChallengeTimelineTemplateServer, + ChallengeTimelineTemplateService, +} from "../service/ChallengeTimelineTemplateService"; +import { ChallengeTrackServer, ChallengeTrackService } from "../service/ChallengeTrackService"; +import { ChallengeTypeServer, ChallengeTypeService } from "../service/ChallengeTypeService"; +import { PhaseServer, PhaseService } from "../service/PhaseService"; +import { + TimelineTemplateServer, + TimelineTemplateService, +} from "../service/TimelineTemplateService"; +import loggingInterceptor from "./LoggingInterceptor"; + +class InterceptorWrapper { + private wrapCallWithInterceptor( + interceptor: Interceptor, + callHandler: handleUnaryCall, + serviceName: string, + method: string + ) { + return function (call: ServerUnaryCall, callback: sendUnaryData) { + const newCallback = (err: GrpcError | any, res: any) => { + if (err) { + return interceptor.onError(err, call, callback); + } + return interceptor.onSuccess(res, call, callback); + }; + try { + interceptor.onMessage(call, serviceName, method); + callHandler(call, newCallback); + } catch (err: any) { + interceptor.onError(err, call, callback); + } + }; + } + + private implementWithInterceptors( + serviceDefinition: ServiceDefinition, + implementation: ServerImplementation, + serviceName: string, + interceptors: Interceptor[] + ) { + const wrappedImplementation: { [key: string]: handleUnaryCall } = {}; + + for (const method in serviceDefinition) { + let callHandler = implementation[method] as handleUnaryCall; + interceptors.forEach((interceptor: Interceptor) => { + callHandler = this.wrapCallWithInterceptor(interceptor, callHandler, serviceName, method); + }); + wrappedImplementation[method] = callHandler; + } + + return wrappedImplementation; + } + + public serviceWrapper( + serviceDefinition: ServiceDefinition, + implementation: ServerImplementation, + serviceName: string + ): UntypedServiceImplementation { + return this.implementWithInterceptors(serviceDefinition, implementation, serviceName, [ + loggingInterceptor, + ]); + } +} + +type ServiceDefinition = + | AttachmentService + | ChallengeService + | ChallengeTimelineTemplateService + | ChallengeTrackService + | ChallengeTypeService + | PhaseService + | TimelineTemplateService; +type ServerImplementation = + | AttachmentServer + | ChallengeServer + | ChallengeTimelineTemplateServer + | ChallengeTrackServer + | ChallengeTypeServer + | PhaseServer + | TimelineTemplateServer; + +export type Interceptor = { + onMessage: (call: ServerUnaryCall, serviceName: string, method: string) => void; + onSuccess: (response: any, call: ServerUnaryCall, callback: sendUnaryData) => void; + onError: ( + error: GrpcError, + call: ServerUnaryCall, + callback: sendUnaryData + ) => void; +}; + +export default new InterceptorWrapper(); diff --git a/src/interceptors/LoggingInterceptor.ts b/src/interceptors/LoggingInterceptor.ts new file mode 100644 index 0000000..121f037 --- /dev/null +++ b/src/interceptors/LoggingInterceptor.ts @@ -0,0 +1,25 @@ +import { sendUnaryData, ServerUnaryCall } from "@grpc/grpc-js"; +import ErrorHelper, { GrpcError } from "../util/ErrorHelper"; +import { Interceptor } from "./InterceptorWrapper"; +class LoggingInterceptor implements Interceptor { + public onMessage(call: ServerUnaryCall, serviceName: string, method: string) { + console.info( + "OnMessage:", + serviceName, + "#", + method, + JSON.stringify(call.request), + JSON.stringify(call.metadata) + ); + } + public onSuccess(response: any, call: ServerUnaryCall, callback: sendUnaryData) { + console.info("Request succeeded:", JSON.stringify(response)); + callback(null, response); + } + public onError(error: GrpcError, call: ServerUnaryCall, callback: sendUnaryData) { + console.error("Request failed:", error); + callback(ErrorHelper.wrapError(error)); + } +} + +export default new LoggingInterceptor(); diff --git a/src/models/common/common.ts b/src/models/common/common.ts index adc5229..2919c41 100644 --- a/src/models/common/common.ts +++ b/src/models/common/common.ts @@ -257,18 +257,31 @@ export const ScanCriteria = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.key = reader.string(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.operator = reader.int32() as any; - break; + continue; case 3: + if (tag != 26) { + break; + } + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -326,15 +339,24 @@ export const ScanRequest = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.criteria.push(ScanCriteria.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.nextToken = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -392,15 +414,24 @@ export const ScanResult = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.nextToken = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.items.push(Struct.unwrap(Struct.decode(reader, reader.uint32()))); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -460,15 +491,24 @@ export const CreateResult = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.kind = { $case: "integerId", integerId: longToNumber(reader.int64() as Long) }; - break; + continue; case 2: + if (tag != 18) { + break; + } + message.kind = { $case: "stringId", stringId: reader.string() }; - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -529,15 +569,24 @@ export const UpdateResult = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.updatedCount = longToNumber(reader.int64() as Long); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.message = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -588,12 +637,17 @@ export const CheckExistsResult = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.exists = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -642,15 +696,24 @@ export const LookupCriteria = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.key = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -701,15 +764,24 @@ export const GoogleProtobufTypesPlaceholder = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.timestamp = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.empty = Empty.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/domain-layer/challenge/attachment.ts b/src/models/domain-layer/challenge/attachment.ts index a90cf02..c39c7a9 100644 --- a/src/models/domain-layer/challenge/attachment.ts +++ b/src/models/domain-layer/challenge/attachment.ts @@ -72,27 +72,52 @@ export const Attachment = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.id = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.url = reader.string(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.fileSize = longToNumber(reader.int64() as Long); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.name = reader.string(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.challengeId = reader.string(); - break; + continue; case 6: + if (tag != 50) { + break; + } + message.description = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -155,12 +180,17 @@ export const AttachmentList = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.items.push(Attachment.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -222,24 +252,45 @@ export const CreateAttachmentInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.url = reader.string(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.fileSize = longToNumber(reader.int64() as Long); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.name = reader.string(); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.challengeId = reader.string(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.description = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -302,15 +353,24 @@ export const UpdateAttachmentInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.filterCriteria.push(ScanCriteria.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.updateInput = UpdateAttachmentInput_UpdateInput.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -386,24 +446,45 @@ export const UpdateAttachmentInput_UpdateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 2: + if (tag != 18) { + break; + } + message.url = reader.string(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.fileSize = longToNumber(reader.int64() as Long); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.name = reader.string(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.challengeId = reader.string(); - break; + continue; case 6: + if (tag != 50) { + break; + } + message.description = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/domain-layer/challenge/challenge.ts b/src/models/domain-layer/challenge/challenge.ts index a1389d8..8979ac7 100644 --- a/src/models/domain-layer/challenge/challenge.ts +++ b/src/models/domain-layer/challenge/challenge.ts @@ -24,8 +24,8 @@ export interface Challenge { prizeSets: Challenge_PrizeSet[]; tags: string[]; projectId?: number | undefined; - startDate?: number | undefined; - endDate?: number | undefined; + startDate?: string | undefined; + endDate?: string | undefined; status: string; attachments: string[]; groups: string[]; @@ -96,6 +96,8 @@ export interface Challenge_Phase { id: string; isOpen: boolean; constraints: Challenge_Phase_Constraint[]; + description?: string | undefined; + predecessor?: string | undefined; } export interface Challenge_Phase_Constraint { @@ -107,6 +109,7 @@ export interface Challenge_Winner { handle: string; placement: number; userId: number; + type?: string | undefined; } export interface Challenge_Task { @@ -123,12 +126,14 @@ export interface Challenge_PrizeSet { } export interface Challenge_PrizeSet_Prize { - value: number; + amountInCents?: number | undefined; + value?: number | undefined; type: string; } export interface Challenge_Overview { - totalPrizes: number; + totalPrizesInCents?: number | undefined; + totalPrizes?: number | undefined; } export interface ChallengeList { @@ -153,8 +158,8 @@ export interface CreateChallengeInput { prizeSets: Challenge_PrizeSet[]; tags: string[]; projectId?: number | undefined; - startDate?: number | undefined; - endDate?: number | undefined; + startDate?: string | undefined; + endDate?: string | undefined; status: string; attachments: string[]; groups: string[]; @@ -167,37 +172,71 @@ export interface UpdateChallengeInput { } export interface UpdateChallengeInput_UpdateInput { - id: string; - legacyId?: number | undefined; name?: string | undefined; typeId?: string | undefined; trackId?: string | undefined; + timelineTemplateId?: string | undefined; legacy?: Challenge_Legacy | undefined; billing?: Challenge_Billing | undefined; description?: string | undefined; privateDescription?: string | undefined; descriptionFormat?: string | undefined; - metadata: Challenge_Metadata[]; task?: Challenge_Task | undefined; - timelineTemplateId?: string | undefined; + winnerUpdate?: UpdateChallengeInput_UpdateInput_WinnerUpdate | undefined; + discussionUpdate?: UpdateChallengeInput_UpdateInput_DiscussionUpdate | undefined; + metadataUpdate?: UpdateChallengeInput_UpdateInput_MetadataUpdate | undefined; + phaseUpdate?: UpdateChallengeInput_UpdateInput_PhaseUpdate | undefined; + eventUpdate?: UpdateChallengeInput_UpdateInput_EventUpdate | undefined; + termUpdate?: UpdateChallengeInput_UpdateInput_TermUpdate | undefined; + prizeSetUpdate?: UpdateChallengeInput_UpdateInput_PrizeSetUpdate | undefined; + tagUpdate?: UpdateChallengeInput_UpdateInput_TagsUpdate | undefined; + attachmentUpdate?: UpdateChallengeInput_UpdateInput_AttachmentsUpdate | undefined; + groupUpdate?: UpdateChallengeInput_UpdateInput_GroupsUpdate | undefined; + projectId?: number | undefined; + startDate?: string | undefined; + endDate?: string | undefined; + status?: string | undefined; + overview?: Challenge_Overview | undefined; +} + +export interface UpdateChallengeInput_UpdateInput_WinnerUpdate { + winners: Challenge_Winner[]; +} + +export interface UpdateChallengeInput_UpdateInput_DiscussionUpdate { + discussions: Challenge_Discussion[]; +} + +export interface UpdateChallengeInput_UpdateInput_MetadataUpdate { + metadata: Challenge_Metadata[]; +} + +export interface UpdateChallengeInput_UpdateInput_PhaseUpdate { phases: Challenge_Phase[]; +} + +export interface UpdateChallengeInput_UpdateInput_EventUpdate { events: Challenge_Event[]; +} + +export interface UpdateChallengeInput_UpdateInput_TermUpdate { terms: Challenge_Term[]; +} + +export interface UpdateChallengeInput_UpdateInput_PrizeSetUpdate { prizeSets: Challenge_PrizeSet[]; +} + +export interface UpdateChallengeInput_UpdateInput_TagsUpdate { tags: string[]; - projectId?: number | undefined; - startDate?: number | undefined; - endDate?: number | undefined; - status?: string | undefined; +} + +export interface UpdateChallengeInput_UpdateInput_AttachmentsUpdate { attachments: string[]; +} + +export interface UpdateChallengeInput_UpdateInput_GroupsUpdate { groups: string[]; - winners: Challenge_Winner[]; - discussions: Challenge_Discussion[]; - createdBy?: string | undefined; - updatedBy?: string | undefined; - created?: number | undefined; - updated?: number | undefined; - overview?: Challenge_Overview | undefined; } export interface UpdateChallengeInputForACL { @@ -344,10 +383,10 @@ export const Challenge = { writer.uint32(152).int32(message.projectId); } if (message.startDate !== undefined) { - writer.uint32(160).int64(message.startDate); + writer.uint32(162).string(message.startDate); } if (message.endDate !== undefined) { - writer.uint32(168).int64(message.endDate); + writer.uint32(170).string(message.endDate); } if (message.status !== "") { writer.uint32(178).string(message.status); @@ -390,102 +429,227 @@ export const Challenge = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.id = reader.string(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.legacyId = reader.int32(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.name = reader.string(); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.typeId = reader.string(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.trackId = reader.string(); - break; + continue; case 6: + if (tag != 50) { + break; + } + message.legacy = Challenge_Legacy.decode(reader, reader.uint32()); - break; + continue; case 7: + if (tag != 58) { + break; + } + message.billing = Challenge_Billing.decode(reader, reader.uint32()); - break; + continue; case 8: + if (tag != 66) { + break; + } + message.description = reader.string(); - break; + continue; case 9: + if (tag != 74) { + break; + } + message.privateDescription = reader.string(); - break; + continue; case 10: + if (tag != 82) { + break; + } + message.descriptionFormat = reader.string(); - break; + continue; case 11: + if (tag != 90) { + break; + } + message.metadata.push(Challenge_Metadata.decode(reader, reader.uint32())); - break; + continue; case 12: + if (tag != 98) { + break; + } + message.task = Challenge_Task.decode(reader, reader.uint32()); - break; + continue; case 13: + if (tag != 106) { + break; + } + message.timelineTemplateId = reader.string(); - break; + continue; case 14: + if (tag != 114) { + break; + } + message.phases.push(Challenge_Phase.decode(reader, reader.uint32())); - break; + continue; case 15: + if (tag != 122) { + break; + } + message.events.push(Challenge_Event.decode(reader, reader.uint32())); - break; + continue; case 16: + if (tag != 130) { + break; + } + message.terms.push(Challenge_Term.decode(reader, reader.uint32())); - break; + continue; case 17: + if (tag != 138) { + break; + } + message.prizeSets.push(Challenge_PrizeSet.decode(reader, reader.uint32())); - break; + continue; case 18: + if (tag != 146) { + break; + } + message.tags.push(reader.string()); - break; + continue; case 19: + if (tag != 152) { + break; + } + message.projectId = reader.int32(); - break; + continue; case 20: - message.startDate = longToNumber(reader.int64() as Long); - break; + if (tag != 162) { + break; + } + + message.startDate = reader.string(); + continue; case 21: - message.endDate = longToNumber(reader.int64() as Long); - break; + if (tag != 170) { + break; + } + + message.endDate = reader.string(); + continue; case 22: + if (tag != 178) { + break; + } + message.status = reader.string(); - break; + continue; case 23: + if (tag != 186) { + break; + } + message.attachments.push(reader.string()); - break; + continue; case 24: + if (tag != 194) { + break; + } + message.groups.push(reader.string()); - break; + continue; case 25: + if (tag != 202) { + break; + } + message.winners.push(Challenge_Winner.decode(reader, reader.uint32())); - break; + continue; case 26: + if (tag != 210) { + break; + } + message.discussions.push(Challenge_Discussion.decode(reader, reader.uint32())); - break; + continue; case 27: + if (tag != 218) { + break; + } + message.createdBy = reader.string(); - break; + continue; case 28: + if (tag != 226) { + break; + } + message.updatedBy = reader.string(); - break; + continue; case 29: + if (tag != 232) { + break; + } + message.created = longToNumber(reader.int64() as Long); - break; + continue; case 30: + if (tag != 240) { + break; + } + message.updated = longToNumber(reader.int64() as Long); - break; + continue; case 31: + if (tag != 250) { + break; + } + message.overview = Challenge_Overview.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -513,8 +677,8 @@ export const Challenge = { : [], tags: Array.isArray(object?.tags) ? object.tags.map((e: any) => String(e)) : [], projectId: isSet(object.projectId) ? Number(object.projectId) : undefined, - startDate: isSet(object.startDate) ? Number(object.startDate) : undefined, - endDate: isSet(object.endDate) ? Number(object.endDate) : undefined, + startDate: isSet(object.startDate) ? String(object.startDate) : undefined, + endDate: isSet(object.endDate) ? String(object.endDate) : undefined, status: isSet(object.status) ? String(object.status) : "", attachments: Array.isArray(object?.attachments) ? object.attachments.map((e: any) => String(e)) : [], groups: Array.isArray(object?.groups) ? object.groups.map((e: any) => String(e)) : [], @@ -576,8 +740,8 @@ export const Challenge = { obj.tags = []; } message.projectId !== undefined && (obj.projectId = Math.round(message.projectId)); - message.startDate !== undefined && (obj.startDate = Math.round(message.startDate)); - message.endDate !== undefined && (obj.endDate = Math.round(message.endDate)); + message.startDate !== undefined && (obj.startDate = message.startDate); + message.endDate !== undefined && (obj.endDate = message.endDate); message.status !== undefined && (obj.status = message.status); if (message.attachments) { obj.attachments = message.attachments.map((e) => e); @@ -719,42 +883,87 @@ export const Challenge_Legacy = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.track = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.subTrack = reader.string(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.forumId = reader.int32(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.directProjectId = reader.int32(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.reviewType = reader.string(); - break; + continue; case 6: + if (tag != 50) { + break; + } + message.confidentialityType = reader.string(); - break; + continue; case 7: + if (tag != 56) { + break; + } + message.reviewScorecardId = reader.int32(); - break; + continue; case 8: + if (tag != 64) { + break; + } + message.screeningScorecardId = reader.int32(); - break; + continue; case 9: + if (tag != 72) { + break; + } + message.pureV5Task = reader.bool(); - break; + continue; case 10: + if (tag != 80) { + break; + } + message.selfService = reader.bool(); - break; + continue; case 11: + if (tag != 90) { + break; + } + message.selfServiceCopilot = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -835,15 +1044,24 @@ export const Challenge_Billing = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.billingAccountId = reader.int32(); - break; + continue; case 2: + if (tag != 21) { + break; + } + message.markup = reader.float(); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -900,18 +1118,31 @@ export const Challenge_Event = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.id = reader.int32(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.key = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -968,15 +1199,24 @@ export const Challenge_Term = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.id = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.roleId = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1027,15 +1267,24 @@ export const Challenge_Metadata = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.name = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.value = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1098,24 +1347,45 @@ export const Challenge_Discussion = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.id = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.type = reader.string(); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.provider = reader.string(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.url = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1167,13 +1437,15 @@ function createBaseChallenge_Phase(): Challenge_Phase { id: "", isOpen: false, constraints: [], + description: undefined, + predecessor: undefined, }; } export const Challenge_Phase = { encode(message: Challenge_Phase, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { if (message.duration !== 0) { - writer.uint32(8).int32(message.duration); + writer.uint32(8).int64(message.duration); } if (message.scheduledStartDate !== undefined) { Timestamp.encode(toTimestamp(message.scheduledStartDate), writer.uint32(18).fork()).ldelim(); @@ -1202,6 +1474,12 @@ export const Challenge_Phase = { for (const v of message.constraints) { Challenge_Phase_Constraint.encode(v!, writer.uint32(82).fork()).ldelim(); } + if (message.description !== undefined) { + writer.uint32(90).string(message.description); + } + if (message.predecessor !== undefined) { + writer.uint32(98).string(message.predecessor); + } return writer; }, @@ -1213,39 +1491,94 @@ export const Challenge_Phase = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.duration = reader.int32(); - break; + if (tag != 8) { + break; + } + + message.duration = longToNumber(reader.int64() as Long); + continue; case 2: + if (tag != 18) { + break; + } + message.scheduledStartDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.scheduledEndDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.actualStartDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.actualEndDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 6: + if (tag != 50) { + break; + } + message.name = reader.string(); - break; + continue; case 7: + if (tag != 58) { + break; + } + message.phaseId = reader.string(); - break; + continue; case 8: + if (tag != 66) { + break; + } + message.id = reader.string(); - break; + continue; case 9: + if (tag != 72) { + break; + } + message.isOpen = reader.bool(); - break; + continue; case 10: + if (tag != 82) { + break; + } + message.constraints.push(Challenge_Phase_Constraint.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + case 11: + if (tag != 90) { + break; + } + + message.description = reader.string(); + continue; + case 12: + if (tag != 98) { + break; + } + + message.predecessor = reader.string(); + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1264,6 +1597,8 @@ export const Challenge_Phase = { constraints: Array.isArray(object?.constraints) ? object.constraints.map((e: any) => Challenge_Phase_Constraint.fromJSON(e)) : [], + description: isSet(object.description) ? String(object.description) : undefined, + predecessor: isSet(object.predecessor) ? String(object.predecessor) : undefined, }; }, @@ -1283,6 +1618,8 @@ export const Challenge_Phase = { } else { obj.constraints = []; } + message.description !== undefined && (obj.description = message.description); + message.predecessor !== undefined && (obj.predecessor = message.predecessor); return obj; }, @@ -1302,6 +1639,8 @@ export const Challenge_Phase = { message.id = object.id ?? ""; message.isOpen = object.isOpen ?? false; message.constraints = object.constraints?.map((e) => Challenge_Phase_Constraint.fromPartial(e)) || []; + message.description = object.description ?? undefined; + message.predecessor = object.predecessor ?? undefined; return message; }, }; @@ -1329,15 +1668,24 @@ export const Challenge_Phase_Constraint = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.name = reader.string(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.value = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1369,7 +1717,7 @@ export const Challenge_Phase_Constraint = { }; function createBaseChallenge_Winner(): Challenge_Winner { - return { handle: "", placement: 0, userId: 0 }; + return { handle: "", placement: 0, userId: 0, type: undefined }; } export const Challenge_Winner = { @@ -1383,6 +1731,9 @@ export const Challenge_Winner = { if (message.userId !== 0) { writer.uint32(24).int32(message.userId); } + if (message.type !== undefined) { + writer.uint32(34).string(message.type); + } return writer; }, @@ -1394,18 +1745,38 @@ export const Challenge_Winner = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.handle = reader.string(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.placement = reader.int32(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.userId = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + case 4: + if (tag != 34) { + break; + } + + message.type = reader.string(); + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1415,6 +1786,7 @@ export const Challenge_Winner = { handle: isSet(object.handle) ? String(object.handle) : "", placement: isSet(object.placement) ? Number(object.placement) : 0, userId: isSet(object.userId) ? Number(object.userId) : 0, + type: isSet(object.type) ? String(object.type) : undefined, }; }, @@ -1423,6 +1795,7 @@ export const Challenge_Winner = { message.handle !== undefined && (obj.handle = message.handle); message.placement !== undefined && (obj.placement = Math.round(message.placement)); message.userId !== undefined && (obj.userId = Math.round(message.userId)); + message.type !== undefined && (obj.type = message.type); return obj; }, @@ -1435,6 +1808,7 @@ export const Challenge_Winner = { message.handle = object.handle ?? ""; message.placement = object.placement ?? 0; message.userId = object.userId ?? 0; + message.type = object.type ?? undefined; return message; }, }; @@ -1465,18 +1839,31 @@ export const Challenge_Task = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.isTask = reader.bool(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.isAssigned = reader.bool(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.memberId = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1536,18 +1923,31 @@ export const Challenge_PrizeSet = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.type = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.description = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.prizes.push(Challenge_PrizeSet_Prize.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -1586,16 +1986,19 @@ export const Challenge_PrizeSet = { }; function createBaseChallenge_PrizeSet_Prize(): Challenge_PrizeSet_Prize { - return { value: 0, type: "" }; + return { amountInCents: undefined, value: undefined, type: "" }; } export const Challenge_PrizeSet_Prize = { encode(message: Challenge_PrizeSet_Prize, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { - if (message.value !== 0) { - writer.uint32(13).float(message.value); + if (message.amountInCents !== undefined) { + writer.uint32(8).int64(message.amountInCents); + } + if (message.value !== undefined) { + writer.uint32(21).float(message.value); } if (message.type !== "") { - writer.uint32(18).string(message.type); + writer.uint32(26).string(message.type); } return writer; }, @@ -1608,28 +2011,46 @@ export const Challenge_PrizeSet_Prize = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.value = reader.float(); - break; + if (tag != 8) { + break; + } + + message.amountInCents = longToNumber(reader.int64() as Long); + continue; case 2: + if (tag != 21) { + break; + } + + message.value = reader.float(); + continue; + case 3: + if (tag != 26) { + break; + } + message.type = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, fromJSON(object: any): Challenge_PrizeSet_Prize { return { - value: isSet(object.value) ? Number(object.value) : 0, + amountInCents: isSet(object.amountInCents) ? Number(object.amountInCents) : undefined, + value: isSet(object.value) ? Number(object.value) : undefined, type: isSet(object.type) ? String(object.type) : "", }; }, toJSON(message: Challenge_PrizeSet_Prize): unknown { const obj: any = {}; + message.amountInCents !== undefined && (obj.amountInCents = Math.round(message.amountInCents)); message.value !== undefined && (obj.value = message.value); message.type !== undefined && (obj.type = message.type); return obj; @@ -1641,20 +2062,24 @@ export const Challenge_PrizeSet_Prize = { fromPartial, I>>(object: I): Challenge_PrizeSet_Prize { const message = createBaseChallenge_PrizeSet_Prize(); - message.value = object.value ?? 0; + message.amountInCents = object.amountInCents ?? undefined; + message.value = object.value ?? undefined; message.type = object.type ?? ""; return message; }, }; function createBaseChallenge_Overview(): Challenge_Overview { - return { totalPrizes: 0 }; + return { totalPrizesInCents: undefined, totalPrizes: undefined }; } export const Challenge_Overview = { encode(message: Challenge_Overview, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { - if (message.totalPrizes !== 0) { - writer.uint32(8).int32(message.totalPrizes); + if (message.totalPrizesInCents !== undefined) { + writer.uint32(8).int64(message.totalPrizesInCents); + } + if (message.totalPrizes !== undefined) { + writer.uint32(21).float(message.totalPrizes); } return writer; }, @@ -1667,23 +2092,39 @@ export const Challenge_Overview = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.totalPrizes = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; + if (tag != 8) { + break; + } + + message.totalPrizesInCents = longToNumber(reader.int64() as Long); + continue; + case 2: + if (tag != 21) { + break; + } + + message.totalPrizes = reader.float(); + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, fromJSON(object: any): Challenge_Overview { - return { totalPrizes: isSet(object.totalPrizes) ? Number(object.totalPrizes) : 0 }; + return { + totalPrizesInCents: isSet(object.totalPrizesInCents) ? Number(object.totalPrizesInCents) : undefined, + totalPrizes: isSet(object.totalPrizes) ? Number(object.totalPrizes) : undefined, + }; }, toJSON(message: Challenge_Overview): unknown { const obj: any = {}; - message.totalPrizes !== undefined && (obj.totalPrizes = Math.round(message.totalPrizes)); + message.totalPrizesInCents !== undefined && (obj.totalPrizesInCents = Math.round(message.totalPrizesInCents)); + message.totalPrizes !== undefined && (obj.totalPrizes = message.totalPrizes); return obj; }, @@ -1693,7 +2134,8 @@ export const Challenge_Overview = { fromPartial, I>>(object: I): Challenge_Overview { const message = createBaseChallenge_Overview(); - message.totalPrizes = object.totalPrizes ?? 0; + message.totalPrizesInCents = object.totalPrizesInCents ?? undefined; + message.totalPrizes = object.totalPrizes ?? undefined; return message; }, }; @@ -1718,12 +2160,17 @@ export const ChallengeList = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.items.push(Challenge.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1835,10 +2282,10 @@ export const CreateChallengeInput = { writer.uint32(136).int32(message.projectId); } if (message.startDate !== undefined) { - writer.uint32(144).int64(message.startDate); + writer.uint32(146).string(message.startDate); } if (message.endDate !== undefined) { - writer.uint32(152).int64(message.endDate); + writer.uint32(154).string(message.endDate); } if (message.status !== "") { writer.uint32(162).string(message.status); @@ -1863,78 +2310,171 @@ export const CreateChallengeInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.name = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.typeId = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.trackId = reader.string(); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.timelineTemplateId = reader.string(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.legacy = Challenge_Legacy.decode(reader, reader.uint32()); - break; + continue; case 6: + if (tag != 50) { + break; + } + message.billing = Challenge_Billing.decode(reader, reader.uint32()); - break; + continue; case 7: + if (tag != 58) { + break; + } + message.description = reader.string(); - break; + continue; case 8: + if (tag != 66) { + break; + } + message.privateDescription = reader.string(); - break; + continue; case 9: + if (tag != 74) { + break; + } + message.descriptionFormat = reader.string(); - break; + continue; case 10: + if (tag != 82) { + break; + } + message.metadata.push(Challenge_Metadata.decode(reader, reader.uint32())); - break; + continue; case 11: + if (tag != 90) { + break; + } + message.task = Challenge_Task.decode(reader, reader.uint32()); - break; + continue; case 12: + if (tag != 98) { + break; + } + message.phases.push(Challenge_Phase.decode(reader, reader.uint32())); - break; + continue; case 13: + if (tag != 106) { + break; + } + message.events.push(Challenge_Event.decode(reader, reader.uint32())); - break; + continue; case 14: + if (tag != 114) { + break; + } + message.terms.push(Challenge_Term.decode(reader, reader.uint32())); - break; + continue; case 15: + if (tag != 122) { + break; + } + message.prizeSets.push(Challenge_PrizeSet.decode(reader, reader.uint32())); - break; + continue; case 16: + if (tag != 130) { + break; + } + message.tags.push(reader.string()); - break; + continue; case 17: + if (tag != 136) { + break; + } + message.projectId = reader.int32(); - break; + continue; case 18: - message.startDate = longToNumber(reader.int64() as Long); - break; + if (tag != 146) { + break; + } + + message.startDate = reader.string(); + continue; case 19: - message.endDate = longToNumber(reader.int64() as Long); - break; + if (tag != 154) { + break; + } + + message.endDate = reader.string(); + continue; case 20: + if (tag != 162) { + break; + } + message.status = reader.string(); - break; + continue; case 21: + if (tag != 170) { + break; + } + message.attachments.push(reader.string()); - break; + continue; case 22: + if (tag != 178) { + break; + } + message.groups.push(reader.string()); - break; + continue; case 23: + if (tag != 186) { + break; + } + message.discussions.push(Challenge_Discussion.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -1960,8 +2500,8 @@ export const CreateChallengeInput = { : [], tags: Array.isArray(object?.tags) ? object.tags.map((e: any) => String(e)) : [], projectId: isSet(object.projectId) ? Number(object.projectId) : undefined, - startDate: isSet(object.startDate) ? Number(object.startDate) : undefined, - endDate: isSet(object.endDate) ? Number(object.endDate) : undefined, + startDate: isSet(object.startDate) ? String(object.startDate) : undefined, + endDate: isSet(object.endDate) ? String(object.endDate) : undefined, status: isSet(object.status) ? String(object.status) : "", attachments: Array.isArray(object?.attachments) ? object.attachments.map((e: any) => String(e)) : [], groups: Array.isArray(object?.groups) ? object.groups.map((e: any) => String(e)) : [], @@ -2015,8 +2555,8 @@ export const CreateChallengeInput = { obj.tags = []; } message.projectId !== undefined && (obj.projectId = Math.round(message.projectId)); - message.startDate !== undefined && (obj.startDate = Math.round(message.startDate)); - message.endDate !== undefined && (obj.endDate = Math.round(message.endDate)); + message.startDate !== undefined && (obj.startDate = message.startDate); + message.endDate !== undefined && (obj.endDate = message.endDate); message.status !== undefined && (obj.status = message.status); if (message.attachments) { obj.attachments = message.attachments.map((e) => e); @@ -2098,15 +2638,24 @@ export const UpdateChallengeInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.filterCriteria.push(ScanCriteria.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.updateInput = UpdateChallengeInput_UpdateInput.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -2152,134 +2701,114 @@ export const UpdateChallengeInput = { function createBaseUpdateChallengeInput_UpdateInput(): UpdateChallengeInput_UpdateInput { return { - id: "", - legacyId: undefined, name: undefined, typeId: undefined, trackId: undefined, + timelineTemplateId: undefined, legacy: undefined, billing: undefined, description: undefined, privateDescription: undefined, descriptionFormat: undefined, - metadata: [], task: undefined, - timelineTemplateId: undefined, - phases: [], - events: [], - terms: [], - prizeSets: [], - tags: [], + winnerUpdate: undefined, + discussionUpdate: undefined, + metadataUpdate: undefined, + phaseUpdate: undefined, + eventUpdate: undefined, + termUpdate: undefined, + prizeSetUpdate: undefined, + tagUpdate: undefined, + attachmentUpdate: undefined, + groupUpdate: undefined, projectId: undefined, startDate: undefined, endDate: undefined, status: undefined, - attachments: [], - groups: [], - winners: [], - discussions: [], - createdBy: undefined, - updatedBy: undefined, - created: undefined, - updated: undefined, overview: undefined, }; } export const UpdateChallengeInput_UpdateInput = { encode(message: UpdateChallengeInput_UpdateInput, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { - if (message.id !== "") { - writer.uint32(10).string(message.id); - } - if (message.legacyId !== undefined) { - writer.uint32(16).int32(message.legacyId); - } if (message.name !== undefined) { - writer.uint32(26).string(message.name); + writer.uint32(10).string(message.name); } if (message.typeId !== undefined) { - writer.uint32(34).string(message.typeId); + writer.uint32(18).string(message.typeId); } if (message.trackId !== undefined) { - writer.uint32(42).string(message.trackId); + writer.uint32(26).string(message.trackId); + } + if (message.timelineTemplateId !== undefined) { + writer.uint32(34).string(message.timelineTemplateId); } if (message.legacy !== undefined) { - Challenge_Legacy.encode(message.legacy, writer.uint32(50).fork()).ldelim(); + Challenge_Legacy.encode(message.legacy, writer.uint32(42).fork()).ldelim(); } if (message.billing !== undefined) { - Challenge_Billing.encode(message.billing, writer.uint32(58).fork()).ldelim(); + Challenge_Billing.encode(message.billing, writer.uint32(50).fork()).ldelim(); } if (message.description !== undefined) { - writer.uint32(66).string(message.description); + writer.uint32(58).string(message.description); } if (message.privateDescription !== undefined) { - writer.uint32(74).string(message.privateDescription); + writer.uint32(66).string(message.privateDescription); } if (message.descriptionFormat !== undefined) { - writer.uint32(82).string(message.descriptionFormat); - } - for (const v of message.metadata) { - Challenge_Metadata.encode(v!, writer.uint32(90).fork()).ldelim(); + writer.uint32(74).string(message.descriptionFormat); } if (message.task !== undefined) { - Challenge_Task.encode(message.task, writer.uint32(98).fork()).ldelim(); + Challenge_Task.encode(message.task, writer.uint32(82).fork()).ldelim(); } - if (message.timelineTemplateId !== undefined) { - writer.uint32(106).string(message.timelineTemplateId); + if (message.winnerUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_WinnerUpdate.encode(message.winnerUpdate, writer.uint32(90).fork()).ldelim(); } - for (const v of message.phases) { - Challenge_Phase.encode(v!, writer.uint32(114).fork()).ldelim(); - } - for (const v of message.events) { - Challenge_Event.encode(v!, writer.uint32(122).fork()).ldelim(); - } - for (const v of message.terms) { - Challenge_Term.encode(v!, writer.uint32(130).fork()).ldelim(); - } - for (const v of message.prizeSets) { - Challenge_PrizeSet.encode(v!, writer.uint32(138).fork()).ldelim(); - } - for (const v of message.tags) { - writer.uint32(146).string(v!); + if (message.discussionUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_DiscussionUpdate.encode(message.discussionUpdate, writer.uint32(98).fork()) + .ldelim(); } - if (message.projectId !== undefined) { - writer.uint32(152).int32(message.projectId); + if (message.metadataUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_MetadataUpdate.encode(message.metadataUpdate, writer.uint32(106).fork()) + .ldelim(); } - if (message.startDate !== undefined) { - writer.uint32(160).int64(message.startDate); + if (message.phaseUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_PhaseUpdate.encode(message.phaseUpdate, writer.uint32(114).fork()).ldelim(); } - if (message.endDate !== undefined) { - writer.uint32(168).int64(message.endDate); + if (message.eventUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_EventUpdate.encode(message.eventUpdate, writer.uint32(122).fork()).ldelim(); } - if (message.status !== undefined) { - writer.uint32(178).string(message.status); + if (message.termUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_TermUpdate.encode(message.termUpdate, writer.uint32(130).fork()).ldelim(); } - for (const v of message.attachments) { - writer.uint32(186).string(v!); + if (message.prizeSetUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_PrizeSetUpdate.encode(message.prizeSetUpdate, writer.uint32(138).fork()) + .ldelim(); } - for (const v of message.groups) { - writer.uint32(194).string(v!); + if (message.tagUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_TagsUpdate.encode(message.tagUpdate, writer.uint32(146).fork()).ldelim(); } - for (const v of message.winners) { - Challenge_Winner.encode(v!, writer.uint32(202).fork()).ldelim(); + if (message.attachmentUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_AttachmentsUpdate.encode(message.attachmentUpdate, writer.uint32(154).fork()) + .ldelim(); } - for (const v of message.discussions) { - Challenge_Discussion.encode(v!, writer.uint32(210).fork()).ldelim(); + if (message.groupUpdate !== undefined) { + UpdateChallengeInput_UpdateInput_GroupsUpdate.encode(message.groupUpdate, writer.uint32(162).fork()).ldelim(); } - if (message.createdBy !== undefined) { - writer.uint32(218).string(message.createdBy); + if (message.projectId !== undefined) { + writer.uint32(168).int32(message.projectId); } - if (message.updatedBy !== undefined) { - writer.uint32(226).string(message.updatedBy); + if (message.startDate !== undefined) { + writer.uint32(178).string(message.startDate); } - if (message.created !== undefined) { - writer.uint32(232).int64(message.created); + if (message.endDate !== undefined) { + writer.uint32(186).string(message.endDate); } - if (message.updated !== undefined) { - writer.uint32(240).int64(message.updated); + if (message.status !== undefined) { + writer.uint32(194).string(message.status); } if (message.overview !== undefined) { - Challenge_Overview.encode(message.overview, writer.uint32(250).fork()).ldelim(); + Challenge_Overview.encode(message.overview, writer.uint32(202).fork()).ldelim(); } return writer; }, @@ -2292,273 +2821,1018 @@ export const UpdateChallengeInput_UpdateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.id = reader.string(); - break; + if (tag != 10) { + break; + } + + message.name = reader.string(); + continue; case 2: - message.legacyId = reader.int32(); - break; + if (tag != 18) { + break; + } + + message.typeId = reader.string(); + continue; case 3: - message.name = reader.string(); - break; + if (tag != 26) { + break; + } + + message.trackId = reader.string(); + continue; case 4: - message.typeId = reader.string(); - break; + if (tag != 34) { + break; + } + + message.timelineTemplateId = reader.string(); + continue; case 5: - message.trackId = reader.string(); - break; - case 6: + if (tag != 42) { + break; + } + message.legacy = Challenge_Legacy.decode(reader, reader.uint32()); - break; - case 7: + continue; + case 6: + if (tag != 50) { + break; + } + message.billing = Challenge_Billing.decode(reader, reader.uint32()); - break; - case 8: + continue; + case 7: + if (tag != 58) { + break; + } + message.description = reader.string(); - break; - case 9: + continue; + case 8: + if (tag != 66) { + break; + } + message.privateDescription = reader.string(); - break; - case 10: + continue; + case 9: + if (tag != 74) { + break; + } + message.descriptionFormat = reader.string(); - break; + continue; + case 10: + if (tag != 82) { + break; + } + + message.task = Challenge_Task.decode(reader, reader.uint32()); + continue; case 11: - message.metadata.push(Challenge_Metadata.decode(reader, reader.uint32())); - break; + if (tag != 90) { + break; + } + + message.winnerUpdate = UpdateChallengeInput_UpdateInput_WinnerUpdate.decode(reader, reader.uint32()); + continue; case 12: - message.task = Challenge_Task.decode(reader, reader.uint32()); - break; + if (tag != 98) { + break; + } + + message.discussionUpdate = UpdateChallengeInput_UpdateInput_DiscussionUpdate.decode(reader, reader.uint32()); + continue; case 13: - message.timelineTemplateId = reader.string(); - break; + if (tag != 106) { + break; + } + + message.metadataUpdate = UpdateChallengeInput_UpdateInput_MetadataUpdate.decode(reader, reader.uint32()); + continue; case 14: - message.phases.push(Challenge_Phase.decode(reader, reader.uint32())); - break; + if (tag != 114) { + break; + } + + message.phaseUpdate = UpdateChallengeInput_UpdateInput_PhaseUpdate.decode(reader, reader.uint32()); + continue; case 15: - message.events.push(Challenge_Event.decode(reader, reader.uint32())); - break; + if (tag != 122) { + break; + } + + message.eventUpdate = UpdateChallengeInput_UpdateInput_EventUpdate.decode(reader, reader.uint32()); + continue; case 16: - message.terms.push(Challenge_Term.decode(reader, reader.uint32())); - break; + if (tag != 130) { + break; + } + + message.termUpdate = UpdateChallengeInput_UpdateInput_TermUpdate.decode(reader, reader.uint32()); + continue; case 17: - message.prizeSets.push(Challenge_PrizeSet.decode(reader, reader.uint32())); - break; + if (tag != 138) { + break; + } + + message.prizeSetUpdate = UpdateChallengeInput_UpdateInput_PrizeSetUpdate.decode(reader, reader.uint32()); + continue; case 18: - message.tags.push(reader.string()); - break; + if (tag != 146) { + break; + } + + message.tagUpdate = UpdateChallengeInput_UpdateInput_TagsUpdate.decode(reader, reader.uint32()); + continue; case 19: - message.projectId = reader.int32(); - break; + if (tag != 154) { + break; + } + + message.attachmentUpdate = UpdateChallengeInput_UpdateInput_AttachmentsUpdate.decode(reader, reader.uint32()); + continue; case 20: - message.startDate = longToNumber(reader.int64() as Long); - break; + if (tag != 162) { + break; + } + + message.groupUpdate = UpdateChallengeInput_UpdateInput_GroupsUpdate.decode(reader, reader.uint32()); + continue; case 21: - message.endDate = longToNumber(reader.int64() as Long); - break; + if (tag != 168) { + break; + } + + message.projectId = reader.int32(); + continue; case 22: - message.status = reader.string(); - break; + if (tag != 178) { + break; + } + + message.startDate = reader.string(); + continue; case 23: - message.attachments.push(reader.string()); - break; + if (tag != 186) { + break; + } + + message.endDate = reader.string(); + continue; case 24: - message.groups.push(reader.string()); - break; + if (tag != 194) { + break; + } + + message.status = reader.string(); + continue; case 25: - message.winners.push(Challenge_Winner.decode(reader, reader.uint32())); - break; - case 26: - message.discussions.push(Challenge_Discussion.decode(reader, reader.uint32())); - break; - case 27: - message.createdBy = reader.string(); - break; - case 28: - message.updatedBy = reader.string(); - break; - case 29: - message.created = longToNumber(reader.int64() as Long); - break; - case 30: - message.updated = longToNumber(reader.int64() as Long); - break; - case 31: + if (tag != 202) { + break; + } + message.overview = Challenge_Overview.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, fromJSON(object: any): UpdateChallengeInput_UpdateInput { return { - id: isSet(object.id) ? String(object.id) : "", - legacyId: isSet(object.legacyId) ? Number(object.legacyId) : undefined, name: isSet(object.name) ? String(object.name) : undefined, typeId: isSet(object.typeId) ? String(object.typeId) : undefined, trackId: isSet(object.trackId) ? String(object.trackId) : undefined, + timelineTemplateId: isSet(object.timelineTemplateId) ? String(object.timelineTemplateId) : undefined, legacy: isSet(object.legacy) ? Challenge_Legacy.fromJSON(object.legacy) : undefined, billing: isSet(object.billing) ? Challenge_Billing.fromJSON(object.billing) : undefined, description: isSet(object.description) ? String(object.description) : undefined, privateDescription: isSet(object.privateDescription) ? String(object.privateDescription) : undefined, descriptionFormat: isSet(object.descriptionFormat) ? String(object.descriptionFormat) : undefined, - metadata: Array.isArray(object?.metadata) ? object.metadata.map((e: any) => Challenge_Metadata.fromJSON(e)) : [], task: isSet(object.task) ? Challenge_Task.fromJSON(object.task) : undefined, - timelineTemplateId: isSet(object.timelineTemplateId) ? String(object.timelineTemplateId) : undefined, - phases: Array.isArray(object?.phases) ? object.phases.map((e: any) => Challenge_Phase.fromJSON(e)) : [], - events: Array.isArray(object?.events) ? object.events.map((e: any) => Challenge_Event.fromJSON(e)) : [], - terms: Array.isArray(object?.terms) ? object.terms.map((e: any) => Challenge_Term.fromJSON(e)) : [], + winnerUpdate: isSet(object.winnerUpdate) + ? UpdateChallengeInput_UpdateInput_WinnerUpdate.fromJSON(object.winnerUpdate) + : undefined, + discussionUpdate: isSet(object.discussionUpdate) + ? UpdateChallengeInput_UpdateInput_DiscussionUpdate.fromJSON(object.discussionUpdate) + : undefined, + metadataUpdate: isSet(object.metadataUpdate) + ? UpdateChallengeInput_UpdateInput_MetadataUpdate.fromJSON(object.metadataUpdate) + : undefined, + phaseUpdate: isSet(object.phaseUpdate) + ? UpdateChallengeInput_UpdateInput_PhaseUpdate.fromJSON(object.phaseUpdate) + : undefined, + eventUpdate: isSet(object.eventUpdate) + ? UpdateChallengeInput_UpdateInput_EventUpdate.fromJSON(object.eventUpdate) + : undefined, + termUpdate: isSet(object.termUpdate) + ? UpdateChallengeInput_UpdateInput_TermUpdate.fromJSON(object.termUpdate) + : undefined, + prizeSetUpdate: isSet(object.prizeSetUpdate) + ? UpdateChallengeInput_UpdateInput_PrizeSetUpdate.fromJSON(object.prizeSetUpdate) + : undefined, + tagUpdate: isSet(object.tagUpdate) + ? UpdateChallengeInput_UpdateInput_TagsUpdate.fromJSON(object.tagUpdate) + : undefined, + attachmentUpdate: isSet(object.attachmentUpdate) + ? UpdateChallengeInput_UpdateInput_AttachmentsUpdate.fromJSON(object.attachmentUpdate) + : undefined, + groupUpdate: isSet(object.groupUpdate) + ? UpdateChallengeInput_UpdateInput_GroupsUpdate.fromJSON(object.groupUpdate) + : undefined, + projectId: isSet(object.projectId) ? Number(object.projectId) : undefined, + startDate: isSet(object.startDate) ? String(object.startDate) : undefined, + endDate: isSet(object.endDate) ? String(object.endDate) : undefined, + status: isSet(object.status) ? String(object.status) : undefined, + overview: isSet(object.overview) ? Challenge_Overview.fromJSON(object.overview) : undefined, + }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput): unknown { + const obj: any = {}; + message.name !== undefined && (obj.name = message.name); + message.typeId !== undefined && (obj.typeId = message.typeId); + message.trackId !== undefined && (obj.trackId = message.trackId); + message.timelineTemplateId !== undefined && (obj.timelineTemplateId = message.timelineTemplateId); + message.legacy !== undefined && (obj.legacy = message.legacy ? Challenge_Legacy.toJSON(message.legacy) : undefined); + message.billing !== undefined && + (obj.billing = message.billing ? Challenge_Billing.toJSON(message.billing) : undefined); + message.description !== undefined && (obj.description = message.description); + message.privateDescription !== undefined && (obj.privateDescription = message.privateDescription); + message.descriptionFormat !== undefined && (obj.descriptionFormat = message.descriptionFormat); + message.task !== undefined && (obj.task = message.task ? Challenge_Task.toJSON(message.task) : undefined); + message.winnerUpdate !== undefined && (obj.winnerUpdate = message.winnerUpdate + ? UpdateChallengeInput_UpdateInput_WinnerUpdate.toJSON(message.winnerUpdate) + : undefined); + message.discussionUpdate !== undefined && (obj.discussionUpdate = message.discussionUpdate + ? UpdateChallengeInput_UpdateInput_DiscussionUpdate.toJSON(message.discussionUpdate) + : undefined); + message.metadataUpdate !== undefined && (obj.metadataUpdate = message.metadataUpdate + ? UpdateChallengeInput_UpdateInput_MetadataUpdate.toJSON(message.metadataUpdate) + : undefined); + message.phaseUpdate !== undefined && (obj.phaseUpdate = message.phaseUpdate + ? UpdateChallengeInput_UpdateInput_PhaseUpdate.toJSON(message.phaseUpdate) + : undefined); + message.eventUpdate !== undefined && (obj.eventUpdate = message.eventUpdate + ? UpdateChallengeInput_UpdateInput_EventUpdate.toJSON(message.eventUpdate) + : undefined); + message.termUpdate !== undefined && (obj.termUpdate = message.termUpdate + ? UpdateChallengeInput_UpdateInput_TermUpdate.toJSON(message.termUpdate) + : undefined); + message.prizeSetUpdate !== undefined && (obj.prizeSetUpdate = message.prizeSetUpdate + ? UpdateChallengeInput_UpdateInput_PrizeSetUpdate.toJSON(message.prizeSetUpdate) + : undefined); + message.tagUpdate !== undefined && (obj.tagUpdate = message.tagUpdate + ? UpdateChallengeInput_UpdateInput_TagsUpdate.toJSON(message.tagUpdate) + : undefined); + message.attachmentUpdate !== undefined && (obj.attachmentUpdate = message.attachmentUpdate + ? UpdateChallengeInput_UpdateInput_AttachmentsUpdate.toJSON(message.attachmentUpdate) + : undefined); + message.groupUpdate !== undefined && (obj.groupUpdate = message.groupUpdate + ? UpdateChallengeInput_UpdateInput_GroupsUpdate.toJSON(message.groupUpdate) + : undefined); + message.projectId !== undefined && (obj.projectId = Math.round(message.projectId)); + message.startDate !== undefined && (obj.startDate = message.startDate); + message.endDate !== undefined && (obj.endDate = message.endDate); + message.status !== undefined && (obj.status = message.status); + message.overview !== undefined && + (obj.overview = message.overview ? Challenge_Overview.toJSON(message.overview) : undefined); + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput { + return UpdateChallengeInput_UpdateInput.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput { + const message = createBaseUpdateChallengeInput_UpdateInput(); + message.name = object.name ?? undefined; + message.typeId = object.typeId ?? undefined; + message.trackId = object.trackId ?? undefined; + message.timelineTemplateId = object.timelineTemplateId ?? undefined; + message.legacy = (object.legacy !== undefined && object.legacy !== null) + ? Challenge_Legacy.fromPartial(object.legacy) + : undefined; + message.billing = (object.billing !== undefined && object.billing !== null) + ? Challenge_Billing.fromPartial(object.billing) + : undefined; + message.description = object.description ?? undefined; + message.privateDescription = object.privateDescription ?? undefined; + message.descriptionFormat = object.descriptionFormat ?? undefined; + message.task = (object.task !== undefined && object.task !== null) + ? Challenge_Task.fromPartial(object.task) + : undefined; + message.winnerUpdate = (object.winnerUpdate !== undefined && object.winnerUpdate !== null) + ? UpdateChallengeInput_UpdateInput_WinnerUpdate.fromPartial(object.winnerUpdate) + : undefined; + message.discussionUpdate = (object.discussionUpdate !== undefined && object.discussionUpdate !== null) + ? UpdateChallengeInput_UpdateInput_DiscussionUpdate.fromPartial(object.discussionUpdate) + : undefined; + message.metadataUpdate = (object.metadataUpdate !== undefined && object.metadataUpdate !== null) + ? UpdateChallengeInput_UpdateInput_MetadataUpdate.fromPartial(object.metadataUpdate) + : undefined; + message.phaseUpdate = (object.phaseUpdate !== undefined && object.phaseUpdate !== null) + ? UpdateChallengeInput_UpdateInput_PhaseUpdate.fromPartial(object.phaseUpdate) + : undefined; + message.eventUpdate = (object.eventUpdate !== undefined && object.eventUpdate !== null) + ? UpdateChallengeInput_UpdateInput_EventUpdate.fromPartial(object.eventUpdate) + : undefined; + message.termUpdate = (object.termUpdate !== undefined && object.termUpdate !== null) + ? UpdateChallengeInput_UpdateInput_TermUpdate.fromPartial(object.termUpdate) + : undefined; + message.prizeSetUpdate = (object.prizeSetUpdate !== undefined && object.prizeSetUpdate !== null) + ? UpdateChallengeInput_UpdateInput_PrizeSetUpdate.fromPartial(object.prizeSetUpdate) + : undefined; + message.tagUpdate = (object.tagUpdate !== undefined && object.tagUpdate !== null) + ? UpdateChallengeInput_UpdateInput_TagsUpdate.fromPartial(object.tagUpdate) + : undefined; + message.attachmentUpdate = (object.attachmentUpdate !== undefined && object.attachmentUpdate !== null) + ? UpdateChallengeInput_UpdateInput_AttachmentsUpdate.fromPartial(object.attachmentUpdate) + : undefined; + message.groupUpdate = (object.groupUpdate !== undefined && object.groupUpdate !== null) + ? UpdateChallengeInput_UpdateInput_GroupsUpdate.fromPartial(object.groupUpdate) + : undefined; + message.projectId = object.projectId ?? undefined; + message.startDate = object.startDate ?? undefined; + message.endDate = object.endDate ?? undefined; + message.status = object.status ?? undefined; + message.overview = (object.overview !== undefined && object.overview !== null) + ? Challenge_Overview.fromPartial(object.overview) + : undefined; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_WinnerUpdate(): UpdateChallengeInput_UpdateInput_WinnerUpdate { + return { winners: [] }; +} + +export const UpdateChallengeInput_UpdateInput_WinnerUpdate = { + encode(message: UpdateChallengeInput_UpdateInput_WinnerUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.winners) { + Challenge_Winner.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_WinnerUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_WinnerUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.winners.push(Challenge_Winner.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_WinnerUpdate { + return { + winners: Array.isArray(object?.winners) ? object.winners.map((e: any) => Challenge_Winner.fromJSON(e)) : [], + }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput_WinnerUpdate): unknown { + const obj: any = {}; + if (message.winners) { + obj.winners = message.winners.map((e) => e ? Challenge_Winner.toJSON(e) : undefined); + } else { + obj.winners = []; + } + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput_WinnerUpdate { + return UpdateChallengeInput_UpdateInput_WinnerUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput_WinnerUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_WinnerUpdate(); + message.winners = object.winners?.map((e) => Challenge_Winner.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_DiscussionUpdate(): UpdateChallengeInput_UpdateInput_DiscussionUpdate { + return { discussions: [] }; +} + +export const UpdateChallengeInput_UpdateInput_DiscussionUpdate = { + encode( + message: UpdateChallengeInput_UpdateInput_DiscussionUpdate, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + for (const v of message.discussions) { + Challenge_Discussion.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_DiscussionUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_DiscussionUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.discussions.push(Challenge_Discussion.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_DiscussionUpdate { + return { + discussions: Array.isArray(object?.discussions) + ? object.discussions.map((e: any) => Challenge_Discussion.fromJSON(e)) + : [], + }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput_DiscussionUpdate): unknown { + const obj: any = {}; + if (message.discussions) { + obj.discussions = message.discussions.map((e) => e ? Challenge_Discussion.toJSON(e) : undefined); + } else { + obj.discussions = []; + } + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput_DiscussionUpdate { + return UpdateChallengeInput_UpdateInput_DiscussionUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput_DiscussionUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_DiscussionUpdate(); + message.discussions = object.discussions?.map((e) => Challenge_Discussion.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_MetadataUpdate(): UpdateChallengeInput_UpdateInput_MetadataUpdate { + return { metadata: [] }; +} + +export const UpdateChallengeInput_UpdateInput_MetadataUpdate = { + encode( + message: UpdateChallengeInput_UpdateInput_MetadataUpdate, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + for (const v of message.metadata) { + Challenge_Metadata.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_MetadataUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_MetadataUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.metadata.push(Challenge_Metadata.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_MetadataUpdate { + return { + metadata: Array.isArray(object?.metadata) ? object.metadata.map((e: any) => Challenge_Metadata.fromJSON(e)) : [], + }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput_MetadataUpdate): unknown { + const obj: any = {}; + if (message.metadata) { + obj.metadata = message.metadata.map((e) => e ? Challenge_Metadata.toJSON(e) : undefined); + } else { + obj.metadata = []; + } + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput_MetadataUpdate { + return UpdateChallengeInput_UpdateInput_MetadataUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput_MetadataUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_MetadataUpdate(); + message.metadata = object.metadata?.map((e) => Challenge_Metadata.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_PhaseUpdate(): UpdateChallengeInput_UpdateInput_PhaseUpdate { + return { phases: [] }; +} + +export const UpdateChallengeInput_UpdateInput_PhaseUpdate = { + encode(message: UpdateChallengeInput_UpdateInput_PhaseUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.phases) { + Challenge_Phase.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_PhaseUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_PhaseUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.phases.push(Challenge_Phase.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_PhaseUpdate { + return { phases: Array.isArray(object?.phases) ? object.phases.map((e: any) => Challenge_Phase.fromJSON(e)) : [] }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput_PhaseUpdate): unknown { + const obj: any = {}; + if (message.phases) { + obj.phases = message.phases.map((e) => e ? Challenge_Phase.toJSON(e) : undefined); + } else { + obj.phases = []; + } + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput_PhaseUpdate { + return UpdateChallengeInput_UpdateInput_PhaseUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput_PhaseUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_PhaseUpdate(); + message.phases = object.phases?.map((e) => Challenge_Phase.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_EventUpdate(): UpdateChallengeInput_UpdateInput_EventUpdate { + return { events: [] }; +} + +export const UpdateChallengeInput_UpdateInput_EventUpdate = { + encode(message: UpdateChallengeInput_UpdateInput_EventUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.events) { + Challenge_Event.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_EventUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_EventUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.events.push(Challenge_Event.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_EventUpdate { + return { events: Array.isArray(object?.events) ? object.events.map((e: any) => Challenge_Event.fromJSON(e)) : [] }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput_EventUpdate): unknown { + const obj: any = {}; + if (message.events) { + obj.events = message.events.map((e) => e ? Challenge_Event.toJSON(e) : undefined); + } else { + obj.events = []; + } + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput_EventUpdate { + return UpdateChallengeInput_UpdateInput_EventUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput_EventUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_EventUpdate(); + message.events = object.events?.map((e) => Challenge_Event.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_TermUpdate(): UpdateChallengeInput_UpdateInput_TermUpdate { + return { terms: [] }; +} + +export const UpdateChallengeInput_UpdateInput_TermUpdate = { + encode(message: UpdateChallengeInput_UpdateInput_TermUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.terms) { + Challenge_Term.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_TermUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_TermUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.terms.push(Challenge_Term.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_TermUpdate { + return { terms: Array.isArray(object?.terms) ? object.terms.map((e: any) => Challenge_Term.fromJSON(e)) : [] }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput_TermUpdate): unknown { + const obj: any = {}; + if (message.terms) { + obj.terms = message.terms.map((e) => e ? Challenge_Term.toJSON(e) : undefined); + } else { + obj.terms = []; + } + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput_TermUpdate { + return UpdateChallengeInput_UpdateInput_TermUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput_TermUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_TermUpdate(); + message.terms = object.terms?.map((e) => Challenge_Term.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_PrizeSetUpdate(): UpdateChallengeInput_UpdateInput_PrizeSetUpdate { + return { prizeSets: [] }; +} + +export const UpdateChallengeInput_UpdateInput_PrizeSetUpdate = { + encode( + message: UpdateChallengeInput_UpdateInput_PrizeSetUpdate, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + for (const v of message.prizeSets) { + Challenge_PrizeSet.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_PrizeSetUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_PrizeSetUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.prizeSets.push(Challenge_PrizeSet.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_PrizeSetUpdate { + return { prizeSets: Array.isArray(object?.prizeSets) ? object.prizeSets.map((e: any) => Challenge_PrizeSet.fromJSON(e)) : [], - tags: Array.isArray(object?.tags) ? object.tags.map((e: any) => String(e)) : [], - projectId: isSet(object.projectId) ? Number(object.projectId) : undefined, - startDate: isSet(object.startDate) ? Number(object.startDate) : undefined, - endDate: isSet(object.endDate) ? Number(object.endDate) : undefined, - status: isSet(object.status) ? String(object.status) : undefined, - attachments: Array.isArray(object?.attachments) ? object.attachments.map((e: any) => String(e)) : [], - groups: Array.isArray(object?.groups) ? object.groups.map((e: any) => String(e)) : [], - winners: Array.isArray(object?.winners) ? object.winners.map((e: any) => Challenge_Winner.fromJSON(e)) : [], - discussions: Array.isArray(object?.discussions) - ? object.discussions.map((e: any) => Challenge_Discussion.fromJSON(e)) - : [], - createdBy: isSet(object.createdBy) ? String(object.createdBy) : undefined, - updatedBy: isSet(object.updatedBy) ? String(object.updatedBy) : undefined, - created: isSet(object.created) ? Number(object.created) : undefined, - updated: isSet(object.updated) ? Number(object.updated) : undefined, - overview: isSet(object.overview) ? Challenge_Overview.fromJSON(object.overview) : undefined, }; }, - toJSON(message: UpdateChallengeInput_UpdateInput): unknown { + toJSON(message: UpdateChallengeInput_UpdateInput_PrizeSetUpdate): unknown { const obj: any = {}; - message.id !== undefined && (obj.id = message.id); - message.legacyId !== undefined && (obj.legacyId = Math.round(message.legacyId)); - message.name !== undefined && (obj.name = message.name); - message.typeId !== undefined && (obj.typeId = message.typeId); - message.trackId !== undefined && (obj.trackId = message.trackId); - message.legacy !== undefined && (obj.legacy = message.legacy ? Challenge_Legacy.toJSON(message.legacy) : undefined); - message.billing !== undefined && - (obj.billing = message.billing ? Challenge_Billing.toJSON(message.billing) : undefined); - message.description !== undefined && (obj.description = message.description); - message.privateDescription !== undefined && (obj.privateDescription = message.privateDescription); - message.descriptionFormat !== undefined && (obj.descriptionFormat = message.descriptionFormat); - if (message.metadata) { - obj.metadata = message.metadata.map((e) => e ? Challenge_Metadata.toJSON(e) : undefined); - } else { - obj.metadata = []; - } - message.task !== undefined && (obj.task = message.task ? Challenge_Task.toJSON(message.task) : undefined); - message.timelineTemplateId !== undefined && (obj.timelineTemplateId = message.timelineTemplateId); - if (message.phases) { - obj.phases = message.phases.map((e) => e ? Challenge_Phase.toJSON(e) : undefined); - } else { - obj.phases = []; - } - if (message.events) { - obj.events = message.events.map((e) => e ? Challenge_Event.toJSON(e) : undefined); - } else { - obj.events = []; - } - if (message.terms) { - obj.terms = message.terms.map((e) => e ? Challenge_Term.toJSON(e) : undefined); - } else { - obj.terms = []; - } if (message.prizeSets) { obj.prizeSets = message.prizeSets.map((e) => e ? Challenge_PrizeSet.toJSON(e) : undefined); } else { obj.prizeSets = []; } + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput_PrizeSetUpdate { + return UpdateChallengeInput_UpdateInput_PrizeSetUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput_PrizeSetUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_PrizeSetUpdate(); + message.prizeSets = object.prizeSets?.map((e) => Challenge_PrizeSet.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_TagsUpdate(): UpdateChallengeInput_UpdateInput_TagsUpdate { + return { tags: [] }; +} + +export const UpdateChallengeInput_UpdateInput_TagsUpdate = { + encode(message: UpdateChallengeInput_UpdateInput_TagsUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.tags) { + writer.uint32(10).string(v!); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_TagsUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_TagsUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.tags.push(reader.string()); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_TagsUpdate { + return { tags: Array.isArray(object?.tags) ? object.tags.map((e: any) => String(e)) : [] }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput_TagsUpdate): unknown { + const obj: any = {}; if (message.tags) { obj.tags = message.tags.map((e) => e); } else { obj.tags = []; } - message.projectId !== undefined && (obj.projectId = Math.round(message.projectId)); - message.startDate !== undefined && (obj.startDate = Math.round(message.startDate)); - message.endDate !== undefined && (obj.endDate = Math.round(message.endDate)); - message.status !== undefined && (obj.status = message.status); + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput_TagsUpdate { + return UpdateChallengeInput_UpdateInput_TagsUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput_TagsUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_TagsUpdate(); + message.tags = object.tags?.map((e) => e) || []; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_AttachmentsUpdate(): UpdateChallengeInput_UpdateInput_AttachmentsUpdate { + return { attachments: [] }; +} + +export const UpdateChallengeInput_UpdateInput_AttachmentsUpdate = { + encode( + message: UpdateChallengeInput_UpdateInput_AttachmentsUpdate, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + for (const v of message.attachments) { + writer.uint32(10).string(v!); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_AttachmentsUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_AttachmentsUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.attachments.push(reader.string()); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_AttachmentsUpdate { + return { attachments: Array.isArray(object?.attachments) ? object.attachments.map((e: any) => String(e)) : [] }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput_AttachmentsUpdate): unknown { + const obj: any = {}; if (message.attachments) { obj.attachments = message.attachments.map((e) => e); } else { obj.attachments = []; } + return obj; + }, + + create, I>>( + base?: I, + ): UpdateChallengeInput_UpdateInput_AttachmentsUpdate { + return UpdateChallengeInput_UpdateInput_AttachmentsUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>( + object: I, + ): UpdateChallengeInput_UpdateInput_AttachmentsUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_AttachmentsUpdate(); + message.attachments = object.attachments?.map((e) => e) || []; + return message; + }, +}; + +function createBaseUpdateChallengeInput_UpdateInput_GroupsUpdate(): UpdateChallengeInput_UpdateInput_GroupsUpdate { + return { groups: [] }; +} + +export const UpdateChallengeInput_UpdateInput_GroupsUpdate = { + encode(message: UpdateChallengeInput_UpdateInput_GroupsUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.groups) { + writer.uint32(10).string(v!); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): UpdateChallengeInput_UpdateInput_GroupsUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseUpdateChallengeInput_UpdateInput_GroupsUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.groups.push(reader.string()); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): UpdateChallengeInput_UpdateInput_GroupsUpdate { + return { groups: Array.isArray(object?.groups) ? object.groups.map((e: any) => String(e)) : [] }; + }, + + toJSON(message: UpdateChallengeInput_UpdateInput_GroupsUpdate): unknown { + const obj: any = {}; if (message.groups) { obj.groups = message.groups.map((e) => e); } else { obj.groups = []; } - if (message.winners) { - obj.winners = message.winners.map((e) => e ? Challenge_Winner.toJSON(e) : undefined); - } else { - obj.winners = []; - } - if (message.discussions) { - obj.discussions = message.discussions.map((e) => e ? Challenge_Discussion.toJSON(e) : undefined); - } else { - obj.discussions = []; - } - message.createdBy !== undefined && (obj.createdBy = message.createdBy); - message.updatedBy !== undefined && (obj.updatedBy = message.updatedBy); - message.created !== undefined && (obj.created = Math.round(message.created)); - message.updated !== undefined && (obj.updated = Math.round(message.updated)); - message.overview !== undefined && - (obj.overview = message.overview ? Challenge_Overview.toJSON(message.overview) : undefined); return obj; }, - create, I>>( + create, I>>( base?: I, - ): UpdateChallengeInput_UpdateInput { - return UpdateChallengeInput_UpdateInput.fromPartial(base ?? {}); + ): UpdateChallengeInput_UpdateInput_GroupsUpdate { + return UpdateChallengeInput_UpdateInput_GroupsUpdate.fromPartial(base ?? {}); }, - fromPartial, I>>( + fromPartial, I>>( object: I, - ): UpdateChallengeInput_UpdateInput { - const message = createBaseUpdateChallengeInput_UpdateInput(); - message.id = object.id ?? ""; - message.legacyId = object.legacyId ?? undefined; - message.name = object.name ?? undefined; - message.typeId = object.typeId ?? undefined; - message.trackId = object.trackId ?? undefined; - message.legacy = (object.legacy !== undefined && object.legacy !== null) - ? Challenge_Legacy.fromPartial(object.legacy) - : undefined; - message.billing = (object.billing !== undefined && object.billing !== null) - ? Challenge_Billing.fromPartial(object.billing) - : undefined; - message.description = object.description ?? undefined; - message.privateDescription = object.privateDescription ?? undefined; - message.descriptionFormat = object.descriptionFormat ?? undefined; - message.metadata = object.metadata?.map((e) => Challenge_Metadata.fromPartial(e)) || []; - message.task = (object.task !== undefined && object.task !== null) - ? Challenge_Task.fromPartial(object.task) - : undefined; - message.timelineTemplateId = object.timelineTemplateId ?? undefined; - message.phases = object.phases?.map((e) => Challenge_Phase.fromPartial(e)) || []; - message.events = object.events?.map((e) => Challenge_Event.fromPartial(e)) || []; - message.terms = object.terms?.map((e) => Challenge_Term.fromPartial(e)) || []; - message.prizeSets = object.prizeSets?.map((e) => Challenge_PrizeSet.fromPartial(e)) || []; - message.tags = object.tags?.map((e) => e) || []; - message.projectId = object.projectId ?? undefined; - message.startDate = object.startDate ?? undefined; - message.endDate = object.endDate ?? undefined; - message.status = object.status ?? undefined; - message.attachments = object.attachments?.map((e) => e) || []; + ): UpdateChallengeInput_UpdateInput_GroupsUpdate { + const message = createBaseUpdateChallengeInput_UpdateInput_GroupsUpdate(); message.groups = object.groups?.map((e) => e) || []; - message.winners = object.winners?.map((e) => Challenge_Winner.fromPartial(e)) || []; - message.discussions = object.discussions?.map((e) => Challenge_Discussion.fromPartial(e)) || []; - message.createdBy = object.createdBy ?? undefined; - message.updatedBy = object.updatedBy ?? undefined; - message.created = object.created ?? undefined; - message.updated = object.updated ?? undefined; - message.overview = (object.overview !== undefined && object.overview !== null) - ? Challenge_Overview.fromPartial(object.overview) - : undefined; return message; }, }; @@ -2586,15 +3860,24 @@ export const UpdateChallengeInputForACL = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.filterCriteria.push(ScanCriteria.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.updateInputForAcl = UpdateChallengeInputForACL_UpdateInputForACL.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -2712,51 +3995,108 @@ export const UpdateChallengeInputForACL_UpdateInputForACL = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.status = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.phases = UpdateChallengeInputForACL_PhasesACL.decode(reader, reader.uint32()); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.currentPhase = Challenge_Phase.decode(reader, reader.uint32()); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.currentPhaseNames = UpdateChallengeInputForACL_CurrentPhaseNamesACL.decode(reader, reader.uint32()); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.registrationStartDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 6: + if (tag != 50) { + break; + } + message.registrationEndDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 7: + if (tag != 58) { + break; + } + message.submissionStartDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 8: + if (tag != 66) { + break; + } + message.submissionEndDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 9: + if (tag != 74) { + break; + } + message.startDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 10: + if (tag != 82) { + break; + } + message.endDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - break; + continue; case 11: + if (tag != 90) { + break; + } + message.legacy = UpdateChallengeInputForACL_LegacyACL.decode(reader, reader.uint32()); - break; + continue; case 12: + if (tag != 98) { + break; + } + message.prizeSets = UpdateChallengeInputForACL_PrizeSetsACL.decode(reader, reader.uint32()); - break; + continue; case 13: + if (tag != 106) { + break; + } + message.overview = Challenge_Overview.decode(reader, reader.uint32()); - break; + continue; case 14: + if (tag != 114) { + break; + } + message.winners = UpdateChallengeInputForACL_WinnersACL.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -2875,12 +4215,17 @@ export const UpdateChallengeInputForACL_PhasesACL = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.phases.push(Challenge_Phase.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -2937,12 +4282,17 @@ export const UpdateChallengeInputForACL_CurrentPhaseNamesACL = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.currentPhaseNames.push(reader.string()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -3003,15 +4353,24 @@ export const UpdateChallengeInputForACL_LegacyACL = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.reviewScorecardId = reader.int32(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.screeningScorecardId = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -3066,12 +4425,17 @@ export const UpdateChallengeInputForACL_PrizeSetsACL = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.prizeSets.push(Challenge_PrizeSet.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -3129,12 +4493,17 @@ export const UpdateChallengeInputForACL_WinnersACL = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.winners.push(UpdateChallengeInputForACL_WinnerACL.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -3195,15 +4564,24 @@ export const UpdateChallengeInputForACL_WinnerACL = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.handle = reader.string(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.placement = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/domain-layer/challenge/challenge_timeline_template.ts b/src/models/domain-layer/challenge/challenge_timeline_template.ts index c2eeeee..5c846f5 100644 --- a/src/models/domain-layer/challenge/challenge_timeline_template.ts +++ b/src/models/domain-layer/challenge/challenge_timeline_template.ts @@ -65,24 +65,45 @@ export const ChallengeTimelineTemplate = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.id = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.trackId = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.typeId = reader.string(); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.timelineTemplateId = reader.string(); - break; + continue; case 5: + if (tag != 40) { + break; + } + message.isDefault = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -142,12 +163,17 @@ export const ChallengeTimelineTemplateList = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.items.push(ChallengeTimelineTemplate.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -210,21 +236,38 @@ export const CreateChallengeTimelineTemplateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.trackId = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.typeId = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.timelineTemplateId = reader.string(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isDefault = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -288,15 +331,24 @@ export const UpdateChallengeTimelineTemplateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.filterCriteria.push(ScanCriteria.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.updateInput = UpdateChallengeTimelineTemplateInput_UpdateInput.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -375,21 +427,38 @@ export const UpdateChallengeTimelineTemplateInput_UpdateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 2: + if (tag != 18) { + break; + } + message.trackId = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.typeId = reader.string(); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.timelineTemplateId = reader.string(); - break; + continue; case 5: + if (tag != 40) { + break; + } + message.isDefault = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/domain-layer/challenge/challenge_track.ts b/src/models/domain-layer/challenge/challenge_track.ts index 45bc212..ccb8e20 100644 --- a/src/models/domain-layer/challenge/challenge_track.ts +++ b/src/models/domain-layer/challenge/challenge_track.ts @@ -65,24 +65,45 @@ export const ChallengeTrack = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.id = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.description = reader.string(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isActive = reader.bool(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.abbreviation = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -142,12 +163,17 @@ export const ChallengeTrackList = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.items.push(ChallengeTrack.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -206,21 +232,38 @@ export const CreateChallengeTrackInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.name = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.description = reader.string(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.isActive = reader.bool(); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.abbreviation = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -280,15 +323,24 @@ export const UpdateChallengeTrackInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.filterCriteria.push(ScanCriteria.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.updateInput = UpdateChallengeTrackInput_UpdateInput.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -360,21 +412,38 @@ export const UpdateChallengeTrackInput_UpdateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.description = reader.string(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isActive = reader.bool(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.abbreviation = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/domain-layer/challenge/challenge_type.ts b/src/models/domain-layer/challenge/challenge_type.ts index a8c9e5c..a9e2035 100644 --- a/src/models/domain-layer/challenge/challenge_type.ts +++ b/src/models/domain-layer/challenge/challenge_type.ts @@ -71,27 +71,52 @@ export const ChallengeType = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.id = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.description = reader.string(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isActive = reader.bool(); - break; + continue; case 5: + if (tag != 40) { + break; + } + message.isTask = reader.bool(); - break; + continue; case 6: + if (tag != 50) { + break; + } + message.abbreviation = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -154,12 +179,17 @@ export const ChallengeTypeList = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.items.push(ChallengeType.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -221,24 +251,45 @@ export const CreateChallengeTypeInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.name = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.description = reader.string(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.isActive = reader.bool(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isTask = reader.bool(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.abbreviation = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -301,15 +352,24 @@ export const UpdateChallengeTypeInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.filterCriteria.push(ScanCriteria.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.updateInput = UpdateChallengeTypeInput_UpdateInput.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -384,24 +444,45 @@ export const UpdateChallengeTypeInput_UpdateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.description = reader.string(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isActive = reader.bool(); - break; + continue; case 5: + if (tag != 40) { + break; + } + message.isTask = reader.bool(); - break; + continue; case 6: + if (tag != 50) { + break; + } + message.abbreviation = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/domain-layer/challenge/phase.ts b/src/models/domain-layer/challenge/phase.ts index 1a05e96..cc242b1 100644 --- a/src/models/domain-layer/challenge/phase.ts +++ b/src/models/domain-layer/challenge/phase.ts @@ -66,24 +66,45 @@ export const Phase = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.id = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.description = reader.string(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isOpen = reader.bool(); - break; + continue; case 5: + if (tag != 40) { + break; + } + message.duration = longToNumber(reader.int64() as Long); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -143,12 +164,17 @@ export const PhaseList = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.items.push(Phase.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -207,21 +233,38 @@ export const CreatePhaseInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.name = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.description = reader.string(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.isOpen = reader.bool(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.duration = longToNumber(reader.int64() as Long); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -281,15 +324,24 @@ export const UpdatePhaseInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.filterCriteria.push(ScanCriteria.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.updateInput = UpdatePhaseInput_UpdateInput.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -358,21 +410,38 @@ export const UpdatePhaseInput_UpdateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.description = reader.string(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isOpen = reader.bool(); - break; + continue; case 5: + if (tag != 40) { + break; + } + message.duration = longToNumber(reader.int64() as Long); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/domain-layer/challenge/timeline_template.ts b/src/models/domain-layer/challenge/timeline_template.ts index 1f3f948..7b88833 100644 --- a/src/models/domain-layer/challenge/timeline_template.ts +++ b/src/models/domain-layer/challenge/timeline_template.ts @@ -66,18 +66,31 @@ export const TimelineTemplatePhase = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.phaseId = reader.string(); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.defaultDuration = longToNumber(reader.int64() as Long); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.predecessor = reader.string(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -143,24 +156,45 @@ export const TimelineTemplate = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.id = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.description = reader.string(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isActive = reader.bool(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.phases.push(TimelineTemplatePhase.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -224,12 +258,17 @@ export const TimelineTemplateList = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.items.push(TimelineTemplate.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -288,21 +327,38 @@ export const CreateTimelineTemplateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.name = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.description = reader.string(); - break; + continue; case 3: + if (tag != 24) { + break; + } + message.isActive = reader.bool(); - break; + continue; case 4: + if (tag != 34) { + break; + } + message.phases.push(TimelineTemplatePhase.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -366,15 +422,24 @@ export const UpdateTimelineTemplateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.filterCriteria.push(ScanCriteria.decode(reader, reader.uint32())); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.updateInput = UpdateTimelineTemplateInput_UpdateInput.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; + continue; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, @@ -446,21 +511,38 @@ export const UpdateTimelineTemplateInput_UpdateInput = { const tag = reader.uint32(); switch (tag >>> 3) { case 2: + if (tag != 18) { + break; + } + message.name = reader.string(); - break; + continue; case 3: + if (tag != 26) { + break; + } + message.description = reader.string(); - break; + continue; case 4: + if (tag != 32) { + break; + } + message.isActive = reader.bool(); - break; + continue; case 5: + if (tag != 42) { + break; + } + message.phases.push(TimelineTemplatePhase.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/google/protobuf/empty.ts b/src/models/google/protobuf/empty.ts index a56f883..33339a0 100644 --- a/src/models/google/protobuf/empty.ts +++ b/src/models/google/protobuf/empty.ts @@ -29,10 +29,11 @@ export const Empty = { while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/google/protobuf/struct.ts b/src/models/google/protobuf/struct.ts index 362dcd5..5a7e118 100644 --- a/src/models/google/protobuf/struct.ts +++ b/src/models/google/protobuf/struct.ts @@ -105,15 +105,20 @@ export const Struct = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + const entry1 = Struct_FieldsEntry.decode(reader, reader.uint32()); if (entry1.value !== undefined) { message.fields[entry1.key] = entry1.value; } - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -199,15 +204,24 @@ export const Struct_FieldsEntry = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.key = reader.string(); - break; + continue; case 2: + if (tag != 18) { + break; + } + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -272,27 +286,52 @@ export const Value = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.kind = { $case: "nullValue", nullValue: reader.int32() as any }; - break; + continue; case 2: + if (tag != 17) { + break; + } + message.kind = { $case: "numberValue", numberValue: reader.double() }; - break; + continue; case 3: + if (tag != 26) { + break; + } + message.kind = { $case: "stringValue", stringValue: reader.string() }; - break; + continue; case 4: + if (tag != 32) { + break; + } + message.kind = { $case: "boolValue", boolValue: reader.bool() }; - break; + continue; case 5: + if (tag != 42) { + break; + } + message.kind = { $case: "structValue", structValue: Struct.unwrap(Struct.decode(reader, reader.uint32())) }; - break; + continue; case 6: + if (tag != 50) { + break; + } + message.kind = { $case: "listValue", listValue: ListValue.unwrap(ListValue.decode(reader, reader.uint32())) }; - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, @@ -425,12 +464,17 @@ export const ListValue = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 10) { + break; + } + message.values.push(Value.unwrap(Value.decode(reader, reader.uint32()))); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/models/google/protobuf/timestamp.ts b/src/models/google/protobuf/timestamp.ts index 23d4800..255892d 100644 --- a/src/models/google/protobuf/timestamp.ts +++ b/src/models/google/protobuf/timestamp.ts @@ -132,15 +132,24 @@ export const Timestamp = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: + if (tag != 8) { + break; + } + message.seconds = longToNumber(reader.int64() as Long); - break; + continue; case 2: + if (tag != 16) { + break; + } + message.nanos = reader.int32(); - break; - default: - reader.skipType(tag & 7); - break; + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; } + reader.skipType(tag & 7); } return message; }, diff --git a/src/server.ts b/src/server.ts index 510da97..09f0459 100644 --- a/src/server.ts +++ b/src/server.ts @@ -13,27 +13,16 @@ import { ChallengeTimelineTemplateServer, ChallengeTimelineTemplateService, } from "./service/ChallengeTimelineTemplateService"; -import { - ChallengeTrackServer, - ChallengeTrackService, -} from "./service/ChallengeTrackService"; +import { ChallengeTrackServer, ChallengeTrackService } from "./service/ChallengeTrackService"; -import { - ChallengeTypeServer, - ChallengeTypeService, -} from "./service/ChallengeTypeService"; -import { - AttachmentServer, - AttachmentService, -} from "./service/AttachmentService"; +import { ChallengeTypeServer, ChallengeTypeService } from "./service/ChallengeTypeService"; +import { AttachmentServer, AttachmentService } from "./service/AttachmentService"; -import { - TimelineTemplateServer, - TimelineTemplateService, -} from "./service/TimelineTemplateService"; +import { TimelineTemplateServer, TimelineTemplateService } from "./service/TimelineTemplateService"; import { PhaseServer, PhaseService } from "./service/PhaseService"; import { ChallengeServer, ChallengeService } from "./service/ChallengeService"; +import InterceptorWrapper from "./interceptors/InterceptorWrapper"; const { ENV, GRPC_SERVER_HOST = "", GRPC_SERVER_PORT = 9092 } = process.env; @@ -48,15 +37,48 @@ if (ENV === "local") { server.addService( ChallengeTimelineTemplateService, - new ChallengeTimelineTemplateServer() + InterceptorWrapper.serviceWrapper( + ChallengeTimelineTemplateService, + new ChallengeTimelineTemplateServer(), + "ChallengeTimelineTemplate" + ) +); +server.addService( + ChallengeService, + InterceptorWrapper.serviceWrapper(ChallengeService, new ChallengeServer(), "Challenge") +); +server.addService( + ChallengeTrackService, + InterceptorWrapper.serviceWrapper( + ChallengeTrackService, + new ChallengeTrackServer(), + "ChallengeTrack" + ) +); +server.addService( + ChallengeTypeService, + InterceptorWrapper.serviceWrapper( + ChallengeTypeService, + new ChallengeTypeServer(), + "ChallengeType" + ) +); +server.addService( + AttachmentService, + InterceptorWrapper.serviceWrapper(AttachmentService, new AttachmentServer(), "Attachment") +); +server.addService( + PhaseService, + InterceptorWrapper.serviceWrapper(PhaseService, new PhaseServer(), "Phase") +); +server.addService( + TimelineTemplateService, + InterceptorWrapper.serviceWrapper( + TimelineTemplateService, + new TimelineTemplateServer(), + "TimelineTemplate" + ) ); - -server.addService(ChallengeService, new ChallengeServer()); -server.addService(ChallengeTrackService, new ChallengeTrackServer()); -server.addService(ChallengeTypeService, new ChallengeTypeServer()); -server.addService(AttachmentService, new AttachmentServer()); -server.addService(PhaseService, new PhaseServer()); -server.addService(TimelineTemplateService, new TimelineTemplateServer()); server.bindAsync( `${GRPC_SERVER_HOST}:${GRPC_SERVER_PORT}`, diff --git a/src/service/ChallengeService.ts b/src/service/ChallengeService.ts index aa1c403..756f7a3 100644 --- a/src/service/ChallengeService.ts +++ b/src/service/ChallengeService.ts @@ -1,15 +1,6 @@ -import { - UntypedHandleCall, - handleUnaryCall, - ServerUnaryCall, - sendUnaryData, -} from "@grpc/grpc-js"; +import { handleUnaryCall, sendUnaryData, ServerUnaryCall, UntypedHandleCall } from "@grpc/grpc-js"; -import { - LookupCriteria, - ScanRequest, - ScanResult, -} from "../models/common/common"; +import { LookupCriteria, ScanRequest, ScanResult } from "../models/common/common"; import { ChallengeServer, @@ -17,9 +8,9 @@ import { } from "../models/domain-layer/challenge/services/challenge"; import { - CreateChallengeInput, Challenge, ChallengeList, + CreateChallengeInput, UpdateChallengeInput, UpdateChallengeInputForACL, } from "../models/domain-layer/challenge/challenge"; @@ -33,8 +24,8 @@ class ChallengeServerImpl implements ChallengeServer { call: ServerUnaryCall, callback: sendUnaryData ): Promise => { - const { request: createChallengeInput } = call; - Domain.create(createChallengeInput) + const { request: createChallengeInput, metadata } = call; + Domain.create(createChallengeInput, metadata) .then((challenge) => callback(null, challenge)) .catch((error) => callback(error, null)); }; @@ -43,11 +34,9 @@ class ChallengeServerImpl implements ChallengeServer { call: ServerUnaryCall, callback: sendUnaryData ): Promise => { - const { request: lookupCriteria } = call; - - const challenge = await Domain.lookup(lookupCriteria); - - callback(null, challenge); + Domain.lookup(call.request) + .then((challenge) => callback(null, challenge)) + .catch((error) => callback(error, null)); }; scan: handleUnaryCall = async ( @@ -58,23 +47,25 @@ class ChallengeServerImpl implements ChallengeServer { request: { criteria, nextToken: inputNextToken }, } = call; - const { items, nextToken } = await Domain.scan(criteria, inputNextToken); - - callback(null, { items, nextToken }); + Domain.scan(criteria, inputNextToken) + .then(({ items, nextToken }) => callback(null, { items, nextToken })) + .catch((error) => callback(error, null)); }; update: handleUnaryCall = async ( call: ServerUnaryCall, callback: sendUnaryData ): Promise => { - try { - const { updateInput, filterCriteria } = call.request; - if (!updateInput) return callback(null, { items: [] }); - const result = await Domain.update(filterCriteria, updateInput); - callback(null, result); - } catch (error: any) { - callback(error, null); - } + const { + request: { filterCriteria, updateInput }, + } = call; + + Domain.update(filterCriteria, updateInput!, call.metadata) + .then((challengeList) => callback(null, challengeList)) + .catch((error) => { + console.error(error); + callback(error, null); + }); }; updateForAcl: handleUnaryCall = async ( @@ -95,7 +86,12 @@ class ChallengeServerImpl implements ChallengeServer { delete: handleUnaryCall = async ( call: ServerUnaryCall, callback: sendUnaryData - ): Promise => {}; + ): Promise => { + const { request: lookupCriteria } = call; + Domain.delete(lookupCriteria) + .then((challengeList) => callback(null, challengeList)) + .catch((error) => callback(error, null)); + }; } export { ChallengeServerImpl as ChallengeServer, ChallengeService }; diff --git a/src/util/ErrorHelper.ts b/src/util/ErrorHelper.ts new file mode 100644 index 0000000..fe0d2c7 --- /dev/null +++ b/src/util/ErrorHelper.ts @@ -0,0 +1,15 @@ +import { status, StatusBuilder, StatusObject } from "@grpc/grpc-js"; + +class ErrorHelper { + // TODO: Move to @topcoder-framework + public static wrapError(error: GrpcError): Partial { + return new StatusBuilder() + .withCode(error.code || status.INTERNAL) + .withDetails(error.details || error.message || "Internal Server Error") + .build(); + } +} + +export type GrpcError = Partial & Partial; + +export default ErrorHelper; diff --git a/src/util/LegacyMapper.ts b/src/util/LegacyMapper.ts index 91226ba..413ac2e 100644 --- a/src/util/LegacyMapper.ts +++ b/src/util/LegacyMapper.ts @@ -1,12 +1,27 @@ import _ from "lodash"; -import { PrizeSetTypes } from "../common/Constants"; -import { V5_TO_V4 } from "../common/ConversionMap"; +import { ChallengeStatuses, PhaseTypeIds, PrizeSetTypes } from "../common/Constants"; +import { V4_SUBTRACKS, V5_TO_V4 } from "../common/ConversionMap"; +import { + Challenge_Phase, + Challenge_PrizeSet, + CreateChallengeInput, + UpdateChallengeInput_UpdateInput, +} from "../models/domain-layer/challenge/challenge"; import { legacyChallengeStatusesMap } from "./constants"; -import DateUtil from "./DateUtil"; +import { + CreateChallengeInput as LegacyChallengeCreateInput, + UpdateChallengeInput as LegacyChallengeUpdateInput, + Phase as LegacyPhase, + Prize, +} from "@topcoder-framework/domain-acl"; +import { getRequest } from "../api/v5Api"; +import m2mToken from "../helpers/MachineToMachineToken"; class LegacyMapper { // To be used on challenge:update calls that change state from New -> Draft - public mapChallengeDraftUpdateInput = (input: any) => { + public mapChallengeDraftUpdateInput = async ( + input: CreateChallengeInput + ): Promise => { const prizeSets = this.mapPrizeSets(input.prizeSets); const projectInfo = this.mapProjectInfo(input, prizeSets); @@ -14,37 +29,42 @@ class LegacyMapper { name: input.name, projectStatusId: legacyChallengeStatusesMap.Draft, ...this.mapTrackAndTypeToCategoryStudioSpecAndMmSpec( - input.legacy.track, - input.legacy.subTrack + input.legacy!.track!, + input.legacy!.subTrack! ), + groups: await this.mapGroupIds(input.groups), tcDirectProjectId: input.legacy?.directProjectId!, - winnerPrizes: - prizeSets[PrizeSetTypes.ChallengePrizes]?.map( - (amount: number, index: number) => ({ - amount, - place: index + 1, - numSubmissions: 1, - type: PrizeSetTypes.ChallengePrizes, - }) - ) ?? [], - phases: input.phases.map((phase: any, index: number) => ({ - phaseTypeId: this.mapPhaseNameToPhaseTypeId(phase.name), - phaseStatusId: 1, - fixedStartTime: - index == 0 - ? DateUtil.formatDateForIfx(phase.scheduledStartDate) - : undefined, // Registration Phase needs a fixedStartTime - scheduledStartTime: DateUtil.formatDateForIfx(phase.scheduledStartDate), - scheduledEndTime: DateUtil.formatDateForIfx(phase.scheduledEndDate), - // TODO: Confirm this is correct - // actualStartTime: DateUtil.formatDateForIfx(phase.actualStartDate), - // actualEndTime: DateUtil.formatDateForIfx(phase.actualEndDate), - duration: phase.duration, - phaseCriteria: this.mapPhaseCriteria(phase), - })), + winnerPrizes: this.mapWinnerPrizes(prizeSets), + phases: this.mapPhases(input.legacy!.subTrack!, input.phases), reviewType: input.legacy?.reviewType ?? "INTERNAL", confidentialityType: input.legacy?.confidentialityType ?? "public", - billingProject: input.billing?.billingAccountId!, + projectInfo, + }; + }; + + public mapChallengeUpdateInput = async ( + legacyId: number, + subTrack: string, + input: UpdateChallengeInput_UpdateInput + ): Promise => { + // prettier-ignore + const prizeSets = input.prizeSetUpdate != null ? this.mapPrizeSets(input.prizeSetUpdate.prizeSets) : null; + const projectInfo = this.mapProjectInfoForUpdate(input, prizeSets); + + return { + projectId: legacyId, + projectStatusId: this.mapProjectStatus(input.status), + prizeUpdate: + prizeSets == null + ? undefined + : { + winnerPrizes: this.mapWinnerPrizes(prizeSets), + }, + // prettier-ignore + phaseUpdate: input.phaseUpdate != null ? { phases: this.mapPhases(subTrack, input.phaseUpdate.phases) } : undefined, + // prettier-ignore + groupUpdate: input.groupUpdate != null ? { groups: await this.mapGroupIds(input.groupUpdate.groups) } : undefined, + termUpdate: input.termUpdate != null ? { terms: input.termUpdate.terms } : undefined, projectInfo, }; }; @@ -61,16 +81,15 @@ class LegacyMapper { projectStudioSpecId: number | undefined; projectMmSpecId: number | undefined; } { - subTrack = subTrack.replace(" ", "").toLowerCase(); + let projectCategoryId = 39; // V4_SUBTRACKS.CODE - let projectCategoryId = 39; // code - if (subTrack === "first2finish") { - projectCategoryId = 38; - } else if (subTrack === "marathonmatch") { - projectCategoryId = 37; - } else if (subTrack === "bughunt") { - projectCategoryId = 9; - } + if (subTrack === V4_SUBTRACKS.FIRST_2_FINISH) projectCategoryId = 38; + if (subTrack === V4_SUBTRACKS.MARATHON_MATCH) projectCategoryId = 37; + // prettier-ignore + if (subTrack === V4_SUBTRACKS.DEVELOP_MARATHON_MATCH) projectCategoryId = 37; + if (subTrack === V4_SUBTRACKS.BUG_HUNT) projectCategoryId = 9; + if (subTrack === V4_SUBTRACKS.DESIGN_FIRST_2_FINISH) projectCategoryId = 40; + if (subTrack === V4_SUBTRACKS.WEB_DESIGNS) projectCategoryId = 17; return { projectCategoryId, @@ -79,37 +98,52 @@ class LegacyMapper { }; } - private mapPrizeSets( - prizeSets: { type: string; prizes: { value: number }[] }[] - ) { + private mapPrizeSets(prizeSets: Challenge_PrizeSet[]) { return prizeSets.reduce((acc: { [key: string]: number[] }, prize) => { - acc[prize.type] = prize.prizes.map((p) => p.value).sort((a, b) => b - a); - + acc[prize.type] = (acc[prize.type] ?? []) + .concat(prize.prizes.map((p) => p.amountInCents!)) + .sort((a, b) => b - a); return acc; }, {}); } - private mapProjectInfo( - input: any, - prizeSets: any - ): { [key: number]: string | undefined } { + private mapWinnerPrizes(prizeSets: { [key: string]: number[] }): Prize[] { + // prettier-ignore + const prizeSetTypes = [PrizeSetTypes.ChallengePrizes, PrizeSetTypes.CheckPoint, PrizeSetTypes.CopilotPayment, PrizeSetTypes.ReviewerPayment]; + + return prizeSetTypes.reduce((acc: Prize[], type: string) => { + if (prizeSets[type] != null) { + acc.push( + ...prizeSets[type].map((amountInCents: number, index: number) => ({ + amountInCents, + place: index + 1, + numSubmissions: 1, + type, + })) + ); + } + return acc; + }, []); + } + + private mapProjectInfo(input: CreateChallengeInput, prizeSets: any): { [key: number]: string } { const firstPlacePrize = prizeSets[PrizeSetTypes.ChallengePrizes]?.length >= 1 ? prizeSets[PrizeSetTypes.ChallengePrizes][0]?.toString() : undefined; - return { + const map = { 3: "1", 4: "0", 7: "1.0", - 9: "Off", // Turn Auto Pilot Off + 9: "On", // Turn Auto Pilot Off 78: "Development", // Forum Type - value doesn't matter - 10: "Off", // Turn status notification off - 11: "Off", // Turn timeline notification off + 10: "On", // Turn status notification off + 11: "On", // Turn timeline notification off 12: "Yes", // Public -> Yes (make it dynamic) 13: "Yes", // Rated -> Yes (make it dynamic) 14: "Open", // Eligibility -> Open (value doesn't matter) - 16: firstPlacePrize?.toString(), + 16: firstPlacePrize != null ? (firstPlacePrize / 100).toString() : undefined, 26: "Off", // No Digital Run 30: "0", // No DR Points 6: input.name, @@ -118,7 +152,7 @@ class LegacyMapper { // Review Cost 33: prizeSets[PrizeSetTypes.ReviewerPayment]?.length == 1 - ? prizeSets[PrizeSetTypes.ReviewerPayment][0]?.toString() + ? (prizeSets[PrizeSetTypes.ReviewerPayment][0] / 100).toString() : undefined, // Confidentiality Type 34: input.legacy?.confidentialityType ?? "public", @@ -127,11 +161,11 @@ class LegacyMapper { // Spec Review Cost 35: undefined, // First Place Prize - 36: firstPlacePrize?.toString(), + 36: firstPlacePrize != null ? (firstPlacePrize / 100).toString() : undefined, // Second Place Prize 37: prizeSets[PrizeSetTypes.ChallengePrizes]?.length >= 2 - ? prizeSets[PrizeSetTypes.ChallengePrizes][1]?.toString() + ? (prizeSets[PrizeSetTypes.ChallengePrizes][1] / 100).toString() : undefined, // Reliability Bonus Cost 38: undefined, @@ -139,46 +173,101 @@ class LegacyMapper { 39: undefined, 41: "true", // Approval Required 43: "true", // Send Winner Emails - 44: "false", // Post-mortem required (set to false - new Autopilot will handle this) + 44: + input.metadata.find((m) => m.name == "postMortemRequired")?.value == "false" + ? "false" + : "true" ?? "true", // Post-mortem required (set to false - new Autopilot will handle this) 45: "false", // Reliability bonus eligible 46: "true", // Member Payments Eligible 48: "true", // Track Late Deliverables 52: "false", // Allow Stock Art 57: "0.5", // Contest Fee Percentage 59: "false", // Review Feedback Flag - 88: "0", // Effort Hours Estimate - 89: "0", // Estimate Efforts Days Offshore (extract from metadata) - 90: "0", // Estimate Efforts Days Onsite (extract from metadata) + 88: input.metadata.find((m) => m.name == "effortHoursEstimate")?.value ?? undefined, // Effort Hours Estimate + 89: input.metadata.find((m) => m.name == "offshoreEfforts")?.value ?? undefined, // Estimate Efforts Days Offshore (extract from metadata) + 90: input.metadata.find((m) => m.name == "onsiteEfforts")?.value ?? undefined, // Estimate Efforts Days Onsite (extract from metadata) + }; + + return Object.fromEntries(Object.entries(map).filter(([_, v]) => v !== undefined)) as { + [key: number]: string; + }; + } + + private mapProjectInfoForUpdate( + input: UpdateChallengeInput_UpdateInput, + prizeSets: any + ): { [key: number]: string } { + let effortsEstimate = {}; + + const metadata = input.metadataUpdate != null ? input.metadataUpdate.metadata : undefined; + if (metadata != null) { + effortsEstimate = { + 88: metadata.find((m) => m.name == "effortHoursEstimate")?.value.toString() ?? undefined, // Effort Hours Estimate + 89: metadata.find((m) => m.name == "offshoreEfforts")?.value.toString() ?? undefined, // Estimate Efforts Days Offshore (extract from metadata) + 90: metadata.find((m) => m.name == "onsiteEfforts")?.value.toString() ?? undefined, // Estimate Efforts Days Onsite (extract from metadata) + }; + } + + let projectInfo: { [key: number]: string } = {}; + + if (input.name != null) { + projectInfo = { + 6: input.name, + }; + } + if (input.billing?.billingAccountId != null) { + projectInfo[32] = input.billing?.billingAccountId!.toString(); + } + + return { + ...projectInfo, + ...effortsEstimate, }; } - private mapPhaseCriteria(phase: any) { + // prettier-ignore + public mapPhases(subTrack: string, phases: Challenge_Phase[]) { + return phases.map((phase: Challenge_Phase, index: number) => { + return LegacyPhase.fromJSON({ + phaseTypeId: this.mapPhaseNameToPhaseTypeId(phase.name), + phaseStatusId: phase.isOpen ? 2 : phase.actualEndDate ? 3 : 1, + fixedStartTime: _.isUndefined(phase.predecessor) ? phase.scheduledStartDate : undefined, + scheduledStartTime: phase.scheduledStartDate, + scheduledEndTime: phase.scheduledEndDate, + actualStartTime: phase.actualStartDate, + actualEndTime: phase.actualEndDate, + duration: phase.duration * 1000, + phaseCriteria: this.mapPhaseCriteria(subTrack, phase), + }) + }); + } + + // prettier-ignore + private mapPhaseCriteria(subTrack: string, phase: Challenge_Phase): { [key: number]: string | undefined } { 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" + (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 + + const map = { + 1: this.mapScorecard(subTrack, this.mapPhaseNameToPhaseTypeId(phase.name)), // Scorecard ID + 2: phase.name === "Registration" ? '1' : undefined, // Registration Number + 3: phase.name === "Submission" ? submissionPhaseConstraint?.value.toString() ?? // if we have a submission phase constraint use it + reviewPhaseConstraint?.value != null ? '1' : undefined // otherwise if we have a review phase constraint use 1 + : undefined, 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 + phase.name === "Review" ? reviewPhaseConstraint?.value.toString() ?? '2' : phase.name === "Iterative Review" ? '1' : undefined, // Reviewer Number + '7': undefined, // View Reviews During Review }; + + return Object.fromEntries(Object.entries(map).filter(([_, v]) => v !== undefined)) as { [key: number]: string }; } private mapPhaseNameToPhaseTypeId(name: string) { @@ -237,6 +326,92 @@ class LegacyMapper { return 18; } } + + // prettier-ignore + private mapScorecard(subTrack: string, phaseTypeId: number | undefined): string | undefined { + const isNonProd = process.env.ENV != "prod"; + + // TODO: Update scorecard ids for all subtracks and check for dev environment + + let scorecard = undefined; + + if ( + subTrack === V4_SUBTRACKS.FIRST_2_FINISH && + phaseTypeId === PhaseTypeIds.IterativeReview + ) { + scorecard = isNonProd ? 30001551 : 30002160; + } else if ( + subTrack === V4_SUBTRACKS.DESIGN_FIRST_2_FINISH && + phaseTypeId === PhaseTypeIds.Review + ) { + scorecard = isNonProd ? 30001610 : 30001101; + } else if (subTrack === V4_SUBTRACKS.BUG_HUNT) { + if (phaseTypeId === PhaseTypeIds.Review) { + scorecard = isNonProd ? 30001610 : 30001220; + } else if (phaseTypeId === PhaseTypeIds.SpecificationReview) { + scorecard = isNonProd ? 30001610 : 30001120; + } + } else if ( + subTrack === V4_SUBTRACKS.DEVELOP_MARATHON_MATCH && + phaseTypeId === PhaseTypeIds.Review + ) { + scorecard = isNonProd ? 30001610 : 30002133; + } else if ( + subTrack === V4_SUBTRACKS.MARATHON_MATCH && + phaseTypeId === PhaseTypeIds.Review + ) { + scorecard = isNonProd ? 30001610 : 30002133; + } else if (subTrack === V4_SUBTRACKS.WEB_DESIGNS) { + if (phaseTypeId === PhaseTypeIds.SpecificationReview) { + scorecard = isNonProd ? 30001610 : 30001040; + } else if (phaseTypeId === PhaseTypeIds.CheckpointScreening) { + scorecard = isNonProd ? 30001610 : 30001364; + } else if (phaseTypeId === PhaseTypeIds.CheckpointReview) { + scorecard = isNonProd ? 30001610 : 30001004; + } else if (phaseTypeId === PhaseTypeIds.Screening) { + scorecard = isNonProd ? 30001610 : 30001363; + } else if (phaseTypeId === PhaseTypeIds.Review) { + scorecard = isNonProd ? 30001610 : 30001031; + } else if (phaseTypeId === PhaseTypeIds.Approval) { + scorecard = isNonProd ? 30001610 : 30000720; + } + } else if ( + subTrack === V4_SUBTRACKS.CODE && + phaseTypeId === PhaseTypeIds.Review + ) { + scorecard = isNonProd ? 30002133 : 30002133; + } + + return scorecard ? scorecard.toString() : undefined; + } + + private mapProjectStatus(status: string | undefined): number | undefined { + if (status == null) return undefined; + + if (status === ChallengeStatuses.Draft) { + return legacyChallengeStatusesMap.Draft; + } + if (status === ChallengeStatuses.Active) { + return legacyChallengeStatusesMap.Active; + } + if (status.toLowerCase().indexOf("cancel") !== -1) { + return legacyChallengeStatusesMap.Cancelled; + } + } + + private async mapGroupIds(groups: string[]): Promise { + const oldGroupIds: number[] = []; + + const token = await m2mToken.getM2MToken(); + for (const groupId of groups) { + const group = await getRequest(`${process.env.TOPCODER_API_URL}/groups/${groupId}`, token); + if (group != null && !group.oldId) { + oldGroupIds.push(group.oldId); + } + } + + return oldGroupIds; + } } export default new LegacyMapper(); diff --git a/yarn.lock b/yarn.lock index dfc34bc..640f1f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -48,295 +48,295 @@ "@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== +"@aws-sdk/abort-controller@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.296.0.tgz#0e34a93366ee59eb5d24ea164e1cc2687e2071de" + integrity sha512-gNUFBlBw6+sEMfDjPVa83iscpQwXBS4uoiZXnfeQ6s6tnaxqQpJDrBBmNvYqDEXNdaAJX4FhayEwkSvtir/f3A== dependencies: - "@aws-sdk/types" "3.292.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" "@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== + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.296.0.tgz#382946ba77f0a3b948d9c10751d014d91149103c" + integrity sha512-MOjP9hKBWv63yh0/2rNbRSR9l/VeXHS1BvR3NigcYC7Do3dZMgpJEebDN5a6ON/7NFLZNoctS9q8EAu65gpKhQ== 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== + "@aws-sdk/client-sts" "3.296.0" + "@aws-sdk/config-resolver" "3.296.0" + "@aws-sdk/credential-provider-node" "3.296.0" + "@aws-sdk/fetch-http-handler" "3.296.0" + "@aws-sdk/hash-node" "3.296.0" + "@aws-sdk/invalid-dependency" "3.296.0" + "@aws-sdk/middleware-content-length" "3.296.0" + "@aws-sdk/middleware-endpoint" "3.296.0" + "@aws-sdk/middleware-host-header" "3.296.0" + "@aws-sdk/middleware-logger" "3.296.0" + "@aws-sdk/middleware-recursion-detection" "3.296.0" + "@aws-sdk/middleware-retry" "3.296.0" + "@aws-sdk/middleware-serde" "3.296.0" + "@aws-sdk/middleware-signing" "3.296.0" + "@aws-sdk/middleware-stack" "3.296.0" + "@aws-sdk/middleware-user-agent" "3.296.0" + "@aws-sdk/node-config-provider" "3.296.0" + "@aws-sdk/node-http-handler" "3.296.0" + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/smithy-client" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/url-parser" "3.296.0" + "@aws-sdk/util-base64" "3.295.0" + "@aws-sdk/util-body-length-browser" "3.295.0" + "@aws-sdk/util-body-length-node" "3.295.0" + "@aws-sdk/util-defaults-mode-browser" "3.296.0" + "@aws-sdk/util-defaults-mode-node" "3.296.0" + "@aws-sdk/util-endpoints" "3.296.0" + "@aws-sdk/util-retry" "3.296.0" + "@aws-sdk/util-user-agent-browser" "3.296.0" + "@aws-sdk/util-user-agent-node" "3.296.0" + "@aws-sdk/util-utf8" "3.295.0" + "@aws-sdk/util-waiter" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/client-sso-oidc@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.296.0.tgz#0edd5a3a065215cbf3e04e6f48b41b31531bf109" + integrity sha512-GRycCVdlFICvWwv9z6Mc/2BvSBOvchWO7UTklvbKXeDn6D05C+02PfxeoocMTc4r8/eFoEQWs67h5u/lPpyHDw== 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== + "@aws-sdk/config-resolver" "3.296.0" + "@aws-sdk/fetch-http-handler" "3.296.0" + "@aws-sdk/hash-node" "3.296.0" + "@aws-sdk/invalid-dependency" "3.296.0" + "@aws-sdk/middleware-content-length" "3.296.0" + "@aws-sdk/middleware-endpoint" "3.296.0" + "@aws-sdk/middleware-host-header" "3.296.0" + "@aws-sdk/middleware-logger" "3.296.0" + "@aws-sdk/middleware-recursion-detection" "3.296.0" + "@aws-sdk/middleware-retry" "3.296.0" + "@aws-sdk/middleware-serde" "3.296.0" + "@aws-sdk/middleware-stack" "3.296.0" + "@aws-sdk/middleware-user-agent" "3.296.0" + "@aws-sdk/node-config-provider" "3.296.0" + "@aws-sdk/node-http-handler" "3.296.0" + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/smithy-client" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/url-parser" "3.296.0" + "@aws-sdk/util-base64" "3.295.0" + "@aws-sdk/util-body-length-browser" "3.295.0" + "@aws-sdk/util-body-length-node" "3.295.0" + "@aws-sdk/util-defaults-mode-browser" "3.296.0" + "@aws-sdk/util-defaults-mode-node" "3.296.0" + "@aws-sdk/util-endpoints" "3.296.0" + "@aws-sdk/util-retry" "3.296.0" + "@aws-sdk/util-user-agent-browser" "3.296.0" + "@aws-sdk/util-user-agent-node" "3.296.0" + "@aws-sdk/util-utf8" "3.295.0" + tslib "^2.5.0" + +"@aws-sdk/client-sso@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.296.0.tgz#97c2061b2f98cda0e5c65e8f13408f15dac7ae7d" + integrity sha512-0P0x++jhlmhzViFPOHvTb7+Z6tSV9aONwB8CchIseg2enSPBbGfml7y5gQu1jdOTDS6pBUmrPZ+9sOI4/GvAfA== 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== + "@aws-sdk/config-resolver" "3.296.0" + "@aws-sdk/fetch-http-handler" "3.296.0" + "@aws-sdk/hash-node" "3.296.0" + "@aws-sdk/invalid-dependency" "3.296.0" + "@aws-sdk/middleware-content-length" "3.296.0" + "@aws-sdk/middleware-endpoint" "3.296.0" + "@aws-sdk/middleware-host-header" "3.296.0" + "@aws-sdk/middleware-logger" "3.296.0" + "@aws-sdk/middleware-recursion-detection" "3.296.0" + "@aws-sdk/middleware-retry" "3.296.0" + "@aws-sdk/middleware-serde" "3.296.0" + "@aws-sdk/middleware-stack" "3.296.0" + "@aws-sdk/middleware-user-agent" "3.296.0" + "@aws-sdk/node-config-provider" "3.296.0" + "@aws-sdk/node-http-handler" "3.296.0" + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/smithy-client" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/url-parser" "3.296.0" + "@aws-sdk/util-base64" "3.295.0" + "@aws-sdk/util-body-length-browser" "3.295.0" + "@aws-sdk/util-body-length-node" "3.295.0" + "@aws-sdk/util-defaults-mode-browser" "3.296.0" + "@aws-sdk/util-defaults-mode-node" "3.296.0" + "@aws-sdk/util-endpoints" "3.296.0" + "@aws-sdk/util-retry" "3.296.0" + "@aws-sdk/util-user-agent-browser" "3.296.0" + "@aws-sdk/util-user-agent-node" "3.296.0" + "@aws-sdk/util-utf8" "3.295.0" + tslib "^2.5.0" + +"@aws-sdk/client-sts@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.296.0.tgz#98aee362858f2cad775ee037f1bb8f259d4bf4fc" + integrity sha512-ew7hSVNpitnLCIRVhnI2L1HZB/yYpRQFReR62fOqCUnpKqm6WGga37bnvgYbY5y0Rv23C0VHARovwunVg1gabA== 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" + "@aws-sdk/config-resolver" "3.296.0" + "@aws-sdk/credential-provider-node" "3.296.0" + "@aws-sdk/fetch-http-handler" "3.296.0" + "@aws-sdk/hash-node" "3.296.0" + "@aws-sdk/invalid-dependency" "3.296.0" + "@aws-sdk/middleware-content-length" "3.296.0" + "@aws-sdk/middleware-endpoint" "3.296.0" + "@aws-sdk/middleware-host-header" "3.296.0" + "@aws-sdk/middleware-logger" "3.296.0" + "@aws-sdk/middleware-recursion-detection" "3.296.0" + "@aws-sdk/middleware-retry" "3.296.0" + "@aws-sdk/middleware-sdk-sts" "3.296.0" + "@aws-sdk/middleware-serde" "3.296.0" + "@aws-sdk/middleware-signing" "3.296.0" + "@aws-sdk/middleware-stack" "3.296.0" + "@aws-sdk/middleware-user-agent" "3.296.0" + "@aws-sdk/node-config-provider" "3.296.0" + "@aws-sdk/node-http-handler" "3.296.0" + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/smithy-client" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/url-parser" "3.296.0" + "@aws-sdk/util-base64" "3.295.0" + "@aws-sdk/util-body-length-browser" "3.295.0" + "@aws-sdk/util-body-length-node" "3.295.0" + "@aws-sdk/util-defaults-mode-browser" "3.296.0" + "@aws-sdk/util-defaults-mode-node" "3.296.0" + "@aws-sdk/util-endpoints" "3.296.0" + "@aws-sdk/util-retry" "3.296.0" + "@aws-sdk/util-user-agent-browser" "3.296.0" + "@aws-sdk/util-user-agent-node" "3.296.0" + "@aws-sdk/util-utf8" "3.295.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" + tslib "^2.5.0" + +"@aws-sdk/config-resolver@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.296.0.tgz#be6971d182ef53de21140b6fa00f15e86aa9fd4b" + integrity sha512-Ecdp7fmIitHo49NRCyIEHb9xlI43J7qkvhcwaKGGqN5jvoh0YhR2vNr195wWG8Ip/9PwsD4QV4g/XT5EY7XkMA== + dependencies: + "@aws-sdk/signature-v4" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/util-config-provider" "3.295.0" + "@aws-sdk/util-middleware" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-env@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.296.0.tgz#9812fc635876cba5650cd6d1f30c70f34b41dcde" + integrity sha512-eDWSU3p04gytkkVXnYn05YzrP5SEaj/DQiafd4y+iBl8IFfF3zM6982rs6qFhvpwrHeSbLqHNfKR1HDWVwfG5g== + dependencies: + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-imds@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.296.0.tgz#200ea2af352451cdd99584baac846bb86cb636b1" + integrity sha512-DXqksHyT/GVVYbPGknMARKi6Rk6cqCHJUAejePIx5cz1SCKlDrV704hykafHIjaDoy/Zeoj1wzjfwy83sJfDCg== + dependencies: + "@aws-sdk/node-config-provider" "3.296.0" + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/url-parser" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-ini@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.296.0.tgz#c2afe7c064e6dd6f7f3900870a2c1b9b98f00fa5" + integrity sha512-U0ecY0GX2jeDAgmTzaVO9YgjlLUfb8wgZSu1OwbOxCJscL/5eFkhcF0/xJQXDbRgcj4H4dlquqeSWsBVl/PgvQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.296.0" + "@aws-sdk/credential-provider-imds" "3.296.0" + "@aws-sdk/credential-provider-process" "3.296.0" + "@aws-sdk/credential-provider-sso" "3.296.0" + "@aws-sdk/credential-provider-web-identity" "3.296.0" + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/shared-ini-file-loader" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-node@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.296.0.tgz#62c5a1600f5b60013c474476d943b831e56b17f0" + integrity sha512-oCkmh2b1DQhHkhd/qA9jiSIOkrBBK7cMg1/PVIgLw8e15NkzUHBObLJ/ZQw6ZzCxZzjlMYaFv9oCB8hyO8txmA== + dependencies: + "@aws-sdk/credential-provider-env" "3.296.0" + "@aws-sdk/credential-provider-imds" "3.296.0" + "@aws-sdk/credential-provider-ini" "3.296.0" + "@aws-sdk/credential-provider-process" "3.296.0" + "@aws-sdk/credential-provider-sso" "3.296.0" + "@aws-sdk/credential-provider-web-identity" "3.296.0" + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/shared-ini-file-loader" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-process@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.296.0.tgz#d18399dc70306240d8b96b8de1eeba545457f92f" + integrity sha512-AY7sTX2dGi8ripuCpcJLYHOZB2wJ6NnseyK/kK5TfJn/pgboKwuGtz0hkJCVprNWomKa6IpHksm7vLQ4O2E+UA== + dependencies: + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/shared-ini-file-loader" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-sso@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.296.0.tgz#c26648e9a16d25eadfe1c8125e507afa3f723566" + integrity sha512-zPFHDX/niXfcQrKQhmBv1XPYEe4b7im4vRKrzjYXgDRpG2M3LP0KaWIwN6Ap+GRYBNBthen86vhTlmKGzyU5YA== + dependencies: + "@aws-sdk/client-sso" "3.296.0" + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/shared-ini-file-loader" "3.296.0" + "@aws-sdk/token-providers" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-web-identity@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.296.0.tgz#91323cc41aea384e755f053b44e51a1d101ecd38" + integrity sha512-Rl6Ohoekxe+pccA55XXQDW5wApbg3rGWr6FkmPRcg7Ld6Vfe+HL8OtfsFf83/0eoFerevbif+00BdknXWT05LA== + dependencies: + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/fetch-http-handler@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.296.0.tgz#067426b5e1b6edf375abb61070fd918f44e59493" + integrity sha512-wHuKQ+PGKQkYGVuIGscbcbbASl8yIVOSC+QTrZQ4PNsMDvQd9ey2npsmxZk1Z2ULaxY+qYtZCmByyGc8k51TtQ== + dependencies: + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/querystring-builder" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/util-base64" "3.295.0" + tslib "^2.5.0" + +"@aws-sdk/hash-node@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.296.0.tgz#ccf08fe0154d1e83bccd9cb4015a6f41245b8e44" + integrity sha512-01Sgxm0NE3rtEznLY8vx1bfNsIeM5Sk5SjY9RXqnvCf9EyaKH9x5FMS/DX/SgDdIYi3aXbTwiwScNVCNBzOIQA== + dependencies: + "@aws-sdk/types" "3.296.0" + "@aws-sdk/util-buffer-from" "3.295.0" + "@aws-sdk/util-utf8" "3.295.0" + tslib "^2.5.0" + +"@aws-sdk/invalid-dependency@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.296.0.tgz#d3f7d059be44e9a3de2111f82df9f9b560fd1634" + integrity sha512-dmy4fUds0woHGjxwziaSYCLtb/SOfoEeQjW0GFvHj+YGFyY5hJzna4C759Tt8X5obh1evUXlQcH+FL7TS+7tRQ== + dependencies: + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" "@aws-sdk/is-array-buffer@3.201.0": version "3.201.0" @@ -345,261 +345,261 @@ 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" +"@aws-sdk/is-array-buffer@3.295.0": + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.295.0.tgz#09de3d0fb9fb9d28c9edc48e86ca546d34fd8c98" + integrity sha512-SCIt10cr5dud7hvwveU4wkLjvkGssJ3GrcbHCds2NwI+JHmpcaaNYLAqi305JAuT29T36U5ssTFDSmrrEOcfag== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/middleware-content-length@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.296.0.tgz#7e7fa9c6b7618f0021387fe4ee3e977a06c7b514" + integrity sha512-e7lJm3kkC2pWZdIw23gpMUk1GrpRTBRqhdFfVwyduXw6Wo4nBYv8Z5MOYy3/SlpjE1BDCaPBoZ3O19cO3arHxg== + dependencies: + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-endpoint@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.296.0.tgz#df65c578ea6b216cd722b4e4a6baeaf28214333f" + integrity sha512-t8gc7FHr6KkFD35eSzv3VEYl2vNqzAHbux5Bn0su6TJbaTxXiQKcf2jZDTAh7LzUyrB1LH39mNN+at7r3Qm/3g== + dependencies: + "@aws-sdk/middleware-serde" "3.296.0" + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/signature-v4" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/url-parser" "3.296.0" + "@aws-sdk/util-config-provider" "3.295.0" + "@aws-sdk/util-middleware" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-host-header@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.296.0.tgz#e5c0f548c68751669f036e2a4637b05705629085" + integrity sha512-V47dFtfkX5lXWv9GDp71gZVCRws4fEdQ9QF9BQ/2UMSNrYjQLg6mFe7NibH+IJoNOid2FIwWIl94Eos636VGYQ== + dependencies: + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-logger@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.296.0.tgz#5d8d7e688697bdb2470751ded15b7be7728e5461" + integrity sha512-LzfEEFyBR9LXdWwLdtBrmi1vLdzgdJNntEgzqktVF8LwaCyY+9xIE6TGu/2V+9fJHAwECxjOC1eQbNQdAZ0Tmw== + dependencies: + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-recursion-detection@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.296.0.tgz#776d4a1f32ae745896fc3b46fd40b7937f5b47b9" + integrity sha512-UG7TLDPz9ImQG0uVklHTxE9Us7rTImwN+6el6qZCpoTBuGeXgOkfb0/p8izJyFgY/hMUR4cZqs7IdCDUkxQF3w== + dependencies: + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-retry@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.296.0.tgz#71d4b9213cbbf28f7c156b30fa333b04fd1f0123" + integrity sha512-Tz3gDZm5viQg7BG5bF9Cg0qbm4+Ur3a7wcGkj1XHQdzGDYR76gxvU0bfnSNUmWRz3kaVNyISyXSOUygG0cbhbw== + dependencies: + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/service-error-classification" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/util-middleware" "3.296.0" + "@aws-sdk/util-retry" "3.296.0" + tslib "^2.5.0" 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/middleware-sdk-sts@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.296.0.tgz#19c29a7e916af16c51132339c71af526a3ec4c10" + integrity sha512-0EnHtiRzcRcXaF6zEgcRGUtVgX0RqczwlGXjtryHcxiqU/+adqbRuckC7bdMF4Zva6GVPS25XppvGF4M+UzAEw== + dependencies: + "@aws-sdk/middleware-signing" "3.296.0" + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/signature-v4" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-serde@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.296.0.tgz#489454861c21446100dfc609d73073b4d164a864" + integrity sha512-xk2PpWAAX758oUTGkGBAncpOr7ddIXisjD2Y2r9DDXuE4JMho2x6zcrVSiYsGIQ6MHZ9XNJKBVDiK9PA4iQWGQ== + dependencies: + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-signing@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.296.0.tgz#44816a5c7244f812587f8e8f970a5e51b4cca373" + integrity sha512-wyiG+WPDvugGTIPpKchGOdvvpcMZEN2IfP6iK//QAqGXsC6rDm5+SNZ3+elvduZjPUdVA06W0CcFYBAkVz8D7Q== + dependencies: + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/signature-v4" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/util-middleware" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-stack@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.296.0.tgz#4c95d9aeb655270710f3e1fd2af39a6b8a760e33" + integrity sha512-Rgo7/mdk9tt4qa9+pzG3AoGNhuj7NmnF5H+3DoPm75h58BYP8hKbKobdPGgI2rZLPtO3PGgmyw/4K4tQJPIZ8g== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/middleware-user-agent@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.296.0.tgz#e2fb57b8427b7b347a971d93cf4fe92831221640" + integrity sha512-L7jacxSt6gxX1gD3tQtfwHqBDk5rT2wWD3rxBa6rs7f81b9ObgY/sPT2IgRT7JNCVzvKLYFxJaTklDj65mY1SQ== + dependencies: + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/util-endpoints" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/node-config-provider@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.296.0.tgz#d333190ed96881cebb266f5ed968f1da50c5501d" + integrity sha512-S/tYcuw9ACOWRmRe5oUkmutQ+TApjVs0yDl504DKs74f3p4kRgI/MGWkBiR3mcfThHaxu81z0gkRL2qfW2SDwg== + dependencies: + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/shared-ini-file-loader" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/node-http-handler@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.296.0.tgz#163e71eec6524746d2a93681bd353c5bdf870ae2" + integrity sha512-D15jjPqYSNhEq58BwkmIpD3VwqG4bL5acAaNu5wWAI4S4236JlG+nmpi3gEeE25z1KCwtBl7G30fVRgXYJ2CWA== + dependencies: + "@aws-sdk/abort-controller" "3.296.0" + "@aws-sdk/protocol-http" "3.296.0" + "@aws-sdk/querystring-builder" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/property-provider@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.296.0.tgz#10dae9edcdfa8ef97d1781c2f7fdf34f8545831c" + integrity sha512-kjczxE9Od5LoAKQOmxVWISJ9oPG3aCsB+2+NdI+k9EJFDXUUdMcVV3Skei5uHGgKLMsI6CZy8ezZx6YxOSLSew== + dependencies: + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/protocol-http@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.296.0.tgz#064d7ceb739f9721bde89b23545a35704b8b7dc7" + integrity sha512-0U1Z/+tpwdRiSToWo1bpdkbTzjbLugTnd02ATjvK4B7zi363SUGlKfoWgV+v7FU/22CIUI1ZIe7XzXvq5rJfjA== + dependencies: + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/querystring-builder@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.296.0.tgz#18ef70d03e1abf76e75db0603cb5e9d30fe04814" + integrity sha512-+ZrZdTRaVI1R1xKQNrTwuiRoPateUaJ/DNw/myJpTPt+ZRg0H7LKBGaJYwL4pl5l/z1UM/E1fOttSfSW7GHxfw== + dependencies: + "@aws-sdk/types" "3.296.0" + "@aws-sdk/util-uri-escape" "3.295.0" + tslib "^2.5.0" + +"@aws-sdk/querystring-parser@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.296.0.tgz#9c708831e27a06afc0e01f33db1cbfbfbcae5cb9" + integrity sha512-nLNZKVQfK42euv7101cE5qfg17YCtGcfccx3B5XSAzvyTROR46kwYqbEvYSsWisbZoRhbQc905gB/5E0U5HDIw== + dependencies: + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/service-error-classification@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.296.0.tgz#3596bcb45c0ae8619e214ac1ce5351eeee502135" + integrity sha512-YIsWSQ38e1+FqXz3CMrkKS0JD8OLlHf6I72PJhbfegePpQQFqi9R8OREjP5V7UR9Z972yruv4i96ROH6SCtmoA== + +"@aws-sdk/shared-ini-file-loader@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.296.0.tgz#49ef62821ad19aa674edcd688b2c87b229e20b9a" + integrity sha512-S31VfdiruN2trayoeB7HifsEB+WXhtfECosj90K903rzfyX+Eo+uUoK9O07UotxJ2gB3MBQ7R8pNnZio3Lb66w== + dependencies: + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/signature-v4@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.296.0.tgz#15d3a5712cb767cb93be9791f80ace9edcbeb440" + integrity sha512-NQyJ/FClty4VmF1WoV4rOkbN0Unn0zevzy8iJrYhqxE3Sc7lySM4Btnsd4Iqelm2dR6l+jNRApGgD8NvoGjGig== + dependencies: + "@aws-sdk/is-array-buffer" "3.295.0" + "@aws-sdk/types" "3.296.0" + "@aws-sdk/util-hex-encoding" "3.295.0" + "@aws-sdk/util-middleware" "3.296.0" + "@aws-sdk/util-uri-escape" "3.295.0" + "@aws-sdk/util-utf8" "3.295.0" + tslib "^2.5.0" + +"@aws-sdk/smithy-client@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.296.0.tgz#8a534da9405ba2144bbf41d27feda91b52407a4b" + integrity sha512-HEpsLNozGe9XOWouq5A1TFw5KhFodi8tZqYVNEbSpLoRR+EQKf6OCRvKIRkOn7FnnaOasOR1n7S0D51UG6/irw== + dependencies: + "@aws-sdk/middleware-stack" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/token-providers@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.296.0.tgz#1e9b09e2ace5a469a4c908efdc1c8321e978a367" + integrity sha512-yC1ku7A5S+o/CLlgbgDB2bx8+Wq43qj8xfohmTuIhpiP2m/NyUiRVv6S6ARONLI6bVeo1T2/BFk5Q9DfE2xzAQ== + dependencies: + "@aws-sdk/client-sso-oidc" "3.296.0" + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/shared-ini-file-loader" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/types@3.296.0", "@aws-sdk/types@^3.222.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.296.0.tgz#4de4a7c8e16a97e04a0cedf3c51ce96779a7f686" + integrity sha512-s0wIac64rrMEo2ioUxP9IarGiiCGmelCspNcoNTPSjGl25QqjhyfQqTeGgS58qJ4fHoQb07qra39930xp1IzJg== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/url-parser@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.296.0.tgz#d063a1566ac92722cf13e86572e0ca54c33be489" + integrity sha512-nBgeGF+ziuDSLz+y8UAl6zL2tXxDwh3wqeXFe9ZcR4YW71BWuh+vEqEsaEMutOrfnJacCrYKTs9TkIOW41cEGg== + dependencies: + "@aws-sdk/querystring-parser" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" + +"@aws-sdk/util-base64@3.295.0": + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64/-/util-base64-3.295.0.tgz#99046cac5ab052252f9bd3340dc9c0e7cf483570" + integrity sha512-z1r40BsBiOTALnzASvLb4qutGwPpL+jH2UKTCV5WJLXZFMzRnpZaRfeZGE8lMJ/i0+jv9H9G1FmVzE8UgB4rhw== + dependencies: + "@aws-sdk/util-buffer-from" "3.295.0" + tslib "^2.5.0" + +"@aws-sdk/util-body-length-browser@3.295.0": + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.295.0.tgz#eb0400b7bec4fd5969fe18ce0ddf552db8a2e441" + integrity sha512-NbG4/RSHV1VueStPRclSo5zRjNUmcDlNAs29sniZF+YaN0+Ad7hEdu/YgJw39shBfUaurz2Wv0pufU3cxE5Tng== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-body-length-node@3.295.0": + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.295.0.tgz#587761de7cd79c91ca033de9545527a502e61133" + integrity sha512-dvGf8VBmrT66lM0n6P/h7wnlHS4Atafyivyl8f4TUCMvRdpqryvvrtnX6yYcq3T7VKQmas/2SOlgDvcrhGXaiw== + dependencies: + tslib "^2.5.0" "@aws-sdk/util-buffer-from@3.208.0": version "3.208.0" @@ -609,104 +609,104 @@ "@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== +"@aws-sdk/util-buffer-from@3.295.0": + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.295.0.tgz#616f0643a205733e03d4b00d1f00ba16b112c5aa" + integrity sha512-5ezVEITQnrQKn+CU9qfZHgRp2nrrbX0Clmlm9aiNjAEQEPHY33tWl0t6n8h8yU+IpGiNRMWBVC4aSJaE5NA1mA== dependencies: - "@aws-sdk/is-array-buffer" "3.292.0" - tslib "^2.3.1" + "@aws-sdk/is-array-buffer" "3.295.0" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-config-provider@3.295.0": + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.295.0.tgz#c0f76407181722791b0a7bf80a9f01e78fd80250" + integrity sha512-/5Dl1aV2yI8YQjqwmg4RTnl/E9NmNsx7HIwBZt+dTcOrM0LMUwczQBFFcLyqCj/qv5y+VsvLoAAA/OiBT7hb3w== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-defaults-mode-browser@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.296.0.tgz#c87fcf217de8b827b2c4f8604eeaa109719741ea" + integrity sha512-R+nzc0PuTMaOG3LV4FoS5W7oMAqqr8G1IyI+A4Q5iem6YDMF157qV5h6wpIt3A8n9YfjyssLsAT/WPfyv/M79w== dependencies: - "@aws-sdk/property-provider" "3.292.0" - "@aws-sdk/types" "3.292.0" + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/types" "3.296.0" bowser "^2.11.0" - tslib "^2.3.1" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-defaults-mode-node@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.296.0.tgz#1c09f936eadc0e82ec519951d4b49c119c6e9b23" + integrity sha512-zsIYynqjBE2xlzpJsT3lb5gy06undSgYq9ziId7QaHFagqtrecHI2ZMcu2tBFcONpu9NPj3nqJB+kJUAnBc8sQ== 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/config-resolver" "3.296.0" + "@aws-sdk/credential-provider-imds" "3.296.0" + "@aws-sdk/node-config-provider" "3.296.0" + "@aws-sdk/property-provider" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-endpoints@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.296.0.tgz#ed4b77d92bb39b3b80d6e36a1a8a7eb3e7f19cda" + integrity sha512-YraGGLJepXM6HCTaqEGTFf8RFRBdJ0C6uG5k0kVhiXmYxBkeupn8J07CVp9jfWqcPYWElAnMGVEZKU1OjRo4HQ== dependencies: - "@aws-sdk/types" "3.292.0" - tslib "^2.3.1" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-hex-encoding@3.295.0": + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.295.0.tgz#13acb924f88785d317c9bec37e5ca173ccc4a0ca" + integrity sha512-XJcoVo41kHzhe28PBm/rqt5mdCp8R6abwiW9ug1dA6FOoPUO8kBUxDv6xaOmA2hfRvd2ocFfBXaUCBqUowkGcQ== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" "@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== + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.295.0.tgz#b421047b977ef53a8575b7b72780c7209ff5480e" + integrity sha512-d/s+zhUx5Kh4l/ecMP/TBjzp1GR/g89Q4nWH6+wH5WgdHsK+LG+vmsk6mVNuP/8wsCofYG4NBqp5Ulbztbm9QA== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-middleware@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.296.0.tgz#cc7162e3c84ae67a16841910244a97c4b0c02bfc" + integrity sha512-MNWU+doVuX+mIehEManP6OP+f08T33qQpHoBqKIeKpn3TjZjMHG7ujACTkJiEOHUrnwTov7h0Sm+3OZwk3kh9w== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-retry@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-retry/-/util-retry-3.296.0.tgz#271f8bd2d05f5e6e200b5fe9b7aa09ba6e49e0dc" + integrity sha512-0mh7SqOMjuJ4vE423SzA/AfCLM68jykbfpEBkTmfqkpjkeQSW+UXHAUdXsMmfzIneiq7go5Z548F868C3cZnwQ== dependencies: - "@aws-sdk/service-error-classification" "3.292.0" - tslib "^2.3.1" + "@aws-sdk/service-error-classification" "3.296.0" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-uri-escape@3.295.0": + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.295.0.tgz#c8ffb883d5398b3659fbf209391ecbbb1ff5888d" + integrity sha512-1H5DcyIoXF8XcPBWf7wzHt0l+TW2EoR8Oq4gsVrPTQkHMTVclC2Yn8EF3gc4arwVBzwLulI9LMBE2L8fexGfTQ== dependencies: - tslib "^2.3.1" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-user-agent-browser@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.296.0.tgz#d8050ebaa25bc988ba4bafc11e9e967fdc7e6850" + integrity sha512-MGGG+09VkF0N+8KEht8NNE6Q7bqmddgqLkUbvzSky0y18UPEZyq9LTC4JZtzDDOzf/swgbq2IQ/5wtB81iouog== dependencies: - "@aws-sdk/types" "3.292.0" + "@aws-sdk/types" "3.296.0" bowser "^2.11.0" - tslib "^2.3.1" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-user-agent-node@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.296.0.tgz#2335b229931cc0b2624f2853d794318eb617c35d" + integrity sha512-AMWac8aIBnaa9nxAEpZ752j29a/UQTViRfR5gnCX38ECBKGfOQMpgYnee5HdlMr4GHJj0WkOzQxBtInW4pV58g== dependencies: - "@aws-sdk/node-config-provider" "3.292.0" - "@aws-sdk/types" "3.292.0" - tslib "^2.3.1" + "@aws-sdk/node-config-provider" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" @@ -723,22 +723,22 @@ "@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== +"@aws-sdk/util-utf8@3.295.0": + version "3.295.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8/-/util-utf8-3.295.0.tgz#4d855e229ba18ee3893d588f231a8e6c9905389e" + integrity sha512-ITN8v3F63ZkA4sdmCtSbS/mhav4F0MEAiXDAUXtMJLNqVtaVcyQST4i9vNmPpIVthAPAtP0QjyF2tq/Di8bxtQ== dependencies: - "@aws-sdk/util-buffer-from" "3.292.0" - tslib "^2.3.1" + "@aws-sdk/util-buffer-from" "3.295.0" + tslib "^2.5.0" -"@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== +"@aws-sdk/util-waiter@3.296.0": + version "3.296.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.296.0.tgz#5322f03870f5d09421e5ee7901344806864386d3" + integrity sha512-L57uIC74VyTjAdCH0wQqtvJtwK4+gIT/51K/BJHEqVg6C1pOwgrdT6dHC3q8b+gdOrZ6Ff/vTEfh7FZmVcPPjg== dependencies: - "@aws-sdk/abort-controller" "3.292.0" - "@aws-sdk/types" "3.292.0" - tslib "^2.3.1" + "@aws-sdk/abort-controller" "3.296.0" + "@aws-sdk/types" "3.296.0" + tslib "^2.5.0" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -853,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.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== +"@topcoder-framework/client-relational@^0.10.13": + version "0.10.13" + resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/client-relational/-/client-relational-0.10.13.tgz#84293cd265328d5f770c28ffd690fbb434ac936b" + integrity sha512-p4ygOE0K2xrz/wmTSS5/3DX2lEH/bmiWsW+sL8RVstAhilWSQmdyJb49sI/QzbFqhHGS/aQnkKPt8gaNtIaVWQ== dependencies: "@grpc/grpc-js" "^1.8.0" - "@topcoder-framework/lib-common" "^0.7.0" - topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.29" + "@topcoder-framework/lib-common" "^0.10.13" + topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.46" tslib "^2.4.1" -"@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== +"@topcoder-framework/domain-acl@^0.10.13": + version "0.10.13" + resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/domain-acl/-/domain-acl-0.10.13.tgz#1d5462559f2acd3496a48576d46b611e4299eede" + integrity sha512-++CjwDkYrlOxOzTZ/ec1scVDDG36BY1agMsxANA4C4HE3laIysyPxLizm7/GEUJ8Ciu9VIEzjOQU+h3SpXPs1A== dependencies: "@grpc/grpc-js" "^1.8.7" - "@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" + "@topcoder-framework/client-relational" "^0.10.13" + "@topcoder-framework/lib-common" "^0.10.13" + topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.46" tslib "^2.4.1" -"@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== +"@topcoder-framework/lib-common@^0.10.13": + version "0.10.13" + resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/lib-common/-/lib-common-0.10.13.tgz#69a0c70d601cc37821ece1b13d300dbe8e6ddc10" + integrity sha512-LXaoLQma+7cs7ly6McXmhO3YWNF27MzqiR3fgtlefVU1XbfVfWhSfDLitTUSw08PMgv+VC6nTfyo0t4202ZVcg== dependencies: "@grpc/grpc-js" "^1.8.0" rimraf "^3.0.2" - topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.29" + topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.46" tslib "^2.4.1" "@tsconfig/node10@^1.0.7": @@ -919,6 +919,11 @@ dependencies: "@types/node" "*" +"@types/elasticsearch@^5.0.40": + version "5.0.40" + resolved "https://registry.yarnpkg.com/@types/elasticsearch/-/elasticsearch-5.0.40.tgz#811f6954088c264173e0a9876b97933250a4da10" + integrity sha512-lhnbkC0XorAD7Dt7X+94cXUSHEdDNnEVk/DgFLHgIZQNhixV631Lj4+KpXunTT5rCHyj9RqK3TfO7QrOiwEeUQ== + "@types/express-jwt@0.0.42": version "0.0.42" resolved "https://registry.yarnpkg.com/@types/express-jwt/-/express-jwt-0.0.42.tgz#4f04e1fadf9d18725950dc041808a4a4adf7f5ae" @@ -969,9 +974,9 @@ integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== "@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^18.11.17": - version "18.15.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014" - integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw== + version "18.15.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.5.tgz#3af577099a99c61479149b716183e70b5239324a" + integrity sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew== "@types/object-hash@^1.3.0": version "1.3.4" @@ -1006,10 +1011,10 @@ resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== -"@types/uuid@8.3.4": - version "8.3.4" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" - integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== +"@types/uuid@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.1.tgz#98586dc36aee8dacc98cc396dbca8d0429647aa6" + integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== acorn-walk@^8.1.1: version "8.2.0" @@ -1028,6 +1033,13 @@ agent-base@6: dependencies: debug "4" +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + ajv@^6.12.3: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1038,11 +1050,21 @@ ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + ansi-styles@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -1080,6 +1102,27 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sdk@^2.1339.0: + version "2.1340.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1340.0.tgz#2a64158bd4f350f85f8063440880b38bd92081ae" + integrity sha512-5amtFHWmJz+x0mKcwKJUBm2nKOJjO0MzzuVhrHFnmDWsUqP1VUsTxENoRdGitwoCH/o+MttLmf1/+lvgkYzbiw== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.16.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + util "^0.12.4" + uuid "8.0.0" + xml2js "0.4.19" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1132,6 +1175,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -1174,6 +1222,15 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + bunyan@^1.8.12: version "1.8.15" resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46" @@ -1184,6 +1241,14 @@ bunyan@^1.8.12: mv "~2" safe-json-stringify "~1" +call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + case-anything@^2.1.10: version "2.1.10" resolved "https://registry.yarnpkg.com/case-anything/-/case-anything-2.1.10.tgz#d18a6ca968d54ec3421df71e3e190f3bced23410" @@ -1194,6 +1259,17 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +chalk@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chokidar@^3.5.1: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -1361,6 +1437,15 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" +elasticsearch@^16.7.3: + version "16.7.3" + resolved "https://registry.yarnpkg.com/elasticsearch/-/elasticsearch-16.7.3.tgz#bf0e1cc129ab2e0f06911953a1b1f3c740715fab" + integrity sha512-e9kUNhwnIlu47fGAr4W6yZJbkpsgQJB0TqNK8rCANe1J4P65B1sGnbCFTgcKY3/dRgCWnuP1AJ4obvzW604xEQ== + dependencies: + agentkeepalive "^3.4.1" + chalk "^1.0.0" + lodash "^4.17.10" + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1371,6 +1456,16 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== + express-unless@*: version "2.1.3" resolved "https://registry.yarnpkg.com/express-unless/-/express-unless-2.1.3.tgz#f951c6cca52a24da3de32d42cfd4db57bc0f9a2e" @@ -1427,6 +1522,13 @@ follow-redirects@^1.14.0, follow-redirects@^1.15.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -1470,6 +1572,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -1512,6 +1623,13 @@ google-protobuf@^3.19.1: resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.2.tgz#4580a2bea8bbb291ee579d1fefb14d6fa3070ea4" integrity sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA== +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + grpc-server-reflection@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/grpc-server-reflection/-/grpc-server-reflection-0.1.5.tgz#76ba71649fd71b0ebae7d5254ddc781ba61054d0" @@ -1532,6 +1650,25 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1544,6 +1681,11 @@ hpagent@^1.2.0: resolved "https://registry.yarnpkg.com/hpagent/-/hpagent-1.2.0.tgz#0ae417895430eb3770c03443456b8d90ca464903" integrity sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA== +http-aws-es@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/http-aws-es/-/http-aws-es-6.0.0.tgz#1528978d2bee718b8732dcdced0856efa747aeff" + integrity sha512-g+qp7J110/m4aHrR3iit4akAlnW0UljZ6oTq/rCcbsI8KP9x+95vqUtx49M2XQ2JMpwJio3B6gDYx+E8WDxqiA== + http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -1570,6 +1712,23 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +ieee754@1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1578,11 +1737,19 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -1590,6 +1757,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-callable@^1.1.3: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" @@ -1607,6 +1779,13 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -1619,16 +1798,37 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-typed-array@^1.1.10, is-typed-array@^1.1.3: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== +isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +jmespath@0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" + integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -1763,7 +1963,7 @@ lodash@4.17.15: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@^4.17.15, lodash@^4.17.21: +lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -1855,7 +2055,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1, ms@^2.1.2, ms@^2.1.3: +ms@^2.0.0, ms@^2.1.1, ms@^2.1.2, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -1978,6 +2178,11 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== + punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -1988,6 +2193,11 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== + r7insight_node@^1.8.4: version "1.8.4" resolved "https://registry.yarnpkg.com/r7insight_node/-/r7insight_node-1.8.4.tgz#875633032137545b3cc7c80763baf09f6ba66801" @@ -2090,6 +2300,16 @@ safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + secure-json-parse@^2.4.0: version "2.7.0" resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" @@ -2147,6 +2367,13 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -2169,6 +2396,11 @@ strnum@^1.0.5: resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + 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" @@ -2194,9 +2426,9 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -"topcoder-interface@github:topcoder-platform/plat-interface-definition#v0.0.29": +"topcoder-interface@github:topcoder-platform/plat-interface-definition#v0.0.46": version "1.0.0" - resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/6ad366c0dc28a8452bd71ed87d718ac559bee62b" + resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/8ed5b7686125a17209c85c33f69c92476625e3c1" tough-cookie@~2.5.0: version "2.5.0" @@ -2262,9 +2494,9 @@ ts-proto-descriptors@1.7.1: protobufjs "^6.8.8" ts-proto@^1.126.1: - version "1.142.1" - resolved "https://registry.yarnpkg.com/ts-proto/-/ts-proto-1.142.1.tgz#1bd42195bcff35dedd0d9e7ae56dba9888f95be2" - integrity sha512-J0W3OWrX/+xNVu+AdukLOjYrFDsinngQ9uh+/jnYwObd6VwCjc6sbBz8VFVbQgTSDGv3ysEagCbimkCXcvYDWQ== + version "1.143.0" + resolved "https://registry.yarnpkg.com/ts-proto/-/ts-proto-1.143.0.tgz#2a757eadc03f6baefe454bf0fb4f3a16b11c1af7" + integrity sha512-a6pxp7y/R6PlaB+4adDVVTTZPHfNt4QLlm4wU8zBn5yXHbofBOIKLJ5bymwl0nizOAnuSMqt0GllOSAUnzkvYw== dependencies: "@types/object-hash" "^1.3.0" case-anything "^2.1.10" @@ -2289,7 +2521,7 @@ tslib@^1.11.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: +tslib@^2.3.1, tslib@^2.4.1, tslib@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -2318,23 +2550,44 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -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== +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util@^0.12.4: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +uuid@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" + integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuidv4@^6.2.13: - version "6.2.13" - resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.13.tgz#8f95ec5ef22d1f92c8e5d4c70b735d1c89572cb7" - integrity sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ== - dependencies: - "@types/uuid" "8.3.4" - 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== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== v8-compile-cache-lib@^3.0.1: version "3.0.1" @@ -2350,6 +2603,18 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +which-typed-array@^1.1.2: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -2364,6 +2629,19 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== + xss@^1.0.14: version "1.0.14" resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694"