diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0c852880..6b14028c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ # https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners -* @asein-sinch @JPPortier @krogers0607 @Dovchik +* @asein-sinch @JPPortier @matsk-sinch diff --git a/.github/scripts/validate-audit-report.sh b/.github/scripts/validate-audit-report.sh index a61cac56..65ebc943 100755 --- a/.github/scripts/validate-audit-report.sh +++ b/.github/scripts/validate-audit-report.sh @@ -7,7 +7,7 @@ awk 'NR > 1 {print ","} {print}' audit-report.txt >> audit-report.json echo ']}' >> audit-report.json # Filter JSON array to remove jest and lerna's transitive dependencies as these dependencies are not used at runtime -jq '.vulnerabilities |= map(select(.data.resolution.path | type == "string" and (startswith("lerna") or startswith("jest") or startswith("@types/jest") or startswith("babel-jest") or startswith("eslint") or startswith("@cucumber")) | not))' audit-report.json > audit-report-filtered.json +jq '.vulnerabilities |= map(select(.data.resolution.path | type == "string" and (startswith("lerna") or startswith("jest") or startswith("@types/jest") or startswith("babel-jest") or startswith("eslint") or startswith("@typescript-eslint") or startswith("@cucumber")) | not))' audit-report.json > audit-report-filtered.json # Fail the build if filtered JSON array contains audit advisories if [ "$(jq '.vulnerabilities[] | select(.type == "auditAdvisory") | .type' audit-report-filtered.json | wc -l)" -gt 0 ]; then diff --git a/docs/snippets/.env.example b/docs/snippets/.env.example new file mode 100644 index 00000000..1d86fb39 --- /dev/null +++ b/docs/snippets/.env.example @@ -0,0 +1,12 @@ +# The project ID where are defined the resources you want to use. +SINCH_PROJECT_ID= + +# The API key ID and secret to authenticate your requests to the Sinch API. +SINCH_KEY_ID= +SINCH_KEY_SECRET= + +# The virtual phone number you have rented from Sinch or planning to rent. +SINCH_PHONE_NUMBER= + +# The service plan ID for your Sinch account to configure the SMS plan associated with your virtual phone number. +SINCH_SERVICE_PLAN_ID= diff --git a/docs/snippets/README.md b/docs/snippets/README.md new file mode 100644 index 00000000..e067cfb6 --- /dev/null +++ b/docs/snippets/README.md @@ -0,0 +1,33 @@ +# SDK snippets + +This package contains code snippets for the SDK documentation. The snippets are used to demonstrate how to use the SDK to call the supported APIs. + +Snippets can be used as a starting point to use Sinch products from your own application. + +## Requirements + +- Node.js 18 or later +- [Sinch account](https://dashboard.sinch.com) + +### Snippets execution settings +When executing a snippet, you will need to provide some information about your Sinch account (credentials, Sinch virtual phone number, ...) + +This setting can be placed directly in the snippet source, or you can use an [environment file](.env), in which case the settings will be shared and used automatically by every snippet. + +```shell +# Copy the .env.example file to .env +cp .env.example .env +``` + +### Running snippets + +To run a snippet, you can use the `npm run` command followed by the name of the snippet. For example: + +```shell +# Run the snippets to get the details about a Sinch number you own +npm run numbers:get +#Run the snippets to list the available regions where to rent a Sinch number from +npm run numbers:regions:list +``` + +You can find all the available snippets in the `package.json` file under the `scripts` section. diff --git a/docs/snippets/numbers/active-numbers/get.js b/docs/snippets/numbers/active-numbers/get.js new file mode 100644 index 00000000..4fdcf32f --- /dev/null +++ b/docs/snippets/numbers/active-numbers/get.js @@ -0,0 +1,23 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const phoneNumberToGet = process.env.SINCH_PHONE_NUMBER || 'MY_SINCH_PHONE_NUMBER'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const rentedNumber = await sinch.numbers.get({ + phoneNumber: phoneNumberToGet, + }); + + console.log(`Rented number:\n${JSON.stringify(rentedNumber, null, 2)}`); +})(); diff --git a/docs/snippets/numbers/active-numbers/list.js b/docs/snippets/numbers/active-numbers/list.js new file mode 100644 index 00000000..3f515367 --- /dev/null +++ b/docs/snippets/numbers/active-numbers/list.js @@ -0,0 +1,26 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const requestData = { + regionCode: 'US', + type: 'LOCAL', + }; + + console.log('List of numbers printed one by one:'); + // Use the iterator and fetch data from all the pages automatically + for await (const rentedNumber of sinch.numbers.list(requestData)) { + console.log(JSON.stringify(rentedNumber, null, 2)); + } +})(); diff --git a/docs/snippets/numbers/active-numbers/release.js b/docs/snippets/numbers/active-numbers/release.js new file mode 100644 index 00000000..e1bcd4f5 --- /dev/null +++ b/docs/snippets/numbers/active-numbers/release.js @@ -0,0 +1,21 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const phoneNumber = process.env.SINCH_PHONE_NUMBER || 'MY_SINCH_PHONE_NUMBER'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const releasedNumber = await sinch.numbers.release({ phoneNumber }); + + console.log(`Released number:\n${JSON.stringify(releasedNumber, null, 2)}`); +})(); diff --git a/docs/snippets/numbers/active-numbers/update.js b/docs/snippets/numbers/active-numbers/update.js new file mode 100644 index 00000000..072d72cf --- /dev/null +++ b/docs/snippets/numbers/active-numbers/update.js @@ -0,0 +1,27 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const phoneNumberToUpdate = process.env.SINCH_PHONE_NUMBER || 'MY_SINCH_PHONE_NUMBER'; + const updatedDisplayName = 'Updated name with Sinch Node.js SDK'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const updatedNumber = await sinch.numbers.update({ + phoneNumber: phoneNumberToUpdate, + updateActiveNumberRequestBody: { + displayName: updatedDisplayName, + }, + }); + + console.log(`Updated number:\n${JSON.stringify(updatedNumber, null, 2)}`); +})(); diff --git a/docs/snippets/numbers/available-numbers/check-availability.js b/docs/snippets/numbers/available-numbers/check-availability.js new file mode 100644 index 00000000..fc7ddfdd --- /dev/null +++ b/docs/snippets/numbers/available-numbers/check-availability.js @@ -0,0 +1,23 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const phoneNumberToCheck = 'A_PHONE_NUMBER_TO_CHECK'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const response = await sinch.numbers.checkAvailability({ + phoneNumber: phoneNumberToCheck, + }); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +})(); diff --git a/docs/snippets/numbers/available-numbers/rent-any.js b/docs/snippets/numbers/available-numbers/rent-any.js new file mode 100644 index 00000000..0ce26819 --- /dev/null +++ b/docs/snippets/numbers/available-numbers/rent-any.js @@ -0,0 +1,29 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const servicePlanIdToAssociateWithTheNumber = process.env.SINCH_SERVICE_PLAN_ID || 'MY_SERVICE_PLAN_ID'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const response = await sinch.numbers.rentAny({ + rentAnyNumberRequestBody: { + regionCode: 'US', + type: 'LOCAL', + smsConfiguration: { + servicePlanId: servicePlanIdToAssociateWithTheNumber, + }, + }, + }); + + console.log(`Rented number:\n${JSON.stringify(response, null, 2)}`); +})(); diff --git a/docs/snippets/numbers/available-numbers/rent.js b/docs/snippets/numbers/available-numbers/rent.js new file mode 100644 index 00000000..219eb537 --- /dev/null +++ b/docs/snippets/numbers/available-numbers/rent.js @@ -0,0 +1,29 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const phoneNumberToBeRented = 'AVAILABLE_PHONE_NUMBER_TO_BE_RENTED'; + const servicePlanIdToAssociateWithTheNumber = process.env.SINCH_SERVICE_PLAN_ID || 'MY_SERVICE_PLAN_ID'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const response = await sinch.numbers.rent({ + phoneNumber: phoneNumberToBeRented, + rentNumberRequestBody: { + smsConfiguration: { + servicePlanId: servicePlanIdToAssociateWithTheNumber, + }, + }, + }); + + console.log(`Rented number:\n${JSON.stringify(response, null, 2)}`); +})(); diff --git a/docs/snippets/numbers/available-numbers/search-for-available-numbers.js b/docs/snippets/numbers/available-numbers/search-for-available-numbers.js new file mode 100644 index 00000000..fb8989a5 --- /dev/null +++ b/docs/snippets/numbers/available-numbers/search-for-available-numbers.js @@ -0,0 +1,22 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const response = await sinch.numbers.searchForAvailableNumbers({ + regionCode: 'US', + type: 'LOCAL', + }); + + console.log(`Available numbers to rent:\n${JSON.stringify(response, null, 2)}`); +})(); diff --git a/docs/snippets/numbers/available-regions/list.js b/docs/snippets/numbers/available-regions/list.js new file mode 100644 index 00000000..92b05d9a --- /dev/null +++ b/docs/snippets/numbers/available-regions/list.js @@ -0,0 +1,19 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const response = await sinch.numbers.availableRegions.list({}); + + console.log(`Available regions:\n${JSON.stringify(response, null, 2)}`); +})(); diff --git a/docs/snippets/numbers/callback-configuration/get.js b/docs/snippets/numbers/callback-configuration/get.js new file mode 100644 index 00000000..a78e8679 --- /dev/null +++ b/docs/snippets/numbers/callback-configuration/get.js @@ -0,0 +1,19 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const response = await sinch.numbers.callbacks.get({}); + + console.log(`Callback configuration:\n${JSON.stringify(response, null, 2)}`); +})(); diff --git a/docs/snippets/numbers/callback-configuration/update.js b/docs/snippets/numbers/callback-configuration/update.js new file mode 100644 index 00000000..927e2e08 --- /dev/null +++ b/docs/snippets/numbers/callback-configuration/update.js @@ -0,0 +1,25 @@ +/** + * Sinch Node.js Snippet + * See: https://github.com/sinch/sinch-sdk-node/docs/snippets + */ +import { SinchClient } from '@sinch/sdk-core'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +(async () => { + const projectId = process.env.SINCH_PROJECT_ID || 'MY_PROJECT_ID'; + const keyId = process.env.SINCH_KEY_ID || 'MY_KEY_ID'; + const keySecret = process.env.SINCH_KEY_SECRET || 'MY_KEY_SECRET'; + + const newHmacSecret = 'NEW_HMAC_SECRET'; + + const sinch = new SinchClient({ projectId, keyId, keySecret }); + + const response = await sinch.numbers.callbacks.update({ + updateCallbackConfigurationRequestBody: { + hmacSecret: newHmacSecret, + }, + }); + + console.log(`Updated callback configuration:\n${JSON.stringify(response, null, 2)}`); +})(); diff --git a/docs/snippets/package.json b/docs/snippets/package.json new file mode 100644 index 00000000..78cdcff0 --- /dev/null +++ b/docs/snippets/package.json @@ -0,0 +1,25 @@ +{ + "name": "@sinch/code-snippets", + "version": "0.0.0", + "description": "Code snippets related to the Sinch Node.js SDK usage", + "author": "Sinch", + "private": true, + "type": "module", + "dependencies": { + "@sinch/sdk-core": "^1.3.0" + }, + "scripts": { + "build": "tsc --noEmit", + "numbers:get": "node numbers/active-numbers/get.js", + "numbers:list": "node numbers/active-numbers/list.js", + "numbers:release": "node numbers/active-numbers/release.js", + "numbers:update": "node numbers/active-numbers/update.js", + "numbers:check-availability": "node numbers/available-numbers/check-availability.js", + "numbers:search-for-available-numbers": "node numbers/available-numbers/search-for-available-numbers.js", + "numbers:rent": "node numbers/available-numbers/rent.js", + "numbers:rent-any": "node numbers/available-numbers/rent-any.js", + "numbers:regions:list": "node numbers/available-regions/list.js", + "numbers:callback-config:get": "node numbers/callback-configuration/get.js", + "numbers:callback-config:update": "node numbers/callback-configuration/update.js" + } +} diff --git a/docs/snippets/tsconfig.json b/docs/snippets/tsconfig.json new file mode 100644 index 00000000..66901e69 --- /dev/null +++ b/docs/snippets/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "strict": true, + "target": "es2020", + "module": "es2020", + "moduleResolution": "node", + "pretty": true, + "baseUrl": ".", + "noEmit": true, + "skipLibCheck": true + }, + "include": [ + "**/*.js" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/examples/integrated-flows-examples/package.json b/examples/integrated-flows-examples/package.json index 20a364ba..818714a5 100644 --- a/examples/integrated-flows-examples/package.json +++ b/examples/integrated-flows-examples/package.json @@ -13,10 +13,10 @@ "verification:app": "yarn compile && node dist/verification/app.js" }, "dependencies": { - "@sinch/sdk-core": "^1.2.0", + "@sinch/sdk-core": "^1.3.0", "@types/node": "^20.8.7", "dotenv": "^16.3.1", - "inquirer": "^9.2.14", + "inquirer": "^12.9.1", "typescript": "^5.2.2" }, "devDependencies": { diff --git a/examples/integrated-flows-examples/src/numbers/app.ts b/examples/integrated-flows-examples/src/numbers/app.ts index 9d505f11..d0d721e0 100644 --- a/examples/integrated-flows-examples/src/numbers/app.ts +++ b/examples/integrated-flows-examples/src/numbers/app.ts @@ -18,7 +18,7 @@ dotenv.config(); const keySecret = process.env.SINCH_KEY_SECRET || ''; const sinchClient = new SinchClient({ projectId, keyId, keySecret }); - const regionType: Numbers.RegionNumberTypeEnum = 'LOCAL'; + const regionType: Numbers.NumberTypeEnum = 'LOCAL'; const type: Numbers.NumberTypeEnum = 'LOCAL'; console.log('+------------------------------------------------------------------------------+'); diff --git a/examples/simple-examples/README.md b/examples/simple-examples/README.md index 500f9f06..5ac7f67b 100644 --- a/examples/simple-examples/README.md +++ b/examples/simple-examples/README.md @@ -256,27 +256,27 @@ yarn run numbers:regions:list ### Fax -| Service | Sample application name and location | Required parameters | -|----------|------------------------------------------------------------------------------------------|-------------------------------------| -| Services | [./src/fax/services/create.ts](./src/fax/services/create.ts) | `PHONE_NUMBER` | -| | [./src/fax/services/get.ts](./src/fax/services/get.ts) | `FAX_SERVICE_ID` | -| | [./src/fax/services/list.ts](./src/fax/services/list.ts) | | -| | [./src/fax/services/listNumbers.ts](./src/fax/services/listNumbers.ts) | `FAX_SERVICE_ID` | -| | [./src/fax/services/listEmailsForNumber.ts](./src/fax/services/listEmailsForNumber.ts) | `PHONE_NUMBER` + `FAX_SERVICE_ID` | -| | [./src/fax/services/update.ts](./src/fax/services/update.ts) | `FAX_SERVICE_ID` | -| | [./src/fax/services/delete.ts](./src/fax/services/delete.ts) | `FAX_SERVICE_ID` | -| Faxes | [./src/fax/faxes/send-filePaths.ts](./src/fax/faxes/send-filePaths.ts) | `PHONE_NUMBER` + `FAX_CALLBACK_URL` | -| | [./src/fax/faxes/send-fileBase64.ts](./src/fax/faxes/send-fileBase64.ts) | `PHONE_NUMBER` + `FAX_CALLBACK_URL` | -| | [./src/fax/faxes/send-multipleRecipients.ts](./src/fax/faxes/send-multipleRecipients.ts) | `PHONE_NUMBER` + `FAX_CALLBACK_URL` | -| | [./src/fax/faxes/get.ts](./src/fax/faxes/get.ts) | `FAX_ID` | -| | [./src/fax/faxes/list.ts](./src/fax/faxes/list.ts) | | -| | [./src/fax/faxes/downloadContent.ts](./src/fax/faxes/downloadContent.ts) | `FAX_ID` | -| | [./src/fax/faxes/deleteContent.ts](./src/fax/faxes/deleteContent.ts) | `FAX_ID` | -| Emails | [./src/fax/emails/add.ts](./src/fax/emails/add.ts) | `FAX_EMAIL` + `PHONE_NUMBER` | -| | [./src/fax/emails/list.ts](./src/fax/emails/list.ts) | | -| | [./src/fax/emails/listNumbers.ts](./src/fax/emails/listNumbers.ts) | `FAX_EMAIL` | -| | [./src/fax/emails/update.ts](./src/fax/emails/update.ts) | `FAX_EMAIL` + `PHONE_NUMBER` | -| | [./src/fax/emails/delete.ts](./src/fax/emails/delete.ts) | `FAX_EMAIL` | +| Service | Sample application name and location | Required parameters | +|--------------|------------------------------------------------------------------------------------------|-------------------------------------| +| Services | [./src/fax/services/create.ts](./src/fax/services/create.ts) | `PHONE_NUMBER` | +| | [./src/fax/services/get.ts](./src/fax/services/get.ts) | `FAX_SERVICE_ID` | +| | [./src/fax/services/list.ts](./src/fax/services/list.ts) | | +| | [./src/fax/services/listNumbers.ts](./src/fax/services/listNumbers.ts) | `FAX_SERVICE_ID` | +| | [./src/fax/services/listEmailsForNumber.ts](./src/fax/services/listEmailsForNumber.ts) | `PHONE_NUMBER` + `FAX_SERVICE_ID` | +| | [./src/fax/services/update.ts](./src/fax/services/update.ts) | `FAX_SERVICE_ID` | +| | [./src/fax/services/delete.ts](./src/fax/services/delete.ts) | `FAX_SERVICE_ID` | +| Faxes | [./src/fax/faxes/send-filePaths.ts](./src/fax/faxes/send-filePaths.ts) | `PHONE_NUMBER` + `FAX_CALLBACK_URL` | +| | [./src/fax/faxes/send-fileBase64.ts](./src/fax/faxes/send-fileBase64.ts) | `PHONE_NUMBER` + `FAX_CALLBACK_URL` | +| | [./src/fax/faxes/send-multipleRecipients.ts](./src/fax/faxes/send-multipleRecipients.ts) | `PHONE_NUMBER` + `FAX_CALLBACK_URL` | +| | [./src/fax/faxes/get.ts](./src/fax/faxes/get.ts) | `FAX_ID` | +| | [./src/fax/faxes/list.ts](./src/fax/faxes/list.ts) | | +| | [./src/fax/faxes/downloadContent.ts](./src/fax/faxes/downloadContent.ts) | `FAX_ID` | +| | [./src/fax/faxes/deleteContent.ts](./src/fax/faxes/deleteContent.ts) | `FAX_ID` | +| Fax to email | [./src/fax/fax-to-email/add.ts](src/fax/fax-to-email/add.ts) | `FAX_EMAIL` + `PHONE_NUMBER` | +| | [./src/fax/fax-to-email/list.ts](src/fax/fax-to-email/list.ts) | | +| | [./src/fax/fax-to-email/listNumbers.ts](src/fax/fax-to-email/listNumbers.ts) | `FAX_EMAIL` | +| | [./src/fax/fax-to-email/update.ts](src/fax/fax-to-email/update.ts) | `FAX_EMAIL` + `PHONE_NUMBER` | +| | [./src/fax/fax-to-email/delete.ts](src/fax/fax-to-email/delete.ts) | `FAX_EMAIL` | ### Elastic SIP Trunk diff --git a/examples/simple-examples/package.json b/examples/simple-examples/package.json index 936e28e8..5a791a74 100644 --- a/examples/simple-examples/package.json +++ b/examples/simple-examples/package.json @@ -113,11 +113,11 @@ "fax:faxes:list": "ts-node src/fax/faxes/list.ts", "fax:faxes:download": "ts-node src/fax/faxes/downloadContent.ts", "fax:faxes:delete": "ts-node src/fax/faxes/deleteContent.ts", - "fax:emails:add": "ts-node src/fax/emails/add.ts", - "fax:emails:list": "ts-node src/fax/emails/list.ts", - "fax:emails:listNumbers": "ts-node src/fax/emails/listNumbers.ts", - "fax:emails:update": "ts-node src/fax/emails/update.ts", - "fax:emails:delete": "ts-node src/fax/emails/delete.ts", + "fax:fax-to-email:add": "ts-node src/fax/fax-to-email/add.ts", + "fax:fax-to-email:list": "ts-node src/fax/fax-to-email/list.ts", + "fax:fax-to-email:listNumbers": "ts-node src/fax/fax-to-email/listNumbers.ts", + "fax:fax-to-email:update": "ts-node src/fax/fax-to-email/update.ts", + "fax:fax-to-email:delete": "ts-node src/fax/fax-to-email/delete.ts", "numbers:regions:list": "ts-node src/numbers/regions/list.ts", "numbers:available:list": "ts-node src/numbers/available/list.ts", "numbers:available:checkAvailability": "ts-node src/numbers/available/checkAvailability.ts", @@ -183,7 +183,7 @@ "voice:conferences:kickAll": "ts-node src/voice/conferences/kickAll.ts" }, "dependencies": { - "@sinch/sdk-core": "^1.2.0", + "@sinch/sdk-core": "^1.3.0", "dotenv": "^16.3.1" }, "devDependencies": { diff --git a/examples/simple-examples/src/conversation/messages/sendCardMessage.ts b/examples/simple-examples/src/conversation/messages/sendCardMessage.ts index f377cbce..17f50204 100644 --- a/examples/simple-examples/src/conversation/messages/sendCardMessage.ts +++ b/examples/simple-examples/src/conversation/messages/sendCardMessage.ts @@ -17,6 +17,11 @@ import { getAppIdFromConfig, getContactIdFromConfig, initConversationService, pr title: 'Card message title', description: 'Card message description', height: 'MEDIUM', + media_message: { + url: 'https://example.com/follow-the-white-rabbit.mpeg', + thumbnail_url: 'https://example.com/follow-the-white-rabbit.jpg', + filename_override: 'red-pill-or-blue-pill.jpg', + }, }, }, recipient: { diff --git a/examples/simple-examples/src/conversation/messages/sendListMessage.ts b/examples/simple-examples/src/conversation/messages/sendListMessage.ts index f75f800c..449f1baa 100644 --- a/examples/simple-examples/src/conversation/messages/sendListMessage.ts +++ b/examples/simple-examples/src/conversation/messages/sendListMessage.ts @@ -25,6 +25,10 @@ import { getAppIdFromConfig, getContactIdFromConfig, initConversationService, pr title: 'Choice 1.1', description: 'Description for choice 1.1', postback_data: '1.1', + media: { + url: 'https://example.com/follow-the-white-rabbit.jpg', + filename_override: 'red-pill-or-blue-pill.jpg', + }, }, }, ], diff --git a/examples/simple-examples/src/conversation/webhooks/get.ts b/examples/simple-examples/src/conversation/webhooks/get.ts index 271bf2ef..2c2fa59c 100644 --- a/examples/simple-examples/src/conversation/webhooks/get.ts +++ b/examples/simple-examples/src/conversation/webhooks/get.ts @@ -23,7 +23,7 @@ import { const printFormat = getPrintFormat(process.argv); if (printFormat === 'pretty') { - console.log(`Webhook id: ${response.id} - Triggers: ${response.triggers.join(', ')}`); + console.log(`Webhook id: ${response.id} - Triggers: ${response.triggers?.join(', ')}`); } else { printFullResponse(response); } diff --git a/examples/simple-examples/src/conversation/webhooks/list.ts b/examples/simple-examples/src/conversation/webhooks/list.ts index 8034f57c..1ddb4d9c 100644 --- a/examples/simple-examples/src/conversation/webhooks/list.ts +++ b/examples/simple-examples/src/conversation/webhooks/list.ts @@ -19,7 +19,7 @@ import { getAppIdFromConfig, getPrintFormat, initConversationService, printFullR if (printFormat === 'pretty') { if (response.webhooks && response.webhooks.length > 0) { - console.log(`${response.webhooks.map((webhook) => `Webhook id: ${webhook.id} - Triggers: ${webhook.triggers.join(', ')}`).join('\n')}`); + console.log(`${response.webhooks.map((webhook) => `Webhook id: ${webhook.id} - Triggers: ${webhook.triggers?.join(', ')}`).join('\n')}`); } else { console.log('Sorry, no webhooks were found.'); } diff --git a/examples/simple-examples/src/conversation/webhooks/update.ts b/examples/simple-examples/src/conversation/webhooks/update.ts index fe76e9b8..3478d864 100644 --- a/examples/simple-examples/src/conversation/webhooks/update.ts +++ b/examples/simple-examples/src/conversation/webhooks/update.ts @@ -36,7 +36,7 @@ import { const printFormat = getPrintFormat(process.argv); if (printFormat === 'pretty') { - console.log(`Webhook updated! New triggers: '${response.triggers.join(', ')}`); + console.log(`Webhook updated! New triggers: '${response.triggers?.join(', ')}`); console.log(`Verifying the target (it should the original URL): '${response.target}'`); } else { printFullResponse(response); diff --git a/examples/simple-examples/src/fax/emails/add.ts b/examples/simple-examples/src/fax/fax-to-email/add.ts similarity index 79% rename from examples/simple-examples/src/fax/emails/add.ts rename to examples/simple-examples/src/fax/fax-to-email/add.ts index ec6da179..da59df2d 100644 --- a/examples/simple-examples/src/fax/emails/add.ts +++ b/examples/simple-examples/src/fax/fax-to-email/add.ts @@ -1,6 +1,7 @@ import { Fax } from '@sinch/sdk-core'; import { getFaxEmailFromConfig, + getFaxServiceIdFromConfig, getPhoneNumberFromConfig, getPrintFormat, initFaxService, @@ -13,19 +14,23 @@ import { console.log('*************************'); const phoneNumber = getPhoneNumberFromConfig(); + const serviceId = getFaxServiceIdFromConfig(); const email = getFaxEmailFromConfig(); const requestData: Fax.AddEmailToNumbersRequestData = { + serviceId, emailRequestBody: { email, phoneNumbers: [ - phoneNumber, + { + number: phoneNumber, + }, ], }, }; const faxService = initFaxService(); - const response = await faxService.emails.addToNumbers(requestData); + const response = await faxService.faxToEmail.addToNumbers(requestData); const printFormat = getPrintFormat(process.argv); diff --git a/examples/simple-examples/src/fax/emails/delete.ts b/examples/simple-examples/src/fax/fax-to-email/delete.ts similarity index 65% rename from examples/simple-examples/src/fax/emails/delete.ts rename to examples/simple-examples/src/fax/fax-to-email/delete.ts index 688033ea..c409e56b 100644 --- a/examples/simple-examples/src/fax/emails/delete.ts +++ b/examples/simple-examples/src/fax/fax-to-email/delete.ts @@ -1,19 +1,21 @@ import { Fax } from '@sinch/sdk-core'; -import { getFaxEmailFromConfig, initFaxService } from '../../config'; +import { getFaxEmailFromConfig, getFaxServiceIdFromConfig, initFaxService } from '../../config'; (async () => { console.log('***************'); console.log('* deleteEmail *'); console.log('***************'); + const serviceId = getFaxServiceIdFromConfig(); const email = getFaxEmailFromConfig(); const requestData: Fax.DeleteEmailRequestData = { + serviceId, email, }; const faxService = initFaxService(); - await faxService.emails.delete(requestData); + await faxService.faxToEmail.delete(requestData); console.log(`The email '${requestData.email}' has been successfully removed`); })(); diff --git a/examples/simple-examples/src/fax/emails/list.ts b/examples/simple-examples/src/fax/fax-to-email/list.ts similarity index 86% rename from examples/simple-examples/src/fax/emails/list.ts rename to examples/simple-examples/src/fax/fax-to-email/list.ts index a3c4489b..8c8de13d 100644 --- a/examples/simple-examples/src/fax/emails/list.ts +++ b/examples/simple-examples/src/fax/fax-to-email/list.ts @@ -1,5 +1,5 @@ import { Fax, PageResult } from '@sinch/sdk-core'; -import { getPrintFormat, initFaxService, printFullResponse } from '../../config'; +import { getFaxServiceIdFromConfig, getPrintFormat, initFaxService, printFullResponse } from '../../config'; const populateEmailsList = ( emailsPage: PageResult, @@ -17,7 +17,10 @@ const populateEmailsList = ( console.log('* getEmailsForProject *'); console.log('***********************'); + const serviceId = getFaxServiceIdFromConfig(); + const requestData: Fax.ListEmailsForProjectRequestData = { + serviceId, pageSize: 2, }; @@ -26,7 +29,7 @@ const populateEmailsList = ( // ---------------------------------------------- // Method 1: Fetch the data page by page manually // ---------------------------------------------- - let response = await faxService.emails.list(requestData); + let response = await faxService.faxToEmail.list(requestData); // Init data structure to hold the response content const fullEmailsList: Fax.Email[] = []; @@ -57,7 +60,7 @@ const populateEmailsList = ( // --------------------------------------------------------------------- // Method 2: Use the iterator and fetch data on more pages automatically // --------------------------------------------------------------------- - for await (const email of faxService.emails.list(requestData)) { + for await (const email of faxService.faxToEmail.list(requestData)) { if (printFormat === 'pretty') { console.log(`Email '${email.email}' - Phone numbers: '${email.phoneNumbers?.join(', ')}'`); } else { diff --git a/examples/simple-examples/src/fax/emails/listNumbers.ts b/examples/simple-examples/src/fax/fax-to-email/listNumbers.ts similarity index 86% rename from examples/simple-examples/src/fax/emails/listNumbers.ts rename to examples/simple-examples/src/fax/fax-to-email/listNumbers.ts index 748a54c9..c47ad80c 100644 --- a/examples/simple-examples/src/fax/emails/listNumbers.ts +++ b/examples/simple-examples/src/fax/fax-to-email/listNumbers.ts @@ -2,7 +2,7 @@ import { Fax, PageResult, } from '@sinch/sdk-core'; -import { getFaxEmailFromConfig, getPrintFormat, initFaxService, printFullResponse } from '../../config'; +import { getFaxEmailFromConfig, getFaxServiceIdFromConfig, getPrintFormat, initFaxService, printFullResponse } from '../../config'; const populateServiceNumbersList = ( serviceNumbersPage: PageResult, @@ -20,9 +20,11 @@ const populateServiceNumbersList = ( console.log('* getNumbersByEmail *'); console.log('*********************'); + const serviceId = getFaxServiceIdFromConfig(); const email = getFaxEmailFromConfig(); const requestData: Fax.ListNumbersByEmailRequestData = { + serviceId, email, pageSize: 2, }; @@ -32,7 +34,7 @@ const populateServiceNumbersList = ( // ---------------------------------------------- // Method 1: Fetch the data page by page manually // ---------------------------------------------- - let response = await faxService.emails.listNumbers(requestData); + let response = await faxService.faxToEmail.listNumbers(requestData); // Init data structure to hold the response content const fullServiceNumbersList: Fax.ServicePhoneNumber[] = []; @@ -63,7 +65,7 @@ const populateServiceNumbersList = ( // --------------------------------------------------------------------- // Method 2: Use the iterator and fetch data on more pages automatically // --------------------------------------------------------------------- - for await (const number of faxService.emails.listNumbers(requestData)) { + for await (const number of faxService.faxToEmail.listNumbers(requestData)) { if (printFormat === 'pretty') { console.log(`Phone numbers: '${number.phoneNumber}'`); } else { diff --git a/examples/simple-examples/src/fax/emails/update.ts b/examples/simple-examples/src/fax/fax-to-email/update.ts similarity index 72% rename from examples/simple-examples/src/fax/emails/update.ts rename to examples/simple-examples/src/fax/fax-to-email/update.ts index ed3e444f..fc76c4b6 100644 --- a/examples/simple-examples/src/fax/emails/update.ts +++ b/examples/simple-examples/src/fax/fax-to-email/update.ts @@ -1,6 +1,7 @@ import { Fax } from '@sinch/sdk-core'; import { getFaxEmailFromConfig, + getFaxServiceIdFromConfig, getPhoneNumberFromConfig, getPrintFormat, initFaxService, @@ -13,20 +14,27 @@ import { console.log('*************************'); const phoneNumber = getPhoneNumberFromConfig(); + const serviceId = getFaxServiceIdFromConfig(); const email = getFaxEmailFromConfig(); const requestData: Fax.UpdateEmailRequestData = { + serviceId, email, updateEmailRequestBody: { phoneNumbers: [ - phoneNumber, - '+14155552222', + { + number: phoneNumber, + permissions: 'both', + },{ + number: '+14155552222', + permissions: 'receive', + }, ], }, }; const faxService = initFaxService(); - const response = await faxService.emails.update(requestData); + const response = await faxService.faxToEmail.update(requestData); const printFormat = getPrintFormat(process.argv); diff --git a/examples/simple-examples/src/fax/services/update.ts b/examples/simple-examples/src/fax/services/update.ts index c0f0d661..bfc3b9ce 100644 --- a/examples/simple-examples/src/fax/services/update.ts +++ b/examples/simple-examples/src/fax/services/update.ts @@ -25,10 +25,7 @@ import { imageConversionMethod: 'MONOCHROME', saveOutboundFaxDocuments: true, saveInboundFaxDocuments: true, - emailSettings: { - pdfPassword: 'pwd', - useBodyAsCoverPage: true, - }, + scanIncomingBarcodes: true, }, }; diff --git a/examples/simple-examples/src/voice/callouts/custom.ts b/examples/simple-examples/src/voice/callouts/custom.ts index b6d273c8..4cd2da06 100644 --- a/examples/simple-examples/src/voice/callouts/custom.ts +++ b/examples/simple-examples/src/voice/callouts/custom.ts @@ -31,6 +31,10 @@ import { Voice } from '@sinch/sdk-core'; Voice.iceActionHelper.connectPstn({ number: recipientPhoneNumber, cli: callingNumber, + amd: { + async: true, + enabled: true, + }, }), Voice.iceInstructionHelper.say('Welcome to Sinch.', 'en-US/male'), Voice.iceInstructionHelper.startRecording({ diff --git a/examples/webhooks/package.json b/examples/webhooks/package.json index 12be953c..91152da9 100644 --- a/examples/webhooks/package.json +++ b/examples/webhooks/package.json @@ -12,10 +12,10 @@ "start:prod": "node dist/main" }, "dependencies": { - "@nestjs/common": "^10.4.15", - "@nestjs/core": "^10.4.15", - "@nestjs/platform-express": "^10.4.15", - "@sinch/sdk-core": "^1.2.0", + "@nestjs/common": "^10.4.20", + "@nestjs/core": "^10.4.20", + "@nestjs/platform-express": "^10.4.20", + "@sinch/sdk-core": "^1.3.0", "dotenv": "^16.3.1", "raw-body": "^2.5.2", "reflect-metadata": "^0.1.13", diff --git a/examples/webhooks/src/services/voice-event.service.ts b/examples/webhooks/src/services/voice-event.service.ts index 7c71600e..edc6742e 100644 --- a/examples/webhooks/src/services/voice-event.service.ts +++ b/examples/webhooks/src/services/voice-event.service.ts @@ -31,7 +31,12 @@ export class VoiceEventService { private handleIceRequest(event: Voice.IceRequest, res: Response) { console.log(`ICE request: CLI = ${event.cli} - To = ${event.to?.endpoint} (${event.to?.type})`) const iceResponse = new Voice.IceSvamletBuilder() - .setAction(Voice.iceActionHelper.hangup()) + .setAction(Voice.iceActionHelper.connectStream({ + destination: { + type: 'Websocket', + endpoint: 'wss://example.com/stream', + }, + })) .addInstruction(Voice.iceInstructionHelper.say('Thank you for calling Sinch! This call will now end.', 'en-US')) .build(); res.status(200).json(iceResponse); diff --git a/lerna.json b/lerna.json index d8a067fb..88c9c622 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "packages": ["packages/*", "examples/*"], + "packages": ["packages/*", "examples/*", "docs/*"], "npmClient": "yarn", "version": "independent" } diff --git a/package.json b/package.json index 00022647..4b0c547c 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "license": "Apache 2.0", "workspaces": [ "packages/*", - "examples/*" + "examples/*", + "docs/*" ], "scripts": { "lerna": "lerna", @@ -36,7 +37,8 @@ "eslint-plugin-jest-formatting": "^3.1.0", "eslint-plugin-prettier": "^5.0.1", "jest": "^29.7.0", - "lerna": "^7.4.2" + "lerna": "^7.4.2", + "ts-node": "^10.9.1" }, "engines": { "node": ">=18.0.0" diff --git a/packages/conversation/CHANGELOG.md b/packages/conversation/CHANGELOG.md index 68ccf2df..134bb7aa 100644 --- a/packages/conversation/CHANGELOG.md +++ b/packages/conversation/CHANGELOG.md @@ -1,3 +1,21 @@ +## Version 1.3.0 +- [Tech] Update dependency `@sinch/sdk-client` to `1.3.0`. +- [Feature] Fix `MediaProperties` model and support media property +- [Feature] Support channel specific messages for whatsapp messages +- [Feature] Support Line Enterprise credentials +- [Feature] Support `whatsapp_footer` in Choice message and `whatsapp_header` in List message +- [Feature] Support string input when parsing webhook events +- **Deprecations** + - Inside a Conversation Message, the `message_status` property is deprecated, will be removed in 2.0 + - Create conversation request: `metadata` property is deprecated, will be removed in 2.0 + - Type `IdentifiedByItem` is deprecated, use `ChannelIdentities` instead + - Interface `EventInboundEvent` is deprecated, use `EventInboundContactEvent` or `EventInboundContactMessageEvent` instead + - *Warning about future deprecation*: `region` will become mandatory as a configuration parameter + +## Version 1.2.1 +- [Tech] Update dependency `@sinch/sdk-client` to `1.2.1` +- [Bugfix] Fix refresh token issue + ## Version 1.2.0 - [Tech] Update dependency `@sinch/sdk-client` to `1.2.0`. - [Bugfix] Fix issue with pagination to iterate over multiple pages. diff --git a/packages/conversation/package.json b/packages/conversation/package.json index 4a71052a..e22c9e1d 100644 --- a/packages/conversation/package.json +++ b/packages/conversation/package.json @@ -1,6 +1,6 @@ { "name": "@sinch/conversation", - "version": "1.2.0", + "version": "1.3.0", "description": "Sinch Conversation API", "homepage": "", "repository": { @@ -29,7 +29,7 @@ "test:e2e": "cucumber-js" }, "dependencies": { - "@sinch/sdk-client": "^1.2.0" + "@sinch/sdk-client": "^1.3.0" }, "devDependencies": {}, "publishConfig": { diff --git a/packages/conversation/src/models/v1/app-message/app-message.ts b/packages/conversation/src/models/v1/app-message/app-message.ts index d2b2cabf..11122065 100644 --- a/packages/conversation/src/models/v1/app-message/app-message.ts +++ b/packages/conversation/src/models/v1/app-message/app-message.ts @@ -1,6 +1,6 @@ import { Agent } from '../agent'; import { LocationMessage, LocationMessageItem } from '../location-message'; -import { MediaMessage, MediaMessageItem } from '../media-message'; +import { MediaMessage, MediaProperties } from '../media-message'; import { TextMessage, TextMessageItem } from '../text-message'; import { TemplateMessageItem } from '../template-message'; import { TemplateReference } from '../template-reference'; @@ -83,8 +83,8 @@ export interface AppCarouselMessage extends AppMessageBase { } export interface AppMediaMessage extends AppMessageBase { - /** @see MediaMessageItem */ - media_message: MediaMessageItem; + /** @see MediaProperties */ + media_message: MediaProperties; // Exclude other message types card_message?: never; choice_message?: never; @@ -154,13 +154,16 @@ export interface AppContactInfoMessage extends AppMessageBase { interface AppMessageBase { /** - * Channel specific messages, overriding any transcoding. - * The key in the map must point to a valid conversation channel as defined by the enum ConversationChannel. + * Allows you to specify a channel and define a corresponding channel specific message payload that will override the standard Conversation API message types. + * The key in the map must point to a valid conversation channel as defined in the enum `ConversationChannel`. The message content must be provided in string format. + * You may use the [transcoding endpoint](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Transcoding/) to help create your message. + * For more information about how to construct an explicit channel message for a particular channel, see that [channel's corresponding documentation](https://developers.sinch.com/docs/conversation/channel-support/) (for example, using explicit channel messages with [the WhatsApp channel](https://developers.sinch.com/docs/conversation/channel-support/whatsapp/message-support/#explicit-channel-messages)). */ explicit_channel_message?: { [key in ConversationChannel ]?: string; }; /** - * The option to override the omni-channel template configuration with a channel-specific template - * (for channels on which channel-specific templates can be created. For more information, see [Channel Specific Templates](https://developers.sinch.com/docs/conversation/templates/#channel-specific-templates)). + * Override the message's content for specified channels. + * The key in the map must point to a valid conversation channel as defined in the enum `ConversationChannel`. + * The content defined under the specified channel will be sent on that channel. */ explicit_channel_omni_message?: { [key in ChannelSpecificTemplate]?: OmniMessageOverride; }; /** diff --git a/packages/conversation/src/models/v1/callback-settings/callback-settings.ts b/packages/conversation/src/models/v1/callback-settings/callback-settings.ts index f7fc13e1..df7618e3 100644 --- a/packages/conversation/src/models/v1/callback-settings/callback-settings.ts +++ b/packages/conversation/src/models/v1/callback-settings/callback-settings.ts @@ -3,6 +3,6 @@ */ export interface CallbackSettings { - /** Optional. Secret can be used to sign contents of delivery receipts for a message that was sent with the default `callback_url` overridden. You can then use the secret to verify the signature. */ + /** Optional. Secret can be used to sign contents of delivery receipts for a message that was sent with the default callback URL overridden (using the [`callback_url` field](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Messages/#tag/Messages/operation/Messages_SendMessage!path=callback_url&t=request)). You can then use the secret to verify the signature. */ secret_for_overridden_callback_urls?: string; } diff --git a/packages/conversation/src/models/v1/card-message/card-message.ts b/packages/conversation/src/models/v1/card-message/card-message.ts index 73be43bd..f0fd2ff7 100644 --- a/packages/conversation/src/models/v1/card-message/card-message.ts +++ b/packages/conversation/src/models/v1/card-message/card-message.ts @@ -1,15 +1,18 @@ -import { MediaCarouselMessage } from '../media-carousel-message'; import { Choice } from '../choice'; import { CardHeight } from '../enums'; +import { MediaProperties } from '../media-message'; /** - * Message containing text, media and choices. + * Field containing a Card Message. */ export interface CardMessage { /** Message containing text, media and choices. */ card_message: CardMessageItem; } +/** + * Message containing text, media and choices. + */ export interface CardMessageItem { /** You may include choices in your Card Message. The number of choices is limited to 10. */ choices?: Choice[]; @@ -17,8 +20,8 @@ export interface CardMessageItem { description?: string; /** @see CardHeight */ height?: CardHeight; - /** @see MediaCarouselMessage */ - media_message?: MediaCarouselMessage; + /** @see MediaProperties */ + media_message?: MediaProperties; /** The title of the card message. */ title?: string; } diff --git a/packages/conversation/src/models/v1/carousel-message/carousel-message.ts b/packages/conversation/src/models/v1/carousel-message/carousel-message.ts index 13c7a9a1..5953fdc8 100644 --- a/packages/conversation/src/models/v1/carousel-message/carousel-message.ts +++ b/packages/conversation/src/models/v1/carousel-message/carousel-message.ts @@ -2,13 +2,16 @@ import { CardMessageItem } from '../card-message'; import { Choice } from '../choice'; /** - * Message containing a list of cards often rendered horizontally on supported channels. Supported types for media are only images, such as .png, .jpg, .jpeg extensions. + * Field containing a Carrousel Message. */ export interface CarouselMessage { - /** Message containing a list of cards often rendered horizontally on supported channels. Supported types for media are only images, such as .png, .jpg, .jpeg extensions. */ + /** Message containing a list of cards often rendered horizontally on supported channels. */ carousel_message: CarouselMessageItem; } +/** + * Message containing a list of cards often rendered horizontally on supported channels. + */ export interface CarouselMessageItem { /** A list of up to 10 cards. */ cards: CardMessageItem[]; diff --git a/packages/conversation/src/models/v1/channel-specific-contact-message/channel-specific-contact-message.ts b/packages/conversation/src/models/v1/channel-specific-contact-message/channel-specific-contact-message.ts index 5cca2229..469606af 100644 --- a/packages/conversation/src/models/v1/channel-specific-contact-message/channel-specific-contact-message.ts +++ b/packages/conversation/src/models/v1/channel-specific-contact-message/channel-specific-contact-message.ts @@ -17,7 +17,7 @@ export interface WhatsAppSpecificContactMessage { */ interface WhatsAppInteractiveNfmReplyMessage { /** The interactive message type. */ - type: string; + type: 'nfm_reply'; /** @see WhatsAppInteractiveNfmReply */ nfm_reply: WhatsAppInteractiveNfmReply; } diff --git a/packages/conversation/src/models/v1/channel-specific-message/channel-specific-message.ts b/packages/conversation/src/models/v1/channel-specific-message/channel-specific-message.ts index 13bdf2c3..81685481 100644 --- a/packages/conversation/src/models/v1/channel-specific-message/channel-specific-message.ts +++ b/packages/conversation/src/models/v1/channel-specific-message/channel-specific-message.ts @@ -1,13 +1,31 @@ -import { FlowChannelSpecificMessage } from '../flow-channel-specific-message'; +import { WhatsAppFlow } from '../whatsapp-flow'; +import { WhatsAppPaymentOrderDetails } from '../whatsapp-payment-order-details'; +import { WhatsAppPaymentOrderStatus } from '../whatsapp-payment-order-status'; /** * A message containing a channel specific message (not supported by OMNI types). */ -export type ChannelSpecificMessage = WhatsAppFlowMessage; +export type ChannelSpecificMessage = WhatsAppFlowMessage + | WhatsAppPaymentOrderDetailsMessage + | WhatsAppPaymentOrderStatusMessage; export interface WhatsAppFlowMessage { - /** @see MessageTypeEnum */ + /** The type of the channel specific message. */ message_type: 'FLOWS'; - /** @see FlowChannelSpecificMessage */ - message: FlowChannelSpecificMessage; + /** @see WhatsAppFlow */ + message: WhatsAppFlow; +} + +export interface WhatsAppPaymentOrderDetailsMessage { + /** The type of the channel specific message. */ + message_type: 'ORDER_DETAILS'; + /** @see WhatsappPaymentOrderDetails */ + message: WhatsAppPaymentOrderDetails; +} + +export interface WhatsAppPaymentOrderStatusMessage { + /** The type of the channel specific message. */ + message_type: 'ORDER_STATUS'; + /** @see WhatsAppPaymentOrderStatus */ + message: WhatsAppPaymentOrderStatus; } diff --git a/packages/conversation/src/models/v1/channel-specific-message/index.ts b/packages/conversation/src/models/v1/channel-specific-message/index.ts index 22854f79..ec6fa35d 100644 --- a/packages/conversation/src/models/v1/channel-specific-message/index.ts +++ b/packages/conversation/src/models/v1/channel-specific-message/index.ts @@ -1 +1,6 @@ -export type { ChannelSpecificMessage, WhatsAppFlowMessage } from './channel-specific-message'; +export type { + ChannelSpecificMessage, + WhatsAppFlowMessage, + WhatsAppPaymentOrderDetailsMessage, + WhatsAppPaymentOrderStatusMessage, +} from './channel-specific-message'; diff --git a/packages/conversation/src/models/v1/choice-item/choice-item.ts b/packages/conversation/src/models/v1/choice-item/choice-item.ts index 5af2fb52..226ebd6c 100644 --- a/packages/conversation/src/models/v1/choice-item/choice-item.ts +++ b/packages/conversation/src/models/v1/choice-item/choice-item.ts @@ -1,4 +1,4 @@ -import { MediaMessageItem } from '../media-message'; +import { MediaProperties } from '../media-message'; export interface ChoiceItemWrapper { @@ -12,8 +12,8 @@ export interface ChoiceItem { title: string; /** Optional parameter. The description (or subtitle) of this choice item. */ description?: string; - /** @see MediaMessageItem */ - media_message?: MediaMessageItem; + /** @see MediaProperties */ + media?: MediaProperties; /** Optional parameter. Postback data that will be returned in the MO if the user selects this option. */ postback_data?: string; } diff --git a/packages/conversation/src/models/v1/choice-message/choice-message.ts b/packages/conversation/src/models/v1/choice-message/choice-message.ts index 5d3900bb..4c47e57c 100644 --- a/packages/conversation/src/models/v1/choice-message/choice-message.ts +++ b/packages/conversation/src/models/v1/choice-message/choice-message.ts @@ -14,4 +14,11 @@ export interface ChoiceMessageItem { choices: Choice[]; /** @see TextMessage */ text_message?: TextMessageItem; + /** Additional properties for the message. */ + message_properties?: ChoiceMessageItemProperties; +} + +export interface ChoiceMessageItemProperties { + /** Optional. Sets the text for the footer of a WhatsApp reply button or URL button message. Ignored for other channels. */ + whatsapp_footer?: string; } diff --git a/packages/conversation/src/models/v1/contact-create-request/contact-create-request.ts b/packages/conversation/src/models/v1/contact-create-request/contact-create-request.ts index 5c8268e3..bb711418 100644 --- a/packages/conversation/src/models/v1/contact-create-request/contact-create-request.ts +++ b/packages/conversation/src/models/v1/contact-create-request/contact-create-request.ts @@ -11,7 +11,7 @@ export interface ContactCreateRequest { channel_identities: ChannelIdentity[]; /** List of channels defining the channel priority. The channel at the top of the list is tried first. */ channel_priority?: ConversationChannel[]; - /** The display name. A default \'Unknown\' will be assigned if left empty. */ + /** The display name. A default 'Unknown' will be assigned if left empty. */ display_name?: string; /** Email of the contact. */ email?: string; diff --git a/packages/conversation/src/models/v1/contact-message-event/contact-message-event.ts b/packages/conversation/src/models/v1/contact-message-event/contact-message-event.ts index ec712e56..338b45fe 100644 --- a/packages/conversation/src/models/v1/contact-message-event/contact-message-event.ts +++ b/packages/conversation/src/models/v1/contact-message-event/contact-message-event.ts @@ -1,13 +1,33 @@ /** * The content of the event when contact_event is not populated. Note that this object is currently only available to select customers for beta testing. Mutually exclusive with contact_event. */ -export interface ContactMessageEvent { +export type ContactMessageEvent = + PaymentStatusUpdateEventOneOf + | ShortLinkActivatedEventOneOf + | ReactionEventOneOf; +export interface PaymentStatusUpdateEventOneOf { /** Object reflecting the current state of a particular payment flow. */ payment_status_update_event?: PaymentStatusUpdateEvent; + shortlink_activated_event?: never; + reaction_event?: never; } -interface PaymentStatusUpdateEvent { +export interface ShortLinkActivatedEventOneOf { + /** Object reflecting an event that is created when a contact visits a shortlink. Currently, this is only supported for the Messenger and Instagram channels. */ + shortlink_activated_event?: ShortLinkActivatedEvent; + payment_status_update_event?: never; + reaction_event?: never; +} + +export interface ReactionEventOneOf { + /** Object reflecting an event that is created when a contact reacts/unreacts with an emoji to a particular MT message. Currently, this is only supported for the Messenger and Instagram channels. */ + reaction_event?: ReactionEvent; + payment_status_update_event?: never; + shortlink_activated_event?: never; +} + +export interface PaymentStatusUpdateEvent { /** Unique identifier for the corresponding payment of a particular order. */ reference_id?: string; @@ -33,3 +53,35 @@ type PaymentTransactionStatusEnum = | 'PAYMENT_STATUS_TRANSACTION_FAILED' | 'PAYMENT_STATUS_TRANSACTION_SUCCESS' | 'PAYMENT_STATUS_TRANSACTION_CANCELED'; + +/** + * Object reflecting an event that is created when a contact visits a shortlink. Currently, this is only supported for the Messenger and Instagram channels. See [Shortlink Activated Event](https://developers.sinch.com/docs/conversation/callbacks/#shortlink-activated-event) for more details. + */ +export interface ShortLinkActivatedEvent { + /** Refers to the payload previously configured to be sent in the postback. */ + payload?: string; + /** Only relevant for the Instagram channel. */ + title?: string; + /** The ref parameter from the shortlink the user visited. */ + ref?: string; + /** Defaults to "SHORTLINK" for this type of event. */ + source?: string; + /** The identifier for the referral. For Instagram and Messenger shortlinks, this is always set to "OPEN_THREAD". */ + type?: string; + /** Set to true if target channel's conversation thread already existed at the moment the shortlink was visited. Set to false if a new conversation thread began when the shortlink was visited. */ + existing_thread?: boolean; +} + +/** + * Object reflecting an event that is created when a contact reacts/unreacts with an emoji to a particular MT message. Currently, this is only supported for the Messenger and Instagram channels. See [Reaction Event](https://developers.sinch.com/docs/conversation/callbacks/#reaction-event) for more details. + */ +export interface ReactionEvent { + /** Indicates that an emoji reaction was placed on a message. This value is the string representation of the emoji. For example: "\u{2764}\u{FE0F}" */ + emoji: string; + /** Type of action */ + action: 'REACTION_ACTION_UNKNOWN' | 'REACTION_ACTION_REACT' | 'REACTION_ACTION_UNREACT'; + /** The ID of the MT message that this reaction is associated with. */ + message_id: string; + /** If present, represents the grouping of emojis. Example values: "smile", "angry", "sad", "wow", "love", "like", "dislike", "other" */ + reaction_category?: string; +} diff --git a/packages/conversation/src/models/v1/contact-message-event/index.ts b/packages/conversation/src/models/v1/contact-message-event/index.ts index 36c08182..bebeb320 100644 --- a/packages/conversation/src/models/v1/contact-message-event/index.ts +++ b/packages/conversation/src/models/v1/contact-message-event/index.ts @@ -1 +1,9 @@ -export type { ContactMessageEvent } from './contact-message-event'; +export type { + ContactMessageEvent, + PaymentStatusUpdateEventOneOf, + PaymentStatusUpdateEvent, + ShortLinkActivatedEventOneOf, + ShortLinkActivatedEvent, + ReactionEventOneOf, + ReactionEvent, +} from './contact-message-event'; diff --git a/packages/conversation/src/models/v1/contact-message/contact-message.ts b/packages/conversation/src/models/v1/contact-message/contact-message.ts index 52814b67..dee36bec 100644 --- a/packages/conversation/src/models/v1/contact-message/contact-message.ts +++ b/packages/conversation/src/models/v1/contact-message/contact-message.ts @@ -2,7 +2,7 @@ import { ChoiceResponseMessage } from '../choice-response-message'; import { FallbackMessage } from '../fallback-message'; import { LocationMessageItem } from '../location-message'; import { MediaCardMessage } from '../media-card-message'; -import { MediaMessageItem } from '../media-message'; +import { MediaProperties } from '../media-message'; import { ReplyTo } from '../reply-to'; import { TextMessageItem } from '../text-message'; import { ProductResponseMessage } from '../product-response-message'; @@ -88,8 +88,8 @@ interface ContactMessageMediaCardMessage extends ContactMessageBase { } interface ContactMessageMediaMessage extends ContactMessageBase { - /** @see MediaMessageItem */ - media_message: MediaMessageItem; + /** @see MediaProperties */ + media_message: MediaProperties; // Exclude other message types channel_specific_message?: never; choice_response_message?: never; @@ -128,5 +128,5 @@ interface ContactMessageTextMessage extends ContactMessageBase { interface ContactMessageBase { /** @see ReplyTo */ - reply_to?: ReplyTo; + reply_to?: ReplyTo | null; } diff --git a/packages/conversation/src/models/v1/conversation-channel-credential/conversation-channel-credential.ts b/packages/conversation/src/models/v1/conversation-channel-credential/conversation-channel-credential.ts index b7352d39..400e3c4a 100644 --- a/packages/conversation/src/models/v1/conversation-channel-credential/conversation-channel-credential.ts +++ b/packages/conversation/src/models/v1/conversation-channel-credential/conversation-channel-credential.ts @@ -11,6 +11,7 @@ import { TelegramCredentials, WeChatCredentials, } from '../mod-credentials'; +import { LineEnterpriseCredentials } from '../mod-credentials/line-enterprise-credentials'; /** * Enables access to the underlying messaging channel. @@ -21,6 +22,7 @@ export type ConversationChannelCredentialRequest = | ChannelCredentialsKakaoTalk | ChannelCredentialsKakaoTalkChat | ChannelCredentialsLine + | ChannelCredentialsLineEnterprise | ChannelCredentialsMessenger | ChannelCredentialsMms | ChannelCredentialsRcs @@ -40,6 +42,7 @@ export type ConversationChannelCredentialResponse = | ChannelCredentialsKakaoTalkResponse | ChannelCredentialsKakaoTalkChatResponse | ChannelCredentialsLineResponse + | ChannelCredentialsLineEnterpriseResponse | ChannelCredentialsMessengerResponse | ChannelCredentialsMmsResponse | ChannelCredentialsRcsResponse @@ -173,6 +176,15 @@ export interface ChannelCredentialsLine extends ConversationChannelCredentialReq export interface ChannelCredentialsLineResponse extends ChannelCredentialsLine, ConversationChannelCredentialResponseBase {} +export interface ChannelCredentialsLineEnterprise extends ConversationChannelCredentialRequestBase { + channel: 'LINE'; + /** @see LineCredentials */ + line_enterprise_credentials: LineEnterpriseCredentials; +} + +export interface ChannelCredentialsLineEnterpriseResponse + extends ChannelCredentialsLineEnterprise, ConversationChannelCredentialResponseBase {} + export interface ChannelCredentialsWeChat extends ConversationChannelCredentialRequestBase { channel: 'WECHAT'; /** @see WeChatCredentials */ @@ -194,16 +206,20 @@ export interface ChannelCredentialsAppleBCResponse interface ConversationChannelCredentialRequestBase { /** The secret used to verify the channel callbacks for channels which support callback verification. The callback verification is not needed for Sinch-managed channels because the callbacks are not leaving Sinch internal networks. Max length is 256 characters. Note: leaving channel_callback_secret empty for channels with callback verification will disable the verification. */ callback_secret?: string; + /** The ordinal number of the credential. This field is used when the application supports multiple credential integrations per channel. Currently, this is only applicable to the `LINE` channel. For other channels, this value will always be set to `0`. In the case in which there are multiple credential integrations per channel on a single app, this field must have a unique value for each multi-credential channel entry. */ + credential_ordinal_number?: number; } interface ConversationChannelCredentialResponseBase { /** - * Output only. The state of the channel credentials integration. + * The state of the channel credentials integration. * When a channel is activated, the user is prompted for credentials that must be validated and in some cases exchanged by a long-lived token (Instagram). */ state?: ChannelIntegrationState; - /** Output only. Additional identifier set by the channel that represents a specific id used by the channel. */ + /** Additional identifier set by the channel that represents a specific id used by the channel. */ channel_known_id?: string + /** The ordinal number of the credential. This field is used when the application supports multiple credential integrations per channel. Currently, this is only applicable to the `LINE` channel. For other channels, this value will always be set to `0`. In the case in which there are multiple credential integrations per channel on a single app, this field must have a unique value for each multi-credential channel entry. */ + credential_ordinal_number?: number; } export interface ChannelIntegrationState { diff --git a/packages/conversation/src/models/v1/conversation-channel-credential/index.ts b/packages/conversation/src/models/v1/conversation-channel-credential/index.ts index 62cc794e..3fb60636 100644 --- a/packages/conversation/src/models/v1/conversation-channel-credential/index.ts +++ b/packages/conversation/src/models/v1/conversation-channel-credential/index.ts @@ -6,6 +6,7 @@ export type { ChannelCredentialsKakaoTalk, ChannelCredentialsKakaoTalkChat, ChannelCredentialsLine, + ChannelCredentialsLineEnterprise, ChannelCredentialsMessenger, ChannelCredentialsMms, ChannelCredentialsRcs, @@ -23,6 +24,7 @@ export type { ChannelCredentialsKakaoTalkResponse, ChannelCredentialsKakaoTalkChatResponse, ChannelCredentialsLineResponse, + ChannelCredentialsLineEnterpriseResponse, ChannelCredentialsMessengerResponse, ChannelCredentialsMmsResponse, ChannelCredentialsRcsResponse, diff --git a/packages/conversation/src/models/v1/conversation-event/conversation-event.ts b/packages/conversation/src/models/v1/conversation-event/conversation-event.ts index 1e0a3e81..c2696438 100644 --- a/packages/conversation/src/models/v1/conversation-event/conversation-event.ts +++ b/packages/conversation/src/models/v1/conversation-event/conversation-event.ts @@ -23,7 +23,7 @@ interface ConversationEventBase { contact_id?: string; /** @see ChannelIdentity */ channel_identity: ChannelIdentity; - /** */ + /** The processed time of the message in UTC timezone. Must be less than current_time and greater than (current_time - 30 days). */ accept_time?: Date; /** Whether or not Conversation API should store contacts and conversations for the app. For more information, see [Processing Modes](../../../../../conversation/processing-modes/). */ processing_mode: ProcessingMode; diff --git a/packages/conversation/src/models/v1/conversation-message/conversation-message.ts b/packages/conversation/src/models/v1/conversation-message/conversation-message.ts index 0e2ba347..e2628048 100644 --- a/packages/conversation/src/models/v1/conversation-message/conversation-message.ts +++ b/packages/conversation/src/models/v1/conversation-message/conversation-message.ts @@ -29,7 +29,7 @@ interface ConversationMessageBase { sender_id?: string; /** Output only. The processing mode. */ processing_mode?: ProcessingMode; - /** The status of the message, eventTime of the status and reason if status is failed */ + /** @deprecated The status of the message, eventTime of the status and reason if status is failed */ message_status?: MessageStatus | null; } diff --git a/packages/conversation/src/models/v1/create-conversation-request/create-conversation-request.ts b/packages/conversation/src/models/v1/create-conversation-request/create-conversation-request.ts index 401f7d1a..e3922e39 100644 --- a/packages/conversation/src/models/v1/create-conversation-request/create-conversation-request.ts +++ b/packages/conversation/src/models/v1/create-conversation-request/create-conversation-request.ts @@ -13,8 +13,14 @@ export interface CreateConversationRequest { app_id: string; /** The ID of the participating contact. */ contact_id: string; - /** Arbitrary data set by the Conversation API clients. Up to 1024 characters long. */ + /** + * Arbitrary data set by the Conversation API clients. Up to 1024 characters long. + * NOTE: This field has been deprecated due to changes in the system architecture or functionality. + * @deprecated It is no longer actively maintained and may be removed in future versions. Please avoid relying on this field in new code. + */ metadata?: string; /** Arbitrary data set by the Conversation API clients and/or provided in the `conversation_metadata` field of a SendMessageRequest. A valid JSON object. */ metadata_json?: object; + /** Arbitrary correlation ID related to the MT message set by the Conversation API user. */ + correlation_id?: string; } diff --git a/packages/conversation/src/models/v1/delivery-report-based-fallback/delivery-report-based-fallback.ts b/packages/conversation/src/models/v1/delivery-report-based-fallback/delivery-report-based-fallback.ts index 5c2bc767..435dc054 100644 --- a/packages/conversation/src/models/v1/delivery-report-based-fallback/delivery-report-based-fallback.ts +++ b/packages/conversation/src/models/v1/delivery-report-based-fallback/delivery-report-based-fallback.ts @@ -1,6 +1,6 @@ /** - * This object contains additional settings related to [delivery report based fallback](../../../../../conversation/keyconcepts/#delivery-report-base-message-fallback). Note that this **paid** functionality is available for open beta testing. + * This object contains additional settings related to [delivery report based fallback](https://developers.sinch.com/docs/conversation/keyconcepts/#delivery-report-base-message-fallback). Note that this **paid** functionality is available for open beta testing. */ export interface DeliveryReportBasedFallback { diff --git a/packages/conversation/src/models/v1/dispatch-retention-policy/dispatch-retention-policy.ts b/packages/conversation/src/models/v1/dispatch-retention-policy/dispatch-retention-policy.ts index d64b23c6..2d900d6a 100644 --- a/packages/conversation/src/models/v1/dispatch-retention-policy/dispatch-retention-policy.ts +++ b/packages/conversation/src/models/v1/dispatch-retention-policy/dispatch-retention-policy.ts @@ -1,12 +1,12 @@ import { DispatchRetentionPolicyType } from '../enums'; /** - * The retention policy configured for messages in [Dispatch Mode](../../../../../conversation/processing-modes/). Currently only `MESSAGE_EXPIRE_POLICY` is available. For more information about retention policies, see [Retention Policy](/docs/conversation/keyconcepts/#retention-policy). + * The retention policy configured for messages in [Dispatch Mode](https://developers.sinch.com/docs/conversation/processing-modes/). Currently only `MESSAGE_EXPIRE_POLICY` is available. For more information about retention policies, see [Retention Policy](https://developers.sinch.com/docs/conversation/keyconcepts/#retention-policy). */ export interface DispatchRetentionPolicy { /** @see DispatchRetentionPolicyType */ retention_type?: DispatchRetentionPolicyType; - /** Optional. The days before a message is eligible for deletion. The valid range is `[0 - 7]`. In the case of a `0` day TTL, messages aren\'t stored at all. Note the retention cleanup job runs once every twenty-four hours, so messages are not deleted on the minute they become eligible for deletion. */ + /** Optional. The days before a message is eligible for deletion. The valid range is `[0 - 7]`. In the case of a `0` day TTL, messages aren't stored at all. Note the retention cleanup job runs once every twenty-four hours, so messages are not deleted on the minute they become eligible for deletion. */ ttl_days?: number; } diff --git a/packages/conversation/src/models/v1/enums.ts b/packages/conversation/src/models/v1/enums.ts index 5fe74f1e..153ccc8c 100644 --- a/packages/conversation/src/models/v1/enums.ts +++ b/packages/conversation/src/models/v1/enums.ts @@ -2,44 +2,54 @@ * NONE - Omit metadata. * FULL - Include all metadata assigned to the conversation. */ -export type ConversationMetadataReportView = 'NONE' | 'FULL'; +export type ConversationMetadataReportView = 'NONE' | 'FULL' | string; -export type ConversationMetadataUpdateStrategy = 'REPLACE' | 'MERGE_PATCH'; +/** + * Update strategy for the `conversation_metadata` field. Only supported in `CONVERSATION` processing mode. + */ +export type ConversationMetadataUpdateStrategy = 'REPLACE' | 'MERGE_PATCH' | string; /** * You can set the desired size of the card in the message. */ -export type CardHeight = 'UNSPECIFIED_HEIGHT' | 'SHORT' | 'MEDIUM' | 'TALL'; +export type CardHeight = 'UNSPECIFIED_HEIGHT' | 'SHORT' | 'MEDIUM' | 'TALL' | string; -export type ConversationDirection = 'UNDEFINED_DIRECTION' | 'TO_APP' | 'TO_CONTACT'; +export type ConversationDirection = 'UNDEFINED_DIRECTION' | 'TO_APP' | 'TO_CONTACT' | string; -export type ConversationMergeStrategy = 'MERGE'; +export type ConversationMergeStrategy = 'MERGE' | string; -export type ConversationMessagesView = 'WITH_METADATA' | 'WITHOUT_METADATA'; +export type ConversationMessagesView = 'WITH_METADATA' | 'WITHOUT_METADATA' | string; export type DeliveryStatus = 'QUEUED_ON_CHANNEL' | 'DELIVERED' | 'READ' | 'FAILED' - | 'SWITCHING_CHANNEL'; + | 'SWITCHING_CHANNEL' + | string; -export type DispatchRetentionPolicyType = 'MESSAGE_EXPIRE_POLICY'; +export type DispatchRetentionPolicyType = 'MESSAGE_EXPIRE_POLICY' | string; /** * The channel. Must be one of the supported channels for this operation. */ -export type GetChannelProfileConversationChannel = 'MESSENGER' | 'INSTAGRAM' | 'VIBER' | 'LINE'; +export type GetChannelProfileConversationChannel = 'MESSENGER' | 'INSTAGRAM' | 'VIBER' | 'LINE' | string; /** * Select the priority type for the message */ -export type MessageQueue = 'NORMAL_PRIORITY' | 'HIGH_PRIORITY'; +export type MessageQueue = 'NORMAL_PRIORITY' | 'HIGH_PRIORITY' | string; -export type ProcessingMode = 'CONVERSATION' | 'DISPATCH'; +/** + * Whether or not Conversation API should store contacts and conversations for the app. For more information, see [Processing Modes](https://developers.sinch.com/docs/conversation/processing-modes/). + */ +export type ProcessingMode = 'CONVERSATION' | 'DISPATCH' | string; -export type ProcessingStrategy = 'DEFAULT' | 'DISPATCH_ONLY'; +/** + * Overrides the app's [Processing Mode](https://developers.sinch.com/docs/conversation/processing-modes/). Default value is `DEFAULT`. + */ +export type ProcessingStrategy = 'DEFAULT' | 'DISPATCH_ONLY' | string; -export type WebhookTargetType = 'DISMISS' | 'HTTP'; +export type WebhookTargetType = 'DISMISS' | 'HTTP' | string; -export type MessageSource = 'CONVERSATION_SOURCE' | 'DISPATCH_SOURCE'; +export type MessageSource = 'CONVERSATION_SOURCE' | 'DISPATCH_SOURCE' | string; diff --git a/packages/conversation/src/models/v1/flow-channel-specific-message/flow-channel-specific-message.ts b/packages/conversation/src/models/v1/flow-channel-specific-message/flow-channel-specific-message.ts deleted file mode 100644 index 76de7530..00000000 --- a/packages/conversation/src/models/v1/flow-channel-specific-message/flow-channel-specific-message.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { WhatsAppInteractiveBody } from '../whatsapp-interactive-body'; -import { WhatsAppInteractiveFooter } from '../whatsapp-interactive-footer'; -import { WhatsAppInteractiveTextHeader } from '../whatsapp-interactive-text-header'; -import { WhatsAppInteractiveImageHeader } from '../whatsapp-interactive-image-header'; -import { WhatsAppInteractiveDocumentHeader } from '../whatsapp-interactive-document-header'; -import { WhatsAppInteractiveVideoHeader } from '../whatsapp-interactive-video-header'; - -/** - * A message type for sending WhatsApp Flows. - */ -export interface FlowChannelSpecificMessage { - - /** @see FlowChannelSpecificMessageHeader */ - header?: FlowChannelSpecificMessageHeader; - /** @see WhatsAppInteractiveBody */ - body?: WhatsAppInteractiveBody; - /** @see WhatsAppInteractiveFooter */ - footer?: WhatsAppInteractiveFooter; - /** ID of the Flow. */ - flow_id: string; - /** Generated token which is an identifier. */ - flow_token?: string; - /** The mode in which the flow is. */ - flow_mode?: 'draft' | 'published'; - /** Text which is displayed on the Call To Action button (20 characters maximum, emoji not supported). */ - flow_cta: string; - /** */ - flow_action?: 'navigate' | 'data_exchange'; - /** @see FlowChannelSpecificMessageFlowActionPayload */ - flow_action_payload?: FlowChannelSpecificMessageFlowActionPayload; -} - -type FlowChannelSpecificMessageHeader = - WhatsAppInteractiveTextHeader - | WhatsAppInteractiveImageHeader - | WhatsAppInteractiveDocumentHeader - | WhatsAppInteractiveVideoHeader; - -interface FlowChannelSpecificMessageFlowActionPayload { - /** The ID of the screen displayed first. This must be an entry screen. */ - screen?: string; - /** Data for the first screen. */ - data?: object; -} diff --git a/packages/conversation/src/models/v1/flow-channel-specific-message/index.ts b/packages/conversation/src/models/v1/flow-channel-specific-message/index.ts deleted file mode 100644 index 1cd18868..00000000 --- a/packages/conversation/src/models/v1/flow-channel-specific-message/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { FlowChannelSpecificMessage } from './flow-channel-specific-message'; diff --git a/packages/conversation/src/models/v1/helper.ts b/packages/conversation/src/models/v1/helper.ts index 75b577f0..a42acb6a 100644 --- a/packages/conversation/src/models/v1/helper.ts +++ b/packages/conversation/src/models/v1/helper.ts @@ -4,7 +4,7 @@ import { CarouselMessage, CarouselMessageItem } from './carousel-message'; import { ChoiceMessage, ChoiceMessageItem } from './choice-message'; import { ContactInfoMessage, ContactInfoMessageItem } from './contact-info-message'; import { LocationMessage, LocationMessageItem } from './location-message'; -import { MediaMessage, MediaMessageItem } from './media-message'; +import { MediaMessage, MediaProperties } from './media-message'; import { TemplateMessage, TemplateMessageItem } from './template-message'; import { ListMessage, ListMessageItem } from './list-message'; import { V2TemplateTranslation } from './v2-template-translation'; @@ -42,7 +42,7 @@ export const messageBuilder = { location_message: locationMessageItem, } as LocationMessage; }, - media: (mediaMessageItem: MediaMessageItem): MediaMessage => { + media: (mediaMessageItem: MediaProperties): MediaMessage => { return { media_message: mediaMessageItem, } as MediaMessage; @@ -78,7 +78,7 @@ export const templateV1Helper = { buildLocationMessageContent: (locationMessageItem: LocationMessageItem): string => { return JSON.stringify(messageBuilder.location(locationMessageItem)); }, - buildMediaMessageContent: (mediaMessageItem: MediaMessageItem): string => { + buildMediaMessageContent: (mediaMessageItem: MediaProperties): string => { return JSON.stringify(messageBuilder.media(mediaMessageItem)); }, buildTemplateMessageContent: (templateMessageItem: TemplateMessageItem): string => { @@ -109,7 +109,7 @@ export const templateV2Helper = { buildLocationMessageContent: (locationMessageItem: LocationMessageItem): LocationMessage => { return messageBuilder.location(locationMessageItem); }, - buildMediaMessageContent: (mediaMessageItem: MediaMessageItem): MediaMessage => { + buildMediaMessageContent: (mediaMessageItem: MediaProperties): MediaMessage => { return messageBuilder.media(mediaMessageItem); }, buildTemplateMessageContent: (templateMessageItem: TemplateMessageItem): TemplateMessage => { diff --git a/packages/conversation/src/models/v1/identified-by/identified-by.ts b/packages/conversation/src/models/v1/identified-by/identified-by.ts index eae32a7a..7e03ab45 100644 --- a/packages/conversation/src/models/v1/identified-by/identified-by.ts +++ b/packages/conversation/src/models/v1/identified-by/identified-by.ts @@ -3,11 +3,15 @@ import { ChannelRecipientIdentity } from '../channel-recipient-identity'; /** Identifies the recipient of the message. Requires either contact_id or identified_by. If Dispatch Mode is used, only identified_by is allowed. */ export interface IdentifiedBy { /** The identity as specified by the channel. */ - identified_by: IdentifiedByItem; + identified_by: ChannelIdentities; // Exclude other recipient types contact_id?: never; } -export interface IdentifiedByItem { + +export interface ChannelIdentities { /** A list of specific channel identities. The API will use these identities when sending to specific channels. */ channel_identities: ChannelRecipientIdentity[]; } + +/** @deprecated */ +export type IdentifiedByItem = ChannelIdentities; diff --git a/packages/conversation/src/models/v1/identified-by/index.ts b/packages/conversation/src/models/v1/identified-by/index.ts index 5a50af4f..4ed53ee1 100644 --- a/packages/conversation/src/models/v1/identified-by/index.ts +++ b/packages/conversation/src/models/v1/identified-by/index.ts @@ -1 +1 @@ -export type { IdentifiedBy, IdentifiedByItem } from './identified-by'; +export type { IdentifiedBy, ChannelIdentities, IdentifiedByItem } from './identified-by'; diff --git a/packages/conversation/src/models/v1/index.ts b/packages/conversation/src/models/v1/index.ts index a391a3ec..35340a98 100644 --- a/packages/conversation/src/models/v1/index.ts +++ b/packages/conversation/src/models/v1/index.ts @@ -45,7 +45,6 @@ export * from './create-conversation-request'; export * from './delivery-report-based-fallback'; export * from './dispatch-retention-policy'; export * from './fallback-message'; -export * from './flow-channel-specific-message'; export * from './generic-event'; export * from './get-channel-profile-request'; export * from './get-channel-profile-response'; @@ -59,7 +58,6 @@ export * from './list-section'; export * from './list-webhooks-response'; export * from './location-message'; export * from './media-card-message'; -export * from './media-carousel-message'; export * from './media-message'; export * from './merge-contact-request'; export * from './message-retry-settings'; @@ -98,14 +96,11 @@ export * from './v2-template-response'; export * from './v2-template-translation'; export * from './webhook'; export * from './webhook-trigger'; -export * from './whatsapp-interactive-body'; -export * from './whatsapp-interactive-document-header'; -export * from './whatsapp-interactive-footer'; -export * from './whatsapp-interactive-header-media'; -export * from './whatsapp-interactive-image-header'; +export * from './whatsapp-flow'; export * from './whatsapp-interactive-nfm-reply'; -export * from './whatsapp-interactive-text-header'; -export * from './whatsapp-interactive-video-header'; +export * from './whatsapp-interactive-message-base'; +export * from './whatsapp-payment-order-details'; +export * from './whatsapp-payment-order-status'; export * from './enums'; export * from './helper'; export * from './requests'; diff --git a/packages/conversation/src/models/v1/inject-conversation-event-request/inject-conversation-event-request.ts b/packages/conversation/src/models/v1/inject-conversation-event-request/inject-conversation-event-request.ts index fcab6b5d..e2fc705b 100644 --- a/packages/conversation/src/models/v1/inject-conversation-event-request/inject-conversation-event-request.ts +++ b/packages/conversation/src/models/v1/inject-conversation-event-request/inject-conversation-event-request.ts @@ -8,7 +8,7 @@ import { ProcessingMode } from '../enums'; export interface InjectConversationEventRequest { /** @see AppEvent */ app_event: AppEvent; - /** Optional. The ID of the event\'s conversation. Will not be present for apps in Dispatch Mode. */ + /** Optional. The ID of the event's conversation. Will not be present for apps in Dispatch Mode. */ conversation_id?: string; /** Optional. The ID of the contact. Will not be present for apps in Dispatch Mode. */ contact_id?: string; diff --git a/packages/conversation/src/models/v1/inject-message-request/inject-message-request.ts b/packages/conversation/src/models/v1/inject-message-request/inject-message-request.ts index feb7908c..0881de0c 100644 --- a/packages/conversation/src/models/v1/inject-message-request/inject-message-request.ts +++ b/packages/conversation/src/models/v1/inject-message-request/inject-message-request.ts @@ -9,19 +9,16 @@ import { ConversationDirection, ProcessingMode } from '../enums'; export type InjectMessageRequest = InjectAppMessageRequest | InjectContactMessageRequest; interface InjectMessageRequestBase { - /** The processed time of the message in UTC timezone. Must be less than current_time and greater than (current_time - 30 days) */ - accept_time?: Date; + accept_time: Date; /** @see ChannelIdentity */ - channel_identity?: ChannelIdentity; + channel_identity: ChannelIdentity; /** The ID of the contact registered in the conversation provided. */ - contact_id?: string; + contact_id: string; /** @see ConversationDirection */ - direction?: ConversationDirection; + direction: ConversationDirection; /** The ID of the conversation. */ conversation_id?: string; - /** Flag for whether this message was injected. */ - injected?: boolean; /** For Contact Messages the sender ID is the contact sent the message to. For App Messages the sender that was used to send the message, if applicable. */ sender_id?: string; /** Whether or not Conversation API should store contacts and conversations for the app. For more information, see [Processing Modes](../../../../../conversation/processing-modes/). */ diff --git a/packages/conversation/src/models/v1/list-message/list-message.ts b/packages/conversation/src/models/v1/list-message/list-message.ts index a5423b84..9159db14 100644 --- a/packages/conversation/src/models/v1/list-message/list-message.ts +++ b/packages/conversation/src/models/v1/list-message/list-message.ts @@ -1,7 +1,8 @@ import { ListSection } from '../list-section'; +import { MediaProperties } from '../media-message'; /** - * A message containing a list of options to choose from + * A message containing a list of options to choose from. All items must be of the same type. */ export interface ListMessage { /** A message containing a list of options to choose from */ @@ -13,6 +14,8 @@ export interface ListMessageItem { title: string; /** This is an optional field, containing a description for the message. */ description?: string; + /** @see MediaProperties */ + media?: MediaProperties; /** List of ListSection objects containing choices to be presented in the list message. */ sections: ListSection[]; /** Additional properties for the message. Required if sending a product list message. */ @@ -24,4 +27,6 @@ export interface ListMessageItemProperties { catalog_id?: string; /** Optional. Sets the text for the menu of a choice list message. */ menu?: string; + /** Optional. Sets the text for the header of a WhatsApp choice list message. Ignored for other channels. */ + whatsapp_header?: string; } diff --git a/packages/conversation/src/models/v1/list-section/list-section.ts b/packages/conversation/src/models/v1/list-section/list-section.ts index 99bffca0..4df00c12 100644 --- a/packages/conversation/src/models/v1/list-section/list-section.ts +++ b/packages/conversation/src/models/v1/list-section/list-section.ts @@ -9,5 +9,5 @@ export interface ListSection { /** Optional parameter. Title for list section. */ title?: string; /** List of ListItems */ - items?: ChoiceItemWrapper[] | ProductItemWrapper[]; + items: ChoiceItemWrapper[] | ProductItemWrapper[]; } diff --git a/packages/conversation/src/models/v1/media-carousel-message/index.ts b/packages/conversation/src/models/v1/media-carousel-message/index.ts deleted file mode 100644 index 27dda8f4..00000000 --- a/packages/conversation/src/models/v1/media-carousel-message/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { MediaCarouselMessage } from './media-carousel-message'; diff --git a/packages/conversation/src/models/v1/media-carousel-message/media-carousel-message.ts b/packages/conversation/src/models/v1/media-carousel-message/media-carousel-message.ts deleted file mode 100644 index e6c9a975..00000000 --- a/packages/conversation/src/models/v1/media-carousel-message/media-carousel-message.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * A message containing an image media component. - */ -export interface MediaCarouselMessage { - - /** Url to the media file. */ - url: string; -} diff --git a/packages/conversation/src/models/v1/media-message/index.ts b/packages/conversation/src/models/v1/media-message/index.ts index e17261bc..58a7265d 100644 --- a/packages/conversation/src/models/v1/media-message/index.ts +++ b/packages/conversation/src/models/v1/media-message/index.ts @@ -1 +1 @@ -export type { MediaMessage, MediaMessageItem } from './media-message'; +export type { MediaMessage, MediaProperties } from './media-message'; diff --git a/packages/conversation/src/models/v1/media-message/media-message.ts b/packages/conversation/src/models/v1/media-message/media-message.ts index dbfccd3a..3683698d 100644 --- a/packages/conversation/src/models/v1/media-message/media-message.ts +++ b/packages/conversation/src/models/v1/media-message/media-message.ts @@ -3,9 +3,10 @@ */ export interface MediaMessage { /** A message containing a media component, such as an image, document, or video. */ - media_message: MediaMessageItem; + media_message: MediaProperties; } -export interface MediaMessageItem { + +export interface MediaProperties { /** An optional parameter. Will be used where it is natively supported. */ thumbnail_url?: string; /** Url to the media file. */ diff --git a/packages/conversation/src/models/v1/mod-callback-events/capability-event/capability-event.ts b/packages/conversation/src/models/v1/mod-callback-events/capability-event/capability-event.ts index 75293f36..be0b2cf9 100644 --- a/packages/conversation/src/models/v1/mod-callback-events/capability-event/capability-event.ts +++ b/packages/conversation/src/models/v1/mod-callback-events/capability-event/capability-event.ts @@ -21,7 +21,7 @@ export interface CapabilityNotification { channel?: ConversationChannel; /** The channel identity. For example, a phone number for SMS, WhatsApp, and Viber Business. */ identity?: string; - /** Status indicating the recipient\'s capability on the channel. */ + /** Status indicating the recipient's capability on the channel. */ capability_status?: 'CAPABILITY_UNKNOWN' | 'CAPABILITY_FULL' | 'CAPABILITY_PARTIAL' | 'NO_CAPABILITY'; /** When capability_status is set to CAPABILITY_PARTIAL, this field includes a list of the supported channel-specific capabilities reported by the channel. */ channel_capabilities?: string[]; diff --git a/packages/conversation/src/models/v1/mod-callback-events/event-inbound/event-inbound.ts b/packages/conversation/src/models/v1/mod-callback-events/event-inbound/event-inbound.ts index 52ce3797..66b670f9 100644 --- a/packages/conversation/src/models/v1/mod-callback-events/event-inbound/event-inbound.ts +++ b/packages/conversation/src/models/v1/mod-callback-events/event-inbound/event-inbound.ts @@ -8,16 +8,46 @@ export interface EventInbound extends ConversationCallbackEvent { /** Name of the trigger responsible for this event. */ trigger: 'EVENT_INBOUND'; /** @see EventInboundEvent */ - event?: EventInboundEvent; + event?: EventInboundContactEvent | EventInboundContactMessageEvent; } +export interface EventInboundEventBase { + /** The event ID. */ + id?: string; + /** The direction of the event. It's always TO_APP for contact events. */ + direction?: 'TO_APP'; + /** @see ChannelIdentity */ + channel_identity?: ChannelIdentity; + /** The ID of the contact. Will be empty if processing_mode is DISPATCH. */ + contact_id?: string; + /** The ID of the conversation this event is part of. Will be empty if processing_mode is DISPATCH. */ + conversation_id?: string; + /** Timestamp marking when the channel callback was received by the Conversation API. */ + accept_time?: Date; + /** @see ProcessingMode */ + processing_mode?: ProcessingMode; +} + +export interface EventInboundContactEvent extends EventInboundEventBase { + /** @see ContactEvent */ + contact_event: ContactEvent; + contact_message_event?: never; +} + +export interface EventInboundContactMessageEvent extends EventInboundEventBase { + /** @see ContactMessageEvent */ + contact_message_event?: ContactMessageEvent; + contact_event?: never; +} + +/** @deprecated */ export interface EventInboundEvent { /** The event ID. */ id?: string; - /** The direction of the event. It\'s always TO_APP for contact events. */ + /** The direction of the event. It's always TO_APP for contact events. */ direction?: 'TO_APP'; /** @see ContactEvent */ - contact_event?: ContactEvent; + contact_event: ContactEvent; /** @see ContactMessageEvent */ contact_message_event?: ContactMessageEvent; /** @see ChannelIdentity */ diff --git a/packages/conversation/src/models/v1/mod-callback-events/event-inbound/index.ts b/packages/conversation/src/models/v1/mod-callback-events/event-inbound/index.ts index 9456d333..eec0a9f9 100644 --- a/packages/conversation/src/models/v1/mod-callback-events/event-inbound/index.ts +++ b/packages/conversation/src/models/v1/mod-callback-events/event-inbound/index.ts @@ -1 +1,7 @@ -export type { EventInbound, EventInboundEvent } from './event-inbound'; +export type { + EventInbound, + EventInboundEvent, + EventInboundEventBase, + EventInboundContactEvent, + EventInboundContactMessageEvent, +} from './event-inbound'; diff --git a/packages/conversation/src/models/v1/mod-callback-events/smart-conversations-event/smart-conversations-event.ts b/packages/conversation/src/models/v1/mod-callback-events/smart-conversations-event/smart-conversations-event.ts index 2d0ef3e6..67bdb8de 100644 --- a/packages/conversation/src/models/v1/mod-callback-events/smart-conversations-event/smart-conversations-event.ts +++ b/packages/conversation/src/models/v1/mod-callback-events/smart-conversations-event/smart-conversations-event.ts @@ -47,15 +47,19 @@ export interface MachineLearningSentimentResult { message?: string; /** An array of JSON objects made up of sentiment and score pairs, where the score represents the likelihood that the message communicates the corresponding sentiment. */ results?: SentimentResult[]; - /** The most probable sentiment of the analyzed text. */ + /** @see SentimentEnum */ sentiment?: SentimentEnum; /** The likelihood that the assigned sentiment represents the emotional context of the analyzed text. 1 is the maximum value, representing the highest likelihood that the message text matches the sentiment, and 0 is the minimum value, representing the lowest likelihood that the message text matches the sentiment. */ score?: number; } + +/** + * The most probable sentiment of the analyzed text. + */ export type SentimentEnum = 'positive' | 'negative' | 'neutral'; export interface SentimentResult { - /** The most probable sentiment of the analyzed text. */ + /** @see SentimentEnum */ sentiment?: SentimentEnum; /** The likelihood that the assigned sentiment represents the emotional context of the analyzed text. 1 is the maximum value, representing the highest likelihood that the message text matches the sentiment, and 0 is the minimum value, representing the lowest likelihood that the message text matches the sentiment. */ score?: number; @@ -101,7 +105,7 @@ export interface DocumentImageClassification { } /** - * An object containing a result array that reports the machine learning engine\'s character extraction results. + * An object containing a result array that reports the machine learning engine's character extraction results. */ export interface OpticalCharacterRecognition { /** The result of the OCR process. */ diff --git a/packages/conversation/src/models/v1/mod-credentials/index.ts b/packages/conversation/src/models/v1/mod-credentials/index.ts index c1ed3b00..4deb13b2 100644 --- a/packages/conversation/src/models/v1/mod-credentials/index.ts +++ b/packages/conversation/src/models/v1/mod-credentials/index.ts @@ -4,6 +4,7 @@ export * from './instagram-credentials'; export * from './kakaotalk-credentials'; export * from './kakaotalkchat-credentials'; export * from './line-credentials'; +export * from './line-enterprise-credentials'; export * from './mms-credentials'; export * from './sms-credentials'; export * from './static-bearer-credential'; diff --git a/packages/conversation/src/models/v1/mod-credentials/line-credentials/line-credentials.ts b/packages/conversation/src/models/v1/mod-credentials/line-credentials/line-credentials.ts index 8b083c64..3ce105fd 100644 --- a/packages/conversation/src/models/v1/mod-credentials/line-credentials/line-credentials.ts +++ b/packages/conversation/src/models/v1/mod-credentials/line-credentials/line-credentials.ts @@ -1,5 +1,5 @@ /** - * If you are including the LINE channel in the `channel_identifier` property, you must include this object. + * If the `channel` property is set to `LINE` for this entry of the `channel_credentials` array, you must include either the `line_credentials` object or the `line_enterprise_credentials` object in the entry as well. */ export interface LineCredentials { @@ -7,4 +7,6 @@ export interface LineCredentials { token: string; /** The secret for the LINE channel to which you are connecting. */ secret: string; + /** When an app contains multiple LINE or LINE Enterprise credentials, one of the credentials needs to be defined as the default. Setting this property to `true` marks the corresponding credentials as the default credentials. */ + is_default?: boolean; } diff --git a/packages/conversation/src/models/v1/mod-credentials/line-enterprise-credentials/index.ts b/packages/conversation/src/models/v1/mod-credentials/line-enterprise-credentials/index.ts new file mode 100644 index 00000000..a35466cd --- /dev/null +++ b/packages/conversation/src/models/v1/mod-credentials/line-enterprise-credentials/index.ts @@ -0,0 +1,5 @@ +export type { + LineEnterpriseCredentials, + LineEnterpriseCredentialsJapan, + LineEnterpriseCredentialsThailand, +} from './line-enterprise-credentials'; diff --git a/packages/conversation/src/models/v1/mod-credentials/line-enterprise-credentials/line-enterprise-credentials.ts b/packages/conversation/src/models/v1/mod-credentials/line-enterprise-credentials/line-enterprise-credentials.ts new file mode 100644 index 00000000..fede85c8 --- /dev/null +++ b/packages/conversation/src/models/v1/mod-credentials/line-enterprise-credentials/line-enterprise-credentials.ts @@ -0,0 +1,27 @@ +/** + * If the channel property is set to LINE for this entry of the channel_credentials array, you must include either the line_credentials object or the line_enterprise_credentials object in the entry as well. + */ +export type LineEnterpriseCredentials = LineEnterpriseCredentialsJapan | LineEnterpriseCredentialsThailand; + +export interface LineEnterpriseCredentialsJapan { + /** When an app contains multiple LINE or LINE Enterprise credentials, one of the credentials needs to be defined as the default. Setting this property to `true` marks the corresponding credentials as the default credentials. */ + is_default?: boolean; + /** LINE Credentials Japan */ + line_japan: LineEnterpriseCredentialsPair; + line_thailand?: never; +} + +export interface LineEnterpriseCredentialsThailand { + /** When an app contains multiple LINE or LINE Enterprise credentials, one of the credentials needs to be defined as the default. Setting this property to `true` marks the corresponding credentials as the default credentials. */ + is_default?: boolean; + /** LINE Credentials Thailand */ + line_thailand: LineEnterpriseCredentialsPair; + line_japan?: never; +} + +export interface LineEnterpriseCredentialsPair { + /** The token for the LINE channel to which you are connecting. */ + token: string; + /** The secret for the LINE channel to which you are connecting. */ + secret: string; +} diff --git a/packages/conversation/src/models/v1/queue-stats/queue-stats.ts b/packages/conversation/src/models/v1/queue-stats/queue-stats.ts index 41a51275..e5145f2f 100644 --- a/packages/conversation/src/models/v1/queue-stats/queue-stats.ts +++ b/packages/conversation/src/models/v1/queue-stats/queue-stats.ts @@ -1,7 +1,7 @@ export interface QueueStats { - /** The current size of the App\'s MT queue. */ + /** The current size of the App's MT queue. */ outbound_size?: number; - /** The limit of the App\'s MT queue. The default limit is 500000 messages. */ + /** The limit of the App's MT queue. The default limit is 500000 messages. */ outbound_limit?: number; } diff --git a/packages/conversation/src/models/v1/requests/contact/contact-request-data.ts b/packages/conversation/src/models/v1/requests/contact/contact-request-data.ts index 695745c0..1f33f662 100644 --- a/packages/conversation/src/models/v1/requests/contact/contact-request-data.ts +++ b/packages/conversation/src/models/v1/requests/contact/contact-request-data.ts @@ -26,11 +26,11 @@ export interface ListContactsRequestData { 'page_size'?: number; /** Optional. Next page token previously returned if any. */ 'page_token'?: string; - /** Optional. Contact identifier in an external system. If used, `channel` and `identity` query parameters can\'t be used. */ + /** Optional. Contact identifier in an external system. If used, `channel` and `identity` query parameters can't be used. */ 'external_id'?: string; - /** Optional. Specifies a channel, and must be set to one of the enum values. If set, the `identity` parameter must be set and `external_id` can\'t be used. Used in conjunction with `identity` to uniquely identify the specified channel identity. */ + /** Optional. Specifies a channel, and must be set to one of the enum values. If set, the `identity` parameter must be set and `external_id` can't be used. Used in conjunction with `identity` to uniquely identify the specified channel identity. */ 'channel'?: ConversationChannel; - /** Optional. If set, the `channel` parameter must be set and `external_id` can\'t be used. Used in conjunction with `channel` to uniquely identify the specified channel identity. This will differ from channel to channel. For example, a phone number for SMS, WhatsApp, and Viber Business. */ + /** Optional. If set, the `channel` parameter must be set and `external_id` can't be used. Used in conjunction with `channel` to uniquely identify the specified channel identity. This will differ from channel to channel. For example, a phone number for SMS, WhatsApp, and Viber Business. */ 'identity'?: string; } export interface MergeContactRequestData { diff --git a/packages/conversation/src/models/v1/requests/conversation/conversation-request-data.ts b/packages/conversation/src/models/v1/requests/conversation/conversation-request-data.ts index 42e7c30d..cf6df1c4 100644 --- a/packages/conversation/src/models/v1/requests/conversation/conversation-request-data.ts +++ b/packages/conversation/src/models/v1/requests/conversation/conversation-request-data.ts @@ -54,7 +54,7 @@ export interface ListRecentConversationsRequestData { * for the other parameters from the request that originated the token, otherwise the paged results may be inconsistent. */ 'page_token'?: string; /** Whether to sort conversations by newest message first or oldest. Default is DESC (newest first) */ - 'order'?: 'ASC' | 'DESC'; + 'order'?: 'ASC' | 'DESC' | string; } export interface StopActiveConversationRequestData { /** The unique ID of the conversation. This is generated by the system. */ diff --git a/packages/conversation/src/models/v1/requests/messages/messages-request-data.ts b/packages/conversation/src/models/v1/requests/messages/messages-request-data.ts index 791d76ef..a6d751e6 100644 --- a/packages/conversation/src/models/v1/requests/messages/messages-request-data.ts +++ b/packages/conversation/src/models/v1/requests/messages/messages-request-data.ts @@ -97,5 +97,5 @@ export interface UpdateMessageRequestData { /** Update message metadata request. */ 'updateMessageRequestBody': UpdateMessageRequest; /** Specifies the message source for which the request will be processed. Used for operations on messages in Dispatch Mode. For more information, see [Processing Modes](../../../../../conversation/processing-modes/). */ - 'messages_source'?: 'CONVERSATION_SOURCE' | 'DISPATCH_SOURCE'; + 'messages_source'?: MessageSource; } diff --git a/packages/conversation/src/models/v1/retention-policy/retention-policy.ts b/packages/conversation/src/models/v1/retention-policy/retention-policy.ts index 27efbec5..8b369a33 100644 --- a/packages/conversation/src/models/v1/retention-policy/retention-policy.ts +++ b/packages/conversation/src/models/v1/retention-policy/retention-policy.ts @@ -1,5 +1,5 @@ /** - * The retention policy configured for the app. For more information about retention policies, see [Retention Policy](/docs/conversation/keyconcepts/#retention-policy). + * The retention policy configured for the app. For more information about retention policies, see [Retention Policy](https://developers.sinch.com/docs/conversation/keyconcepts/#retention-policy). */ export interface RetentionPolicy { diff --git a/packages/conversation/src/models/v1/runtime-error/index.ts b/packages/conversation/src/models/v1/runtime-error/index.ts index 207da3c0..f1cb9367 100644 --- a/packages/conversation/src/models/v1/runtime-error/index.ts +++ b/packages/conversation/src/models/v1/runtime-error/index.ts @@ -1 +1 @@ -export type { RuntimeError } from './runtime-error'; +export type { RuntimeError, RuntimeErrorContent } from './runtime-error'; diff --git a/packages/conversation/src/models/v1/runtime-error/runtime-error.ts b/packages/conversation/src/models/v1/runtime-error/runtime-error.ts index 8610cc27..a0bcd4bb 100644 --- a/packages/conversation/src/models/v1/runtime-error/runtime-error.ts +++ b/packages/conversation/src/models/v1/runtime-error/runtime-error.ts @@ -1,11 +1,13 @@ import { ErrorDetail } from '../error-detail'; export interface RuntimeError { + error? : RuntimeErrorContent; +} +export interface RuntimeErrorContent { code?: number; /** List of error details */ details?: ErrorDetail[]; - error?: string; message?: string; status?: string; } diff --git a/packages/conversation/src/models/v1/send-message-request/send-message-request.ts b/packages/conversation/src/models/v1/send-message-request/send-message-request.ts index 6b8015b6..8d06aeee 100644 --- a/packages/conversation/src/models/v1/send-message-request/send-message-request.ts +++ b/packages/conversation/src/models/v1/send-message-request/send-message-request.ts @@ -21,7 +21,7 @@ export interface SendMessageRequestBase { /** The ID of the app sending the message. */ app_id: string; - /** Overwrites the default callback url for delivery receipts for this message The REST URL should be of the form: `http://host[:port]/path` */ + /** Overwrites the default callback url for delivery receipts for this message. Note that you may [define a `secret_for_overridden_callback_urls` at the app level](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App/#tag/App/operation/App_UpdateApp!path=callback_settings/secret_for_overridden_callback_urls&t=request); this secret will be used to sign the contents of delivery receipts when the default callback URL is overridden by this property. The REST URL should be of the form: `http://host[:port]/path` */ callback_url?: string; /** Explicitly define the channels and order in which they are tried when sending the message. All channels provided in this field must be configured in the corresponding Conversation API app, or the request will be rejected. Which channels the API will try and their priority is defined by: 1. `channel_priority_order` if available. 2. `recipient.identified_by.channel_identities` if available. 3. When recipient is a `contact_id`: - if a conversation with the contact exists: the active channel of the conversation is tried first. - the existing channels for the contact are ordered by contact channel preferences if given. - lastly the existing channels for the contact are ordered by the app priority. */ channel_priority_order?: ConversationChannel[]; @@ -29,7 +29,7 @@ export interface SendMessageRequestBase { channel_properties?: { [K in ChannelPropertyKey]?: string; }; /** Metadata that should be associated with the message. Returned in the `metadata` field of a [Message Delivery Receipt](https://developers.sinch.com/docs/conversation/callbacks/#message-delivery-receipt). Up to 1024 characters long. */ message_metadata?: string; - /** Metadata that should be associated with the conversation. This metadata will be propagated on MO callbacks associated with this conversation. Up to 1024 characters long. Note that the MO callback will always use the last metadata available in the conversation. Important notes: - If you send a message with the `conversation_metadata` field populated, and then send another message without populating the `conversation_metadata` field, the original metadata will continue be propagated on the related MO callbacks. - If you send a message with the `conversation_metadata` field populated, and then send another message with a different value for `conversation_metadata` in the same conversation, the latest metadata value overwrites the existing one. So, future MO callbacks will include the new metadata. - The `conversation_metadata` only accepts json objects. Currently only returned in the `message_metadata` field of an [Inbound Message](/docs/conversation/callbacks/#inbound-message) callback. */ + /** Metadata that will be associated with the conversation in `CONVERSATION` mode and with the specified recipient identities in `DISPATCH` mode. This metadata will be propagated on MO callbacks associated with the respective conversation or user identity. Up to 2048 characters long. Note that the MO callback will always use the last metadata available. Important notes: - If you send a message with the `conversation_metadata` field populated, and then send another message without populating the `conversation_metadata` field, the original metadata will continue be propagated on the related MO callbacks. - If you send a message with the `conversation_metadata` field populated, and then send another message with a different value for `conversation_metadata` in the same conversation, the latest metadata value overwrites the existing one. So, future MO callbacks will include the new metadata. - The `conversation_metadata` only accepts json objects. Currently only returned in the `message_metadata` field of an [Inbound Message](https://developers.sinch.com/docs/conversation/callbacks/#inbound-message) callback. */ conversation_metadata?: object; /** @see MessageQueue */ queue?: MessageQueue; @@ -41,12 +41,14 @@ export interface SendMessageRequestBase { * The SDK will take care of the formatting: example of valid input for 10 seconds: 10 (number), "10" (string), "10s" (string) */ ttl?: string | number; - /** Overrides the app's [Processing Mode](../../../../../conversation/processing-modes/). Default value is `DEFAULT`. */ + /** Overrides the app's [Processing Mode](https://developers.sinch.com/docs/conversation/processing-modes/). Default value is `DEFAULT`. */ processing_strategy?: ProcessingStrategy; - /** An arbitrary identifier that will be propagated to callbacks related to this message, including MO replies. Only applicable to messages sent with the `CONVERSATION` processing mode. Up to 128 characters long. */ + /** An arbitrary identifier that will be propagated to callbacks related to this message, including MO messages from the recipient. The `correlation_id` is associated with the conversation in `CONVERSATION` mode and with the specified recipient identities in `DISPATCH` mode. The MO callbacks will always include the last `correlation_id` available, (which is similar to how the `conversation_metadata` property functions). Up to 128 characters long. */ correlation_id?: string; /** Update strategy for the `conversation_metadata` field. */ conversation_metadata_update_strategy?: ConversationMetadataUpdateStrategy; + /** This field classifies the message content for use with Sinch's [consent management functionality](https://developers.sinch.com/docs/conversation/consent-management/). Note that this field is currently only used with Sinch's consent management functionality, and is not referenced elsewhere by the Conversation API. */ + message_content_type?: 'CONTENT_UNKNOWN' | 'CONTENT_MARKETING' | 'CONTENT_NOTIFICATION'; } export type ChannelPropertyKey = diff --git a/packages/conversation/src/models/v1/template-message/template-message.ts b/packages/conversation/src/models/v1/template-message/template-message.ts index a7301de1..23ad0667 100644 --- a/packages/conversation/src/models/v1/template-message/template-message.ts +++ b/packages/conversation/src/models/v1/template-message/template-message.ts @@ -1,16 +1,18 @@ -import { TemplateReference } from '../template-reference'; +import { ChannelSpecificTemplateReference, TemplateReference } from '../template-reference'; import { ConversationChannel } from '../conversation-channel'; +/** + * Message referring to predefined template + */ export interface TemplateMessage { - - /** */ + /** Template Message */ template_message: TemplateMessageItem; } export interface TemplateMessageItem { /** Optional. Channel specific template reference with parameters per channel. The channel template if exists overrides the omnichannel template. At least one of `channel_template` or `omni_template` needs to be present. The key in the map must point to a valid conversation channel as defined by the enum ConversationChannel. */ - channel_template?: { [key in ConversationChannel]?: TemplateReference; }; + channel_template?: { [key in ConversationChannel]?: ChannelSpecificTemplateReference; }; /** @see TemplateReference */ omni_template?: TemplateReference; } diff --git a/packages/conversation/src/models/v1/template-reference/index.ts b/packages/conversation/src/models/v1/template-reference/index.ts index aa84882e..596b6ff7 100644 --- a/packages/conversation/src/models/v1/template-reference/index.ts +++ b/packages/conversation/src/models/v1/template-reference/index.ts @@ -1 +1 @@ -export type { TemplateReference } from './template-reference'; +export type { TemplateReference, ChannelSpecificTemplateReference } from './template-reference'; diff --git a/packages/conversation/src/models/v1/template-reference/template-reference.ts b/packages/conversation/src/models/v1/template-reference/template-reference.ts index 7747923f..dbfd60a9 100644 --- a/packages/conversation/src/models/v1/template-reference/template-reference.ts +++ b/packages/conversation/src/models/v1/template-reference/template-reference.ts @@ -2,12 +2,24 @@ * The referenced template can be an omnichannel template stored in Conversation API Template Store as AppMessage or it can reference external channel-specific template such as WhatsApp Business Template. */ export interface TemplateReference { - /** The BCP-47 language code, such as `en-US` or `sr-Latn`. For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. English is the default language_code. */ + /** The BCP-47 language code, such as `en_US` or `sr_Latn`. For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. English is the default `language_code`. Note that, while many API calls involving templates accept either the dashed format (`en-US`) or the underscored format (`en_US`), some channel specific templates (for example, WhatsApp channel-specific templates) only accept the underscored format. Note that this field is required for WhatsApp channel-specific templates. */ language_code?: string; /** Required if the template has parameters. Concrete values must be present for all defined parameters in the template. Parameters can be different for different versions and/or languages of the template. */ parameters?: { [key: string]: string; }; - /** The ID of the template. */ + /** The ID of the template. Note that, in the case of WhatsApp channel-specific templates, this field must be populated by the name of the template. */ template_id: string; - /** Used to specify what version of a template to use. This will be used in conjunction with `language_code`. */ + /** Used to specify what version of a template to use. Required when using `omni_channel_override` and `omni_template` fields. This will be used in conjunction with `language_code`. Note that, when referencing omni-channel templates using the [Sinch Customer Dashboard](https://dashboard.sinch.com/), the latest version of a given omni-template can be identified by populating this field with `latest`. */ version: string; } + + +export interface ChannelSpecificTemplateReference { + /** The BCP-47 language code, such as `en_US` or `sr_Latn`. For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. English is the default `language_code`. Note that, while many API calls involving templates accept either the dashed format (`en-US`) or the underscored format (`en_US`), some channel specific templates (for example, WhatsApp channel-specific templates) only accept the underscored format. Note that this field is required for WhatsApp channel-specific templates. */ + language_code?: string; + /** Required if the template has parameters. Concrete values must be present for all defined parameters in the template. Parameters can be different for different versions and/or languages of the template. */ + parameters?: { [key: string]: string; }; + /** The ID of the template. Note that, in the case of WhatsApp channel-specific templates, this field must be populated by the name of the template. */ + template_id: string; + /** Used to specify what version of a template to use. This will be used in conjunction with `language_code`. */ + version?: string; +} diff --git a/packages/conversation/src/models/v1/webhook-trigger/webhook-trigger.ts b/packages/conversation/src/models/v1/webhook-trigger/webhook-trigger.ts index aebf34bb..a7bfcc9f 100644 --- a/packages/conversation/src/models/v1/webhook-trigger/webhook-trigger.ts +++ b/packages/conversation/src/models/v1/webhook-trigger/webhook-trigger.ts @@ -1,4 +1,5 @@ /** + * Each webhook can subscribe to one or more of the following triggers: * - `UNSPECIFIED_TRIGGER`: Using this value will cause errors. * - `MESSAGE_DELIVERY`: Subscribe to delivery receipts for a message sent. * - `EVENT_DELIVERY`: Subscribe to delivery receipts for a event sent. diff --git a/packages/conversation/src/models/v1/webhook/webhook.ts b/packages/conversation/src/models/v1/webhook/webhook.ts index ebb60d6e..2b9de3d6 100644 --- a/packages/conversation/src/models/v1/webhook/webhook.ts +++ b/packages/conversation/src/models/v1/webhook/webhook.ts @@ -7,7 +7,7 @@ import { WebhookTargetType } from '../enums'; */ export interface Webhook { /** The app that this webhook belongs to. */ - app_id: string; + app_id?: string; /** @see ClientCredentials */ client_credentials?: ClientCredentials; /** The ID of the webhook. */ @@ -18,8 +18,8 @@ export interface Webhook { target: string; /** @see WebhookTargetType */ target_type?: WebhookTargetType; - /** An array of triggers that should trigger the webhook and result in an event being sent to the target url. Refer to the list of [Webhook Triggers](/docs/conversation/callbacks#webhook-triggers) for a complete list. */ - triggers: WebhookTrigger[]; + /** An array of triggers that should trigger the webhook and result in an event being sent to the target url. Refer to the list of [Webhook Triggers](https://developers.sinch.com/docs/conversation/callbacks/#webhook-triggers) for a complete list. */ + triggers?: WebhookTrigger[]; } export interface UpdateWebhookRequestBody extends diff --git a/packages/conversation/src/models/v1/whatsapp-flow/index.ts b/packages/conversation/src/models/v1/whatsapp-flow/index.ts new file mode 100644 index 00000000..eb25bc68 --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-flow/index.ts @@ -0,0 +1,6 @@ +export type { + WhatsAppFlow, + FlowActionPayload, + FlowChannelSpecificMessage, + FlowChannelSpecificMessageFlowActionPayload, +} from './whatsapp-flow'; diff --git a/packages/conversation/src/models/v1/whatsapp-flow/whatsapp-flow.ts b/packages/conversation/src/models/v1/whatsapp-flow/whatsapp-flow.ts new file mode 100644 index 00000000..b156c8d1 --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-flow/whatsapp-flow.ts @@ -0,0 +1,32 @@ +import { WhatsAppInteractiveMessageBase } from '../whatsapp-interactive-message-base'; + +/** @deprecated */ +export type FlowChannelSpecificMessage = WhatsAppFlow; + +/** + * A message type for sending WhatsApp Flows. + */ +export interface WhatsAppFlow extends WhatsAppInteractiveMessageBase { + /** ID of the Flow. */ + flow_id: string; + /** Generated token which is an identifier. */ + flow_token?: string; + /** The mode in which the flow is. */ + flow_mode?: 'draft' | 'published'; + /** Text which is displayed on the Call To Action button (20 characters maximum, emoji not supported). */ + flow_cta: string; + /** */ + flow_action?: 'navigate' | 'data_exchange'; + /** @see FlowActionPayload */ + flow_action_payload?: FlowActionPayload; +} + +/** @deprecated */ +export type FlowChannelSpecificMessageFlowActionPayload = FlowActionPayload; + +export interface FlowActionPayload { + /** The ID of the screen displayed first. This must be an entry screen. */ + screen?: string; + /** Data for the first screen. */ + data?: object; +} diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/index.ts new file mode 100644 index 00000000..eddc1496 --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/index.ts @@ -0,0 +1,5 @@ +export * from './whatsapp-interactive-document-header'; +export * from './whatsapp-interactive-image-header'; +export * from './whatsapp-interactive-text-header'; +export * from './whatsapp-interactive-video-header'; +export * from './whatsapp-interactive-header-media'; diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-document-header/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-document-header/index.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-document-header/index.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-document-header/index.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-document-header/whatsapp-interactive-document-header.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-document-header/whatsapp-interactive-document-header.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-document-header/whatsapp-interactive-document-header.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-document-header/whatsapp-interactive-document-header.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-header-media/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-header-media/index.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-header-media/index.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-header-media/index.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-header-media/whatsapp-interactive-header-media.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-header-media/whatsapp-interactive-header-media.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-header-media/whatsapp-interactive-header-media.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-header-media/whatsapp-interactive-header-media.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-image-header/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-image-header/index.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-image-header/index.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-image-header/index.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-image-header/whatsapp-interactive-image-header.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-image-header/whatsapp-interactive-image-header.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-image-header/whatsapp-interactive-image-header.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-image-header/whatsapp-interactive-image-header.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-text-header/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-text-header/index.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-text-header/index.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-text-header/index.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-text-header/whatsapp-interactive-text-header.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-text-header/whatsapp-interactive-text-header.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-text-header/whatsapp-interactive-text-header.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-text-header/whatsapp-interactive-text-header.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-video-header/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-video-header/index.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-video-header/index.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-video-header/index.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-video-header/whatsapp-interactive-video-header.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-video-header/whatsapp-interactive-video-header.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-video-header/whatsapp-interactive-video-header.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/header/whatsapp-interactive-video-header/whatsapp-interactive-video-header.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/index.ts new file mode 100644 index 00000000..6685fbc7 --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/index.ts @@ -0,0 +1,4 @@ +export * from './header'; +export * from './whatsapp-interactive-body'; +export * from './whatsapp-interactive-footer'; +export * from './whatsapp-interactive-header'; diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-body/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-body/index.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-body/index.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-body/index.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-body/whatsapp-interactive-body.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-body/whatsapp-interactive-body.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-body/whatsapp-interactive-body.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-body/whatsapp-interactive-body.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-footer/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-footer/index.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-footer/index.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-footer/index.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-footer/whatsapp-interactive-footer.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-footer/whatsapp-interactive-footer.ts similarity index 100% rename from packages/conversation/src/models/v1/whatsapp-interactive-footer/whatsapp-interactive-footer.ts rename to packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-footer/whatsapp-interactive-footer.ts diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-header/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-header/index.ts new file mode 100644 index 00000000..6e046d7f --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-header/index.ts @@ -0,0 +1 @@ +export { WhatsAppInteractiveHeader, WhatsappInteractiveHeader } from './whatsapp-interactive-header'; diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-header/whatsapp-interactive-header.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-header/whatsapp-interactive-header.ts new file mode 100644 index 00000000..17adc80c --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/common/whatsapp-interactive-header/whatsapp-interactive-header.ts @@ -0,0 +1,15 @@ +import { + WhatsAppInteractiveDocumentHeader, + WhatsAppInteractiveImageHeader, + WhatsAppInteractiveTextHeader, + WhatsAppInteractiveVideoHeader, +} from '../header'; + +/** @deprecated */ +export type WhatsappInteractiveHeader = WhatsAppInteractiveHeader; + +export type WhatsAppInteractiveHeader = + WhatsAppInteractiveTextHeader + | WhatsAppInteractiveImageHeader + | WhatsAppInteractiveDocumentHeader + | WhatsAppInteractiveVideoHeader; diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-message-base/index.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/index.ts new file mode 100644 index 00000000..870c95ae --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/index.ts @@ -0,0 +1,2 @@ +export type { WhatsAppInteractiveMessageBase } from './whatsapp-interactive-message-base'; +export * from './common'; diff --git a/packages/conversation/src/models/v1/whatsapp-interactive-message-base/whatsapp-interactive-message-base.ts b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/whatsapp-interactive-message-base.ts new file mode 100644 index 00000000..c50405a4 --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-interactive-message-base/whatsapp-interactive-message-base.ts @@ -0,0 +1,10 @@ +import { WhatsAppInteractiveBody, WhatsAppInteractiveFooter, WhatsAppInteractiveHeader } from './common'; + +export interface WhatsAppInteractiveMessageBase { + /** @see WhatsAppInteractiveHeader */ + header?: WhatsAppInteractiveHeader; + /** @see WhatsAppInteractiveBody */ + body?: WhatsAppInteractiveBody; + /** @see WhatsAppInteractiveFooter */ + footer?: WhatsAppInteractiveFooter; +} diff --git a/packages/conversation/src/models/v1/whatsapp-payment-order-details/index.ts b/packages/conversation/src/models/v1/whatsapp-payment-order-details/index.ts new file mode 100644 index 00000000..517eceb4 --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-payment-order-details/index.ts @@ -0,0 +1,14 @@ +export type { + WhatsAppPaymentOrderDetails, + OrderDetailsPayment, + OrderDetailsPaymentOrder, + OrderDetailsPaymentOrderItems, + OrderDetailsPaymentSettings, + OrderDetailsPaymentSettingsDynamicPix, + PaymentOrderDetailsChannelSpecificMessage, + PaymentOrderDetailsChannelSpecificMessagePayment, + PaymentOrderDetailsChannelSpecificMessagePaymentOrder, + PaymentOrderDetailsChannelSpecificMessagePaymentOrderItems, + PaymentOrderDetailsChannelSpecificMessagePaymentPaymentSettings, + PaymentOrderDetailsChannelSpecificMessagePaymentPaymentSettingsDynamicPix, +} from './whatsapp-payment-order-details'; diff --git a/packages/conversation/src/models/v1/whatsapp-payment-order-details/whatsapp-payment-order-details.ts b/packages/conversation/src/models/v1/whatsapp-payment-order-details/whatsapp-payment-order-details.ts new file mode 100644 index 00000000..7c421901 --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-payment-order-details/whatsapp-payment-order-details.ts @@ -0,0 +1,112 @@ +import { WhatsAppInteractiveMessageBase } from '../whatsapp-interactive-message-base'; + +/** @deprecated */ +export type PaymentOrderDetailsChannelSpecificMessage = WhatsAppPaymentOrderDetails; + +/** + * A message type for sending WhatsApp Payment Requests. + */ +export interface WhatsAppPaymentOrderDetails extends WhatsAppInteractiveMessageBase { + /** @see OrderDetailsPayment */ + payment: OrderDetailsPayment; +} + +/** @deprecated */ +export type PaymentOrderDetailsChannelSpecificMessagePayment = OrderDetailsPayment; + +/** + * The payment order details content. + */ +export interface OrderDetailsPayment { + /** The country/currency associated with the payment message. */ + type: 'br' | 'sg' | string; + /** Unique reference ID. */ + reference_id: string; + /** The type of good associated with this order. */ + type_of_goods: 'digital-goods' | 'physical-goods' | string; + /** @see OrderDetailsPaymentSettings */ + payment_settings?: OrderDetailsPaymentSettings; + /** Integer representing the total amount of the transaction. */ + total_amount_value: number; + /** @see OrderDetailsPaymentOrder */ + order: OrderDetailsPaymentOrder; +} + +/** @deprecated */ +export type PaymentOrderDetailsChannelSpecificMessagePaymentOrder = OrderDetailsPaymentOrder; + +/** + * The payment order. + */ +export interface OrderDetailsPaymentOrder { + /** Unique ID of the Facebook catalog being used by the business. */ + catalog_id?: string; + /** UTC timestamp indicating when the order should expire. The timestamp must be given in seconds. The minimum threshold for the timestamp is 300 seconds.*/ + // TODO v2: expose this property as a Date object + expiration_time?: string; + /** Description of the expiration. */ + expiration_description?: string; + /** Value representing the subtotal amount of this order. */ + subtotal_value: number; + /** Value representing the tax amount for this order. */ + tax_value: number; + /** Description of the tax for this order. */ + tax_description?: string; + /** Value representing the shipping amount for this order. */ + shipping_value?: number; + /** Shipping description for this order. */ + shipping_description?: string; + /** Value of the discount for this order. */ + discount_value?: number; + /** Description of the discount for this order. */ + discount_description?: string; + /** Discount program name for this order. */ + discount_program_name?: string; + /** The items list for this order. */ + items: OrderDetailsPaymentOrderItems[]; +} + +/** @deprecated */ +export type PaymentOrderDetailsChannelSpecificMessagePaymentOrderItems = OrderDetailsPaymentOrderItems; + +export interface OrderDetailsPaymentOrderItems { + /** Unique ID of the retailer. */ + retailer_id: string; + /** Item's name as displayed to the user. */ + name: string; + /** Price per item. */ + amount_value: number; + /** Number of items in this order. */ + quantity: number; + /** Discounted price per item. */ + sale_amount_value?: number; +} + +/** @deprecated */ +export type PaymentOrderDetailsChannelSpecificMessagePaymentPaymentSettings = OrderDetailsPaymentSettings; + +/** + * The payment settings. + */ +export interface OrderDetailsPaymentSettings { + /** @see OrderDetailsPaymentSettingsDynamicPix */ + dynamic_pix: OrderDetailsPaymentSettingsDynamicPix; +} + +/** @deprecated */ +export type PaymentOrderDetailsChannelSpecificMessagePaymentPaymentSettingsDynamicPix + = OrderDetailsPaymentSettingsDynamicPix; + +/** + * The dynamic Pix payment settings. + */ +export interface OrderDetailsPaymentSettingsDynamicPix { + /** The dynamic Pix code to be used by the buyer to pay. */ + code: string; + /** Account holder name. */ + merchant_name: string; + /** Pix key. */ + key: string; + /** Pix key type. */ + key_type: 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'EVP' | string; +} diff --git a/packages/conversation/src/models/v1/whatsapp-payment-order-status/index.ts b/packages/conversation/src/models/v1/whatsapp-payment-order-status/index.ts new file mode 100644 index 00000000..fca8b455 --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-payment-order-status/index.ts @@ -0,0 +1,8 @@ +export type { + WhatsAppPaymentOrderStatus, + OrderStatusPayment, + OrderStatusPaymentDetails, + PaymentOrderStatusChannelSpecificMessage, + PaymentOrderStatusChannelSpecificMessagePayment, + PaymentOrderStatusChannelSpecificMessagePaymentOrder, +} from './whatsapp-payment-order-status'; diff --git a/packages/conversation/src/models/v1/whatsapp-payment-order-status/whatsapp-payment-order-status.ts b/packages/conversation/src/models/v1/whatsapp-payment-order-status/whatsapp-payment-order-status.ts new file mode 100644 index 00000000..dcf7bab5 --- /dev/null +++ b/packages/conversation/src/models/v1/whatsapp-payment-order-status/whatsapp-payment-order-status.ts @@ -0,0 +1,38 @@ +import { WhatsAppInteractiveMessageBase } from '../whatsapp-interactive-message-base'; + +/** @deprecated */ +export type PaymentOrderStatusChannelSpecificMessage = WhatsAppPaymentOrderStatus; + +/** + * A message type for sending WhatsApp Payment Status Requests. + */ +export interface WhatsAppPaymentOrderStatus extends WhatsAppInteractiveMessageBase{ + /** @see OrderStatusPayment */ + payment: OrderStatusPayment; +} + +/** @deprecated */ +export type PaymentOrderStatusChannelSpecificMessagePayment = OrderStatusPayment; + +/** + * The payment order status message content + */ +export interface OrderStatusPayment { + /** Unique ID used to query the current payment status. */ + reference_id: string; + /** @see OrderStatusPaymentDetails */ + order: OrderStatusPaymentDetails; +} + +/** @deprecated */ +export type PaymentOrderStatusChannelSpecificMessagePaymentOrder = OrderStatusPaymentDetails; + +/** + * The payment order. + */ +export interface OrderStatusPaymentDetails { + /** The new payment message status. */ + status: 'pending' | 'processing' | 'partially-shipped' | 'shipped' | 'completed' | 'canceled'; + /** The description of payment message status update (120 characters maximum). */ + description?: string; +} diff --git a/packages/conversation/src/rest/v1/app/app-api.ts b/packages/conversation/src/rest/v1/app/app-api.ts index e06cdd8a..1faa6289 100644 --- a/packages/conversation/src/rest/v1/app/app-api.ts +++ b/packages/conversation/src/rest/v1/app/app-api.ts @@ -135,7 +135,7 @@ export class AppApi extends ConversationDomainApi { /** * Update an app - * Updates a particular app as specified by the App ID. Note that this is a `PATCH` operation, so any specified field values will replace existing values. Therefore, **if you\'d like to add additional configurations to an existing Conversation API app, ensure that you include existing values AND new values in the call**. For example, if you\'d like to add new `channel_credentials`, you can [get](/docs/conversation/api-reference/conversation/tag/App/#tag/App/operation/App_GetApp) your existing Conversation API app, extract the existing `channel_credentials` list, append your new configuration to that list, and include the updated `channel_credentials` list in this update call. + * Updates a particular app as specified by the App ID. Note that this is a `PATCH` operation, so any specified field values will replace existing values. Therefore, **if you\'d like to add additional configurations to an existing Conversation API app, ensure that you include existing values AND new values in the call**. For example, if you\'d like to add new `channel_credentials`, you can [get](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App/#tag/App/operation/App_GetApp) your existing Conversation API app, extract the existing `channel_credentials` list, append your new configuration to that list, and include the updated `channel_credentials` list in this update call. * @param { UpdateAppRequestData } data - The data to provide to the API call. */ public async update(data: UpdateAppRequestData): Promise { diff --git a/packages/conversation/src/rest/v1/callbacks/callbacks-webhook.ts b/packages/conversation/src/rest/v1/callbacks/callbacks-webhook.ts index 1f396c7a..fcc34e7c 100644 --- a/packages/conversation/src/rest/v1/callbacks/callbacks-webhook.ts +++ b/packages/conversation/src/rest/v1/callbacks/callbacks-webhook.ts @@ -86,6 +86,9 @@ export class ConversationCallbackWebhooks implements CallbackProcessor { diff --git a/packages/conversation/src/rest/v1/conversation-domain-api.ts b/packages/conversation/src/rest/v1/conversation-domain-api.ts index d795a72e..463c162a 100644 --- a/packages/conversation/src/rest/v1/conversation-domain-api.ts +++ b/packages/conversation/src/rest/v1/conversation-domain-api.ts @@ -12,6 +12,10 @@ import { UnifiedCredentials, } from '@sinch/sdk-client'; +export const DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING = '** DEPRECATION NOTICE ** ' + + 'The "conversationRegion" property will become mandatory in the next major version of the SDK and not default ' + + 'to "us" anymore. Please set it to a valid region.'; + export class ConversationDomainApi implements Api { public readonly apiName: string; public client?: ApiClient; @@ -28,6 +32,12 @@ export class ConversationDomainApi implements Api { */ public setHostname(hostname: string) { try { + // The next "if/else" block is a workaround to detect if the hostname is set for the Conversation or Templates API - To be deleted in 2.0 + if (this.apiName === 'TemplatesV1Api' || this.apiName === 'TemplatesV2Api') { + this.sinchClientParameters.conversationTemplatesHostname = hostname; + } else { + this.sinchClientParameters.conversationHostname = hostname; + } this.client = this.getSinchClient(); this.client.apiClientOptions.hostname = hostname; } catch (error) { @@ -80,6 +90,17 @@ export class ConversationDomainApi implements Api { public getSinchClient(): ApiClient { if (!this.client) { const region = this.sinchClientParameters.conversationRegion ?? ConversationRegion.UNITED_STATES; + // Deprecation Notice - to remove in 2.0 + const isConversationHostnameOverridden = !!this.sinchClientParameters.conversationHostname + && this.apiName !== 'TemplatesV1Api' + && this.apiName !== 'TemplatesV2Api'; + const isConversationTemplatesHostnameOverridden = !!this.sinchClientParameters.conversationTemplatesHostname + && (this.apiName === 'TemplatesV1Api' || this.apiName === 'TemplatesV2Api'); + if (!this.sinchClientParameters.conversationRegion + && !isConversationHostnameOverridden + && !isConversationTemplatesHostnameOverridden) { + console.warn(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + } if(!Object.values(SupportedConversationRegion).includes(region as SupportedConversationRegion)) { console.warn(`The region "${region}" is not known as a supported region for the Conversation API`); } diff --git a/packages/conversation/src/rest/v1/conversation/conversation-api.ts b/packages/conversation/src/rest/v1/conversation/conversation-api.ts index b330af74..dc486de4 100644 --- a/packages/conversation/src/rest/v1/conversation/conversation-api.ts +++ b/packages/conversation/src/rest/v1/conversation/conversation-api.ts @@ -148,7 +148,7 @@ export class ConversationApi extends ConversationDomainApi { /** * Inject a message - * This operation injects a conversation message in to a specific conversation. + * This operation injects a conversation message into a specific conversation. * @param { InjectMessageRequestData } data - The data to provide to the API call. */ public async injectMessage(data: InjectMessageRequestData): Promise { diff --git a/packages/conversation/src/rest/v1/messages/messages-api.ts b/packages/conversation/src/rest/v1/messages/messages-api.ts index 11489ab2..28da600c 100644 --- a/packages/conversation/src/rest/v1/messages/messages-api.ts +++ b/packages/conversation/src/rest/v1/messages/messages-api.ts @@ -99,7 +99,7 @@ export class MessagesApi extends ConversationDomainApi { /** * List messages - * This operation lists all messages sent or received via particular [Processing Modes](../../../../../conversation/processing-modes/). Setting the `messages_source` parameter to `CONVERSATION_SOURCE` allows for querying messages in `CONVERSATION` mode, and setting it to `DISPATCH_SOURCE` will allow for queries of messages in `DISPATCH` mode. Combining multiple parameters is supported for more detailed filtering of messages, but some of them are not supported depending on the value specified for `messages_source`. The description for each field will inform if that field may not be supported. The messages are ordered by their `accept_time` property in descending order, where `accept_time` is a timestamp of when the message was enqueued by the Conversation API. This means messages received most recently will be listed first. + * This operation lists all messages sent or received via particular [Processing Modes](https://developers.sinch.com/conversation/processing-modes/). Setting the `messages_source` parameter to `CONVERSATION_SOURCE` allows for querying messages in `CONVERSATION` mode, and setting it to `DISPATCH_SOURCE` will allow for queries of messages in `DISPATCH` mode. Combining multiple parameters is supported for more detailed filtering of messages, but some of them are not supported depending on the value specified for `messages_source`. The description for each field will inform if that field may not be supported. The messages are ordered by their `accept_time` property in descending order, where `accept_time` is a timestamp of when the message was enqueued by the Conversation API. This means messages received most recently will be listed first. * @param { ListMessagesRequestData } data - The data to provide to the API call. * @return {ApiListPromise} */ diff --git a/packages/conversation/tests/messages-mocks.ts b/packages/conversation/tests/messages-mocks.ts index 3b22953e..0149c154 100644 --- a/packages/conversation/tests/messages-mocks.ts +++ b/packages/conversation/tests/messages-mocks.ts @@ -102,6 +102,9 @@ export const choiceMessageItem: Conversation.ChoiceMessageItem = { }, }, ], + message_properties: { + whatsapp_footer: 'Order now!', + }, }; export const choiceMessage: Conversation.ChoiceMessage = { @@ -137,9 +140,10 @@ export const locationMessage: Conversation.LocationMessage = { location_message: locationMessageItem, }; -export const mediaMessageItem: Conversation.MediaMessageItem = { +export const mediaMessageItem: Conversation.MediaProperties = { url: 'https://url-to-media.com', thumbnail_url: 'https://url-to-thumbnail.com', + filename_override: 'new-filename.jpg', }; export const mediaMessage: Conversation.MediaMessage = { @@ -158,7 +162,6 @@ export const templateMessageItem: Conversation.TemplateMessageItem = { channel_template: { 'KAKAOTALK': { template_id: 'templateIdForKakaoTalk', - version: '1', language_code: 'en-US', }, }, @@ -199,6 +202,11 @@ export const bookProductDetails: Conversation.ProductItem = { export const listMessageItem: Conversation.ListMessageItem = { title: 'Choose your icecream flavor', description: 'The best icecream in town!', + media: { + url: 'https://icecream.capytown.com/image.jpg', + thumbnail_url: 'https://icecream.capytown.com/thumbnail.jpg', + filename_override: 'icecream.jpg', + }, sections: [ { title: 'Fruit flavors', @@ -217,6 +225,8 @@ export const listMessageItem: Conversation.ListMessageItem = { ], message_properties: { menu: 'menu text', + catalog_id: 'catalogId', + whatsapp_header: 'Tasty icecream in store for you!', }, }; diff --git a/packages/conversation/tests/rest/v1/app/app-api.test.ts b/packages/conversation/tests/rest/v1/app/app-api.test.ts index f3119460..77a78e56 100644 --- a/packages/conversation/tests/rest/v1/app/app-api.test.ts +++ b/packages/conversation/tests/rest/v1/app/app-api.test.ts @@ -59,6 +59,29 @@ describe('AppApi', () => { line_credentials: { token: 'line_token', secret: 'line_secret', + is_default: true, + }, + }; + const channelCredentialsLineEnterpriseJapan: Conversation.ChannelCredentialsLineEnterprise = { + channel: 'LINE', + credential_ordinal_number: 1, + line_enterprise_credentials: { + line_japan: { + token: 'line_japan_token', + secret: 'line_japan_secret', + }, + is_default: false, + }, + }; + const channelCredentialsLineEnterpriseThailand: Conversation.ChannelCredentialsLineEnterprise = { + channel: 'LINE', + credential_ordinal_number: 2, + line_enterprise_credentials: { + line_thailand: { + token: 'line_thailand_token', + secret: 'line_thailand_secret', + }, + is_default: false, }, }; const channelCredentialsMms: Conversation.ChannelCredentialsMms = { @@ -143,6 +166,8 @@ describe('AppApi', () => { channelCredentialsKakaoTalk, channelCredentialsKakaoTalkChat, channelCredentialsLine, + channelCredentialsLineEnterpriseJapan, + channelCredentialsLineEnterpriseThailand, channelCredentialsMms, channelCredentialsMessenger, channelCredentialsRcs, @@ -154,11 +179,98 @@ describe('AppApi', () => { channelCredentialsWeChat, channelCredetialsWhatsApp, ], + conversation_metadata_report_view: 'FULL', + processing_mode: 'DISPATCH', + retention_policy: { + retention_type: 'CONVERSATION_EXPIRE_POLICY', + ttl_days: 180, + }, + dispatch_retention_policy: { + retention_type: 'MESSAGE_EXPIRE_POLICY', + ttl_days: 7, + }, + smart_conversation: { + enabled: true, + }, + callback_settings: { + secret_for_overridden_callback_urls: 'shh!!', + }, + message_retry_settings: { + retry_duration: 3600, + }, + delivery_report_based_fallback: { + enabled: true, + delivery_report_waiting_time: 60, + }, }, }; const expectedResponse: Conversation.AppResponse = { id: 'app_id', display_name: 'Test App', + channel_credentials: [ + { + channel: 'MESSENGER', + static_token: { + token: 'messenger_static_token', + }, + callback_secret: '', + state: { + status: 'PENDING', + description: '', + }, + channel_known_id: '', + credential_ordinal_number: 0, + }, + { + channel: 'LINE', + line_credentials: { + token: 'line_token', + secret: 'line_secret', + is_default: true, + }, + callback_secret: '', + state: { + status: 'PENDING', + description: '', + }, + channel_known_id: '', + credential_ordinal_number: 0, + }, + { + channel: 'LINE', + line_enterprise_credentials: { + is_default: false, + line_japan: { + token: 'line_japan_token', + secret: 'line_japan_secret', + }, + }, + callback_secret: '', + state: { + status: 'PENDING', + description: '', + }, + channel_known_id: '', + credential_ordinal_number: 1, + }, + { + channel: 'LINE', + line_enterprise_credentials: { + is_default: false, + line_thailand: { + token: 'line_thailand_token', + secret: 'line_thailand_secret', + }, + }, + callback_secret: '', + state: { + status: 'PENDING', + description: '', + }, + channel_known_id: '', + credential_ordinal_number: 2, + }, + ], }; // When diff --git a/packages/conversation/tests/rest/v1/conversation-domain-api.test.ts b/packages/conversation/tests/rest/v1/conversation-domain-api.test.ts index b8eec184..a909b0df 100644 --- a/packages/conversation/tests/rest/v1/conversation-domain-api.test.ts +++ b/packages/conversation/tests/rest/v1/conversation-domain-api.test.ts @@ -1,4 +1,7 @@ -import { ConversationDomainApi } from '../../../src/rest/v1/conversation-domain-api'; +import { + ConversationDomainApi, + DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING, +} from '../../../src/rest/v1/conversation-domain-api'; import { TemplatesV2Api } from '../../../src'; import { ApiHostname, ConversationRegion, UnifiedCredentials } from '@sinch/sdk-client'; @@ -6,6 +9,7 @@ describe('Conversation API', () => { let conversationApi: ConversationDomainApi; let templateApi: TemplatesV2Api; let params: UnifiedCredentials & Pick; + let warnSpy: jest.SpyInstance; const CUSTOM_HOSTNAME = 'https://new.host.name'; const CUSTOM_HOSTNAME_TEMPLATES = 'https://templates.new.host.name'; @@ -15,11 +19,17 @@ describe('Conversation API', () => { keyId: 'KEY_ID', keySecret: 'KEY_SECRET', }; + warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); }); - it('should initialize the client with the default "us" region', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should initialize the client with the default "us" region and log a warning', () => { conversationApi = new ConversationDomainApi(params, 'dummy'); conversationApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); expect(conversationApi.client).toBeDefined(); expect(conversationApi.client?.apiClientOptions.hostname).toBe('https://us.conversation.api.sinch.com'); }); @@ -29,14 +39,14 @@ describe('Conversation API', () => { conversationApi = new ConversationDomainApi(params, 'dummy'); conversationApi.getSinchClient(); expect(conversationApi.client?.apiClientOptions.hostname).toBe('https://eu.conversation.api.sinch.com'); + expect(warnSpy).toHaveBeenCalledTimes(0); }); it('should log a warning when using an unsupported region', async () => { params.conversationRegion = 'bzh'; conversationApi = new ConversationDomainApi(params, 'dummy'); - console.warn = jest.fn(); conversationApi.getSinchClient(); - expect(console.warn).toHaveBeenCalledWith( + expect(warnSpy).toHaveBeenCalledWith( 'The region "bzh" is not known as a supported region for the Conversation API'); expect(conversationApi.client?.apiClientOptions.hostname).toBe('https://bzh.conversation.api.sinch.com'); }); @@ -45,8 +55,11 @@ describe('Conversation API', () => { params.conversationHostname = CUSTOM_HOSTNAME; conversationApi = new ConversationDomainApi(params, 'dummy'); conversationApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledTimes(0); + warnSpy.mockClear(); templateApi = new TemplatesV2Api(params); templateApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); expect(conversationApi.client?.apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); expect(templateApi.client?.apiClientOptions.hostname).toBe('https://us.template.api.sinch.com'); }); @@ -55,8 +68,11 @@ describe('Conversation API', () => { params.conversationTemplatesHostname = CUSTOM_HOSTNAME_TEMPLATES; conversationApi = new ConversationDomainApi(params, 'dummy'); conversationApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); templateApi = new TemplatesV2Api(params); templateApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationApi.client?.apiClientOptions.hostname).toBe('https://us.conversation.api.sinch.com'); expect(templateApi.client?.apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME_TEMPLATES); }); @@ -66,8 +82,10 @@ describe('Conversation API', () => { params.conversationTemplatesHostname = CUSTOM_HOSTNAME_TEMPLATES; conversationApi = new ConversationDomainApi(params, 'dummy'); conversationApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledTimes(0); templateApi = new TemplatesV2Api(params); templateApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationApi.client?.apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); expect(templateApi.client?.apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME_TEMPLATES); }); @@ -75,6 +93,7 @@ describe('Conversation API', () => { it('should set a custom URL', () => { conversationApi = new ConversationDomainApi(params, 'dummy'); conversationApi.setHostname(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationApi.client).toBeDefined(); expect(conversationApi.client?.apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); }); @@ -82,6 +101,7 @@ describe('Conversation API', () => { it ('should update the region', () => { conversationApi = new ConversationDomainApi(params, 'dummy'); conversationApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); expect(conversationApi.client).toBeDefined(); expect(conversationApi.client?.apiClientOptions.hostname).toBe('https://us.conversation.api.sinch.com'); conversationApi.setRegion(ConversationRegion.UNITED_STATES); @@ -99,6 +119,7 @@ describe('Conversation API', () => { it ('should update the template v1 region', () => { conversationApi = new ConversationDomainApi(params, 'TemplatesV1Api'); conversationApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); expect(conversationApi.client).toBeDefined(); expect(conversationApi.client?.apiClientOptions.hostname).toBe('https://us.template.api.sinch.com'); conversationApi.setRegion(ConversationRegion.EUROPE); @@ -108,6 +129,7 @@ describe('Conversation API', () => { it ('should update the template v2 region', () => { conversationApi = new ConversationDomainApi(params, 'TemplatesV2Api'); conversationApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); expect(conversationApi.client).toBeDefined(); expect(conversationApi.client?.apiClientOptions.hostname).toBe('https://us.template.api.sinch.com'); conversationApi.setRegion(ConversationRegion.EUROPE); diff --git a/packages/conversation/tests/rest/v1/conversation-service.test.ts b/packages/conversation/tests/rest/v1/conversation-service.test.ts index 2470537d..96710de1 100644 --- a/packages/conversation/tests/rest/v1/conversation-service.test.ts +++ b/packages/conversation/tests/rest/v1/conversation-service.test.ts @@ -12,6 +12,7 @@ import { TranscodingApi, WebhooksApi, } from '../../../src'; +import { DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING } from '../../../src/rest/v1/conversation-domain-api'; describe('Conversation Service', () => { const DEFAULT_HOSTNAME = 'https://us.conversation.api.sinch.com'; @@ -20,6 +21,15 @@ describe('Conversation Service', () => { const DEFAULT_HOSTNAME_TEMPLATES = 'https://us.template.api.sinch.com'; const EUROPE_HOSTNAME_TEMPLATES = 'https://eu.template.api.sinch.com'; const CUSTOM_HOSTNAME_TEMPLATES = 'https://templates.new.host.name'; + let warnSpy: jest.SpyInstance; + + beforeEach(() => { + warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); it('should initialize all the APIs', () => { // Given @@ -59,15 +69,26 @@ describe('Conversation Service', () => { // Then expect(conversationService.contact.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.app.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.events.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.messages.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.transcoding.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.capability.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.conversation.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.webhooks.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.templatesV1.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME_TEMPLATES); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(conversationService.templatesV2.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME_TEMPLATES); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); }); it('should set a custom hostnames for the templates APIs only', () => { @@ -84,15 +105,33 @@ describe('Conversation Service', () => { // Then expect(conversationService.contact.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(conversationService.app.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(conversationService.events.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(conversationService.messages.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(conversationService.transcoding.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(conversationService.capability.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(conversationService.conversation.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(conversationService.webhooks.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_CONVERSATION_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(conversationService.templatesV1.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME_TEMPLATES); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.templatesV2.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME_TEMPLATES); + expect(warnSpy).toHaveBeenCalledTimes(0); }); it('should update the default region for all APIs', () => { @@ -109,14 +148,24 @@ describe('Conversation Service', () => { // Then expect(conversationService.contact.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.app.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.events.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.messages.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.transcoding.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.capability.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.conversation.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.webhooks.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.templatesV1.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME_TEMPLATES); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(conversationService.templatesV2.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME_TEMPLATES); + expect(warnSpy).toHaveBeenCalledTimes(0); }); }); diff --git a/packages/conversation/tests/rest/v1/conversation/conversation-api.test.ts b/packages/conversation/tests/rest/v1/conversation/conversation-api.test.ts index 8b0f9e1c..2f047b06 100644 --- a/packages/conversation/tests/rest/v1/conversation/conversation-api.test.ts +++ b/packages/conversation/tests/rest/v1/conversation/conversation-api.test.ts @@ -28,6 +28,7 @@ describe('ConversationApi', () => { createConversationRequestBody: { app_id: 'app_id', contact_id: 'contact_id', + correlation_id: 'correlation_id', }, }; const expectedResponse: Conversation.Conversation = { @@ -140,6 +141,13 @@ describe('ConversationApi', () => { description: 'description', }, }, + accept_time: new Date('2019-08-24T14:15:22Z'), + channel_identity: { + channel: 'MESSENGER', + identity: 'identity', + }, + direction: 'TO_CONTACT', + contact_id: 'contact_id', }, }; const expectedResponse: any = {}; diff --git a/packages/conversation/tests/rest/v1/events/events-api.test.ts b/packages/conversation/tests/rest/v1/events/events-api.test.ts index 1426544f..b7fdd46c 100644 --- a/packages/conversation/tests/rest/v1/events/events-api.test.ts +++ b/packages/conversation/tests/rest/v1/events/events-api.test.ts @@ -123,7 +123,7 @@ describe('EventsApi', () => { accept_time: new Date('2019-08-24T14:15:22Z'), }, { - id: 'contact_message_event_id', + id: 'contact_message_event_payment_status_update', channel_identity: { identity: 'identity', app_id: 'app_id', @@ -143,6 +143,44 @@ describe('EventsApi', () => { conversation_id: 'conversation_id', accept_time: new Date('2019-08-24T14:15:22Z'), }, + { + id: 'contact_message_event_shortlink_activated', + channel_identity: { + identity: 'identity', + app_id: '', + channel: 'MESSENGER', + }, + processing_mode: 'CONVERSATION', + direction: 'TO_APP', + contact_message_event: { + shortlink_activated_event: { + payload: 'payload', + title: 'title', + ref: 'ref', + source: 'SHORTLINK', + type: 'OPEN_THREAD', + existing_thread: true, + }, + }, + }, + { + id: 'contact_message_event_shortlink_activated', + channel_identity: { + identity: 'identity', + app_id: '', + channel: 'MESSENGER', + }, + processing_mode: 'CONVERSATION', + direction: 'TO_APP', + contact_message_event: { + reaction_event: { + emoji: '\\u{2764}\\u{FE0F}', + action: 'REACTION_ACTION_UNREACT', + message_id: 'message_id', + reaction_category: 'love', + }, + }, + }, ]; const expectedResponse = { data: mockData, diff --git a/packages/conversation/tests/rest/v1/messages/messages-api.test.ts b/packages/conversation/tests/rest/v1/messages/messages-api.test.ts index baa0f2c0..ddcb8f89 100644 --- a/packages/conversation/tests/rest/v1/messages/messages-api.test.ts +++ b/packages/conversation/tests/rest/v1/messages/messages-api.test.ts @@ -53,12 +53,15 @@ describe('MessagesApi', () => { }); describe ('getMessage', () => { - it('should make a GET request to retrieve a specific message by its ID', async () => { + + it('should make a GET request to retrieve a specific app message [Flows] by its ID', async () => { // Given const requestData: Conversation.GetMessageRequestData = { message_id: 'message_id', }; const expectedResponse: Conversation.ConversationMessage = { + id: 'id', + direction: 'TO_CONTACT', accept_time: new Date('2019-08-24T14:15:22Z'), app_message: { card_message: { @@ -70,7 +73,132 @@ describe('MessagesApi', () => { }, title: 'title', }, - explicit_channel_message: {}, + explicit_channel_message: { + INSTAGRAM: '{ "transcoded_message": "value"}', + }, + channel_specific_message: { + WHATSAPP: { + message_type: 'FLOWS', + message: { + header: { + type: 'text', + text: 'text for the header', + }, + body: { + text: 'text for the body', + }, + footer: { + text: 'text for the footer', + }, + flow_id: 'flow_id', + flow_cta: 'click here', + flow_token: 'flow_token', + flow_mode: 'published', + flow_action: 'navigate', + flow_action_payload: { + screen: 'screen', + data: {}, + }, + }, + }, + }, + }, + channel_identity: { + app_id: 'app_id', + channel: 'WHATSAPP', + identity: 'identity', + }, + contact_id: 'contact_id', + conversation_id: 'conversation_id', + metadata: 'metadata', + injected: true, + }; + + // When + fixture.get.mockResolvedValue(expectedResponse); + messagesApi.get = fixture.get; + const response = await messagesApi.get(requestData); + + // Then + expect(response).toEqual(expectedResponse); + expect(fixture.get).toHaveBeenCalledWith(requestData); + }); + + it('should make a GET request to retrieve a specific app message [Order Details] by its ID', async () => { + // Given + const requestData: Conversation.GetMessageRequestData = { + message_id: 'message_id', + }; + const expectedResponse: Conversation.ConversationMessage = { + accept_time: new Date('2019-08-24T14:15:22Z'), + app_message: { + card_message: { + choices: [], + description: 'description', + height: 'UNSPECIFIED_HEIGHT', + media_message: { + url: 'url', + }, + title: 'title', + }, + explicit_channel_message: { + INSTAGRAM: '{ "transcoded_message": "value"}', + }, + channel_specific_message: { + WHATSAPP: { + message_type: 'ORDER_DETAILS', + message: { + header: { + type: 'image', + image: { + link: 'URL for the media', + }, + }, + body: { + text: 'text for the body', + }, + footer: { + text: 'text for the footer', + }, + payment: { + type: 'br', + reference_id: 'reference_id', + type_of_goods: 'digital-goods', + total_amount_value: 100, + order: { + items: [ + { + retailer_id: 'retailer_id', + name: 'name', + amount_value: 100, + quantity: 1, + sale_amount_value: 100, + }, + ], + subtotal_value: 100, + tax_value: 20, + tax_description: 'tax_description', + catalog_id: 'catalog_id', + expiration_time: 'expiration_time_in_seconds', + expiration_description: 'expiration_description', + shipping_value: 10, + shipping_description: 'shipping_description', + discount_value: 0, + discount_description: 'discount_description', + discount_program_name: 'discount_program_name', + }, + payment_settings: { + dynamic_pix: { + code: 'code', + merchant_name: 'merchant_name', + key: 'key', + key_type: 'CPF', + }, + }, + }, + }, + }, + }, }, channel_identity: { app_id: 'app_id', @@ -94,6 +222,123 @@ describe('MessagesApi', () => { expect(response).toEqual(expectedResponse); expect(fixture.get).toHaveBeenCalledWith(requestData); }); + + it('should make a GET request to retrieve a specific app message [Order Status] by its ID', async () => { + // Given + const requestData: Conversation.GetMessageRequestData = { + message_id: 'message_id', + }; + const expectedResponse: Conversation.ConversationMessage = { + id: 'id', + direction: 'TO_CONTACT', + accept_time: new Date('2019-08-24T14:15:22Z'), + app_message: { + card_message: { + choices: [], + description: 'description', + height: 'UNSPECIFIED_HEIGHT', + media_message: { + url: 'url', + }, + title: 'title', + }, + explicit_channel_message: { + INSTAGRAM: '{ "transcoded_message": "value"}', + }, + channel_specific_message: { + WHATSAPP: { + message_type: 'ORDER_STATUS', + message: { + header: { + type: 'video', + video: { + link: 'URL for the media', + }, + }, + body: { + text: 'text for the body', + }, + footer: { + text: 'text for the footer', + }, + payment: { + reference_id: 'reference_id', + order: { + status: 'shipped', + description: 'description', + }, + }, + }, + }, + }, + }, + channel_identity: { + app_id: 'app_id', + channel: 'WHATSAPP', + identity: 'identity', + }, + contact_id: 'contact_id', + conversation_id: 'conversation_id', + metadata: 'metadata', + injected: true, + }; + + // When + fixture.get.mockResolvedValue(expectedResponse); + messagesApi.get = fixture.get; + const response = await messagesApi.get(requestData); + + // Then + expect(response).toEqual(expectedResponse); + expect(fixture.get).toHaveBeenCalledWith(requestData); + }); + + // eslint-disable-next-line max-len + it('should make a GET request to retrieve a specific contact message [Channel specific message - Flow] by its ID', async () => { + // Given + const requestData: Conversation.GetMessageRequestData = { + message_id: 'message_id', + }; + const expectedResponse: Conversation.ConversationMessage = { + id: 'id', + direction: 'TO_APP', + contact_message: { + channel_specific_message: { + message_type: 'nfm_reply', + message: { + type: 'nfm_reply', + nfm_reply: { + name: 'flow', + body: 'message body', + response_json: '{}', + }, + }, + }, + reply_to: null, + }, + channel_identity: { + channel: 'WHATSAPP', + identity: 'identity', + app_id: 'app_id', + }, + conversation_id: 'conversation_id', + contact_id: 'contact_id', + metadata: 'metadata', + accept_time: new Date('2019-08-24T14:15:22Z'), + sender_id: '', + processing_mode: 'CONVERSATION', + injected: false, + }; + + // When + fixture.get.mockResolvedValue(expectedResponse); + messagesApi.get = fixture.get; + const response = await messagesApi.get(requestData); + + // Then + expect(response).toEqual(expectedResponse); + expect(fixture.get).toHaveBeenCalledWith(requestData); + }); }); describe ('listMessages', () => { @@ -162,6 +407,7 @@ describe('MessagesApi', () => { message: { ...Conversation.messageBuilder.text(textMessageItem), }, + message_content_type: 'CONTENT_MARKETING', }; const requestDataWithContactId: Conversation.SendMessageRequestData = { sendMessageRequestBody: { diff --git a/packages/conversation/tests/rest/v1/webhooks-events/webhooks-events.steps.ts b/packages/conversation/tests/rest/v1/webhooks-events/webhooks-events.steps.ts index 01b8334b..4c98bd0f 100644 --- a/packages/conversation/tests/rest/v1/webhooks-events/webhooks-events.steps.ts +++ b/packages/conversation/tests/rest/v1/webhooks-events/webhooks-events.steps.ts @@ -10,12 +10,9 @@ let event: Conversation.ConversationWebhookEvent; let formattedHeaders: IncomingHttpHeaders; const processEvent = async (response: Response) => { - formattedHeaders = {}; - response.headers.forEach((value, name) => { - formattedHeaders[name.toLowerCase()] = value; - }); + formattedHeaders = Object.fromEntries(response.headers.entries()); rawEvent = await response.text(); - event = conversationCallbackWebhook.parseEvent(JSON.parse(rawEvent)); + event = conversationCallbackWebhook.parseEvent(rawEvent); }; Given('the Conversation Webhooks handler is available', () => { diff --git a/packages/elastic-sip-trunking/CHANGELOG.md b/packages/elastic-sip-trunking/CHANGELOG.md index da1dad71..0f95966c 100644 --- a/packages/elastic-sip-trunking/CHANGELOG.md +++ b/packages/elastic-sip-trunking/CHANGELOG.md @@ -1,3 +1,13 @@ +## Version 1.3.0 +- [Tech] Update dependency `@sinch/sdk-client` to `1.3.0`. +- [Feature] Support `RegisteredEndpoint` on top of `StaticEndpoint`: a `SipEndpoint` is now the union of both models +- [Feature] Support `TLS` as a transport option +- [Feature] New properties from a `SipTrunk`: `callForwardNumber` and `enableCallForward` + +## Version 1.2.1 +- [Tech] Update dependency `@sinch/sdk-client` to `1.2.1` +- [Bugfix] Fix refresh token issue + ## Version 1.2.0 - [Tech] Update dependency `@sinch/sdk-client` to `1.2.0`. - [Feature] Add the method `accessControlList.get()`. diff --git a/packages/elastic-sip-trunking/package.json b/packages/elastic-sip-trunking/package.json index 019438f2..014cd402 100644 --- a/packages/elastic-sip-trunking/package.json +++ b/packages/elastic-sip-trunking/package.json @@ -1,6 +1,6 @@ { "name": "@sinch/elastic-sip-trunking", - "version": "1.2.0", + "version": "1.3.0", "description": "Sinch Elastic SIP Trunking API", "homepage": "", "repository": { @@ -28,7 +28,7 @@ "test:e2e": "cucumber-js" }, "dependencies": { - "@sinch/sdk-client": "^1.2.0" + "@sinch/sdk-client": "^1.3.0" }, "devDependencies": {}, "publishConfig": { diff --git a/packages/elastic-sip-trunking/src/models/v1/requests/sip-endpoints/sip-endpoints-request-data.ts b/packages/elastic-sip-trunking/src/models/v1/requests/sip-endpoints/sip-endpoints-request-data.ts index 78d5f17f..0632c270 100644 --- a/packages/elastic-sip-trunking/src/models/v1/requests/sip-endpoints/sip-endpoints-request-data.ts +++ b/packages/elastic-sip-trunking/src/models/v1/requests/sip-endpoints/sip-endpoints-request-data.ts @@ -1,10 +1,13 @@ -import { SipEndpoint } from '../../sip-endpoint'; +import { RegisteredEndpoint, StaticEndpoint } from '../../sip-endpoint'; + +export type StaticEndpointRequest = Omit; +export type RegisteredEndpointRequest = Omit; export interface CreateSipEndpointRequestData { /** The ID of the SIP trunk. */ 'sipTrunkId': string; /** The body containing the SIP Endpoint to create for the SIP trunk */ - 'createSipEndpointRequestBody': Omit; + 'createSipEndpointRequestBody': StaticEndpointRequest | RegisteredEndpointRequest; } export interface DeleteSipEndpointRequestData { /** The ID of the SIP trunk. */ @@ -32,5 +35,5 @@ export interface UpdateSipEndpointRequestData { /** The ID of the SIP endpoint. */ 'sipEndpointId': string; /** The body containing the SIP Endpoint details to update */ - 'updateSipEndpointRequestBody': Omit; + 'updateSipEndpointRequestBody': StaticEndpointRequest | RegisteredEndpointRequest; } diff --git a/packages/elastic-sip-trunking/src/models/v1/sip-endpoint/index.ts b/packages/elastic-sip-trunking/src/models/v1/sip-endpoint/index.ts index 5c74c0ab..7dfca8b9 100644 --- a/packages/elastic-sip-trunking/src/models/v1/sip-endpoint/index.ts +++ b/packages/elastic-sip-trunking/src/models/v1/sip-endpoint/index.ts @@ -1 +1 @@ -export type { SipEndpoint } from './sip-endpoint'; +export type { SipEndpoint, SipEndpointBase, RegisteredEndpoint, StaticEndpoint } from './sip-endpoint'; diff --git a/packages/elastic-sip-trunking/src/models/v1/sip-endpoint/sip-endpoint.ts b/packages/elastic-sip-trunking/src/models/v1/sip-endpoint/sip-endpoint.ts index 156253fa..004d1aaf 100644 --- a/packages/elastic-sip-trunking/src/models/v1/sip-endpoint/sip-endpoint.ts +++ b/packages/elastic-sip-trunking/src/models/v1/sip-endpoint/sip-endpoint.ts @@ -1,19 +1,17 @@ /** * A SIP endpoint which is the address of your SIP infrastructure. It can either be an IP address or a domain name. */ -export interface SipEndpoint { +export type SipEndpoint = StaticEndpoint | RegisteredEndpoint; + +export interface SipEndpointBase { /** The ID of the SIP endpoint. */ id?: string; /** The ID of the SIP trunk to which the endpoint is assigned. */ sipTrunkId?: string; /** The friendly name of the SIP endpoint. */ name: string; - /** The address of the SIP endpoint can be an IP address or a domain name. EST uses IP authentication and will only accept calls from the specified address or domain. */ - address: string; - /** The port of the SIP endpoint. */ - port?: number; /** The transport protocol of the SIP endpoint. */ - transport?: 'TCP' | 'UDP'; + transport?: 'TCP' | 'UDP' | 'TLS' | string; /** Inbound call routing priority. If two or more endpoints have the same priority, calls will be routed to them using a round-robin strategy. */ priority: number; /** Sets whether the SIP endpoint is enabled or not. */ @@ -23,3 +21,17 @@ export interface SipEndpoint { /** The date and time that the SIP endpoint was last modified. */ updateTime?: Date | null; } + +export interface StaticEndpoint extends SipEndpointBase { + /** The address of the SIP endpoint can be an IP address or a domain name. EST uses IP authentication and will only accept calls from the specified address or domain. */ + address: string; + /** The port of the SIP endpoint. */ + port?: number; +} + +export interface RegisteredEndpoint extends SipEndpointBase { + /** This property determines whether the endpoint is static or registered. If registered, this must be set to `true`. */ + isRegistered: boolean; + /** The username for the credential list you want to use to register the endpoint. */ + credentialUserName: string; +} diff --git a/packages/elastic-sip-trunking/src/models/v1/sip-trunk/sip-trunk.ts b/packages/elastic-sip-trunking/src/models/v1/sip-trunk/sip-trunk.ts index 31f9122d..58ffd747 100644 --- a/packages/elastic-sip-trunking/src/models/v1/sip-trunk/sip-trunk.ts +++ b/packages/elastic-sip-trunking/src/models/v1/sip-trunk/sip-trunk.ts @@ -1,9 +1,7 @@ - /** * A created SIP trunk. */ export interface SipTrunk { - /** The SIP trunk id. */ id?: string; /** The host of the domain you would like to have for you trunk. */ @@ -18,6 +16,11 @@ export interface SipTrunk { callsPerSecond?: number; /** Enable caller name lookup for incoming calls. US and canada only. */ enableCallerName?: boolean; + /** The valid E.164 phone number that will be dialed on inbound calls when no SIP endpoints are available. Required if `enableCallForward` property is `true`. */ + callForwardNumber?: string; + /** When enabled, if an inbound call can not be delivered to a SIP endpoint, calls will be forwarded to the configured `callForwardNumber`. To forward all calls without trying SIP, simply disable (or delete) all SIP endpoints on this trunk. Logs (and billing) will be created for 2 calls (inbound and outbound). + * **Note:** Since there is no SIP connection, PCAPs will not be generated. */ + enableCallForward?: boolean; /** The date and time that the SIP trunk was created. */ createTime?: Date; /** The date and time that the SIP trunk was last modified. */ diff --git a/packages/elastic-sip-trunking/tests/rest/v1/sip-endpoints/sip-endpoints-api.test.ts b/packages/elastic-sip-trunking/tests/rest/v1/sip-endpoints/sip-endpoints-api.test.ts index 1f4154b1..18bc370d 100644 --- a/packages/elastic-sip-trunking/tests/rest/v1/sip-endpoints/sip-endpoints-api.test.ts +++ b/packages/elastic-sip-trunking/tests/rest/v1/sip-endpoints/sip-endpoints-api.test.ts @@ -19,7 +19,7 @@ describe('SIPEndpointsApi', () => { describe ('createSipEndpoint', () => { - it('should make a POST request to create a new SIP Endpoint', async () => { + it('should make a POST request to create a new static SIP Endpoint', async () => { // Given const requestData: ElasticSipTrunking.CreateSipEndpointRequestData = { sipTrunkId: 'sipTrunkId', @@ -50,6 +50,41 @@ describe('SIPEndpointsApi', () => { expect(response).toEqual(expectedResponse); expect(fixture.create).toHaveBeenCalledWith(requestData); }); + + it('should make a POST request to create a new registered SIP Endpoint', async () => { + // Given + const requestData: ElasticSipTrunking.CreateSipEndpointRequestData = { + sipTrunkId: 'sipTrunkId', + createSipEndpointRequestBody: { + name: 'Acme Endpoint', + credentialUserName: 'username', + isRegistered: true, + priority: 1, + transport: 'TLS', + }, + }; + const expectedResponse: SipEndpoint = { + id: 'sipEndpointId', + name: 'Acme Endpoint', + credentialUserName: 'username', + isRegistered: true, + priority: 1, + port: 5060, + transport: 'TLS', + enabled: true, + sipTrunkId: 'sipTrunkId', + createTime: new Date('2022-01-01T00:00:00Z'), + }; + + // When + fixture.create.mockResolvedValue(expectedResponse); + sipEndpointsApi.create = fixture.create; + const response = await sipEndpointsApi.create(requestData); + + // Then + expect(response).toEqual(expectedResponse); + expect(fixture.create).toHaveBeenCalledWith(requestData); + }); }); describe ('deleteSipEndpoint', () => { diff --git a/packages/elastic-sip-trunking/tests/rest/v1/sip-endpoints/sip-endpoints.steps.ts b/packages/elastic-sip-trunking/tests/rest/v1/sip-endpoints/sip-endpoints.steps.ts index c4023cc9..2e3f40be 100644 --- a/packages/elastic-sip-trunking/tests/rest/v1/sip-endpoints/sip-endpoints.steps.ts +++ b/packages/elastic-sip-trunking/tests/rest/v1/sip-endpoints/sip-endpoints.steps.ts @@ -33,16 +33,20 @@ When('I send a request to create a SIP Endpoint', async () => { }); Then('the SIP Endpoint is created', () => { - assert.equal(sipEndpoint.id, '01W4FFL35P4NC4K35SIPENDP01'); - assert.equal(sipEndpoint.sipTrunkId, '01W4FFL35P4NC4K35SIPTRUNK1'); - assert.equal(sipEndpoint.name, 'Capsule Corp Endpoint'); - assert.equal(sipEndpoint.address, '127.0.0.1'); - assert.equal(sipEndpoint.port, 5060); - assert.equal(sipEndpoint.transport, 'UDP'); - assert.equal(sipEndpoint.priority, 2); - assert.equal(sipEndpoint.enabled, true); - assert.deepEqual(sipEndpoint.createTime, new Date('2024-06-06T14:42:42.337854345Z')); - assert.equal(sipEndpoint.updateTime, null); + if ('address' in sipEndpoint) { + assert.equal(sipEndpoint.id, '01W4FFL35P4NC4K35SIPENDP01'); + assert.equal(sipEndpoint.sipTrunkId, '01W4FFL35P4NC4K35SIPTRUNK1'); + assert.equal(sipEndpoint.name, 'Capsule Corp Endpoint'); + assert.equal(sipEndpoint.address, '127.0.0.1'); + assert.equal(sipEndpoint.port, 5060); + assert.equal(sipEndpoint.transport, 'UDP'); + assert.equal(sipEndpoint.priority, 2); + assert.equal(sipEndpoint.enabled, true); + assert.deepEqual(sipEndpoint.createTime, new Date('2024-06-06T14:42:42.337854345Z')); + assert.equal(sipEndpoint.updateTime, null); + } else { + throw new Error('Expected StaticEndpoint but got RegisteredEndpoint'); + } }); When('I send a request to list the existing SIP Endpoints', async () => { @@ -118,15 +122,19 @@ When('I send a request to update a SIP Endpoint', async () => { }); Then('the response contains the SIP Endpoint details with updated data', () => { - assert.equal(sipEndpoint.id, '01W4FFL35P4NC4K35SIPENDP01'); - assert.equal(sipEndpoint.name, 'Capsule Corp Endpoint - updated'); - assert.equal(sipEndpoint.address, '127.0.0.2'); - assert.equal(sipEndpoint.port, 5061); - assert.equal(sipEndpoint.transport, 'TCP'); - assert.equal(sipEndpoint.priority, 3); - assert.equal(sipEndpoint.enabled, false); - assert.deepEqual(sipEndpoint.createTime, new Date('2024-06-06T14:42:42Z')); - assert.deepEqual(sipEndpoint.updateTime, new Date('2024-06-06T14:45:11.428052267Z')); + if ('address' in sipEndpoint) { + assert.equal(sipEndpoint.id, '01W4FFL35P4NC4K35SIPENDP01'); + assert.equal(sipEndpoint.name, 'Capsule Corp Endpoint - updated'); + assert.equal(sipEndpoint.address, '127.0.0.2'); + assert.equal(sipEndpoint.port, 5061); + assert.equal(sipEndpoint.transport, 'TCP'); + assert.equal(sipEndpoint.priority, 3); + assert.equal(sipEndpoint.enabled, false); + assert.deepEqual(sipEndpoint.createTime, new Date('2024-06-06T14:42:42Z')); + assert.deepEqual(sipEndpoint.updateTime, new Date('2024-06-06T14:45:11.428052267Z')); + } else { + throw new Error('Expected StaticEndpoint but got RegisteredEndpoint'); + } }); When('I send a request to delete a SIP Endpoint', async () => { diff --git a/packages/fax/CHANGELOG.md b/packages/fax/CHANGELOG.md index 61c6c108..b80922c6 100644 --- a/packages/fax/CHANGELOG.md +++ b/packages/fax/CHANGELOG.md @@ -1,3 +1,18 @@ +## Version 1.3.0 +- [Tech] Update dependency `@sinch/sdk-client` to `1.3.0`. +- [Bugfix] By transitivity, upgrading `@sinch/sdk-client` to `1.3.0`, it fixes the issue [#183](https://github.com/sinch/sinch-sdk-node/issues/183) +- [API breaking change] `faxToEmail` endpoints require a `serviceId` as mandatory path parameter +- [API breaking change] the `phoneNumbers` property for an `EmailRequest` is not a `string[]` anymore but a `NumberWithPermissions[]` +- [Feature] Support string input when parsing webhook events +- [Feature] Support `resolution`, `coverPageId`, `coverPageData` and `pagesSentSuccessfully` in a `Fax` object +- [Feature] Support `resolution`, `coverPageId` in a `Service` object +- **Deprecations** + - `emails` subdomain is deprecated, use `faxToEmail` instead + +## Version 1.2.1 +- [Tech] Update dependency `@sinch/sdk-client` to `1.2.1` +- [Bugfix] Fix refresh token issue + ## Version 1.2.0 - [Tech] Update dependency `@sinch/sdk-client` to `1.2.0`. - [Feature] Support date range filter for listing faxes. diff --git a/packages/fax/package.json b/packages/fax/package.json index 05b8b216..b7f0361f 100644 --- a/packages/fax/package.json +++ b/packages/fax/package.json @@ -1,6 +1,6 @@ { "name": "@sinch/fax", - "version": "1.2.0", + "version": "1.3.0", "description": "Sinch Fax API", "homepage": "", "repository": { @@ -29,7 +29,7 @@ "test:e2e": "cucumber-js" }, "dependencies": { - "@sinch/sdk-client": "^1.2.0" + "@sinch/sdk-client": "^1.3.0" }, "devDependencies": {}, "publishConfig": { diff --git a/packages/fax/src/models/v3/bar-code/bar-code.ts b/packages/fax/src/models/v3/bar-code/bar-code.ts index 97bf148e..84d43cfc 100644 --- a/packages/fax/src/models/v3/bar-code/bar-code.ts +++ b/packages/fax/src/models/v3/bar-code/bar-code.ts @@ -1,11 +1,11 @@ +import { BarCodeType } from '../enums'; /** * Sinch will scan all pages of all incoming faxes for Code-128 and DataMatrix bar codes and include this information in webhook requests and via the API. */ export interface BarCode { - /** The type of barcode found. */ - type?: 'CODE_128' | 'DATA_MATRIX'; + type?: BarCodeType; /** The page number on which the barcode was found. */ page?: number; /** The information of the barcode. */ diff --git a/packages/fax/src/models/v3/date-range-filter/date-range-filter.ts b/packages/fax/src/models/v3/date-range-filter/date-range-filter.ts index 758ce222..ceeca204 100644 --- a/packages/fax/src/models/v3/date-range-filter/date-range-filter.ts +++ b/packages/fax/src/models/v3/date-range-filter/date-range-filter.ts @@ -11,8 +11,8 @@ import { DateFormat } from '@sinch/sdk-client'; * - `from: '2024-02'` will return all faxes for February 2024 */ export interface DateRangeFilter { - /** */ + /** Start of the date range */ from?: string | Date | DateFormat; - /** */ + /** End of the date range */ to?: string | Date | DateFormat; } diff --git a/packages/fax/src/models/v3/email/email.ts b/packages/fax/src/models/v3/email/email.ts index 8d33c415..e4606ee3 100644 --- a/packages/fax/src/models/v3/email/email.ts +++ b/packages/fax/src/models/v3/email/email.ts @@ -1,8 +1,9 @@ -interface EmailBase { +import { NumberWithPermissions } from '../number-with-permissions'; - email?: string; +interface EmailBase { + email: string; /** Numbers you want to associate with this email. */ - phoneNumbers?: string[]; + phoneNumbers: NumberWithPermissions[]; } export interface EmailRequest extends EmailBase {} diff --git a/packages/fax/src/models/v3/enums.ts b/packages/fax/src/models/v3/enums.ts index 74a30bb5..e34c741b 100644 --- a/packages/fax/src/models/v3/enums.ts +++ b/packages/fax/src/models/v3/enums.ts @@ -1,16 +1,20 @@ -export type ImageConversionMethod = 'HALFTONE' | 'MONOCHROME'; +/** + * - HALFTONE: Converts the image to halftone. + * - MONOCHROME: Converts the image to monochrome. + */ +export type ImageConversionMethod = 'HALFTONE' | 'MONOCHROME' | string; -export type WebhookContentType = 'multipart/form-data' | 'application/json'; +export type WebhookContentType = 'multipart/form-data' | 'application/json' | string; /** * The direction of the fax. */ -export type FaxDirection = 'OUTBOUND' | 'INBOUND'; +export type FaxDirection = 'OUTBOUND' | 'INBOUND' | string; /** * The status of the fax */ -export type FaxStatus = 'QUEUED' | 'IN_PROGRESS' | 'COMPLETED' | 'FAILURE'; +export type FaxStatus = 'QUEUED' | 'IN_PROGRESS' | 'COMPLETED' | 'FAILURE' | string; /** * Type of error for the fax @@ -21,11 +25,30 @@ export type ErrorType = | 'FAX_ERROR' | 'FATAL_ERROR' | 'GENERAL_ERROR' - | 'LINE_ERROR'; + | 'LINE_ERROR' + | string; -export type FaxBase64FileType = 'DOC' | 'DOCX' | 'PDF' | 'TIF' | 'JPG' | 'ODT' | 'TXT' | 'HTML' | 'PNG'; +export type FaxBase64FileType = 'DOCX' | 'PDF' | 'TIF' | 'JPG' | 'TXT' | 'HTML' | 'PNG' | string; export const validBase64FileTypes: FaxBase64FileType[] - = ['DOC', 'DOCX', 'PDF', 'TIF', 'JPG', 'ODT', 'TXT', 'HTML', 'PNG']; + = ['DOCX', 'PDF', 'TIF', 'JPG', 'TXT', 'HTML', 'PNG']; + +export type FaxWebhookEvent = 'INCOMING_FAX' | 'FAX_COMPLETED' | string; + +/** + * - CODE_128: Code-128 barcode + * - DATA_MATRIX: DataMatrix barcode + */ +export type BarCodeType = 'CODE_128' | 'DATA_MATRIX' | string; -export type FaxWebhookEvent = 'INCOMING_FAX' | 'FAX_COMPLETED'; +/** + * The resolution for the fax. If this is set at the service, this applies to all faxes sent using that service. If this is set on the fax, this will override the service setting. + */ +export type Resolution = 'FINE' | 'SUPERFINE' | string; + +/** + * - both: Allows the email to send and receive faxes to this email/phone number combination. + * - send: Allows the email to only send faxes to this email/phone number combination. + * - receive: Allows the email to only receive faxes from this email/phone number combination. + */ +export type Permissions = 'both' | 'send' | 'receive' | string; diff --git a/packages/fax/src/models/v3/errors/call-error/call-error.ts b/packages/fax/src/models/v3/errors/call-error/call-error.ts new file mode 100644 index 00000000..4d3bc45b --- /dev/null +++ b/packages/fax/src/models/v3/errors/call-error/call-error.ts @@ -0,0 +1,26 @@ +/** + * There was a problem with the phone line. The call could not be placed. Many times you can just try again + */ +export interface CallError { + /** Type of error for the Call */ + errorType?: 'CALL_ERROR'; + /** A developer-facing error message */ + errorMessage?: string; + /** The error code returned describing the error of the call */ + errorCode?: CallErrorCodeEnum; +} + +export type CallErrorCodeEnum = 11 | 15 | 16 | 17 | 19 | 30 | 32 | 34 | 43 | 49 | number; + +export const callErrorCodeLabels: Record = { + 11: 'The call dropped prematurely', + 15: 'Congestion', + 16: 'Ring Timeout', + 17: 'Busy', + 19: 'Immediate Hangup', + 30: 'No answer from a fax machine.', + 32: 'Incompatible destination', + 34: 'Phone number not operational', + 43: 'Problem establishing connection', + 49: 'The destination phone number Is Not active', +}; diff --git a/packages/fax/src/models/v3/errors/call-error/index.ts b/packages/fax/src/models/v3/errors/call-error/index.ts new file mode 100644 index 00000000..e7196498 --- /dev/null +++ b/packages/fax/src/models/v3/errors/call-error/index.ts @@ -0,0 +1,2 @@ +export type { CallError, CallErrorCodeEnum } from './call-error'; +export { callErrorCodeLabels } from './call-error'; diff --git a/packages/fax/src/models/v3/errors/document-conversion-error/document-conversion-error.ts b/packages/fax/src/models/v3/errors/document-conversion-error/document-conversion-error.ts new file mode 100644 index 00000000..b6179726 --- /dev/null +++ b/packages/fax/src/models/v3/errors/document-conversion-error/document-conversion-error.ts @@ -0,0 +1,27 @@ +/** + * Conversion errors usually occur when there is a problem with one of the files you posted. + */ +export interface DocumentConversionError { + /** Type of error for the Document conversion */ + errorType?: 'DOCUMENT_CONVERSION_ERROR'; + /** The error message */ + errorMessage?: string; + /** The error code returned during document conversion. */ + errorCode?: DocumentConversionErrorCodeEnum; +} + +export type DocumentConversionErrorCodeEnum = 4 | 54 | 55 | 57 | 69 | 122 + | 128 | 129 | 130 | 133 | number; + +export const documentConversionErrorCodeLabels: Record = { + 4: 'There was a problem in converting and merging files to the output file format. Contact support.', + 54: 'Could not access the url you provided. {contentUrl}', + 55: 'The string_data URL you provided is invalid', + 57: 'There was a problem storing the file you provided.', + 69: 'There was a problem storing the file you provided.', + 122: 'User simulated Document Conversion Error', + 128: 'Could not determine mimetype for file.', + 129: 'Mimetype not supported.', + 130: 'Mimetype not supported: application/xml', + 133: 'Failed to normalize PDF document', +}; diff --git a/packages/fax/src/models/v3/errors/document-conversion-error/index.ts b/packages/fax/src/models/v3/errors/document-conversion-error/index.ts new file mode 100644 index 00000000..ab3f8d51 --- /dev/null +++ b/packages/fax/src/models/v3/errors/document-conversion-error/index.ts @@ -0,0 +1,2 @@ +export type { DocumentConversionError, DocumentConversionErrorCodeEnum } from './document-conversion-error'; +export { documentConversionErrorCodeLabels } from './document-conversion-error'; diff --git a/packages/fax/src/models/v3/errors/fax-error/fax-error.ts b/packages/fax/src/models/v3/errors/fax-error/fax-error.ts new file mode 100644 index 00000000..26ecd340 --- /dev/null +++ b/packages/fax/src/models/v3/errors/fax-error/fax-error.ts @@ -0,0 +1,59 @@ +/** + * A problem occurred during the fax communication process. + */ +export interface FaxError { + /** Type of error for the fax */ + errorType?: 'FAX_ERROR'; + /** A developer-facing error message */ + errorMessage?: string; + /** The error code returned describing the error of the call */ + errorCode?: FaxErrorCodeEnum; +} + +export type FaxErrorCodeEnum = 6 | 7 | 8 | 10 | 12 | 13 | 14 | 18 + | 20 | 21 | 22 | 25 | 26 | 28 | 29 | 31 | 38 | 40 | 41 + | 44 | 46 | 48 | 53 | 60 | 63 | 68 | 75 | 76 | 77 | 79 + | 80 | 82 | 84 | 113 | 117 | 119 | 131 | 132 | 133 | number; + +export const faxErrorCodeLabels: Record = { + 6: 'There was an error communicating with the far side.', + 7: 'Far end cannot receive at the size of image', + 8: 'No response after sending a page', + 10: 'Disconnected after permitted retries', + 12: 'Received no response to DCS or TCF', + 13: 'Timed out waiting for the first message', + 14: 'Timed out waiting for initial communication', + 18: 'Unexpected message received', + 20: 'The HDLC carrier did not stop in a timely manner', + 21: 'Received a DCN from remote after sending a page', + 22: 'Received bad response to DCS or training', + 25: 'Far end cannot receive at the resolution of the image', + 26: 'The remote fax machine failed to respond', + 28: 'Failed to train with any of the compatible modems', + 29: 'Invalid response after sending a page', + 31: 'Fax machine incompatibility', + 38: 'The remote fax machine hung up before receiving fax', + 40: 'Telephony error', + 41: 'Unexpected DCN while waiting for DCS or DIS', + 44: 'Telephony Error', + // eslint-disable-next-line max-len + 46: 'Insufficient funds to send fax and not able to auto recharge; There was a problem charging your credit card. Please check your payment information and try again.', + 48: 'No answer (The Receiving Machine May Be Out Of Paper)', + 53: 'Unexpected DCN after EOM or MPS sequence', + 60: 'Transmission error after page break', + 63: 'Fax protocol error', + 68: 'Far end is not compatible', + 75: 'Manually canceled by user', + 76: 'Canceled automatically because timeout exceeded', + 77: 'Timed out waiting for receiver ready (ECM mode)', + 79: 'Can\'t cancel the fax, it\'s already complete!', + 80: 'Received a DCN while waiting for a DIS', + 82: 'There was an error communicating with the far side', + 84: 'Unexpected command after page received', + 113: 'The file for this fax has been deleted or is not accessible.', + 117: 'No pages received', + 119: 'User requested simulated faxError', + 131: 'Incomplete transmission', + 132: 'No fax tone detected', + 133: 'Phone number is not permitted', +}; diff --git a/packages/fax/src/models/v3/errors/fax-error/index.ts b/packages/fax/src/models/v3/errors/fax-error/index.ts new file mode 100644 index 00000000..37f55405 --- /dev/null +++ b/packages/fax/src/models/v3/errors/fax-error/index.ts @@ -0,0 +1,2 @@ +export type { FaxError, FaxErrorCodeEnum } from './fax-error'; +export { faxErrorCodeLabels } from './fax-error'; diff --git a/packages/fax/src/models/v3/errors/index.ts b/packages/fax/src/models/v3/errors/index.ts new file mode 100644 index 00000000..50b84eec --- /dev/null +++ b/packages/fax/src/models/v3/errors/index.ts @@ -0,0 +1,3 @@ +export * from './call-error'; +export * from './document-conversion-error'; +export * from './fax-error'; diff --git a/packages/fax/src/models/v3/fax-base64-file/fax-base64-file.ts b/packages/fax/src/models/v3/fax-base64-file/fax-base64-file.ts index 1a7d79ab..9ff67bb2 100644 --- a/packages/fax/src/models/v3/fax-base64-file/fax-base64-file.ts +++ b/packages/fax/src/models/v3/fax-base64-file/fax-base64-file.ts @@ -1,7 +1,6 @@ import { FaxBase64FileType } from '../enums'; export interface FaxBase64File { - /** When application/json Base64 encoded file content, this is only present when using application/json for request/response. */ file?: string; /** When request/response is application json and file is part of payload. This is the file type of the file. */ diff --git a/packages/fax/src/models/v3/fax-content-url/fax-content-url.ts b/packages/fax/src/models/v3/fax-content-url/fax-content-url.ts index 9ad9d050..d158268d 100644 --- a/packages/fax/src/models/v3/fax-content-url/fax-content-url.ts +++ b/packages/fax/src/models/v3/fax-content-url/fax-content-url.ts @@ -1,4 +1,3 @@ - /** * Give us any URL on the Internet (including ones with basic authentication) At least one file or contentUrl parameter is required. * Please note: If you are passing fax a secure URL (starting with https://), make sure that your SSL certificate (including your intermediate cert, if you have one) is installed properly, valid, and up-to-date. diff --git a/packages/fax/src/models/v3/fax-money/fax-money.ts b/packages/fax/src/models/v3/fax-money/fax-money.ts index 412d5225..e6db73f4 100644 --- a/packages/fax/src/models/v3/fax-money/fax-money.ts +++ b/packages/fax/src/models/v3/fax-money/fax-money.ts @@ -1,9 +1,7 @@ - /** * This is where we need description to be overridden by `$ref:` description */ export interface FaxMoney { - /** The 3-letter currency code defined in ISO 4217. */ currencyCode?: string; /** The amount with 4 decimals and decimal delimiter `.`. */ diff --git a/packages/fax/src/models/v3/fax-request/fax-request.ts b/packages/fax/src/models/v3/fax-request/fax-request.ts index 6ae9ff88..5db93513 100644 --- a/packages/fax/src/models/v3/fax-request/fax-request.ts +++ b/packages/fax/src/models/v3/fax-request/fax-request.ts @@ -1,4 +1,4 @@ -import { ImageConversionMethod, WebhookContentType } from '../enums'; +import { ImageConversionMethod, Resolution, WebhookContentType } from '../enums'; import { FaxContentUrl } from '../fax-content-url'; import { FaxBase64File } from '../fax-base64-file'; @@ -31,6 +31,12 @@ export interface FaxRequestBase { serviceId?: string; /** The number of times the fax will be retired before cancel. Default value is set in your fax service. The maximum number of retries is 5. */ maxRetries?: number; + /** @see Resolution */ + resolution?: Resolution; + /** The cover page id you want to use for the fax */ + coverPageId?: string; + /** You can use this to specify custom data for your cover page that will be sent as part of the fax. It is a key value store. Read more about how to use this [here](https://developers.sinch.com/docs/fax/api-reference/fax/tag/Cover-pages/). All keys used must be lower case. */ + coverPageData?: { [key: string]: string; }; } export type FaxRequestJson = FaxRequestBase & { diff --git a/packages/fax/src/models/v3/fax/fax.ts b/packages/fax/src/models/v3/fax/fax.ts index 42ad1de1..def83d6a 100644 --- a/packages/fax/src/models/v3/fax/fax.ts +++ b/packages/fax/src/models/v3/fax/fax.ts @@ -1,10 +1,9 @@ import { BarCode } from '../bar-code'; import { FaxContentUrl } from '../fax-content-url'; import { FaxMoney } from '../fax-money'; -import { ErrorType, FaxDirection, FaxStatus, ImageConversionMethod, WebhookContentType } from '../enums'; +import { ErrorType, FaxDirection, FaxStatus, ImageConversionMethod, Resolution, WebhookContentType } from '../enums'; export interface Fax { - /** The id of a fax */ id?: string; /** @see FaxDirection */ @@ -21,12 +20,14 @@ export interface Fax { status?: FaxStatus; /** The total price for this fax. This field is populated after the final fax price is calculated. */ price?: FaxMoney; - /** The bar codes found in the fax. This field is populated when sinch detects bar codes on incoming faxes. */ + /** The bar codes found in the fax. This field is populated when Sinch detects bar codes on incoming faxes. */ barCodes?: BarCode[]; /** A timestamp representing the time when the initial API call was made. */ createTime?: Date; /** If the job is complete, this is a timestamp representing the time the job was completed. */ completedTime?: Date; + /** The number of pages successfully sent to the receiving side in the fax. */ + pagesSentSuccessfully?: number; /** Text that will be displayed at the top of each page of the fax. 50 characters maximum. Default header text is "-". Note that the header is not applied until the fax is transmitted, so it will not appear on fax PDFs or thumbnails. */ headerText?: string; /** If true, page numbers will be displayed in the header. Default is true. */ @@ -41,22 +42,28 @@ export interface Fax { callbackUrl?: string; /** The content type of the callback. */ callbackUrlContentType?: WebhookContentType; - /** Determines how documents are converted to black and white. Defaults to value selected on Fax Service object. */ + /** Determines how documents are converted to black and white on OUTBOUND faxes only. Image conversion is not done on INBOUND faxes. Defaults to value selected on Fax Service object. */ imageConversionMethod?: ImageConversionMethod; /** @see ErrorType */ errorType?: ErrorType; - /** One of the error numbers listed in the [Fax Error Messages section](#FaxErrors). */ + /** One of the error numbers listed in the [Fax Error Messages section](https://developers.sinch.com/docs/fax/api-reference/fax/tag/Error-Messages/). */ errorCode?: number; - /** One of the error messages listed in the [Fax Error Messages section](#FaxErrors). */ + /** One of the error messages listed in the [Fax Error Messages section](https://developers.sinch.com/docs/fax/api-reference/fax/tag/Error-Messages/). */ errorMessage?: string; - /** The `Id` of the project associated with the call. */ - projectId?: string; - /** ID of the fax service used. */ - serviceId?: string; /** The number of times the fax will be retired before cancel. Default value is set in your fax service. The maximum number of retries is 5. */ maxRetries?: number; /** The number of times the fax has been retried. */ retryCount?: number; /** Only shown on the fax result. This indicates if the content of the fax is stored with Sinch. (true or false) */ hasFile?: string; + /** @see Resolution */ + resolution?: Resolution; + /** The cover page id you want to use for the fax */ + coverPageId?: string; + /** You can use this to specify custom data for your cover page that will be sent as part of the fax. It is a key value store. Read more about how to use this [here](https://developers.sinch.com/docs/fax/api-reference/fax/tag/Cover-pages/). All keys used must be lower case. */ + coverPageData?: { [key: string]: string; }; + /** The `Id` of the project associated with the call. */ + projectId?: string; + /** ID of the fax service used. */ + serviceId?: string; } diff --git a/packages/fax/src/models/v3/helper.ts b/packages/fax/src/models/v3/helper.ts index dbe256c0..dd83f9fb 100644 --- a/packages/fax/src/models/v3/helper.ts +++ b/packages/fax/src/models/v3/helper.ts @@ -1,8 +1,12 @@ import { FaxBase64FileType, validBase64FileTypes } from './enums'; export const convertToSupportedFileType = (fileType: string | undefined): FaxBase64FileType | undefined => { - if (!fileType || !validBase64FileTypes.includes(fileType.toUpperCase() as FaxBase64FileType)) { + if (!fileType) { + console.warn('No file extension has been defined.'); return undefined; } + if (!validBase64FileTypes.includes(fileType.toUpperCase() as FaxBase64FileType)) { + console.warn(`The file extension "${fileType.toUpperCase()}" is not supported.`); + } return fileType.toUpperCase() as FaxBase64FileType; }; diff --git a/packages/fax/src/models/v3/index.ts b/packages/fax/src/models/v3/index.ts index 1e66afd0..5cd67f44 100644 --- a/packages/fax/src/models/v3/index.ts +++ b/packages/fax/src/models/v3/index.ts @@ -1,15 +1,16 @@ export * from './bar-code'; export * from './date-range-filter'; export * from './email'; +export * from './errors'; export * from './fax'; export * from './fax-base64-file'; export * from './fax-content-url'; export * from './fax-money'; export * from './fax-request'; export * from './faxes-list'; +export * from './number-with-permissions'; export * from './mod-events'; export * from './service'; -export * from './service-email-settings'; export * from './service-phone-number'; export * from './update-email-request'; export * from './webhook-event-parsed'; diff --git a/packages/fax/src/models/v3/number-with-permissions/index.ts b/packages/fax/src/models/v3/number-with-permissions/index.ts new file mode 100644 index 00000000..acd9a1a6 --- /dev/null +++ b/packages/fax/src/models/v3/number-with-permissions/index.ts @@ -0,0 +1 @@ +export type { NumberWithPermissions } from './number-with-permissions'; diff --git a/packages/fax/src/models/v3/number-with-permissions/number-with-permissions.ts b/packages/fax/src/models/v3/number-with-permissions/number-with-permissions.ts new file mode 100644 index 00000000..c79f2fa9 --- /dev/null +++ b/packages/fax/src/models/v3/number-with-permissions/number-with-permissions.ts @@ -0,0 +1,11 @@ +import { Permissions } from '../enums'; + +/** + * A phone number and its permissions. + */ +export interface NumberWithPermissions { + /** A phone number in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format, including the leading \'+\'. */ + number?: string; + /** Allows you to set permissions for sending and receiving faxes to this email/phone number combination. Default value is `both`. */ + permissions?: Permissions; +} diff --git a/packages/fax/src/models/v3/requests/emails/emails-request-data.ts b/packages/fax/src/models/v3/requests/fax-to-email/fax-to-email-request-data.ts similarity index 69% rename from packages/fax/src/models/v3/requests/emails/emails-request-data.ts rename to packages/fax/src/models/v3/requests/fax-to-email/fax-to-email-request-data.ts index e7530a02..49769e56 100644 --- a/packages/fax/src/models/v3/requests/emails/emails-request-data.ts +++ b/packages/fax/src/models/v3/requests/fax-to-email/fax-to-email-request-data.ts @@ -2,20 +2,28 @@ import { EmailRequest } from '../../email'; import { UpdateEmailRequest } from '../../update-email-request'; export interface AddEmailToNumbersRequestData { + /** The serviceId to which you want to add the email. */ + 'serviceId': string; /** */ 'emailRequestBody': EmailRequest; } export interface DeleteEmailRequestData { + /** The serviceId containing the email you want to work with. */ + 'serviceId': string; /** The email you want to delete. */ 'email': string; } export interface ListEmailsForProjectRequestData { + /** The serviceId containing the emails you want to list. */ + 'serviceId': string; /** Number of items to return on each page. */ 'pageSize'?: number; /** Optional. The page to fetch. If not specified, the first page will be returned. */ 'page'?: string; } export interface ListNumbersByEmailRequestData { + /** The serviceId containing the email you want to work with. */ + 'serviceId': string; /** The email you want to get numbers for. */ 'email': string; /** Number of items to return on each page. */ @@ -24,6 +32,8 @@ export interface ListNumbersByEmailRequestData { 'page'?: string; } export interface UpdateEmailRequestData { + /** The serviceId containing the email you want to work with. */ + 'serviceId': string; /** The email you want to work with. */ 'email': string; /** */ diff --git a/packages/fax/src/models/v3/requests/faxes/faxes-request-data.ts b/packages/fax/src/models/v3/requests/faxes/faxes-request-data.ts index f8e37eb1..f18a1fff 100644 --- a/packages/fax/src/models/v3/requests/faxes/faxes-request-data.ts +++ b/packages/fax/src/models/v3/requests/faxes/faxes-request-data.ts @@ -17,6 +17,8 @@ export interface GetFaxRequestData { 'id': string; } export interface ListFaxesRequestData { + /** Limits results to faxes that were sent using the specified service. */ + 'serviceId'?: string; /** Filter calls based on `createTime`. It can be a year, a month or a day. */ 'createTime'?: string | Date; /** Filter calls based on `createTime`. It will filter the faxes on a range of dates. */ diff --git a/packages/fax/src/models/v3/requests/index.ts b/packages/fax/src/models/v3/requests/index.ts index 0c4d9661..cf70c665 100644 --- a/packages/fax/src/models/v3/requests/index.ts +++ b/packages/fax/src/models/v3/requests/index.ts @@ -1,3 +1,3 @@ -export * from './emails/emails-request-data'; +export * from './fax-to-email/fax-to-email-request-data'; export * from './faxes/faxes-request-data'; export * from './services/services-request-data'; diff --git a/packages/fax/src/models/v3/service-email-settings/index.ts b/packages/fax/src/models/v3/service-email-settings/index.ts deleted file mode 100644 index 2ec63f57..00000000 --- a/packages/fax/src/models/v3/service-email-settings/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { ServiceEmailSettings } from './service-email-settings'; diff --git a/packages/fax/src/models/v3/service-email-settings/service-email-settings.ts b/packages/fax/src/models/v3/service-email-settings/service-email-settings.ts deleted file mode 100644 index fdee163f..00000000 --- a/packages/fax/src/models/v3/service-email-settings/service-email-settings.ts +++ /dev/null @@ -1,8 +0,0 @@ - -export interface ServiceEmailSettings { - - /** The password to encrypt the PDF file */ - pdfPassword?: string; - /** Use the body of the email as the cover page */ - useBodyAsCoverPage?: boolean; -} diff --git a/packages/fax/src/models/v3/service-phone-number/service-phone-number.ts b/packages/fax/src/models/v3/service-phone-number/service-phone-number.ts index 39a38906..447666a8 100644 --- a/packages/fax/src/models/v3/service-phone-number/service-phone-number.ts +++ b/packages/fax/src/models/v3/service-phone-number/service-phone-number.ts @@ -1,6 +1,4 @@ - export interface ServicePhoneNumber { - /** A phone number in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format, including the leading '+'. */ phoneNumber?: string; /** The `Id` of the project associated with the call. */ diff --git a/packages/fax/src/models/v3/service/service.ts b/packages/fax/src/models/v3/service/service.ts index eb78237f..47be2944 100644 --- a/packages/fax/src/models/v3/service/service.ts +++ b/packages/fax/src/models/v3/service/service.ts @@ -1,11 +1,9 @@ -import { ImageConversionMethod, WebhookContentType } from '../enums'; -import { ServiceEmailSettings } from '../service-email-settings'; +import { ImageConversionMethod, Resolution, WebhookContentType } from '../enums'; /** * You can use the default created service, or create multiple services within the same project to have different default behavior for all your different faxing use cases. */ export interface ServiceRequest { - /** A friendly name for the service. Maximum is 60 characters. */ name?: string; /** The URL to which Sinch will post when someone sends a fax to your Sinch number. To accept incoming faxes this must be set and your Sinch phone number must be configured to receive faxes. */ @@ -14,20 +12,24 @@ export interface ServiceRequest { webhookContentType?: WebhookContentType; /** If set to true this is the service used to create faxes when no serviceId is specified in the API endpoints. */ defaultForProject?: boolean; - /** One of your sinch numbers connected to this service or any of your verified numbers */ + /** One of your Sinch numbers connected to this service or any of your verified numbers */ defaultFrom?: string; /** The number of times to retry sending a fax if it fails. Default is 3. Maximum is 5. */ numberOfRetries?: number; /** The number of seconds to wait between retries if the fax is not yet completed. */ retryDelaySeconds?: number; - /** Determines how documents are converted to black and white. Value should be halftone or monochrome. Defaults to value selected on Fax Settings page */ + /** Determines how documents are converted to black and white on OUTBOUND faxes only. Image conversion is not done on INBOUND faxes. Defaults to value selected on Fax Service object. */ imageConversionMethod?: ImageConversionMethod; + /** If a value is set, it will always add that cover page id to outbound faxes */ + coverPageId?: string; /** Save fax documents with sinch when you send faxes */ saveOutboundFaxDocuments?: boolean; /** Save fax documents with sinch when you receive faxes */ saveInboundFaxDocuments?: boolean; - /** @see ServiceEmailSettings */ - emailSettings?: ServiceEmailSettings; + /** If set to true, barcodes will be detected on incoming faxes. */ + scanIncomingBarcodes?: boolean; + /** @see Resolution */ + resolution?: Resolution; } export interface ServiceResponse extends ServiceRequest { diff --git a/packages/fax/src/models/v3/update-email-request/update-email-request.ts b/packages/fax/src/models/v3/update-email-request/update-email-request.ts index 6a67056f..6c28af98 100644 --- a/packages/fax/src/models/v3/update-email-request/update-email-request.ts +++ b/packages/fax/src/models/v3/update-email-request/update-email-request.ts @@ -1,6 +1,6 @@ +import { NumberWithPermissions } from '../number-with-permissions'; export interface UpdateEmailRequest { - /** List of numbers */ - phoneNumbers: string[]; + phoneNumbers: NumberWithPermissions[]; } diff --git a/packages/fax/src/rest/v3/callbacks/callbacks-webhook.ts b/packages/fax/src/rest/v3/callbacks/callbacks-webhook.ts index 5aaf6991..598821ad 100644 --- a/packages/fax/src/rest/v3/callbacks/callbacks-webhook.ts +++ b/packages/fax/src/rest/v3/callbacks/callbacks-webhook.ts @@ -11,6 +11,9 @@ export class FaxCallbackWebhooks implements CallbackProcessor> { +export class FaxToEmailApiFixture implements Partial> { /** * Fixture associated to function addToNumbers diff --git a/packages/fax/src/rest/v3/emails/emails-api.ts b/packages/fax/src/rest/v3/fax-to-email/fax-to-email-api.ts similarity index 92% rename from packages/fax/src/rest/v3/emails/emails-api.ts rename to packages/fax/src/rest/v3/fax-to-email/fax-to-email-api.ts index a873d393..2a2ba3b0 100644 --- a/packages/fax/src/rest/v3/emails/emails-api.ts +++ b/packages/fax/src/rest/v3/fax-to-email/fax-to-email-api.ts @@ -20,7 +20,7 @@ import { import { FaxDomainApi } from '../fax-domain-api'; import { ServicesApi } from '../services'; -export class EmailsApi extends FaxDomainApi { +export class FaxToEmailApi extends FaxDomainApi { private servicesApi: ServicesApi; @@ -30,7 +30,7 @@ export class EmailsApi extends FaxDomainApi { * @param {SinchClientParameters} sinchClientParameters - The parameters used to initialize the API Client. */ constructor(sinchClientParameters: SinchClientParameters) { - super(sinchClientParameters, 'EmailsApi'); + super(sinchClientParameters, 'FaxToEmailApi'); this.servicesApi = new ServicesApi(sinchClientParameters); } @@ -48,7 +48,7 @@ export class EmailsApi extends FaxDomainApi { }; const body: RequestBody = data['emailRequestBody'] ? JSON.stringify(data['emailRequestBody']) : '{}'; - const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/emails`; + const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/services/${data['serviceId']}/emails`; const requestOptions = await this.client.prepareOptions(basePathUrl, 'POST', getParams, headers, body || undefined); const url = this.client.prepareUrl(requestOptions.hostname, requestOptions.queryParams); @@ -75,7 +75,7 @@ export class EmailsApi extends FaxDomainApi { }; const body: RequestBody = data['email'] ? JSON.stringify(data['email']) : '{}'; - const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/emails/${data['email']}`; + const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/services/${data['serviceId']}/emails/${data['email']}`; const requestOptions = await this.client.prepareOptions(basePathUrl, 'DELETE', getParams, headers, body || undefined); @@ -104,7 +104,7 @@ export class EmailsApi extends FaxDomainApi { }; const body: RequestBody = ''; - const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/emails`; + const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/services/${data['serviceId']}/emails`; const requestOptionsPromise = this.client.prepareOptions(basePathUrl, 'GET', getParams, headers, body || undefined); @@ -158,7 +158,7 @@ export class EmailsApi extends FaxDomainApi { }; const body: RequestBody = ''; - const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/emails/${data['email']}/numbers`; + const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/services/${data['serviceId']}/emails/${data['email']}/numbers`; const requestOptionsPromise = this.client.prepareOptions(basePathUrl, 'GET', getParams, headers, body || undefined); @@ -201,7 +201,7 @@ export class EmailsApi extends FaxDomainApi { const body: RequestBody = data['updateEmailRequestBody'] ? JSON.stringify(data['updateEmailRequestBody']) : '{}'; - const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/emails/${data['email']}`; + const basePathUrl = `${this.client.apiClientOptions.hostname}/v3/projects/${this.client.apiClientOptions.projectId}/services/${data['serviceId']}/emails/${data['email']}`; const requestOptions = await this.client.prepareOptions(basePathUrl, 'PUT', getParams, headers, body || undefined); const url = this.client.prepareUrl(requestOptions.hostname, requestOptions.queryParams); diff --git a/packages/fax/src/rest/v3/fax-to-email/index.ts b/packages/fax/src/rest/v3/fax-to-email/index.ts new file mode 100644 index 00000000..2f04232b --- /dev/null +++ b/packages/fax/src/rest/v3/fax-to-email/index.ts @@ -0,0 +1,2 @@ +export * from './fax-to-email-api'; +export * from './fax-to-email-api.jest.fixture'; diff --git a/packages/fax/src/rest/v3/faxes/faxes-api.ts b/packages/fax/src/rest/v3/faxes/faxes-api.ts index 9704fdc8..c56e6bb0 100644 --- a/packages/fax/src/rest/v3/faxes/faxes-api.ts +++ b/packages/fax/src/rest/v3/faxes/faxes-api.ts @@ -131,6 +131,7 @@ export class FaxesApi extends FaxDomainApi { public list(data: ListFaxesRequestData): ApiListPromise { this.client = this.getSinchClient(); const getParams = this.client.extractQueryParams(data, [ + 'serviceId', 'direction', 'status', 'to', diff --git a/packages/fax/src/rest/v3/index.ts b/packages/fax/src/rest/v3/index.ts index 110257fa..8e389e19 100644 --- a/packages/fax/src/rest/v3/index.ts +++ b/packages/fax/src/rest/v3/index.ts @@ -1,5 +1,5 @@ export * from './callbacks'; -export * from './emails'; +export * from './fax-to-email'; export * from './faxes'; export * from './services'; export * from './enums'; diff --git a/packages/fax/tests/models/v3/errors/call-error.test.ts b/packages/fax/tests/models/v3/errors/call-error.test.ts new file mode 100644 index 00000000..4d0ccb6e --- /dev/null +++ b/packages/fax/tests/models/v3/errors/call-error.test.ts @@ -0,0 +1,26 @@ +import { callErrorCodeLabels, CallErrorCodeEnum } from '../../../../src/models'; + +describe('callErrorCodeLabels', () => { + it('should have correct labels for each CallErrorCodeEnum', () => { + const expectedLabels = new Map([ + [11, 'The call dropped prematurely'], + [15, 'Congestion'], + [16, 'Ring Timeout'], + [17, 'Busy'], + [19, 'Immediate Hangup'], + [30, 'No answer from a fax machine.'], + [32, 'Incompatible destination'], + [34, 'Phone number not operational'], + [43, 'Problem establishing connection'], + [49, 'The destination phone number Is Not active'], + ]); + + for (const [code, label] of expectedLabels.entries()) { + expect(callErrorCodeLabels[code]).toBe(label); + } + }); + + it('should not have a label for an undefined code', () => { + expect(callErrorCodeLabels[-1]).toBeUndefined(); + }); +}); diff --git a/packages/fax/tests/models/v3/errors/document-conversion-error.test.ts b/packages/fax/tests/models/v3/errors/document-conversion-error.test.ts new file mode 100644 index 00000000..fec844c0 --- /dev/null +++ b/packages/fax/tests/models/v3/errors/document-conversion-error.test.ts @@ -0,0 +1,26 @@ +import { documentConversionErrorCodeLabels, DocumentConversionErrorCodeEnum } from '../../../../src/models'; + +describe('documentConversionErrorCodeLabels', () => { + it('should have correct labels for each DocumentConversionErrorCodeEnum', () => { + const expectedLabels = new Map([ + [4, 'There was a problem in converting and merging files to the output file format. Contact support.'], + [54, 'Could not access the url you provided. {contentUrl}'], + [55, 'The string_data URL you provided is invalid'], + [57, 'There was a problem storing the file you provided.'], + [69, 'There was a problem storing the file you provided.'], + [122, 'User simulated Document Conversion Error'], + [128, 'Could not determine mimetype for file.'], + [129, 'Mimetype not supported.'], + [130, 'Mimetype not supported: application/xml'], + [133, 'Failed to normalize PDF document'], + ]); + + for (const [code, label] of expectedLabels.entries()) { + expect(documentConversionErrorCodeLabels[code]).toBe(label); + } + }); + + it('should not have a label for an undefined code', () => { + expect(documentConversionErrorCodeLabels[-1]).toBeUndefined(); + }); +}); diff --git a/packages/fax/tests/models/v3/errors/fax-error.test.ts b/packages/fax/tests/models/v3/errors/fax-error.test.ts new file mode 100644 index 00000000..b9eb3fac --- /dev/null +++ b/packages/fax/tests/models/v3/errors/fax-error.test.ts @@ -0,0 +1,56 @@ +import { faxErrorCodeLabels, FaxErrorCodeEnum } from '../../../../src/models'; + +describe('faxErrorCodeLabels', () => { + it('should have correct labels for each FaxErrorCodeEnum', () => { + const expectedLabels = new Map([ + [6, 'There was an error communicating with the far side.'], + [7, 'Far end cannot receive at the size of image'], + [8, 'No response after sending a page'], + [10, 'Disconnected after permitted retries'], + [12, 'Received no response to DCS or TCF'], + [13, 'Timed out waiting for the first message'], + [14, 'Timed out waiting for initial communication'], + [18, 'Unexpected message received'], + [20, 'The HDLC carrier did not stop in a timely manner'], + [21, 'Received a DCN from remote after sending a page'], + [22, 'Received bad response to DCS or training'], + [25, 'Far end cannot receive at the resolution of the image'], + [26, 'The remote fax machine failed to respond'], + [28, 'Failed to train with any of the compatible modems'], + [29, 'Invalid response after sending a page'], + [31, 'Fax machine incompatibility'], + [38, 'The remote fax machine hung up before receiving fax'], + [40, 'Telephony error'], + [41, 'Unexpected DCN while waiting for DCS or DIS'], + [44, 'Telephony Error'], + // eslint-disable-next-line max-len + [46, 'Insufficient funds to send fax and not able to auto recharge; There was a problem charging your credit card. Please check your payment information and try again.'], + [48, 'No answer (The Receiving Machine May Be Out Of Paper)'], + [53, 'Unexpected DCN after EOM or MPS sequence'], + [60, 'Transmission error after page break'], + [63, 'Fax protocol error'], + [68, 'Far end is not compatible'], + [75, 'Manually canceled by user'], + [76, 'Canceled automatically because timeout exceeded'], + [77, 'Timed out waiting for receiver ready (ECM mode)'], + [79, 'Can\'t cancel the fax, it\'s already complete!'], + [80, 'Received a DCN while waiting for a DIS'], + [82, 'There was an error communicating with the far side'], + [84, 'Unexpected command after page received'], + [113, 'The file for this fax has been deleted or is not accessible.'], + [117, 'No pages received'], + [119, 'User requested simulated faxError'], + [131, 'Incomplete transmission'], + [132, 'No fax tone detected'], + [133, 'Phone number is not permitted'], + ]); + + for (const [code, label] of expectedLabels.entries()) { + expect(faxErrorCodeLabels[code]).toBe(label); + } + }); + + it('should not have a label for an undefined code', () => { + expect(faxErrorCodeLabels[-1]).toBeUndefined(); + }); +}); diff --git a/packages/fax/tests/models/v3/helper.test.ts b/packages/fax/tests/models/v3/helper.test.ts index adbc2911..49d5d2ad 100644 --- a/packages/fax/tests/models/v3/helper.test.ts +++ b/packages/fax/tests/models/v3/helper.test.ts @@ -4,7 +4,9 @@ describe('Fax models helpers', () => { describe('convertToSupportedFileType', () => { it('should convert a file extension to a FaxBase64FileType', () => { + console.warn = jest.fn(); let convertedFileExtension = convertToSupportedFileType('doc'); + expect(console.warn).toHaveBeenCalledWith('The file extension "DOC" is not supported.'); expect(convertedFileExtension).toBe('DOC'); convertedFileExtension = convertToSupportedFileType('docx'); @@ -32,10 +34,12 @@ describe('Fax models helpers', () => { expect(convertedFileExtension).toBe('PNG'); convertedFileExtension = convertToSupportedFileType(undefined); + expect(console.warn).toHaveBeenCalledWith('No file extension has been defined.'); expect(convertedFileExtension).toBeUndefined(); convertedFileExtension = convertToSupportedFileType('unknown'); - expect(convertedFileExtension).toBeUndefined(); + expect(console.warn).toHaveBeenCalledWith('The file extension "UNKNOWN" is not supported.'); + expect(convertedFileExtension).toBe('UNKNOWN'); }); }); diff --git a/packages/fax/tests/rest/v3/fax-service.test.ts b/packages/fax/tests/rest/v3/fax-service.test.ts index c12860ef..5b9e6e14 100644 --- a/packages/fax/tests/rest/v3/fax-service.test.ts +++ b/packages/fax/tests/rest/v3/fax-service.test.ts @@ -1,5 +1,5 @@ import { SinchClientParameters } from '@sinch/sdk-client'; -import { EmailsApi, FaxesApi, FaxService, ServicesApi } from '../../../src'; +import { FaxToEmailApi, FaxesApi, FaxService, ServicesApi } from '../../../src'; describe('Fax Service', () => { const DEFAULT_HOSTNAME = 'https://fax.api.sinch.com'; @@ -18,9 +18,11 @@ describe('Fax Service', () => { // Then expect(faxService.faxes).toBeInstanceOf(FaxesApi); - expect(faxService.emails).toBeInstanceOf(EmailsApi); + expect(faxService.faxToEmail).toBeInstanceOf(FaxToEmailApi); + expect(faxService.emails).toBeInstanceOf(FaxToEmailApi); expect(faxService.services).toBeInstanceOf(ServicesApi); expect(faxService.faxes.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(faxService.faxToEmail.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); expect(faxService.emails.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); expect(faxService.services.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); }); @@ -39,6 +41,7 @@ describe('Fax Service', () => { // Then expect(faxService.faxes.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(faxService.faxToEmail.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); expect(faxService.emails.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); expect(faxService.services.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); }); diff --git a/packages/fax/tests/rest/v3/emails/emails-api.test.ts b/packages/fax/tests/rest/v3/fax-to-email/fax-to-email-api.test.ts similarity index 72% rename from packages/fax/tests/rest/v3/emails/emails-api.test.ts rename to packages/fax/tests/rest/v3/fax-to-email/fax-to-email-api.test.ts index f574c57a..25fbe066 100644 --- a/packages/fax/tests/rest/v3/emails/emails-api.test.ts +++ b/packages/fax/tests/rest/v3/fax-to-email/fax-to-email-api.test.ts @@ -1,20 +1,20 @@ import { SinchClientParameters } from '@sinch/sdk-client'; import { Fax } from '../../../../src'; -import { EmailsApi, EmailsApiFixture } from '../../../../src'; +import { FaxToEmailApi, FaxToEmailApiFixture } from '../../../../src'; describe('EmailsApi', () => { - let emailsApi: EmailsApi; - let fixture: EmailsApiFixture; + let faxToEmailApi: FaxToEmailApi; + let fixture: FaxToEmailApiFixture; let credentials: SinchClientParameters; beforeEach(() => { - fixture = new EmailsApiFixture(); + fixture = new FaxToEmailApiFixture(); credentials = { projectId: 'PROJECT_ID', keyId: 'KEY_ID', keySecret: 'KEY_SECRET', }; - emailsApi = new EmailsApi(credentials); + faxToEmailApi = new FaxToEmailApi(credentials); }); @@ -22,25 +22,32 @@ describe('EmailsApi', () => { it('should make a POST request to add an email to be used for sending and receiving faxes', async () => { // Given const requestData: Fax.AddEmailToNumbersRequestData = { + serviceId: 'serviceId', emailRequestBody: { email: 'user@domain.com', phoneNumbers: [ - '+14155552222', + { + number: '+14155552222', + permissions: 'both', + }, ], }, }; const expectedResponse: Fax.Email = { email: 'user@domain.com', phoneNumbers: [ - '+14155552222', + { + number: '+14155552222', + permissions: 'both', + }, ], projectId: 'projectId', }; // When fixture.addToNumbers.mockResolvedValue(expectedResponse); - emailsApi.addToNumbers = fixture.addToNumbers; - const response = await emailsApi.addToNumbers(requestData); + faxToEmailApi.addToNumbers = fixture.addToNumbers; + const response = await faxToEmailApi.addToNumbers(requestData); // Then expect(response).toEqual(expectedResponse); @@ -52,14 +59,15 @@ describe('EmailsApi', () => { it('should make a DELETE request to delete an email and its numbers association', async () => { // Given const requestData: Fax.DeleteEmailRequestData = { + serviceId: 'serviceId', email: 'user@domain.com', }; const expectedResponse = undefined; // When fixture.delete.mockResolvedValue(expectedResponse); - emailsApi.delete = fixture.delete; - const response = await emailsApi.delete(requestData); + faxToEmailApi.delete = fixture.delete; + const response = await faxToEmailApi.delete(requestData); // Then expect(response).toEqual(expectedResponse); @@ -71,13 +79,17 @@ describe('EmailsApi', () => { it('should make a GET request to list emails for the project', async () => { // Given const requestData: Fax.ListEmailsForProjectRequestData = { + serviceId: 'serviceId', pageSize: 2, }; const mockData: Fax.Email[] = [ { email: 'user@domain.com', phoneNumbers: [ - '+14155552222', + { + number: '+14155552222', + permissions: 'both', + }, ], projectId: 'projectId', }, @@ -91,8 +103,8 @@ describe('EmailsApi', () => { // When fixture.list.mockResolvedValue(expectedResponse); - emailsApi.list = fixture.list; - const response = await emailsApi.list(requestData); + faxToEmailApi.list = fixture.list; + const response = await faxToEmailApi.list(requestData); // Then expect(response).toEqual(expectedResponse); @@ -119,8 +131,8 @@ describe('EmailsApi', () => { // When fixture.listForNumber.mockResolvedValue(expectedResponse); - emailsApi.listForNumber = fixture.listForNumber; - const response = await emailsApi.listForNumber(requestData); + faxToEmailApi.listForNumber = fixture.listForNumber; + const response = await faxToEmailApi.listForNumber(requestData); // Then expect(response).toEqual(expectedResponse); @@ -133,6 +145,7 @@ describe('EmailsApi', () => { it('should make a GET request to list the configured numbers for an email', async () => { // Given const requestData: Fax.ListNumbersByEmailRequestData = { + serviceId: 'serviceId', email: 'user@domain.com', pageSize: 2, }; @@ -152,8 +165,8 @@ describe('EmailsApi', () => { // When fixture.listNumbers.mockResolvedValue(expectedResponse); - emailsApi.listNumbers = fixture.listNumbers; - const response = await emailsApi.listNumbers(requestData); + faxToEmailApi.listNumbers = fixture.listNumbers; + const response = await faxToEmailApi.listNumbers(requestData); // Then expect(response).toEqual(expectedResponse); @@ -166,27 +179,40 @@ describe('EmailsApi', () => { it('should make a PUT request to set the numbers for an email', async () => { // Given const requestData: Fax.UpdateEmailRequestData = { + serviceId: 'serviceId', email: 'user@domain.com', updateEmailRequestBody: { phoneNumbers: [ - '+14155552222', - '+14155553333', + { + number: '+14155552222', + permissions: 'both', + }, + { + number: '+14155553333', + permissions: 'send', + }, ], }, }; const expectedResponse: Fax.Email = { email: 'user@domain.com', phoneNumbers: [ - '+14155552222', - '+14155553333', + { + number: '+14155552222', + permissions: 'both', + }, + { + number: '+14155553333', + permissions: 'send', + }, ], projectId: 'projectId', }; // When fixture.update.mockResolvedValue(expectedResponse); - emailsApi.update = fixture.update; - const response = await emailsApi.update(requestData); + faxToEmailApi.update = fixture.update; + const response = await faxToEmailApi.update(requestData); // Then expect(response).toEqual(expectedResponse); diff --git a/packages/fax/tests/rest/v3/emails/emails.steps.ts b/packages/fax/tests/rest/v3/fax-to-email/fax-to-email.steps.ts similarity index 72% rename from packages/fax/tests/rest/v3/emails/emails.steps.ts rename to packages/fax/tests/rest/v3/fax-to-email/fax-to-email.steps.ts index ff39fe47..76e84c40 100644 --- a/packages/fax/tests/rest/v3/emails/emails.steps.ts +++ b/packages/fax/tests/rest/v3/fax-to-email/fax-to-email.steps.ts @@ -1,9 +1,9 @@ -import { EmailsApi, Fax, FaxService } from '../../../../src'; +import { FaxToEmailApi, Fax, FaxService } from '../../../../src'; import { Given, Then, When } from '@cucumber/cucumber'; import * as assert from 'assert'; import { PageResult } from '@sinch/sdk-client'; -let emailsApi: EmailsApi; +let faxToEmailApi: FaxToEmailApi; let listEmailsResponse: PageResult; const emailsList: string[] = []; let listFaxEmails: PageResult; @@ -21,11 +21,11 @@ Given('the Fax service "Emails" is available', () => { authHostname: 'http://localhost:3011', faxHostname: 'http://localhost:3012', }); - emailsApi = faxService.emails; + faxToEmailApi = faxService.faxToEmail; }); When('I send a request to list the emails associated to a phone number via the "Emails" Service', async () => { - listEmailsResponse = await emailsApi.listForNumber({ + listEmailsResponse = await faxToEmailApi.listForNumber({ serviceId: '01W4FFL35P4NC4K35FAXSERVICE', phoneNumber: '+12014444444', }); @@ -39,7 +39,7 @@ Then('the "Emails" Service response contains {string} emails associated to the p }); When('I send a request to list all the emails associated to a phone number via the "Emails" Service', async () => { - for await (const email of emailsApi.listForNumber({ + for await (const email of faxToEmailApi.listForNumber({ serviceId: '01W4FFL35P4NC4K35FAXSERVICE', phoneNumber: '+12014444444' }) ) { @@ -55,7 +55,9 @@ Then('the emails list from the "Emails" Service contains {string} emails associa }); When('I send a request to list the emails associated to the project', async () => { - listFaxEmails = await emailsApi.list({}); + listFaxEmails = await faxToEmailApi.list({ + serviceId: '01W4FFL35P4NC4K35FAXSERVICE', + }); }); Then('the response contains {string} emails associated to the project', (expectedAnswer: string) => { @@ -64,7 +66,9 @@ Then('the response contains {string} emails associated to the project', (expecte }); When('I send a request to list all the emails associated to the project', async () => { - for await (const email of emailsApi.list({})) { + for await (const email of faxToEmailApi.list({ + serviceId: '01W4FFL35P4NC4K35FAXSERVICE', + })) { faxEmailsList.push(email); } }); @@ -75,27 +79,39 @@ Then('the emails list contains {string} emails associated to the project', (expe }); When('I send a request to add a new email to the project', async () => { - email = await emailsApi.addToNumbers({ + email = await faxToEmailApi.addToNumbers({ + serviceId: '01W4FFL35P4NC4K35FAXSERVICE', emailRequestBody : { email: 'spaceship@galaxy.far.far.away', - phoneNumbers: ['+12016666666'], + phoneNumbers: [{ + number: '+12016666666', + permissions: 'both', + }], }, }); }); Then('the response contains the added email', () => { assert.equal(email.email, 'spaceship@galaxy.far.far.away'); - assert.deepEqual(email.phoneNumbers, ['+12016666666']); + assert.deepEqual(email.phoneNumbers[0].number, '+12016666666'); + assert.deepEqual(email.phoneNumbers[0].permissions, 'both'); assert.equal(email.projectId, '123c0ffee-dada-beef-cafe-baadc0de5678'); }); When('I send a request to update the phone numbers associated to an email', async () => { - email = await emailsApi.update({ + email = await faxToEmailApi.update({ + serviceId: '01W4FFL35P4NC4K35FAXSERVICE', email: 'spaceship@galaxy.far.far.away', updateEmailRequestBody: { phoneNumbers: [ - '+12016666666', - '+12017777777', + { + number: '+12016666666', + permissions: 'send', + }, + { + number: '+12017777777', + permissions: 'receive', + }, ], }, }); @@ -103,12 +119,16 @@ When('I send a request to update the phone numbers associated to an email', asyn Then('the response contains the updated email', () => { assert.equal(email.email, 'spaceship@galaxy.far.far.away'); - assert.deepEqual(email.phoneNumbers, ['+12016666666', '+12017777777']); + assert.deepEqual(email.phoneNumbers[0].number, '+12016666666'); + assert.deepEqual(email.phoneNumbers[0].permissions, 'send'); + assert.deepEqual(email.phoneNumbers[1].number, '+12017777777'); + assert.deepEqual(email.phoneNumbers[1].permissions, 'receive'); assert.equal(email.projectId, '123c0ffee-dada-beef-cafe-baadc0de5678'); }); When('I send a request to delete an email from the project', async () => { - deleteEmailResponse = await emailsApi.delete({ + deleteEmailResponse = await faxToEmailApi.delete({ + serviceId: '01W4FFL35P4NC4K35FAXSERVICE', email: 'spaceship@galaxy.far.far.away', }); }); @@ -118,7 +138,8 @@ Then('the delete email response contains no data', () => { }); When('I send a request to list the phone numbers associated to an email', async () => { - listNumbersResponse = await emailsApi.listNumbers({ + listNumbersResponse = await faxToEmailApi.listNumbers({ + serviceId: '01W4FFL35P4NC4K35FAXSERVICE', email: 'cookie.monster@nom.nom', pageSize: 2, }); @@ -130,7 +151,10 @@ Then('the response contains {string} phone numbers associated to the email', (ex }); When('I send a request to list all the phone numbers associated to an email', async () => { - for await (const number of emailsApi.listNumbers({ email: 'cookie.monster@nom.nom' })) { + for await (const number of faxToEmailApi.listNumbers({ + email: 'cookie.monster@nom.nom', + serviceId: '01W4FFL35P4NC4K35FAXSERVICE', + })) { numbersList.push(number); } }); diff --git a/packages/fax/tests/rest/v3/faxes/faxes-api.test.ts b/packages/fax/tests/rest/v3/faxes/faxes-api.test.ts index 8bc2944f..e41bb705 100644 --- a/packages/fax/tests/rest/v3/faxes/faxes-api.test.ts +++ b/packages/fax/tests/rest/v3/faxes/faxes-api.test.ts @@ -83,6 +83,7 @@ describe('FaxesApi', () => { serviceId: 'serviceId', maxRetries: 3, createTime: new Date('2024-02-27T12:28:09.000Z'), + pagesSentSuccessfully: 1, headerPageNumbers: true, retryCount: 3, contentUrl: [ diff --git a/packages/numbers/CHANGELOG.md b/packages/numbers/CHANGELOG.md index e8eedae4..49a0a6e8 100644 --- a/packages/numbers/CHANGELOG.md +++ b/packages/numbers/CHANGELOG.md @@ -1,3 +1,18 @@ +## Version 1.3.0 +- [Tech] Update dependency `@sinch/sdk-client` to `1.3.0`. +- [Feature] Support string input when parsing webhook events +- [Feature] Details of an NotFound error have their own type `NotFoundErrorDetails[]` instead of a generic `object[]` +- [Feature] Ordering rented number parameter defines its own enum `OrderByEnum` +- [Feature] Remove unused models: `ListAvailableNumberRequest`, `NumberPatternPattern`, `NumberPatternSearchPattern` and the enum `NumberPatternSearchPatternEnum` +- **Deprecations**: + - Interface `RentAnyNumberRequestSmsConfiguration` is deprecated, use `SMSConfiguration` instead + - Interface `RentAnyNumberRequestVoiceConfiguration` is deprecated, use `VoiceConfiguration` instead + - Type `RegionNumberTypeEnum` is deprecated, use `NumberTypeEnum` instead + +## Version 1.2.1 +- [Tech] Update dependency `@sinch/sdk-client` to `1.2.1` +- [Bugfix] Fix refresh token issue + ## Version 1.2.0 - [Tech] Update dependency `@sinch/sdk-client` to `1.2.0`. - [Bugfix] Remove the "scheduledProvisioning" properties for SMS and Voice in the update number request. diff --git a/packages/numbers/package.json b/packages/numbers/package.json index 9ddf77d7..151da344 100644 --- a/packages/numbers/package.json +++ b/packages/numbers/package.json @@ -1,6 +1,6 @@ { "name": "@sinch/numbers", - "version": "1.2.0", + "version": "1.3.0", "description": "Sinch Numbers API", "homepage": "", "repository": { @@ -29,7 +29,7 @@ "test:e2e": "cucumber-js" }, "dependencies": { - "@sinch/sdk-client": "^1.2.0" + "@sinch/sdk-client": "^1.3.0" }, "devDependencies": {}, "publishConfig": { diff --git a/packages/numbers/src/models/v1/callback-payload/callback-payload.ts b/packages/numbers/src/models/v1/callback-payload/callback-payload.ts index b47d1270..4264f33e 100644 --- a/packages/numbers/src/models/v1/callback-payload/callback-payload.ts +++ b/packages/numbers/src/models/v1/callback-payload/callback-payload.ts @@ -9,11 +9,11 @@ export interface CallbackPayload { /** The unique identifier of the resource, depending on the resource type. For example, a phone number, a hosting order ID, or a brand ID. */ resourceId?: string; /** The type of the resource. */ - resourceType?: string; + resourceType?: 'ACTIVE_NUMBER' | string; /** The type of the event. */ eventType?: EventTypeEnum; /** The status of the event. For example, `SUCCEEDED` or `FAILED`. */ - status?: string; + status?: 'SUCCEEDED' | 'FAILED' | string; /** If the status is FAILED, a failure code will be provided. For numbers provisioning to SMS platform, there won\'t be any extra `failureCode`, as the result is binary. For campaign provisioning-related failures, refer to the list for the possible values. */ failureCode?: FailureCodeEnum; } diff --git a/packages/numbers/src/models/v1/enums.ts b/packages/numbers/src/models/v1/enums.ts index 52ff0f8b..25a032d7 100644 --- a/packages/numbers/src/models/v1/enums.ts +++ b/packages/numbers/src/models/v1/enums.ts @@ -16,8 +16,10 @@ export type { StatusEnum as NotFoundErrorStatusEnum, } from './not-found-error/not-found-error'; -export type NumberTypeEnum = 'MOBILE' |'LOCAL' |'TOLL_FREE'; +export type NumberTypeEnum = 'MOBILE' |'LOCAL' |'TOLL_FREE' | string; -export type SearchPatternEnum = 'START' | 'CONTAINS' | 'END'; +export type SearchPatternEnum = 'START' | 'CONTAINS' | 'END' | string; -export type CapabilitiesEnum = 'SMS' | 'VOICE'; +export type CapabilitiesEnum = 'SMS' | 'VOICE' | string; + +export type OrderByEnum = 'phoneNumber' | 'displayName' | string; diff --git a/packages/numbers/src/models/v1/index.ts b/packages/numbers/src/models/v1/index.ts index 47fa96c3..3345fc18 100644 --- a/packages/numbers/src/models/v1/index.ts +++ b/packages/numbers/src/models/v1/index.ts @@ -13,13 +13,11 @@ export * from './internal-error'; export * from './internal-error-error'; export * from './invalid-argument'; export * from './invalid-argument-error'; -export * from './list-available-number-request'; export * from './list-available-regions-response'; export * from './money'; export * from './not-found'; export * from './not-found-error'; -export * from './number-pattern-pattern'; -export * from './number-pattern-search-pattern'; +export * from './not-found-error-details'; export * from './provisioning-status'; export * from './rent-any-number-request'; export * from './rent-any-number-request-sms-configuration'; diff --git a/packages/numbers/src/models/v1/list-available-number-request/index.ts b/packages/numbers/src/models/v1/list-available-number-request/index.ts deleted file mode 100644 index 7c0f2f40..00000000 --- a/packages/numbers/src/models/v1/list-available-number-request/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { ListAvailableNumberRequest } from './list-available-number-request'; diff --git a/packages/numbers/src/models/v1/list-available-number-request/list-available-number-request.ts b/packages/numbers/src/models/v1/list-available-number-request/list-available-number-request.ts deleted file mode 100644 index 84f66787..00000000 --- a/packages/numbers/src/models/v1/list-available-number-request/list-available-number-request.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NumberPatternPattern } from '../number-pattern-pattern'; -import { NumberPatternSearchPattern } from '../number-pattern-search-pattern'; - -/** - * Available numbers schema base. - */ -export interface ListAvailableNumberRequest { - /** @see NumberPatternPattern */ - NumberPattern?: NumberPatternPattern; - /** @see NumberPatternSearchPattern */ - NumberPatternSearchPattern?: NumberPatternSearchPattern; - /** Region code to filter by. ISO 3166-1 alpha-2 country code of the phone number. Example: `US`, `GB` or `SE`. */ - regionCode?: string; - /** Number type to filter by. `MOBILE`, `LOCAL` or `TOLL_FREE`. */ - type?: string; - /** Number capabilities to filter by, `SMS` and/or `VOICE`. */ - capabilities?: string[]; -} diff --git a/packages/numbers/src/models/v1/not-found-error-details/index.ts b/packages/numbers/src/models/v1/not-found-error-details/index.ts new file mode 100644 index 00000000..cd644c70 --- /dev/null +++ b/packages/numbers/src/models/v1/not-found-error-details/index.ts @@ -0,0 +1 @@ +export type { NotFoundErrorDetails } from './not-found-error-details'; diff --git a/packages/numbers/src/models/v1/not-found-error-details/not-found-error-details.ts b/packages/numbers/src/models/v1/not-found-error-details/not-found-error-details.ts new file mode 100644 index 00000000..4dc0313e --- /dev/null +++ b/packages/numbers/src/models/v1/not-found-error-details/not-found-error-details.ts @@ -0,0 +1,12 @@ +export interface NotFoundErrorDetails { + /** */ + type?: string; + /** The type of the resource that was not found. */ + resourceType?: string; + /** The name of the resource that was not found. */ + resourceName?: string; + /** The owner of the resource that was not found. */ + owner?: string; + /** A description of the error. */ + description?: string; +} diff --git a/packages/numbers/src/models/v1/not-found-error/not-found-error.ts b/packages/numbers/src/models/v1/not-found-error/not-found-error.ts index 1ecb2804..d61e3ef4 100644 --- a/packages/numbers/src/models/v1/not-found-error/not-found-error.ts +++ b/packages/numbers/src/models/v1/not-found-error/not-found-error.ts @@ -1,3 +1,5 @@ +import { NotFoundErrorDetails } from '../not-found-error-details'; + export interface NotFoundError { /** @see CodeEnum */ code?: CodeEnum; @@ -5,7 +7,7 @@ export interface NotFoundError { /** @see StatusEnum */ status?: StatusEnum; /** List of objects */ - details?: object[]; + details?: NotFoundErrorDetails[]; } export type CodeEnum = '404'; diff --git a/packages/numbers/src/models/v1/number-pattern-pattern/index.ts b/packages/numbers/src/models/v1/number-pattern-pattern/index.ts deleted file mode 100644 index 2491bdb3..00000000 --- a/packages/numbers/src/models/v1/number-pattern-pattern/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { NumberPatternPattern } from './number-pattern-pattern'; diff --git a/packages/numbers/src/models/v1/number-pattern-pattern/number-pattern-pattern.ts b/packages/numbers/src/models/v1/number-pattern-pattern/number-pattern-pattern.ts deleted file mode 100644 index 8c653707..00000000 --- a/packages/numbers/src/models/v1/number-pattern-pattern/number-pattern-pattern.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SearchPattern } from '../search-pattern'; - -/** - * Sequence of digits to search for. - */ -export interface NumberPatternPattern { - /** @see SearchPattern */ - NumberPattern?: SearchPattern; -} diff --git a/packages/numbers/src/models/v1/number-pattern-search-pattern/index.ts b/packages/numbers/src/models/v1/number-pattern-search-pattern/index.ts deleted file mode 100644 index d9f5e1ee..00000000 --- a/packages/numbers/src/models/v1/number-pattern-search-pattern/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { NumberPatternSearchPattern } from './number-pattern-search-pattern'; diff --git a/packages/numbers/src/models/v1/number-pattern-search-pattern/number-pattern-search-pattern.ts b/packages/numbers/src/models/v1/number-pattern-search-pattern/number-pattern-search-pattern.ts deleted file mode 100644 index 729263af..00000000 --- a/packages/numbers/src/models/v1/number-pattern-search-pattern/number-pattern-search-pattern.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Search pattern to apply. Options include, `START`, `CONTAIN`, and `END`. - */ -export interface NumberPatternSearchPattern { - /** The pattern to apply to searches. Options include, `START`, `CONTAIN`, and `END`. */ - NumberPatternSearchPattern?: NumberPatternSearchPatternEnum; -} - -export enum NumberPatternSearchPatternEnum { - START = 'START', - CONTAINS = 'CONTAINS', - END = 'END', -} diff --git a/packages/numbers/src/models/v1/rent-any-number-request-sms-configuration/rent-any-number-request-sms-configuration.ts b/packages/numbers/src/models/v1/rent-any-number-request-sms-configuration/rent-any-number-request-sms-configuration.ts index c69bef29..8ad076b0 100644 --- a/packages/numbers/src/models/v1/rent-any-number-request-sms-configuration/rent-any-number-request-sms-configuration.ts +++ b/packages/numbers/src/models/v1/rent-any-number-request-sms-configuration/rent-any-number-request-sms-configuration.ts @@ -1,3 +1,4 @@ +/** @deprecated - use SMSConfiguration */ export interface RentAnyNumberRequestSmsConfiguration { /** The SMS service that the number will be linked to. The `servicePlanId` can be found in the [Sinch Customer Dashboard](https://dashboard.sinch.com/sms/api/rest). */ servicePlanId: string; diff --git a/packages/numbers/src/models/v1/rent-any-number-request-voice-configuration/rent-any-number-request-voice-configuration.ts b/packages/numbers/src/models/v1/rent-any-number-request-voice-configuration/rent-any-number-request-voice-configuration.ts index 721abdae..29e09917 100644 --- a/packages/numbers/src/models/v1/rent-any-number-request-voice-configuration/rent-any-number-request-voice-configuration.ts +++ b/packages/numbers/src/models/v1/rent-any-number-request-voice-configuration/rent-any-number-request-voice-configuration.ts @@ -1,3 +1,4 @@ +/** @deprecated - use VoiceConfiguration */ export interface RentAnyNumberRequestVoiceConfiguration { /** Your app ID for the Voice API. The `appId` can be found in your Sinch Customer Dashboard under Voice, then apps. */ appId: string; diff --git a/packages/numbers/src/models/v1/rent-any-number-request/rent-any-number-request.ts b/packages/numbers/src/models/v1/rent-any-number-request/rent-any-number-request.ts index c7978199..fc45d6be 100644 --- a/packages/numbers/src/models/v1/rent-any-number-request/rent-any-number-request.ts +++ b/packages/numbers/src/models/v1/rent-any-number-request/rent-any-number-request.ts @@ -1,7 +1,7 @@ -import { RentAnyNumberRequestSmsConfiguration } from '../rent-any-number-request-sms-configuration'; -import { RentAnyNumberRequestVoiceConfiguration } from '../rent-any-number-request-voice-configuration'; import { SearchPattern } from '../search-pattern'; import { CapabilitiesEnum, NumberTypeEnum } from '../enums'; +import { VoiceConfiguration } from '../voice-configuration'; +import { SMSConfiguration } from '../sms-configuration'; /** * Request message for searching and renting in one go any number that matches the search criteria. @@ -15,10 +15,10 @@ export interface RentAnyNumberRequest { type: NumberTypeEnum; /** Number capabilities to filter by, `SMS` and/or `VOICE`. */ capabilities?: CapabilitiesEnum[]; - /** @see RentAnyNumberRequestSmsConfiguration */ - smsConfiguration?: RentAnyNumberRequestSmsConfiguration; - /** @see RentAnyNumberRequestVoiceConfiguration */ - voiceConfiguration?: RentAnyNumberRequestVoiceConfiguration; + /** @see SMSConfiguration */ + smsConfiguration?: SMSConfiguration; + /** @see VoiceConfiguration */ + voiceConfiguration?: VoiceConfiguration; /** The active number's callback URL to be called for provisioning / deprovisioning updates */ callbackUrl?: string; } diff --git a/packages/numbers/src/models/v1/rent-number-request/rent-number-request.ts b/packages/numbers/src/models/v1/rent-number-request/rent-number-request.ts index 5c1b6bf0..164ae59e 100644 --- a/packages/numbers/src/models/v1/rent-number-request/rent-number-request.ts +++ b/packages/numbers/src/models/v1/rent-number-request/rent-number-request.ts @@ -1,14 +1,14 @@ -import { RentAnyNumberRequestSmsConfiguration } from '../rent-any-number-request-sms-configuration'; -import { RentAnyNumberRequestVoiceConfiguration } from '../rent-any-number-request-voice-configuration'; +import { SMSConfiguration } from '../sms-configuration'; +import { VoiceConfiguration } from '../voice-configuration'; /** * Request message for renting a phone number. */ export interface RentNumberRequest { - /** @see RentAnyNumberRequestSmsConfiguration */ - smsConfiguration?: RentAnyNumberRequestSmsConfiguration; - /** @see RentAnyNumberRequestVoiceConfiguration */ - voiceConfiguration?: RentAnyNumberRequestVoiceConfiguration; + /** @see SMSConfiguration */ + smsConfiguration?: SMSConfiguration; + /** @see VoiceConfiguration */ + voiceConfiguration?: VoiceConfiguration; /** The callback URL to be called for a rented number provisioning / deprovisioning operations */ callbackUrl?: string; } diff --git a/packages/numbers/src/models/v1/requests/active-number/active-number-request-data.ts b/packages/numbers/src/models/v1/requests/active-number/active-number-request-data.ts index 1df6ef22..f6a718db 100644 --- a/packages/numbers/src/models/v1/requests/active-number/active-number-request-data.ts +++ b/packages/numbers/src/models/v1/requests/active-number/active-number-request-data.ts @@ -1,4 +1,4 @@ -import { CapabilitiesEnum, NumberTypeEnum, SearchPatternEnum } from '../../enums'; +import { CapabilitiesEnum, NumberTypeEnum, OrderByEnum, SearchPatternEnum } from '../../enums'; import { ActiveNumberRequest } from '../../active-number-request'; export interface GetActiveNumberRequestData { @@ -22,12 +22,14 @@ export interface ListActiveNumbersRequestData { /** The next page token value returned from a previous List request, if any. */ pageToken?: string; /** Supported fields for ordering by `phoneNumber` or `displayName`. */ - orderBy?: string; + orderBy?: OrderByEnum; } + export interface ReleaseNumberRequestData { /** Output only. The phone number in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format with leading `+`. */ phoneNumber: string; } + export interface UpdateActiveNumberRequestData { /** Output only. The phone number in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format with leading `+`. */ phoneNumber: string; diff --git a/packages/numbers/src/models/v1/requests/available-regions/available-regions-request-data.ts b/packages/numbers/src/models/v1/requests/available-regions/available-regions-request-data.ts index 757d1b16..a9cc335b 100644 --- a/packages/numbers/src/models/v1/requests/available-regions/available-regions-request-data.ts +++ b/packages/numbers/src/models/v1/requests/available-regions/available-regions-request-data.ts @@ -1,11 +1,15 @@ +import { NumberTypeEnum } from '../../enums'; + +/** @deprecated Use `NumberTypeEnum` instead. */ export type RegionNumberTypeEnum = 'NUMBER_TYPE_UNSPECIFIED' | 'MOBILE' | 'LOCAL' | 'TOLL_FREE'; export interface ListAvailableRegionsRequestData { - /** Only returns regions for which numbers are provided with the given types v1: `MOBILE`, `LOCAL` or `TOLL_FREE`. However, you can indicate `NUMBER_TYPE_UNSPECIFIED: null` when searching. - * - NUMBER_TYPE_UNSPECIFIED: Null value + /** Only returns regions for which numbers are provided with the given types v1: `MOBILE`, `LOCAL` or `TOLL_FREE`. * - MOBILE: Numbers that belong to a specific range. * - LOCAL: Numbers that are assigned to a specific geographic region. * - TOLL_FREE: Number that are free of charge for the calling party but billed for all arriving calls. + * + * If you want to see all results, do not add the `types` query parameter. */ - types?: Array; + types?: Array; } diff --git a/packages/numbers/src/models/v1/sms-configuration/sms-configuration.ts b/packages/numbers/src/models/v1/sms-configuration/sms-configuration.ts index 91202cd9..5f507c72 100644 --- a/packages/numbers/src/models/v1/sms-configuration/sms-configuration.ts +++ b/packages/numbers/src/models/v1/sms-configuration/sms-configuration.ts @@ -4,9 +4,9 @@ import { ScheduledProvisioning } from '../scheduled-provisioning'; * The current SMS configuration for this number. Once the `servicePlanId` is sent, it enters scheduled provisioning. The status of scheduled provisioning will show under a `scheduledProvisioning` object if it\'s still running. Once processed successfully, the `servicePlanId` sent will appear directly under the `smsConfiguration` object. */ export interface SMSConfiguration { - /** The `servicePlanId` can be found in the Sinch Customer Dashboard. The service plan ID is what ties this number to the configured SMS service. */ + /** The `servicePlanId` can be found in the [Sinch Customer Dashboard](https://dashboard.sinch.com/sms/api/rest). The service plan ID is what ties this number to the configured SMS service. */ servicePlanId: string; - /** Only for US virtual numbers. This campaign ID relates to 10DLC numbers. So, it is the current campaign ID for this number. The `campaignId` is found on your TCR platform. */ + /** Only for US virtual numbers. This campaign ID relates to [10DLC numbers](https://community.sinch.com/t5/10DLC/What-is-10DLC/ta-p/7845). So, it is the current campaign ID for this number. The `campaignId` is found on your TCR platform. */ campaignId?: string; } diff --git a/packages/numbers/src/models/v1/voice-configuration/voice-configuration.ts b/packages/numbers/src/models/v1/voice-configuration/voice-configuration.ts index 3933b0b5..2e30f2f2 100644 --- a/packages/numbers/src/models/v1/voice-configuration/voice-configuration.ts +++ b/packages/numbers/src/models/v1/voice-configuration/voice-configuration.ts @@ -7,22 +7,22 @@ export type VoiceConfiguration = VoiceConfigurationRtc | VoiceConfigurationFax | export interface VoiceConfigurationRtc { /** The voice application type. */ - type: 'RTC' - /** Your app ID for the Voice API. The `appId` can be found in your Sinch Customer Dashboard under Voice, then apps. */ + type?: 'RTC' + /** Your app ID for the Voice API. The `appId` can be found in your [Sinch Customer Dashboard](https://dashboard.sinch.com/voice/apps). */ appId?: string; } export interface VoiceConfigurationFax { /** The voice application type. */ type: 'FAX' - /** The service ID for the FAX configuration. The `serviceId` can be found in your Sinch Customer Dashboard under fax, then services.*/ + /** The service ID for the FAX configuration. The `serviceId` can be found in your [Sinch Customer Dashboard](https://dashboard.sinch.com/fax/services).*/ serviceId?: string; } export interface VoiceConfigurationEst { /** The voice application type. */ type: 'EST' - /** The trunk ID for the EST voice configuration. The `trunkId` can be found in your Sinch Customer Dashboard under sip, then trunks.*/ + /** The trunk ID for the EST voice configuration. The `trunkId` can be found in your [Sinch Customer Dashboard](https://dashboard.sinch.com/trunks/your-trunks). */ trunkId?: string; } @@ -30,7 +30,7 @@ export interface VoiceConfigurationEst { * The current voice configuration for this number. During scheduled provisioning, the app ID value may be empty in a response if it is still processing or if it has failed. The status of scheduled provisioning will show under a `scheduledVoiceProvisioning` object if it\'s still running. Once processed successfully, the `appId` sent will appear directly under the `voiceConfiguration` object. */ export interface VoiceConfigurationResponse { - /** Your app ID for the Voice API. The `appId` can be found in your Sinch Customer Dashboard under Voice, then apps. */ + /** Your app ID for the Voice API. The `appId` can be found in your [Sinch Customer Dashboard](https://dashboard.sinch.com/voice/apps). */ appId?: string; /** Timestamp when the status was last updated. */ lastUpdatedTime?: Date | null; @@ -38,8 +38,8 @@ export interface VoiceConfigurationResponse { scheduledVoiceProvisioning?: ScheduledVoiceProvisioning | null; /** The type of voice configuration. Default is `RTC`. */ type: 'RTC' | 'EST' | 'FAX'; - /** The trunk ID for the EST voice configuration. The `trunkId` can be found in your Sinch Customer Dashboard under sip, then trunks.*/ + /** The trunk ID for the EST voice configuration. The `trunkId` can be found in your [Sinch Customer Dashboard](https://dashboard.sinch.com/trunks/your-trunks). */ trunkId?: string; - /** The service ID for the FAX configuration. The `serviceId` can be found in your Sinch Customer Dashboard under fax, then services.*/ + /** The service ID for the FAX configuration. The `serviceId` can be found in your [Sinch Customer Dashboard](https://dashboard.sinch.com/fax/services). */ serviceId?: string; } diff --git a/packages/numbers/src/rest/v1/callbacks-webhook/callbacks-webhook.ts b/packages/numbers/src/rest/v1/callbacks-webhook/callbacks-webhook.ts index adf4e574..e384cd5d 100644 --- a/packages/numbers/src/rest/v1/callbacks-webhook/callbacks-webhook.ts +++ b/packages/numbers/src/rest/v1/callbacks-webhook/callbacks-webhook.ts @@ -41,6 +41,9 @@ export class NumbersCallbackWebhooks implements CallbackProcessor { const requestData: Numbers.ListActiveNumbersRequestData = { type: 'LOCAL', regionCode: 'US', + orderBy: 'phoneNumber', }; const mockData: Numbers.ActiveNumber[] = [ { diff --git a/packages/numbers/tests/rest/v1/available-regions/available-regions.steps.ts b/packages/numbers/tests/rest/v1/available-regions/available-regions.steps.ts index db5686eb..7e07d6ed 100644 --- a/packages/numbers/tests/rest/v1/available-regions/available-regions.steps.ts +++ b/packages/numbers/tests/rest/v1/available-regions/available-regions.steps.ts @@ -5,7 +5,7 @@ import * as assert from 'assert'; let regionsApi: AvailableRegionsApi; let regions: Numbers.ListAvailableRegionsResponse; -const countRegionType = (regions: Numbers.AvailableRegion[], type: Numbers.RegionNumberTypeEnum) => { +const countRegionType = (regions: Numbers.AvailableRegion[], type: Numbers.NumberTypeEnum) => { return regions.reduce((count, region) => { return region.types?.includes(type) ? count + 1 : count; }, 0); diff --git a/packages/numbers/tests/rest/v1/callbacks/calback-configuration.steps.ts b/packages/numbers/tests/rest/v1/callbacks/calback-configuration.steps.ts index 70a9c91d..7a5495db 100644 --- a/packages/numbers/tests/rest/v1/callbacks/calback-configuration.steps.ts +++ b/packages/numbers/tests/rest/v1/callbacks/calback-configuration.steps.ts @@ -46,5 +46,12 @@ Then('the response contains an error', () => { const notFound = JSON.parse(error.data) as Numbers.NotFound; const notFoundError = notFound.error!; assert.equal(notFoundError.code, 404); + assert.equal(notFoundError.message, 'Could not find project with ID: 12c0ffee-dada-beef-cafe-baadc0de5678'); assert.equal(notFoundError.status, 'NOT_FOUND'); + assert.equal(notFoundError.details![0].type, 'ResourceInfo'); + assert.equal(notFoundError.details![0].resourceType, 'CallbackConfiguration'); + assert.equal(notFoundError.details![0].resourceName, ''); + assert.equal(notFoundError.details![0].owner, ''); + assert.equal(notFoundError.details![0].description, + 'Could not find project with ID: 12c0ffee-dada-beef-cafe-baadc0de5678'); }); diff --git a/packages/numbers/tests/rest/v1/emergency-address/emergency-address.steps.ts b/packages/numbers/tests/rest/v1/emergency-address/emergency-address.steps.ts new file mode 100644 index 00000000..db6dbb91 --- /dev/null +++ b/packages/numbers/tests/rest/v1/emergency-address/emergency-address.steps.ts @@ -0,0 +1,57 @@ +import { Given, Then, When } from '@cucumber/cucumber'; +import assert from 'assert'; + + +// TODO: change the text as the numbers service should not have knowledge of subdomains being available or not +Given('the Numbers service is available to handle emergency addresses', function() { +}); + +When('I send a request to validate an emergency address', async () => { + // TODO + assert.ok(true); +}); + +Then('the response contains the corrected address', () => { + // TODO + assert.ok(true); +}); + +When('I send a request to validate an approximate emergency address', async () => { + // TODO + assert.ok(true); +}); + +Then('the response contains the candidate address', () => { + // TODO + assert.ok(true); +}); + +When('I send a request to provision an emergency address', async () => { + // TODO + assert.ok(true); +}); + +Then('the response contains the provisioned emergency address', () => { + // TODO + assert.ok(true); +}); + +When('I send a request to deprovision an emergency address', async () => { + // TODO + assert.ok(true); +}); + +Then('the response indicates successful deprovisioning', () => { + // TODO + assert.ok(true); +}); + +When('I send a request to get the emergency address for a number', async () => { + // TODO + assert.ok(true); +}); + +Then('the response contains the provisioned emergency address for the phone number', () => { + // TODO + assert.ok(true); +}); diff --git a/packages/numbers/tests/rest/v1/numbers.steps.ts b/packages/numbers/tests/rest/v1/numbers.steps.ts index 6dcc215f..48b30795 100644 --- a/packages/numbers/tests/rest/v1/numbers.steps.ts +++ b/packages/numbers/tests/rest/v1/numbers.steps.ts @@ -46,7 +46,11 @@ Then('a phone number contains all the expected properties', () => { }); When('I send a request to check the availability of the phone number {string}', async (phoneNumber: string) => { - availablePhoneNumber = await numbersService.checkAvailability({ phoneNumber }); + try { + availablePhoneNumber = await numbersService.checkAvailability({ phoneNumber }); + } catch (e) { + error = e; + } }); Then('the response displays the phone number {string} details', (phoneNumber: string) => { @@ -54,11 +58,15 @@ Then('the response displays the phone number {string} details', (phoneNumber: st }); Then('the response contains an error about the number {string} not being available', (phoneNumber: string) => { - const notFound = availablePhoneNumber as Numbers.NotFound; + const notFound = JSON.parse(error.data) as Numbers.NotFound; const notFoundError = notFound.error!; assert.equal(notFoundError.code, 404); assert.equal(notFoundError.status, 'NOT_FOUND'); - assert.equal((notFoundError.details![0] as any).resourceName, phoneNumber); + assert.equal(notFoundError.details![0].type, 'ResourceInfo'); + assert.equal(notFoundError.details![0].resourceType, 'AvailableNumber'); + assert.equal(notFoundError.details![0].resourceName, phoneNumber); + assert.equal(notFoundError.details![0].owner, ''); + assert.equal(notFoundError.details![0].description, ''); }); When('I send a request to rent a number with some criteria', async () => { @@ -142,17 +150,21 @@ Then('the response contains this rented phone number {string}', (phoneNumber: st }); When('I send a request to rent the unavailable phone number {string}', async (phoneNumber: string) => { - activeNumber = await numbersService.rent({ - phoneNumber, - rentNumberRequestBody: { - smsConfiguration: { - servicePlanId: 'SpaceMonkeySquadron', - }, - voiceConfiguration: { - appId: 'sunshine-rain-drop-very-beautifulday', + try { + activeNumber = await numbersService.rent({ + phoneNumber, + rentNumberRequestBody: { + smsConfiguration: { + servicePlanId: 'SpaceMonkeySquadron', + }, + voiceConfiguration: { + appId: 'sunshine-rain-drop-very-beautifulday', + }, }, - }, - }); + }); + } catch (e) { + error = e; + } }); When('I send a request to list the phone numbers', async () => { @@ -271,7 +283,11 @@ Then('the response contains an error about the number {string} not being a rente const notFoundError = notFound.error!; assert.equal(notFoundError.code, 404); assert.equal(notFoundError.status, 'NOT_FOUND'); - assert.equal((notFoundError.details![0] as any).resourceName, phoneNumber); + assert.equal(notFoundError.details![0].type, 'ResourceInfo'); + assert.equal(notFoundError.details![0].resourceType, 'ActiveNumber'); + assert.equal(notFoundError.details![0].resourceName, phoneNumber); + assert.equal(notFoundError.details![0].owner, ''); + assert.equal(notFoundError.details![0].description, ''); }); When('I send a request to release the phone number {string}', async (phoneNumber: string) => { diff --git a/packages/numbers/tests/rest/v1/webhooks/webhooks.steps.ts b/packages/numbers/tests/rest/v1/webhooks/webhooks-events.steps.ts similarity index 67% rename from packages/numbers/tests/rest/v1/webhooks/webhooks.steps.ts rename to packages/numbers/tests/rest/v1/webhooks/webhooks-events.steps.ts index e35fdc7a..ce481047 100644 --- a/packages/numbers/tests/rest/v1/webhooks/webhooks.steps.ts +++ b/packages/numbers/tests/rest/v1/webhooks/webhooks-events.steps.ts @@ -10,40 +10,37 @@ let event: Numbers.CallbackPayload; let formattedHeaders: IncomingHttpHeaders; const processEvent = async (response: Response) => { - formattedHeaders = {}; - response.headers.forEach((value, name) => { - formattedHeaders[name.toLowerCase()] = value; - }); + formattedHeaders = Object.fromEntries(response.headers.entries()); rawEvent = await response.text(); - rawEvent = rawEvent.replace(/\s+/g, ''); - event = numbersCallbackWebhook.parseEvent(JSON.parse(rawEvent)); + event = numbersCallbackWebhook.parseEvent(rawEvent); }; Given('the Numbers Webhooks handler is available', function () { numbersCallbackWebhook = new NumbersCallbackWebhooks(SINCH_NUMBERS_CALLBACK_SECRET); }); -When('I send a request to trigger the success to provision to voice platform event', async () => { +When('I send a request to trigger the "success" for "PROVISIONING_TO_VOICE_PLATFORM" event', async () => { const response = await fetch('http://localhost:3013/webhooks/numbers/provisioning_to_voice_platform/succeeded'); await processEvent(response); }); -Then('the event header contains a valid signature', () => { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +Then('the header of the "{}" for "{}" event contains a valid signature', (_state, _event) => { assert.ok(numbersCallbackWebhook.validateAuthenticationHeader(formattedHeaders, rawEvent)); }); -Then('the event describes a success to provision to voice platform event', () => { +Then('the event describes a "success" for "PROVISIONING_TO_VOICE_PLATFORM" event', () => { assert.equal(event.eventType, 'PROVISIONING_TO_VOICE_PLATFORM'); assert.equal(event.status, 'SUCCEEDED'); assert.equal(event.failureCode, null); }); -When('I send a request to trigger the failure to provision to voice platform event', async () => { +When('I send a request to trigger the "failure" for "PROVISIONING_TO_VOICE_PLATFORM" event', async () => { const response = await fetch('http://localhost:3013/webhooks/numbers/provisioning_to_voice_platform/failed'); await processEvent(response); }); -Then('the event describes a failure to provision to voice platform event', () => { +Then('the event describes a "failure" for "PROVISIONING_TO_VOICE_PLATFORM" event', () => { assert.equal(event.eventType, 'PROVISIONING_TO_VOICE_PLATFORM'); assert.equal(event.status, 'FAILED'); assert.equal(event.failureCode, 'PROVISIONING_TO_VOICE_PLATFORM_FAILED'); diff --git a/packages/sdk-client/CHANGELOG.md b/packages/sdk-client/CHANGELOG.md index 1d9f78ba..ca884c82 100644 --- a/packages/sdk-client/CHANGELOG.md +++ b/packages/sdk-client/CHANGELOG.md @@ -1,3 +1,10 @@ +## Version 1.3.0 +- [Feature] Prepare mailgun support by adding mailgun authentication method +- [Bugfix] Fix fetch response status handling for document response (issue [#183](https://github.com/sinch/sinch-sdk-node/issues/183)) + +## Version 1.2.1 +- [Bugfix] Fix refresh token issue: during the refreshToken process, a missing binding was causing the API request to not be sent. The token was refreshed properly thought, enabling the later API calls to work. + ## Version 1.2.0 - [Feature] Support a new mode of pagination to support the Conversation API. - [Feature] Remove the `TimezoneResponse` plugin and autocorrect the timezones when reviving the dates in the API responses. diff --git a/packages/sdk-client/package.json b/packages/sdk-client/package.json index 05fa28f5..f594dce3 100644 --- a/packages/sdk-client/package.json +++ b/packages/sdk-client/package.json @@ -1,6 +1,6 @@ { "name": "@sinch/sdk-client", - "version": "1.2.0", + "version": "1.3.0", "description": "Core services related to interacting with Sinch API", "homepage": "", "repository": { @@ -30,7 +30,7 @@ }, "dependencies": { "node-fetch": "2.7.0", - "form-data": "^4.0.0" + "form-data": "^4.0.4" }, "devDependencies": { "@types/node-fetch": "^2.6.6", diff --git a/packages/sdk-client/src/api/api-client-options-helper.ts b/packages/sdk-client/src/api/api-client-options-helper.ts index 81686770..7dc96912 100644 --- a/packages/sdk-client/src/api/api-client-options-helper.ts +++ b/packages/sdk-client/src/api/api-client-options-helper.ts @@ -2,6 +2,7 @@ import { SinchClientParameters } from '../domain'; import { ApiClientOptions } from './api-client-options'; import { ApiTokenRequest, + BasicAuthenticationRequest, Oauth2TokenRequest, SigningRequest, XTimestampRequest, @@ -20,6 +21,19 @@ export const buildOAuth2ApiClientOptions = (params: SinchClientParameters, apiNa return apiClientOptions; }; +export const buildMailgunApiClientOptions = (params: SinchClientParameters): ApiClientOptions => { + if (!params.mailgunApiKey) { + throw new Error('Invalid configuration for the Mailgun API: the "mailgunApiKey" must be provided'); + } + const apiClientOptions: ApiClientOptions = { + requestPlugins: [ + new BasicAuthenticationRequest('api', params.mailgunApiKey), + ], + }; + addPlugins(apiClientOptions, params); + return apiClientOptions; +}; + export const buildApplicationSignedApiClientOptions = ( params: SinchClientParameters, apiName: string, ): ApiClientOptions => { diff --git a/packages/sdk-client/src/api/api-client.ts b/packages/sdk-client/src/api/api-client.ts index 52ba9884..bce4793e 100644 --- a/packages/sdk-client/src/api/api-client.ts +++ b/packages/sdk-client/src/api/api-client.ts @@ -187,7 +187,7 @@ export class ApiClient { /** * Process HTTP call * @abstract - * @template T + * @template T - The type of the response object expected from the API call. * @param {ApiCallParameters} _httpCallParameters - Parameters for the HTTP call. * @return {Promise} A promise that resolves to the result of the HTTP call. */ @@ -199,9 +199,9 @@ export class ApiClient { /** * Process HTTP call with Pagination * @abstract - * @template T + * @template T - The type of the response object expected in a page from the API call. * @param {ApiCallParametersWithPagination} _httpCallParameters - Parameters for the HTTP call. - * @return {Promise} A promise that resolves to the result of the HTTP call. + * @return {Promise>} A promise that resolves to the result of the HTTP call. */ // eslint-disable-next-line @typescript-eslint/no-unused-vars processCallWithPagination(_httpCallParameters: ApiCallParametersWithPagination): Promise> { @@ -229,13 +229,15 @@ export class ApiClient { * @param {Object.} object - The JSON object to filter. * @return {Object.} An object without undefined values. */ -function filterUndefinedValues(object: { [key: string]: string | undefined }): { +const filterUndefinedValues = ( + object: { [key: string]: string | undefined }, +): { [key: string]: string; -} { +} => { return Object.keys(object) .filter((objectKey) => typeof object[objectKey] !== 'undefined') .reduce<{ [key: string]: string }>((acc, objectKey) => { acc[objectKey] = object[objectKey] as string; return acc; }, {}); -} +}; diff --git a/packages/sdk-client/src/api/api-errors.ts b/packages/sdk-client/src/api/api-errors.ts index 1b5b7e09..28fd6e20 100644 --- a/packages/sdk-client/src/api/api-errors.ts +++ b/packages/sdk-client/src/api/api-errors.ts @@ -8,8 +8,6 @@ export interface ErrorContext { operationId?: string; /** Base URL */ url?: string; - /** Origin domain initiating the call */ - origin?: string | null; } /** @@ -18,11 +16,10 @@ export interface ErrorContext { export class GenericError extends Error { constructor(message: string, errorContext: ErrorContext) { const baseUrl = GenericError.formatUrl(errorContext.url); - const origin = GenericError.formatUrl(errorContext.origin); super( `[SDK] [apiName: ${errorContext.apiName || 'unknown'}] [operationId: ${errorContext.operationId || 'unknown'}] - [baseUrl: ${baseUrl}] [origin: ${origin}] [errorType: SDK] ${message}`, + [baseUrl: ${baseUrl}] [errorType: SDK] ${message}`, ); } @@ -62,15 +59,10 @@ export class RequestFailedError extends GenericError { /** * Empty response error class */ -export class EmptyResponseError extends GenericError { - /** - * Data decoded from the response body - */ - public data?: string; +export class EmptyResponseError extends GenericError { - constructor(message: string, errorContext: ErrorContext, data?: T) { + constructor(message: string, errorContext: ErrorContext) { super(`[Empty response] ${message}`, errorContext); - this.data = JSON.stringify(data, null, 2); } } diff --git a/packages/sdk-client/src/api/index.ts b/packages/sdk-client/src/api/index.ts index ca6b44f9..ecab2c9f 100644 --- a/packages/sdk-client/src/api/index.ts +++ b/packages/sdk-client/src/api/index.ts @@ -3,6 +3,7 @@ export { } from './api-client-options'; export { buildOAuth2ApiClientOptions, + buildMailgunApiClientOptions, buildApplicationSignedApiClientOptions, buildFlexibleOAuth2OrApiTokenApiClientOptions, } from './api-client-options-helper'; diff --git a/packages/sdk-client/src/client/api-client-helpers.ts b/packages/sdk-client/src/client/api-client-helpers.ts index 4807191a..068b9abc 100644 --- a/packages/sdk-client/src/client/api-client-helpers.ts +++ b/packages/sdk-client/src/client/api-client-helpers.ts @@ -10,9 +10,7 @@ export const manageExpiredToken = async ( apiCallParameters: ApiCallParameters | ApiCallParametersWithPagination, errorContext: ErrorContext, requestPlugins: RequestPlugin[] | undefined, - requestOptions: RequestOptions, - callback: (props: any) => Promise, -) => { +): Promise => { // Use the circuitBreaker variable to try to regenerate a valid JWT only 3 times if (!apiCallParameters.circuitBreaker) { apiCallParameters.circuitBreaker = 1; @@ -26,23 +24,16 @@ export const manageExpiredToken = async ( ); } } - const optionsWithNewJwt = await invalidateAndRegenerateJwt(requestPlugins, requestOptions, errorContext); - const newApiCallParameters = { - ...apiCallParameters, - requestOptions: optionsWithNewJwt, - }; - return callback(newApiCallParameters); + return await invalidateAndRegenerateJwt(requestPlugins, apiCallParameters.requestOptions, errorContext); }; export function buildErrorContext( apiCallParameters: ApiCallParameters, - origin: string | null, ): ErrorContext { return { apiName: apiCallParameters.apiName, operationId: apiCallParameters.operationId, url: apiCallParameters.url, - origin, }; } diff --git a/packages/sdk-client/src/client/api-fetch-client.ts b/packages/sdk-client/src/client/api-fetch-client.ts index d6f38bb1..2467cdc3 100644 --- a/packages/sdk-client/src/client/api-fetch-client.ts +++ b/packages/sdk-client/src/client/api-fetch-client.ts @@ -26,6 +26,25 @@ import { hasMore, } from './api-client-pagination-helper'; +/** + * Context for response processing + */ +interface ResponseContext { + response: Response | undefined; + body: string | undefined; + apiCallParameters: ApiCallParameters; + errorContext: ErrorContext; +} + +/** + * Context for plugin processing + */ +interface PluginContext { + result: Record | undefined; + exception: Error | undefined; + responseContext: ResponseContext; +} + /** Client to process the call to the API using Fetch API */ export class ApiFetchClient extends ApiClient { @@ -48,154 +67,171 @@ export class ApiFetchClient extends ApiClient { } /** @inheritdoc */ - public async processCall( - props: ApiCallParameters, - ): Promise { - // Read the "Origin" header if existing, for logging purposes - const origin = (props.requestOptions.headers as Headers).get('Origin'); - const errorContext: ErrorContext = buildErrorContext(props, origin); + public async processCall(apiCallParameters: ApiCallParameters): Promise { + const responseContext = await this.executeRequest(apiCallParameters); + return this.processResponse(responseContext); + } - // Declare variables - let response: Response | undefined; - let body: string | undefined; - let exception: Error | undefined; + /** @inheritdoc */ + public async processCallWithPagination( + apiCallParameters: ApiCallParametersWithPagination, + ): Promise> { + const responseContext = await this.executeRequest(apiCallParameters); + const transformedResponse = await this.processResponse>(responseContext); + return this.buildPageResult(transformedResponse, apiCallParameters); + } + + /** @inheritdoc */ + public async processFileCall(apiCallParameters: ApiCallParameters): Promise { + const responseContext = await this.executeRequest(apiCallParameters, true); + return this.processFileResponse(responseContext); + } + + private async executeRequest( + apiCallParameters: ApiCallParameters, + isFileDownload = false, + ): Promise { + const errorContext = buildErrorContext(apiCallParameters); - // Execute call try { - // Send the request with the refresh token mechanism - response = await this.sinchFetch(props, errorContext); - body = await response.text(); + const response = await this.sinchFetch(apiCallParameters, errorContext); + const body = isFileDownload ? undefined : await response.text(); + + return { + response, + body, + apiCallParameters, + errorContext, + }; } catch (error: any) { - this.buildFetchError(error, errorContext); + throw this.buildFetchError(error, errorContext); + } + } + + private async processResponse( + context: ResponseContext, + ): Promise { + const pluginContext = await this.parseAndValidateResponse(context); + const transformedResponse = await this.applyResponsePlugins(pluginContext); + + if (pluginContext.exception) { + throw pluginContext.exception; } - let result; + return reviveDates(transformedResponse) as T; + } + + private async parseAndValidateResponse( + context: ResponseContext, + ): Promise { + let result: Record | undefined; + let exception: Error | undefined; + try { - // Try to parse the body if there is one - result = body ? JSON.parse(body) : undefined; + result = context.body ? JSON.parse(context.body) : undefined; } catch (error: any) { exception = new ResponseJSONParseError( - error.message || 'Fail to parse response body', - (response && response.status) || 0, - errorContext, - body, + error.message || 'Failed to parse response body', + (context.response?.status || 0), + context.errorContext, + context.body, ); } - // Load and invoke the response plugins to transform the response - const responsePlugins = this.loadResponsePlugins( - this.apiClientOptions.responsePlugins, - props, - response, - exception, - origin); - let transformedResponse = result; - for (const pluginRunner of responsePlugins) { - transformedResponse = await pluginRunner.transform(transformedResponse); + return { result, exception, responseContext: context }; + } + + private async processFileResponse(context: ResponseContext): Promise { + if (!context.response || !context.response.ok) { + throw this.buildFetchError( + new Error('No response received'), + context.errorContext, + ); } - // If there has been an error at some point in the process, throw it - if (exception) { - throw exception; + const buffer = await context.response.buffer(); + const fileName = this.extractFileName(context.response.headers); + + if (!buffer || !fileName) { + throw new Error('An error occurred while downloading the file'); } - // If everything went fine, we apply a last transformation to revive the dates, and we return the transformed API response - return reviveDates(transformedResponse); + return { fileName, buffer }; } - private async sinchFetch( - apiCallParameters: ApiCallParameters, - errorContext: ErrorContext, - ): Promise { - const response = await fetch(apiCallParameters.url, apiCallParameters.requestOptions); - if ( - response.status === 401 - && response.headers.get('www-authenticate')?.includes('expired') - ) { - return manageExpiredToken( + /** + * Handle fetch request with token refresh mechanism + * @param {ApiCallParameters} apiCallParameters + * @param {ErrorContext} errorContext + */ + private async sinchFetch(apiCallParameters: ApiCallParameters, errorContext: ErrorContext) { + let response = await fetch(apiCallParameters.url, apiCallParameters.requestOptions); + + if (this.isTokenExpired(response)) { + const requestOptions = await manageExpiredToken( apiCallParameters, errorContext, - this.apiClientOptions.requestPlugins, - apiCallParameters.requestOptions, - this.processCall); + this.apiClientOptions.requestPlugins); + response = await fetch(apiCallParameters.url, requestOptions); } + return response; } - public processCallWithPagination( - props: ApiCallParametersWithPagination, - ): Promise> { - // Read the "Origin" header if existing, for logging purposes - const origin = (props.requestOptions.headers as Headers).get('Origin'); - const errorContext: ErrorContext = buildErrorContext(props, origin); - - // Execute call - return this.sinchFetchWithPagination(props, errorContext, origin); - }; - - private async sinchFetchWithPagination( - apiCallParameters: ApiCallParametersWithPagination, - errorContext: ErrorContext, - origin: string | null, - ): Promise> { - let exception: Error | undefined; - const response = await fetch(apiCallParameters.url, apiCallParameters.requestOptions); - if ( - response.status === 401 - && response.headers.get('www-authenticate')?.includes('expired') - ) { - return manageExpiredToken( - apiCallParameters, - errorContext, - this.apiClientOptions.requestPlugins, - apiCallParameters.requestOptions, - this.processCallWithPagination); - } - // When handling pagination, we won't return the raw response but a PageResult - const body = await response.text(); - let result; - try { - // Try to parse the body if there is one - result = body ? JSON.parse(body) : undefined; - } catch (error: any) { - exception = new ResponseJSONParseError( - error.message || 'Fail to parse response body', - (response && response.status) || 0, - errorContext, - body, - ); - } + private isTokenExpired(response: Response): boolean { + return response.status === 401 + && response.headers.get('www-authenticate')?.includes('expired') === true; + } - // Load and invoke the response plugins to transform the response - const responsePlugins = this.loadResponsePlugins( + private async applyResponsePlugins(context: PluginContext): Promise> { + const plugins = this.loadResponsePlugins( this.apiClientOptions.responsePlugins, - apiCallParameters, - response, - exception, - origin); - let transformedResponse = result; - for (const pluginRunner of responsePlugins) { - transformedResponse = await pluginRunner.transform(transformedResponse); - } + context.responseContext, + ); - // Revive Date objects - transformedResponse = reviveDates(transformedResponse); + return plugins.reduce( + async (promise, plugin) => { + const current = await promise; + return plugin.transform(current); + }, + Promise.resolve(context.result || {}), + ); + } - // If there has been an error at some point in the process, throw it - if (exception) { - throw exception; - } + private loadResponsePlugins( + plugins: ResponsePlugin[] | undefined, + context: ResponseContext, + ) { + return (plugins || []).map(plugin => + plugin.load({ + response: context.response, + exception: undefined, + apiName: context.apiCallParameters.apiName, + operationId: context.apiCallParameters.operationId, + url: context.apiCallParameters.url, + requestOptions: context.apiCallParameters.requestOptions, + }), + ); + } - // Read the elements' array with its key + private buildPageResult( + transformedResponse: any, + apiCallParameters: ApiCallParametersWithPagination, + ): PageResult { const responseData: Array = transformedResponse[apiCallParameters.dataKey]; - // Build the PageResult object - const nextPage = JSON.stringify(calculateNextPage(transformedResponse, buildPaginationContext(apiCallParameters))); + const paginationContext = buildPaginationContext(apiCallParameters); + const nextPage = JSON.stringify(calculateNextPage(transformedResponse, paginationContext)); + return { data: responseData || [], - hasNextPage: hasMore(transformedResponse, buildPaginationContext(apiCallParameters)), + hasNextPage: hasMore(transformedResponse, paginationContext), nextPageValue: nextPage, nextPage: () => createNextPageMethod( - this, buildPaginationContext(apiCallParameters), apiCallParameters.requestOptions, nextPage), + this, + paginationContext, + apiCallParameters.requestOptions, + nextPage, + ), }; } @@ -206,66 +242,10 @@ export class ApiFetchClient extends ApiClient { return new EmptyResponseError( error.message || 'Fail to fetch', errorContext, - undefined, ); } } - private loadResponsePlugins( - responsePlugins: ResponsePlugin[] | undefined, - apiCallParameters: ApiCallParameters, - response: Response | undefined, - exception: Error | undefined, - origin: string | null, - ) { - return responsePlugins - ? responsePlugins.map((plugin) => - plugin.load({ - response, - exception, - apiName: apiCallParameters.apiName, - operationId: apiCallParameters.operationId, - url: apiCallParameters.url, - requestOptions: apiCallParameters.requestOptions, - origin, - }), - ) - : []; - } - - /** @inheritdoc */ - public async processFileCall( - props: ApiCallParameters, - ): Promise { - // Read the "Origin" header if existing, for logging purposes - const origin = (props.requestOptions.headers as Headers).get('Origin'); - const errorContext: ErrorContext = buildErrorContext(props, origin); - - // Declare variables - let response: Response | undefined; - let body: Buffer | undefined; - let fileName: string | undefined; - - // Execute call - try { - // Send the request with the refresh token mechanism - response = await this.sinchFetch(props, errorContext); - body = await response.buffer(); - fileName = this.extractFileName(response.headers); - } catch (error: any) { - this.buildFetchError(error, errorContext); - } - - if (!body || !fileName) { - throw new Error('An error occurred while downloading the file'); - } - - return { - fileName, - buffer: body, - }; - } - private extractFileName(headers: Headers) { const contentDisposition = headers.get('content-disposition'); let fileName = 'default-name.pdf'; diff --git a/packages/sdk-client/src/domain/domain-helper.ts b/packages/sdk-client/src/domain/domain-helper.ts index 3a63f187..1f1f06bb 100644 --- a/packages/sdk-client/src/domain/domain-helper.ts +++ b/packages/sdk-client/src/domain/domain-helper.ts @@ -5,8 +5,9 @@ export const CONVERSATION_HOSTNAME = `https://${REGION_PATTERN}conversation.api. export const CONVERSATION_TEMPLATES_HOSTNAME = `https://${REGION_PATTERN}template.api.sinch.com`; export const ELASTIC_SIP_TRUNKING_HOSTNAME = 'https://elastic-trunking.api.sinch.com'; export const FAX_HOSTNAME = `https://${REGION_PATTERN}fax.api.sinch.com`; +export const MAILGUN_HOSTNAME = `https://api.${REGION_PATTERN}mailgun.net`; export const NUMBERS_HOSTNAME = 'https://numbers.api.sinch.com'; -export const SMS_HOSTNAME = `https://${REGION_PATTERN}sms.api.sinch.com`;; +export const SMS_HOSTNAME = `https://${REGION_PATTERN}sms.api.sinch.com`; export const VERIFICATION_HOSTNAME = 'https://verification.api.sinch.com'; export const VOICE_HOSTNAME = `https://calling${REGION_PATTERN}.api.sinch.com`; export const VOICE_APPLICATION_MANAGEMENT_HOSTNAME = 'https://callingapi.sinch.com'; diff --git a/packages/sdk-client/src/domain/domain-interface.ts b/packages/sdk-client/src/domain/domain-interface.ts index 21f406b3..5be3e247 100644 --- a/packages/sdk-client/src/domain/domain-interface.ts +++ b/packages/sdk-client/src/domain/domain-interface.ts @@ -8,12 +8,13 @@ import { ResponsePlugin } from '../plugins/core/response-plugin'; * - API Token: SMS on all regions * - Application Signed: Verification and Voice */ -export interface SinchClientParameters extends - Partial, - Partial, - Partial, - ApiHostname, - ApiPlugins {} +export type SinchClientParameters = Partial< + UnifiedCredentials + & MailgunCredentials + & ServicePlanIdCredentials + & ApplicationCredentials + & ApiHostname + & ApiPlugins>; export interface UnifiedCredentials { /** The project ID associated with the API Client. You can find this on your [Dashboard](https://dashboard.sinch.com/account/access-keys). */ @@ -32,6 +33,13 @@ export interface UnifiedCredentials { conversationRegion?: ConversationRegion; } +export interface MailgunCredentials { + /** Your API Key created from the [Mailgun Dashboard](https://app.mailgun.com/settings/api_security) */ + mailgunApiKey: string; + /** The region for the Mailgun API. Default region is empty and targets the US endpoint */ + mailgunRegion?: string; +} + export interface ServicePlanIdCredentials { /** Your service plan ID. You can find this on your [Dashboard](https://dashboard.sinch.com/sms/api/rest). */ servicePlanId: string; @@ -63,6 +71,8 @@ export interface ApiHostname { elasticSipTrunkingHostname?: string; /** Override the hostname for the Fax API - Note the regions become ineffective */ faxHostname?: string; + /** Override the hostname for the Mailgun API - Note the regions become ineffective */ + mailgunHostname?: string; /** Override the hostname for the Numbers API */ numbersHostname?: string; /** Override the hostname for the SMS API - Note the regions become ineffective */ @@ -158,3 +168,16 @@ export type ConversationRegion = SupportedConversationRegion | string; export const ConversationRegion = { ...SupportedConversationRegion, }; + +// //////////////////// +// Mailgun regions +export enum SupportedMailgunRegion { + DEFAULT = '', + EUROPE = 'eu', +} + +export type MailgunRegion = SupportedMailgunRegion | string; + +export const MailgunRegion = { + ...SupportedMailgunRegion, +}; diff --git a/packages/sdk-client/src/plugins/core/response-plugin.ts b/packages/sdk-client/src/plugins/core/response-plugin.ts index 32818d8c..14141507 100644 --- a/packages/sdk-client/src/plugins/core/response-plugin.ts +++ b/packages/sdk-client/src/plugins/core/response-plugin.ts @@ -22,9 +22,6 @@ export interface ResponsePluginContext { /** Base url */ url: string; - /** Origin domain initiating the call */ - origin?: string | null; - /** Request parameters */ requestOptions: RequestOptions; } diff --git a/packages/sdk-client/src/plugins/exception/exception.response.ts b/packages/sdk-client/src/plugins/exception/exception.response.ts index 8f3db79a..17c0b90e 100644 --- a/packages/sdk-client/src/plugins/exception/exception.response.ts +++ b/packages/sdk-client/src/plugins/exception/exception.response.ts @@ -29,7 +29,6 @@ export class ExceptionResponse< apiName: context.apiName, operationId: context.operationId, url: context.url, - origin: context.origin, }; let error: Error | undefined; @@ -37,7 +36,6 @@ export class ExceptionResponse< error = new EmptyResponseError( 'Fail to Fetch', errorContext, - undefined, ); } else if (!context.response.ok) { error = new RequestFailedError( @@ -47,16 +45,13 @@ export class ExceptionResponse< res, ); } else if (!res) { - res = {} as V; if (context.response.status !== 204 && context.response.status !== 200 && context.response.status !== 202 ) { - res = {} as V; - error = new EmptyResponseError( + error = new EmptyResponseError( context.response.statusText, errorContext, - res, ); } } diff --git a/packages/sdk-client/tests/client/api-client-helpers.test.ts b/packages/sdk-client/tests/client/api-client-helpers.test.ts index 4aac59a0..b52ca356 100644 --- a/packages/sdk-client/tests/client/api-client-helpers.test.ts +++ b/packages/sdk-client/tests/client/api-client-helpers.test.ts @@ -16,6 +16,8 @@ describe('API client helpers', () => { date3: '2024-02-04T20:22:00.123Z', }, ], + utcTimestampNumber: 1717677762, + utcTimestampString: '1717677762', unsupportedDate: '-0000', otherProp: 'otherValueWithMoreThan10Characters', otherNumber: 0, @@ -38,6 +40,8 @@ describe('API client helpers', () => { date3: new Date('2024-02-04T20:22:00.123Z'), }, ], + utcTimestampNumber: 1717677762, + utcTimestampString: '1717677762', unsupportedDate: '-0000', otherProp: 'otherValueWithMoreThan10Characters', otherNumber: 0, diff --git a/packages/sdk-client/tests/client/api-fetch-client.test.ts b/packages/sdk-client/tests/client/api-fetch-client.test.ts new file mode 100644 index 00000000..fa6be296 --- /dev/null +++ b/packages/sdk-client/tests/client/api-fetch-client.test.ts @@ -0,0 +1,226 @@ +jest.mock('node-fetch', () => { + const actual = jest.requireActual('node-fetch'); + return { + __esModule: true, + default: jest.fn(), + Headers: actual.Headers, + Response: actual.Response, + }; +}); + +import { RequestPluginEnum } from '../../src/plugins/core/request-plugin'; +import { ApiFetchClient, PaginationEnum } from '../../src'; +import fetch, { Headers, Response } from 'node-fetch'; + +const mockedFetch = fetch as unknown as jest.Mock; + +describe('manageExpiredToken', () => { + + let token: string | undefined; + let apiClient: ApiFetchClient; + let oauth2Plugin: any; + + beforeEach(() => { + jest.clearAllMocks(); + + oauth2Plugin = { + getName: () => RequestPluginEnum.OAUTH2_TOKEN_REQUEST, + invalidateToken: jest.fn(() => { + token = undefined; + }), + load: () => ({ + transform: async (options: any) => { + if (!token) { + token = 'new-token'; + } + const headers = new Headers(options.headers); + headers.set('Authorization', `Bearer ${token}`); + return { ...options, headers }; + }, + }), + }; + + apiClient = new ApiFetchClient({ + requestPlugins: [oauth2Plugin], + }); + + token = 'expired-token'; + }); + + it('should regenerate JWT and retry the call after token expiration', async () => { + + // Fake fetch simulation (first call 401, second call 200) + mockedFetch.mockResolvedValueOnce( + new Response('', { + status: 401, + headers: { 'www-authenticate': 'token expired' }, + }), + ); + // Second call — success + mockedFetch.mockResolvedValue( + new Response(JSON.stringify({ data: 'success' }), { + status: 200, + headers: {}, + }), + ); + + const headers = new Headers({ Authorization: `Bearer ${token}` }); + const requestOptions = { + method: 'GET', + headers, + hostname: 'https://api.example.com', + path: '/endpoint', + }; + + const result = await apiClient.processCall<{ data: string }>({ + url: 'https://api.example.com/endpoint', + requestOptions, + apiName: 'TestAPI', + operationId: 'testOperation', + }); + + expect(result).toEqual({ data: 'success' }); + expect(oauth2Plugin.invalidateToken).toHaveBeenCalledTimes(1); + expect(mockedFetch).toHaveBeenCalledTimes(2); + expect(mockedFetch.mock.calls[0][1].headers.get('Authorization')).toBe('Bearer expired-token'); + expect(mockedFetch.mock.calls[1][1].headers.get('Authorization')).toBe('Bearer new-token'); + }); + + it('should regenerate JWT and retry the call after token expiration for paginated endpoint', async () => { + + // Fake fetch simulation (first call 401, second call 200) + mockedFetch.mockResolvedValueOnce( + new Response('', { + status: 401, + headers: { 'www-authenticate': 'token expired' }, + }), + ); + // Second call — success + mockedFetch.mockResolvedValue( + new Response(JSON.stringify({ data: ['success'], count: 1, page: 1, page_size: 2 }), { + status: 200, + headers: {}, + }), + ); + + const headers = new Headers({ Authorization: `Bearer ${token}` }); + const requestOptions = { + method: 'GET', + headers, + hostname: 'https://api.example.com', + path: '/endpoint', + }; + + const result = await apiClient.processCallWithPagination<{ data: string }>({ + url: 'https://api.example.com/endpoint', + requestOptions, + apiName: 'TestAPI', + operationId: 'testOperation', + pagination: PaginationEnum.PAGE, + dataKey: 'data', + }); + + const expectedResponse = { + data: ['success'], + hasNextPage: false, + nextPageValue: '"2"', + }; + + expect(result).toMatchObject(expectedResponse); + expect(typeof result.nextPage).toBe('function'); + expect(oauth2Plugin.invalidateToken).toHaveBeenCalledTimes(1); + expect(mockedFetch).toHaveBeenCalledTimes(2); + expect(mockedFetch.mock.calls[0][1].headers.get('Authorization')).toBe('Bearer expired-token'); + expect(mockedFetch.mock.calls[1][1].headers.get('Authorization')).toBe('Bearer new-token'); + }); + + it('should regenerate JWT and retry the call after token expiration for file call', async () => { + + // Fake fetch simulation (first call 401, second call 200) + mockedFetch.mockResolvedValueOnce( + new Response('', { + status: 401, + headers: { 'www-authenticate': 'token expired' }, + }), + ); + // Second call — success + mockedFetch.mockResolvedValue( + new Response('responseBuffer', { + status: 200, + headers: {}, + }), + ); + + const headers = new Headers({ Authorization: `Bearer ${token}` }); + const requestOptions = { + method: 'GET', + headers, + hostname: 'https://api.example.com', + path: '/endpoint', + }; + + const result = await apiClient.processFileCall({ + url: 'https://api.example.com/endpoint', + requestOptions, + apiName: 'TestAPI', + operationId: 'testOperation', + }); + + const expectedResponse = { + buffer: Buffer.from('responseBuffer', 'utf-8'), + fileName: 'default-name.pdf', + }; + + expect(result).toMatchObject(expectedResponse); + expect(oauth2Plugin.invalidateToken).toHaveBeenCalledTimes(1); + expect(mockedFetch).toHaveBeenCalledTimes(2); + expect(mockedFetch.mock.calls[0][1].headers.get('Authorization')).toBe('Bearer expired-token'); + expect(mockedFetch.mock.calls[1][1].headers.get('Authorization')).toBe('Bearer new-token'); + }); + +}); + +describe('processFileResponse', () => { + + it('should return file buffer and file name when response is ok', async () => { + // Given + const apiClient = new ApiFetchClient({ requestPlugins: [] }); + const bufferData = Buffer.from('file-content', 'utf-8'); + const mockResponse = new Response('', { status: 200 }); + mockResponse.buffer = jest.fn().mockResolvedValue(bufferData); + mockResponse.headers.set('content-disposition', 'attachment; filename="test.pdf"'); + + const context = { + response: mockResponse, + body: undefined, + apiCallParameters: {} as any, + errorContext: {} as any, + }; + + // When + const result = await apiClient['processFileResponse'](context); + + // Then + expect(result).toEqual({ + fileName: 'test.pdf', + buffer: bufferData, + }); + }); + + it('should throw an error if response is not ok', async () => { + // Given + const apiClient = new ApiFetchClient({ requestPlugins: [] }); + const mockResponse = new Response('', { status: 404 }); + const context = { + response: mockResponse, + body: undefined, + apiCallParameters: {} as any, + errorContext: {} as any, + }; + + // When & Then + await expect(apiClient['processFileResponse'](context)) + .rejects + .toThrow('No response received'); + }); +}); diff --git a/packages/sdk-client/tests/domain/domain-helper.test.ts b/packages/sdk-client/tests/domain/domain-helper.test.ts index b866c47f..24b43cfa 100644 --- a/packages/sdk-client/tests/domain/domain-helper.test.ts +++ b/packages/sdk-client/tests/domain/domain-helper.test.ts @@ -10,6 +10,7 @@ import { VERIFICATION_HOSTNAME, VOICE_APPLICATION_MANAGEMENT_HOSTNAME, VOICE_HOSTNAME, + MAILGUN_HOSTNAME, } from '../../src'; describe('Domain Helper', () => { @@ -29,6 +30,9 @@ describe('Domain Helper', () => { const formattedVoiceHostname = formatRegionalizedHostname(VOICE_HOSTNAME, '-bzh'); expect(formattedVoiceHostname).toBe('https://calling-bzh.api.sinch.com'); + + const formattedMailgunHostname = formatRegionalizedHostname(MAILGUN_HOSTNAME, 'bzh.'); + expect(formattedMailgunHostname).toBe('https://api.bzh.mailgun.net'); }); it('should leave the hostname untouched', () => { diff --git a/packages/sdk-core/CHANGELOG.md b/packages/sdk-core/CHANGELOG.md index 1abbd1cd..cf687911 100644 --- a/packages/sdk-core/CHANGELOG.md +++ b/packages/sdk-core/CHANGELOG.md @@ -1,3 +1,21 @@ +## Version 1.3.0 +- Update dependency `@sinch/numbers` to version `1.3.0` +- Update dependency `@sinch/sms` to version `1.3.0` +- Update dependency `@sinch/verification` to version `1.3.0` +- Update dependency `@sinch/voice` to version `1.3.0` +- Update dependency `@sinch/conversation` to version `1.3.0` +- Update dependency `@sinch/fax` to version `1.3.0` +- Update dependency `@sinch/elastic-sip-trunking` to version `1.3.0` + +## Version 1.2.1 - [Bugfix] Fix refresh token issue +- Update dependency `@sinch/numbers` to version `1.2.1` +- Update dependency `@sinch/sms` to version `1.2.1` +- Update dependency `@sinch/verification` to version `1.2.1` +- Update dependency `@sinch/voice` to version `1.2.1` +- Update dependency `@sinch/conversation` to version `1.2.1` +- Update dependency `@sinch/fax` to version `1.2.1` +- Update dependency `@sinch/elastic-sip-trunking` to version `1.2.1` + ## Version 1.2.0 - Update dependency `@sinch/numbers` to version `1.2.0` - Update dependency `@sinch/sms` to version `1.2.0` diff --git a/packages/sdk-core/package.json b/packages/sdk-core/package.json index 8d9d5c40..0f2cdb82 100644 --- a/packages/sdk-core/package.json +++ b/packages/sdk-core/package.json @@ -1,6 +1,6 @@ { "name": "@sinch/sdk-core", - "version": "1.2.0", + "version": "1.3.0", "description": "Node.js client for the Sinch API platform", "homepage": "", "repository": { @@ -29,13 +29,13 @@ "compile": "tsc --build --verbose" }, "dependencies": { - "@sinch/conversation": "^1.2.0", - "@sinch/elastic-sip-trunking": "^1.2.0", - "@sinch/fax": "^1.2.0", - "@sinch/numbers": "^1.2.0", - "@sinch/sms": "^1.2.0", - "@sinch/verification": "^1.2.0", - "@sinch/voice": "^1.2.0" + "@sinch/conversation": "^1.3.0", + "@sinch/elastic-sip-trunking": "^1.3.0", + "@sinch/fax": "^1.3.0", + "@sinch/numbers": "^1.3.0", + "@sinch/sms": "^1.3.0", + "@sinch/verification": "^1.3.0", + "@sinch/voice": "^1.3.0" }, "devDependencies": {}, "publishConfig": { diff --git a/packages/sms/CHANGELOG.md b/packages/sms/CHANGELOG.md index 2ee38a3b..349e27f7 100644 --- a/packages/sms/CHANGELOG.md +++ b/packages/sms/CHANGELOG.md @@ -1,3 +1,20 @@ +## Version 1.3.0 +- [Tech] Update dependency `@sinch/sdk-client` to `1.3.0`. +- [Feature] Fix groups models. Request bodies become mandatory. +- [Feature] Support `mo_media` message type for inbounds and webhooks +- [Feature] Add `subject` property to `MediaBody` model +- [Feature] Add `client_reference`, `feedback_enabled`, `from_ton` and `from_npi` to `ApiUpdateBinaryMtMessage` model +- [Feature] Support string input when parsing webhook events +- [Feature] Support webhook signature validation +- [Feature] Fix channel-specific template model with new interface `ChannelSpecificTemplateReference` where the version is optional +- **Deprecations** + - Type `DeliveryReportStatusEnum` is deprecated, use `DeliveryReportEnum` instead + - *Warning about future deprecation*: `region` will become mandatory as a configuration parameter + +## Version 1.2.1 +- [Tech] Update dependency `@sinch/sdk-client` to `1.2.1` +- [Bugfix] Fix refresh token issue + ## Version 1.2.0 - [Tech] Update dependency `@sinch/sdk-client` to `1.2.0`. - [Feature] Align "Dry Run" response interface with OAS update: `message_part?: string` becomes `number_of_parts?: number`. diff --git a/packages/sms/package.json b/packages/sms/package.json index 4c5552f3..6cf22039 100644 --- a/packages/sms/package.json +++ b/packages/sms/package.json @@ -1,6 +1,6 @@ { "name": "@sinch/sms", - "version": "1.2.0", + "version": "1.3.0", "description": "Sinch SMS API", "homepage": "", "repository": { @@ -29,7 +29,7 @@ "test:e2e": "cucumber-js" }, "dependencies": { - "@sinch/sdk-client": "^1.2.0" + "@sinch/sdk-client": "^1.3.0" }, "devDependencies": {}, "publishConfig": { diff --git a/packages/sms/src/models/v1/add-keyword/add-keyword.ts b/packages/sms/src/models/v1/add-keyword/add-keyword.ts new file mode 100644 index 00000000..6540d238 --- /dev/null +++ b/packages/sms/src/models/v1/add-keyword/add-keyword.ts @@ -0,0 +1,15 @@ +/** + * Keyword to be sent in MO to add MSISDN to a group + */ +export interface AddKeyword { + /** Opt-in keyword like "JOIN" if `auto_update.to` is dedicated long/short number or unique brand keyword like "Sinch" if it is a shared short code. */ + first_word: string; + /** Opt-in keyword like "JOIN" if `auto_update.to` is shared short code. */ + second_word?: string; +} + +/** Validation regex for first_word */ +export const firstWordPattern = /^\w+$/; + +/** Validation regex for second_word */ +export const secondWordPattern = /^\w+$/; diff --git a/packages/sms/src/models/v1/add-keyword/index.ts b/packages/sms/src/models/v1/add-keyword/index.ts new file mode 100644 index 00000000..e4530ca9 --- /dev/null +++ b/packages/sms/src/models/v1/add-keyword/index.ts @@ -0,0 +1 @@ +export type { AddKeyword } from './add-keyword'; diff --git a/packages/sms/src/models/v1/api-mo-message/api-mo-message.ts b/packages/sms/src/models/v1/api-mo-message/api-mo-message.ts index f323974a..e856124b 100644 --- a/packages/sms/src/models/v1/api-mo-message/api-mo-message.ts +++ b/packages/sms/src/models/v1/api-mo-message/api-mo-message.ts @@ -2,23 +2,20 @@ * The page of inbounds matching the given filters. */ export interface ApiMoMessage { - - body?: string; /** If this inbound message is in response to a previously sent message that contained a client reference, then this field contains *that* client reference. Utilizing this feature requires additional setup on your account. Contact your account manager to enable this feature. */ client_reference?: string; - /** The phone number that sent the message. More info */ + /** The phone number that sent the message. [More info](https://community.sinch.com/t5/Glossary/MSISDN/ta-p/7628) */ from: string; /** The ID of this inbound message. */ id: string; - /** The MCC/MNC of the sender\'s operator if known. */ + /** The MCC/MNC of the sender's operator if known. */ operator_id?: string; - /** When the system received the message. Formatted as ISO-8601: `YYYY-MM-DDThh:mm:ss.SSSZ`. */ + /** When the system received the message. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. */ received_at: Date; - /** When the message left the originating device. Only available if provided by operator. Formatted as ISO-8601: `YYYY-MM-DDThh:mm:ss.SSSZ`. */ + /** When the message left the originating device. Only available if provided by operator. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. */ sent_at?: Date; /** The Sinch phone number or short code to which the message was sent. */ to: string; - type: string; } diff --git a/packages/sms/src/models/v1/api-update-binary-mt-message/api-update-binary-mt-message.ts b/packages/sms/src/models/v1/api-update-binary-mt-message/api-update-binary-mt-message.ts index 5a271e87..60a4335b 100644 --- a/packages/sms/src/models/v1/api-update-binary-mt-message/api-update-binary-mt-message.ts +++ b/packages/sms/src/models/v1/api-update-binary-mt-message/api-update-binary-mt-message.ts @@ -1,10 +1,9 @@ import { DeliveryReportEnum } from '../enums'; export interface ApiUpdateBinaryMtMessage { - /** Sender number. Must be valid phone number, short code or alphanumeric. */ from?: string; - /** SMS in binary format */ + /** SMS in [binary](https://community.sinch.com/t5/Glossary/Binary-SMS/ta-p/7470) format. */ type?: 'mt_binary'; /** List of phone numbers and group IDs to add to the batch. */ to_add?: string[]; @@ -12,14 +11,23 @@ export interface ApiUpdateBinaryMtMessage { to_remove?: string[]; /** Request delivery report callback. Note that delivery reports can be fetched from the API regardless of this setting. */ delivery_report?: DeliveryReportEnum; - /** If set, in the future the message will be delayed until `send_at` occurs. Formatted as ISO-8601: `YYYY-MM-DDThh:mm:ss.SSSZ`. Constraints: Must be before expire_at. If set in the past, messages will be sent immediately. */ + /** If set, in the future the message will be delayed until `send_at` occurs. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. Constraints: Must be before expire_at. If set in the past, messages will be sent immediately. */ send_at?: Date; - /** If set, the system will stop trying to deliver the message at this point. Constraints: Must be after `send_at` Default: 3 days after `send_at` */ + /** If set, the system will stop trying to deliver the message at this point. + * Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601). For example: `YYYY-MM-DDThh:mm:ss.SSSZ`. */ expire_at?: Date; /** Override the default callback URL for this batch. Constraints: Must be valid URL. */ callback_url?: string; + /** The client identifier of a batch message. If set, the identifier will be added in the delivery report/callback of this batch. */ + client_reference?: string; + /** If set to true then [feedback](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ + feedback_enabled?: boolean; /** The message content Base64 encoded. Max 140 bytes together with udh. */ body?: string; /** The UDH header of a binary message HEX encoded. Max 140 bytes together with body. */ udh?: string; + /** The type of number for the sender number. Use to override the automatic detection. */ + from_ton?: number; + /** Number Plan Indicator for the sender number. Use to override the automatic detection. */ + from_npi?: number; } diff --git a/packages/sms/src/models/v1/api-update-mms-mt-message/api-update-mms-mt-message.ts b/packages/sms/src/models/v1/api-update-mms-mt-message/api-update-mms-mt-message.ts index 79574eeb..9d793bbf 100644 --- a/packages/sms/src/models/v1/api-update-mms-mt-message/api-update-mms-mt-message.ts +++ b/packages/sms/src/models/v1/api-update-mms-mt-message/api-update-mms-mt-message.ts @@ -3,7 +3,6 @@ import { ParameterGroup } from '../parameter-group'; import { DeliveryReportEnum } from '../enums'; export interface ApiUpdateMmsMtMessage { - /** Sender number. Must be valid phone number, short code or alphanumeric. */ from?: string; /** MMS */ @@ -14,16 +13,21 @@ export interface ApiUpdateMmsMtMessage { to_remove?: string[]; /** Request delivery report callback. Note that delivery reports can be fetched from the API regardless of this setting. */ delivery_report?: DeliveryReportEnum; - /** If set, in the future the message will be delayed until `send_at` occurs. Formatted as ISO-8601: `YYYY-MM-DDThh:mm:ss.SSSZ`. Constraints: Must be before expire_at. If set in the past, messages will be sent immediately. */ + /** If set, in the future the message will be delayed until `send_at` occurs. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. Constraints: Must be before expire_at. If set in the past, messages will be sent immediately. */ send_at?: Date; - /** If set, the system will stop trying to deliver the message at this point. Constraints: Must be after `send_at` Default: 3 days after `send_at` */ + /** If set, the system will stop trying to deliver the message at this point. + * Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. */ expire_at?: Date; /** Override the default callback URL for this batch. Constraints: Must be valid URL. */ callback_url?: string; + /** The client identifier of a batch message. If set, the identifier will be added in the delivery report/callback of this batch */ + client_reference?: string; + /** If set to `true`, then [feedback](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ + feedback_enabled?: boolean; /** @see MediaBody */ body?: MediaBody; /** @see ParameterGroup */ parameters?: ParameterGroup; - /** Whether or not you want the media included in your message to be checked against [Sinch MMS channel best practices](/docs/mms/bestpractices/). If set to true, your message will be rejected if it doesn\'t conform to the listed recommendations, otherwise no validation will be performed. */ + /** Whether or not you want the media included in your message to be checked against [Sinch MMS channel best practices](https://developers.sinch.com/docs/mms/bestpractices/). If set to true, your message will be rejected if it doesn't conform to the listed recommendations, otherwise no validation will be performed. */ strict_validation?: boolean; } diff --git a/packages/sms/src/models/v1/api-update-text-mt-message/api-update-text-mt-message.ts b/packages/sms/src/models/v1/api-update-text-mt-message/api-update-text-mt-message.ts index 1f52fee8..2e66769c 100644 --- a/packages/sms/src/models/v1/api-update-text-mt-message/api-update-text-mt-message.ts +++ b/packages/sms/src/models/v1/api-update-text-mt-message/api-update-text-mt-message.ts @@ -2,7 +2,6 @@ import { ParameterGroup } from '../parameter-group'; import { DeliveryReportEnum } from '../enums'; export interface ApiUpdateTextMtMessage { - /** Sender number. Must be valid phone number, short code or alphanumeric. */ from?: string; /** Regular SMS */ @@ -13,14 +12,29 @@ export interface ApiUpdateTextMtMessage { to_remove?: string[]; /** Request delivery report callback. Note that delivery reports can be fetched from the API regardless of this setting. */ delivery_report?: DeliveryReportEnum; - /** If set, in the future the message will be delayed until `send_at` occurs. Formatted as ISO-8601: `YYYY-MM-DDThh:mm:ss.SSSZ`. Constraints: Must be before expire_at. If set in the past, messages will be sent immediately. */ + /** If set, in the future the message will be delayed until `send_at` occurs. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. Constraints: Must be before expire_at. If set in the past, messages will be sent immediately. */ send_at?: Date; - /** If set, the system will stop trying to deliver the message at this point. Constraints: Must be after `send_at` Default: 3 days after `send_at` */ + /** If set, the system will stop trying to deliver the message at this point. + * Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. */ expire_at?: Date; /** Override the default callback URL for this batch. Constraints: Must be valid URL. */ callback_url?: string; + /** The client identifier of a batch message. If set, the identifier will be added in the delivery report/callback of this batch */ + client_reference?: string; + /** If set to `true`, then [feedback](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ + feedback_enabled?: boolean; /** @see ParameterGroup */ parameters?: ParameterGroup; /** The message content */ body?: string; + /** The type of number for the sender number. Use to override the automatic detection. */ + from_ton?: number; + /** Number Plan Indicator for the sender number. Use to override the automatic detection. */ + from_npi?: number; + /** Message will be dispatched only if it is not split to more parts than Max Number of Message Parts */ + max_number_of_message_parts?: number; + /** If set to `true` the message will be shortened when exceeding one part. */ + truncate_concat?: boolean; + /** Shows message on screen without user interaction while not saving the message to the inbox. */ + flash_message?: boolean; } diff --git a/packages/sms/src/models/v1/binary-request/binary-request.ts b/packages/sms/src/models/v1/binary-request/binary-request.ts index 7ab6c9dd..db9bb55a 100644 --- a/packages/sms/src/models/v1/binary-request/binary-request.ts +++ b/packages/sms/src/models/v1/binary-request/binary-request.ts @@ -9,7 +9,7 @@ export interface BinaryRequest { body: string; /** The UDH header of a binary message HEX encoded. Max 140 bytes including the `body`. */ udh: string; - /** SMS in binary format. */ + /** SMS in [binary](https://community.sinch.com/t5/Glossary/Binary-SMS/ta-p/7470) format. */ type?: 'mt_binary'; /** Request delivery report callback. Note that delivery reports can be fetched from the API regardless of this setting. */ delivery_report?: DeliveryReportEnum; @@ -23,14 +23,8 @@ export interface BinaryRequest { callback_url?: string; /** The client identifier of a batch message. If set, the identifier will be added in the delivery report/callback of this batch. */ client_reference?: string; - /** If set to true then [feedback](/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ + /** If set to true then [feedback](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ feedback_enabled?: boolean; - /** Shows message on screen without user interaction while not saving the message to the inbox. */ - flash_message?: boolean; - /** If set to `true`, the message will be shortened when exceeding one part. */ - truncate_concat?: boolean; - /** Message will be dispatched only if it is not split to more parts than the maximum number of message parts. */ - max_number_of_message_parts?: number; /** The type of number for the sender number. Use to override the automatic detection. */ from_ton?: number; /** Number Plan Indicator for the sender number. Use to override the automatic detection. */ diff --git a/packages/sms/src/models/v1/binary-response/binary-response.ts b/packages/sms/src/models/v1/binary-response/binary-response.ts index e9f7b639..3c92e31a 100644 --- a/packages/sms/src/models/v1/binary-response/binary-response.ts +++ b/packages/sms/src/models/v1/binary-response/binary-response.ts @@ -11,9 +11,9 @@ export interface BinaryResponse { canceled?: boolean; /** The message content provided. Base64 encoded. */ body?: string; - /** The UDH header of a binary message HEX encoded. Max 140 bytes including the `body`. */ + /** The [UDH](https://community.sinch.com/t5/Glossary/UDH-User-Data-Header/ta-p/7776) header of a binary message HEX encoded. Max 140 bytes including the `body`. */ udh?: string; - /** SMS in binary format. */ + /** SMS in [binary](https://community.sinch.com/t5/Glossary/Binary-SMS/ta-p/7470) format. */ type?: 'mt_binary'; /** Timestamp for when batch was created. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601). For example: `YYYY-MM-DDThh:mm:ss.SSSZ`. */ created_at?: Date; @@ -23,20 +23,15 @@ export interface BinaryResponse { delivery_report?: DeliveryReportEnum; /** If set, the date and time the message should be delivered. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601). For example: `YYYY-MM-DDThh:mm:ss.SSSZ`. */ send_at?: Date; - /** If set, the date and time the message will expire. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601). For example: `YYYY-MM-DDThh:mm:ss.SSSZ`. */ + /** If set, the system will stop trying to deliver the message at this point. + * Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. */ expire_at?: Date; /** The callback URL provided in the request. */ callback_url?: string; /** The string input to identify this batch message. If set, the identifier will be added in the delivery report/callback of this batch. */ client_reference?: string; - /** If set to true, then [feedback](/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ + /** If set to true then [feedback](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ feedback_enabled?: boolean; - /** If sent as a flash message, displays `true`. */ - flash_message?: boolean; - /** If set to `true`, the message was shortened when exceeding one part. */ - truncate_concat?: boolean; - /** Displays the number of message parts set in the request. */ - max_number_of_message_parts?: number; /** The type of number for the sender number. */ from_ton?: number; /** Number Plan Indicator for the sender number. */ diff --git a/packages/sms/src/models/v1/create-group-request/create-group-request.ts b/packages/sms/src/models/v1/create-group-request/create-group-request.ts index 078afc96..2ece413f 100644 --- a/packages/sms/src/models/v1/create-group-request/create-group-request.ts +++ b/packages/sms/src/models/v1/create-group-request/create-group-request.ts @@ -1,15 +1,12 @@ -import { GroupObjectAutoUpdate } from '../group-object-auto-update'; +import { GroupAutoUpdate } from '../group-auto-update'; export interface CreateGroupRequest { - /** Name of the group */ name?: string; - /** \"Initial list of phone numbers in E.164 format MSISDNs for the group.\" */ + /** Initial list of phone numbers in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format [MSISDNs](https://community.sinch.com/t5/Glossary/MSISDN/ta-p/7628) for the group. */ members?: string[]; - /** Phone numbers (MSISDNs) of child group will be included in this group. If present then this group will be auto populated. Constraints: Elements must be group IDs. */ + /** Phone numbers ([MSISDNs](https://community.sinch.com/t5/Glossary/MSISDN/ta-p/7628)) of child group will be included in this group. If present then this group will be auto populated. Constraints: Elements must be group IDs. */ child_groups?: string[]; - /** @see GroupObjectAutoUpdate */ - auto_update?: GroupObjectAutoUpdate; + /** @see GroupAutoUpdate */ + auto_update?: GroupAutoUpdate; } - - diff --git a/packages/sms/src/models/v1/enums.ts b/packages/sms/src/models/v1/enums.ts index d6ac8222..7b29c9d3 100644 --- a/packages/sms/src/models/v1/enums.ts +++ b/packages/sms/src/models/v1/enums.ts @@ -1,11 +1,18 @@ +/** + * Kind of delivery report + */ export type DeliveryReportEnum = 'none' | 'summary' | 'full' | 'per_recipient' - | 'per_recipient_final'; + | 'per_recipient_final' + | string; -export type DeliveryReportStatusEnum = +/** + * The simplified status as described in _Delivery Report Statuses_. + */ +export type DeliveryStatusEnum = 'Queued' | 'Dispatched' | 'Aborted' @@ -15,4 +22,16 @@ export type DeliveryReportStatusEnum = | 'Delivered' | 'Failed' | 'Expired' - | 'Unknown'; + | 'Unknown' + | string; + +/** @deprecated */ +export type DeliveryReportStatusEnum = DeliveryReportEnum; + +/** + * The delivery report status code provides a more detailed view of what happened with a message. The REST API error codes are a combination of [SMPP error codes](/docs/sms/smpp/error-codes/#status-reports-error-codes), [MMS error codes](/docs/mms/7-service/mms-status-codes/) and custom codes. + */ +export type DeliveryReceiptCodeEnum = 0 | 400 | 401 + | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 410 + | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | number; + diff --git a/packages/sms/src/models/v1/group-auto-update/group-auto-update.ts b/packages/sms/src/models/v1/group-auto-update/group-auto-update.ts index 88795cb3..aef3b53a 100644 --- a/packages/sms/src/models/v1/group-auto-update/group-auto-update.ts +++ b/packages/sms/src/models/v1/group-auto-update/group-auto-update.ts @@ -1,9 +1,11 @@ -export interface GroupAutoUpdate { +import { AddKeyword } from '../add-keyword'; +import { RemoveKeyword } from '../remove-keyword'; - /** Short code or long number addressed in MO. Constraints: Must be valid MSISDN or short code. */ +export interface GroupAutoUpdate { + /** Short code or long number addressed in [MO](https://community.sinch.com/t5/Glossary/MO-Mobile-Originated/ta-p/7618). Constraints: Must be valid phone number or short code which has been **provisioned by your account manager**. */ to: string; - add?: string; - remove?: string; + /** @see AddKeyword */ + add?: AddKeyword; + /** @see RemoveKeyword */ + remove?: RemoveKeyword; } - - diff --git a/packages/sms/src/models/v1/group-object-auto-update-remove/group-object-auto-update-remove.ts b/packages/sms/src/models/v1/group-object-auto-update-remove/group-object-auto-update-remove.ts deleted file mode 100644 index b3406177..00000000 --- a/packages/sms/src/models/v1/group-object-auto-update-remove/group-object-auto-update-remove.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Keyword to be sent in MO to remove from a group. - */ -export interface GroupObjectAutoUpdateRemove { - - /** Opt-out keyword like \"LEAVE\" If auto_update.to is dedicated long/short number or unique brand keyword like \"Sinch\" if it is a shared short code. Constraints: Must be one word. */ - first_word?: string; - /** Opt-out keyword like \"LEAVE\" if auto_update.to is shared short code. Constraints: Must be one word. */ - second_word?: string; -} - - -/** Validation regex for first_word */ -export const firstWordPattern = /^\w+$/; -/** Validation regex for second_word */ -export const secondWordPattern = /^\w+$/; diff --git a/packages/sms/src/models/v1/group-object-auto-update-remove/index.ts b/packages/sms/src/models/v1/group-object-auto-update-remove/index.ts deleted file mode 100644 index c58c310f..00000000 --- a/packages/sms/src/models/v1/group-object-auto-update-remove/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { GroupObjectAutoUpdateRemove } from './group-object-auto-update-remove'; diff --git a/packages/sms/src/models/v1/group-object-auto-update/group-object-auto-update.ts b/packages/sms/src/models/v1/group-object-auto-update/group-object-auto-update.ts deleted file mode 100644 index 8290776a..00000000 --- a/packages/sms/src/models/v1/group-object-auto-update/group-object-auto-update.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { GroupObjectAutoUpdateRemove } from '../group-object-auto-update-remove'; -import { UpdateGroupRequestAutoUpdateAdd } from '../update-group-request-auto-update-add'; - -export interface GroupObjectAutoUpdate { - - /** Short code or long number addressed in MO. Constraints: Must be valid phone number or short code. */ - to?: string; - /** @see UpdateGroupRequestAutoUpdateAdd */ - add?: UpdateGroupRequestAutoUpdateAdd; - /** @see GroupObjectAutoUpdateRemove */ - remove?: GroupObjectAutoUpdateRemove; -} - - diff --git a/packages/sms/src/models/v1/group-object-auto-update/index.ts b/packages/sms/src/models/v1/group-object-auto-update/index.ts deleted file mode 100644 index 6ff5756d..00000000 --- a/packages/sms/src/models/v1/group-object-auto-update/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { GroupObjectAutoUpdate } from './group-object-auto-update'; diff --git a/packages/sms/src/models/v1/group/group.ts b/packages/sms/src/models/v1/group/group.ts index 2a642e57..92d6123b 100644 --- a/packages/sms/src/models/v1/group/group.ts +++ b/packages/sms/src/models/v1/group/group.ts @@ -13,7 +13,6 @@ export type ReplaceGroupResponse = Group; export type UpdateGroupResponse = Group; export interface Group { - /** The ID used to reference this group. */ id?: string; /** Name of group, if set. */ @@ -24,8 +23,8 @@ export interface Group { created_at?: Date; /** Timestamp for when the group was last updated. Format: YYYY-MM-DDThh:mm:ss.SSSZ */ modified_at?: Date; - /** Phone numbers (MSISDNs) of child group will be included in this group. If present, this group will be auto populated. Constraints: Elements must be group IDs. */ - child_groups?: object[]; + /** Phone numbers ([MSISDNs](https://community.sinch.com/t5/Glossary/MSISDN/ta-p/7628)) of child group will be included in this group. If present, this group will be auto populated. Constraints: Elements must be group IDs. */ + child_groups?: string[]; /** @see GroupAutoUpdate */ auto_update?: GroupAutoUpdate; } diff --git a/packages/sms/src/models/v1/inbound-message-response/inbound-message-response.ts b/packages/sms/src/models/v1/inbound-message-response/inbound-message-response.ts index 7a37afe2..bdc28eb3 100644 --- a/packages/sms/src/models/v1/inbound-message-response/inbound-message-response.ts +++ b/packages/sms/src/models/v1/inbound-message-response/inbound-message-response.ts @@ -1,4 +1,5 @@ import { MOBinary } from '../mo-binary'; import { MOText } from '../mo-text'; +import { MOMedia } from '../mo-media'; -export type InboundMessageResponse = MOText | MOBinary; +export type InboundMessageResponse = MOText | MOBinary | MOMedia; diff --git a/packages/sms/src/models/v1/index.ts b/packages/sms/src/models/v1/index.ts index 810d1a46..50b1fea2 100644 --- a/packages/sms/src/models/v1/index.ts +++ b/packages/sms/src/models/v1/index.ts @@ -1,3 +1,4 @@ +export * from './add-keyword'; export * from './api-batch-list'; export * from './delivery-feedback-request'; export * from './api-inbound-list'; @@ -18,19 +19,21 @@ export * from './dry-run-response-per-recipient-inner'; export * from './error-response-obj'; export * from './group-auto-update'; export * from './create-group-request'; -export * from './group-object-auto-update'; -export * from './group-object-auto-update-remove'; export * from './inbound-message-response'; export * from './list-groups-response'; -export * from './mo-binary'; -export * from './mo-text'; export * from './media-body'; export * from './media-request'; export * from './media-response'; export * from './message-delivery-status'; +export * from './mms-media'; +export * from './mms-mo-body'; +export * from './mo-binary'; +export * from './mo-media'; +export * from './mo-text'; export * from './parameter-group'; export * from './parameter-values'; export * from './recipient-delivery-report'; +export * from './remove-keyword'; export * from './replace-group-request'; export * from './send-sms-response'; export * from './send-sms-request'; @@ -38,8 +41,5 @@ export * from './text-request'; export * from './text-response'; export * from './update-batch-message-request'; export * from './update-group-request'; -export * from './update-group-request-auto-update'; -export * from './update-group-request-auto-update-add'; -export * from './update-group-request-auto-update-remove'; export * from './enums'; export * from './requests'; diff --git a/packages/sms/src/models/v1/media-body/media-body.ts b/packages/sms/src/models/v1/media-body/media-body.ts index 6310a7fa..753da193 100644 --- a/packages/sms/src/models/v1/media-body/media-body.ts +++ b/packages/sms/src/models/v1/media-body/media-body.ts @@ -2,6 +2,8 @@ * The message content, including a URL to the media file */ export interface MediaBody { + /** The subject text */ + subject?: string; /** The message text. Text only media messages will be rejected, please use SMS instead. */ message?: string; /** URL to the media file */ diff --git a/packages/sms/src/models/v1/media-request/media-request.ts b/packages/sms/src/models/v1/media-request/media-request.ts index 0226502a..7bbe0268 100644 --- a/packages/sms/src/models/v1/media-request/media-request.ts +++ b/packages/sms/src/models/v1/media-request/media-request.ts @@ -6,7 +6,7 @@ import { DeliveryReportEnum } from '../enums'; * Only available in the US. Contact support if you wish to send MMS. */ export interface MediaRequest { - /** List of Phone numbers and group IDs that will receive the batch. More info */ + /** List of Phone numbers and group IDs that will receive the batch. [More info](https://community.sinch.com/t5/Glossary/MSISDN/ta-p/7628) */ to: string[]; /** Sender number. Must be valid phone number, short code or alphanumeric. Required if Automatic Default Originator not configured. */ from?: string; @@ -19,17 +19,17 @@ export interface MediaRequest { /** Request delivery report callback. Note that delivery reports can be fetched from the API regardless of this setting. */ delivery_report?: DeliveryReportEnum; /** If set in the future, the message will be delayed until `send_at` occurs. - * Must be before `expire_at`. If set in the past, messages will be sent immediately. Formatted as ISO-8601: `YYYY-MM-DDThh:mm:ss.SSSZ`. */ + * Must be before `expire_at`. If set in the past, messages will be sent immediately. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. */ send_at?: Date; /** If set, the system will stop trying to deliver the message at this point. - * Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as ISO-8601: `YYYY-MM-DDThh:mm:ss.SSSZ`. */ + * Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. */ expire_at?: Date; /** Override the default callback URL for this batch. Must be valid URL. */ callback_url?: string; /** The client identifier of a batch message. If set, the identifier will be added in the delivery report/callback of this batch */ client_reference?: string; - /** If set to `true`, then [feedback](/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ + /** If set to `true`, then [feedback](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ feedback_enabled?: boolean; - /** Whether or not you want the media included in your message to be checked against [Sinch MMS channel best practices](/docs/mms/bestpractices/). If set to true, your message will be rejected if it doesn\'t conform to the listed recommendations, otherwise no validation will be performed. */ + /** Whether or not you want the media included in your message to be checked against [Sinch MMS channel best practices](https://developers.sinch.com/docs/mms/bestpractices/). If set to true, your message will be rejected if it doesn't conform to the listed recommendations, otherwise no validation will be performed. */ strict_validation?: boolean; } diff --git a/packages/sms/src/models/v1/media-response/media-response.ts b/packages/sms/src/models/v1/media-response/media-response.ts index 964cddfa..df5f4f39 100644 --- a/packages/sms/src/models/v1/media-response/media-response.ts +++ b/packages/sms/src/models/v1/media-response/media-response.ts @@ -17,23 +17,23 @@ export interface MediaResponse { parameters?: ParameterGroup; /** Media message */ type?: 'mt_media'; - /** Timestamp for when batch was created. YYYY-MM-DDThh:mm:ss.SSSZ format */ + /** Timestamp for when batch was created. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601):`YYYY-MM-DDThh:mm:ss.SSSZ`. */ created_at?: Date; - /** Timestamp for when batch was last updated. YYYY-MM-DDThh:mm:ss.SSSZ format */ + /** Timestamp for when batch was last updated. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601):`YYYY-MM-DDThh:mm:ss.SSSZ`. */ modified_at?: Date; /** Request delivery report callback. Note that delivery reports can be fetched from the API regardless of this setting. */ delivery_report?: DeliveryReportEnum; /** If set in the future the message will be delayed until send_at occurs. - * Must be before `expire_at`. If set in the past messages will be sent immediately. YYYY-MM-DDThh:mm:ss.SSSZ format */ + * Must be before `expire_at`. If set in the past messages will be sent immediately. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601):`YYYY-MM-DDThh:mm:ss.SSSZ`. */ send_at?: Date; /** If set the system will stop trying to deliver the message at this point. - * Must be after `send_at`. Default and max is 3 days after send_at. YYYY-MM-DDThh:mm:ss.SSSZ format */ + * Must be after `send_at`. Default and max is 3 days after send_at. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601):`YYYY-MM-DDThh:mm:ss.SSSZ`. */ expire_at?: Date; /** Override the default callback URL for this batch. Must be valid URL. */ callback_url?: string; /** The client identifier of a batch message. If set, the identifier will be added in the delivery report/callback of this batch */ client_reference?: string; - /** If set to true then [feedback](/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ + /** If set to true then [feedback](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ feedback_enabled?: boolean; /** Whether or not you want the media included in your message to be checked against [Sinch MMS channel best practices](/docs/mms/bestpractices/). If set to true, your message will be rejected if it doesn't conform to the listed recommendations, otherwise no validation will be performed. */ strict_validation?: boolean; diff --git a/packages/sms/src/models/v1/message-delivery-status/message-delivery-status.ts b/packages/sms/src/models/v1/message-delivery-status/message-delivery-status.ts index 417a1c74..e8cc2936 100644 --- a/packages/sms/src/models/v1/message-delivery-status/message-delivery-status.ts +++ b/packages/sms/src/models/v1/message-delivery-status/message-delivery-status.ts @@ -1,18 +1,15 @@ -import { DeliveryReportStatusEnum } from '../enums'; +import { DeliveryReceiptCodeEnum, DeliveryStatusEnum } from '../enums'; /** * Array with status objects. Only status codes with at least one recipient will be listed. */ export interface MessageDeliveryStatus { - - /** The detailed status code. */ - code: number; + /** The detailed [status code](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Delivery-reports/#tag/Delivery-reports/section/Delivery-report-error-codes). */ + code: DeliveryReceiptCodeEnum; /** The number of messages that currently has this code. */ count: number; /** Only for `full` report. A list of the phone number recipients which messages has this status code. */ recipients?: string[]; /** The simplified status as described in _Delivery Report Statuses_. */ - status: DeliveryReportStatusEnum; + status: DeliveryStatusEnum; } - - diff --git a/packages/sms/src/models/v1/mms-media/index.ts b/packages/sms/src/models/v1/mms-media/index.ts new file mode 100644 index 00000000..9de0c6b6 --- /dev/null +++ b/packages/sms/src/models/v1/mms-media/index.ts @@ -0,0 +1 @@ +export type { MmsMedia } from './mms-media'; diff --git a/packages/sms/src/models/v1/mms-media/mms-media.ts b/packages/sms/src/models/v1/mms-media/mms-media.ts new file mode 100644 index 00000000..265ed306 --- /dev/null +++ b/packages/sms/src/models/v1/mms-media/mms-media.ts @@ -0,0 +1,13 @@ +/** + * Collection of attachments in incoming message. + */ +export interface MmsMedia { + /** The result code. Possible values: 0 (success), 1 (content upload error), 2 (cloud bucket error), 3 (bucket key error). */ + code: number; + /** Content type of binary. [More info](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) */ + content_type: string; + /** Status of the uploaded media. */ + status: 'Uploaded' | 'Failed' | string; + /** URL to be used to download attachment. */ + url?: string; +} diff --git a/packages/sms/src/models/v1/mms-mo-body/index.ts b/packages/sms/src/models/v1/mms-mo-body/index.ts new file mode 100644 index 00000000..6eb60d33 --- /dev/null +++ b/packages/sms/src/models/v1/mms-mo-body/index.ts @@ -0,0 +1 @@ +export type { MmsMoBody } from './mms-mo-body'; diff --git a/packages/sms/src/models/v1/mms-mo-body/mms-mo-body.ts b/packages/sms/src/models/v1/mms-mo-body/mms-mo-body.ts new file mode 100644 index 00000000..b67c1f92 --- /dev/null +++ b/packages/sms/src/models/v1/mms-mo-body/mms-mo-body.ts @@ -0,0 +1,13 @@ +import { MmsMedia } from '../mms-media'; + +/** + * The message content, including a URL to the media filters. + */ +export interface MmsMoBody { + /** The subject of the MMS media message. */ + subject?: string; + /** The text message content of the MMS media message. */ + message?: string; + /** List of MmsMedias */ + media?: MmsMedia[]; +} diff --git a/packages/sms/src/models/v1/mo-binary/mo-binary.ts b/packages/sms/src/models/v1/mo-binary/mo-binary.ts index 8e7b2cc2..02181cbf 100644 --- a/packages/sms/src/models/v1/mo-binary/mo-binary.ts +++ b/packages/sms/src/models/v1/mo-binary/mo-binary.ts @@ -1,10 +1,9 @@ import { ApiMoMessage } from '../api-mo-message'; export interface MOBinary extends ApiMoMessage { - /** The message content Base64 encoded. Max 140 bytes together with udh. */ body: string; - /** SMS in binary format */ + /** SMS in [binary](https://community.sinch.com/t5/Glossary/Binary-SMS/ta-p/7470) format */ type: 'mo_binary'; /** The UDH header of a binary message HEX encoded. Max 140 bytes together with body. */ udh: string; diff --git a/packages/sms/src/models/v1/mo-media/index.ts b/packages/sms/src/models/v1/mo-media/index.ts new file mode 100644 index 00000000..1a25903e --- /dev/null +++ b/packages/sms/src/models/v1/mo-media/index.ts @@ -0,0 +1 @@ +export type { MOMedia } from './mo-media'; diff --git a/packages/sms/src/models/v1/mo-media/mo-media.ts b/packages/sms/src/models/v1/mo-media/mo-media.ts new file mode 100644 index 00000000..8e0b35a6 --- /dev/null +++ b/packages/sms/src/models/v1/mo-media/mo-media.ts @@ -0,0 +1,9 @@ +import { MmsMoBody } from '../mms-mo-body'; +import { ApiMoMessage } from '../api-mo-message'; + +export interface MOMedia extends ApiMoMessage { + /** MMS */ + type: 'mo_media'; + /** @see MmsMoBody */ + body: MmsMoBody; +} diff --git a/packages/sms/src/models/v1/mo-text/mo-text.ts b/packages/sms/src/models/v1/mo-text/mo-text.ts index dd959cb5..c13782fe 100644 --- a/packages/sms/src/models/v1/mo-text/mo-text.ts +++ b/packages/sms/src/models/v1/mo-text/mo-text.ts @@ -1,7 +1,6 @@ import { ApiMoMessage } from '../api-mo-message'; export interface MOText extends ApiMoMessage { - body: string; /** Regular SMS */ type: 'mo_text'; diff --git a/packages/sms/src/models/v1/recipient-delivery-report/recipient-delivery-report.ts b/packages/sms/src/models/v1/recipient-delivery-report/recipient-delivery-report.ts index a8daedf2..7a3a0fab 100644 --- a/packages/sms/src/models/v1/recipient-delivery-report/recipient-delivery-report.ts +++ b/packages/sms/src/models/v1/recipient-delivery-report/recipient-delivery-report.ts @@ -1,4 +1,4 @@ -import { DeliveryReportStatusEnum } from '../enums'; +import { DeliveryReceiptCodeEnum, DeliveryStatusEnum } from '../enums'; export interface RecipientDeliveryReport { @@ -10,8 +10,8 @@ export interface RecipientDeliveryReport { batch_id: string; /** The client identifier of the batch this delivery report belongs to, if set when submitting batch. */ client_reference?: string; - /** The detailed status code. */ - code: number; + /** The detailed [status code](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Delivery-reports/#tag/Delivery-reports/section/Delivery-report-error-codes). */ + code: DeliveryReceiptCodeEnum; /** Applied encoding for message. Present only if smart encoding is enabled. */ encoding?: 'GSM' | 'UNICODE'; /** The number of parts the message was split into. Present only if `max_number_of_message_parts` parameter was set. */ @@ -23,7 +23,7 @@ export interface RecipientDeliveryReport { /** Phone number that was queried. */ recipient: string; /** The simplified status as described in _Delivery Report Statuses_. */ - status: DeliveryReportStatusEnum; + status: DeliveryStatusEnum; /** The recipient delivery report type. */ type: 'recipient_delivery_report_sms' | 'recipient_delivery_report_mms'; } diff --git a/packages/sms/src/models/v1/remove-keyword/index.ts b/packages/sms/src/models/v1/remove-keyword/index.ts new file mode 100644 index 00000000..a640da55 --- /dev/null +++ b/packages/sms/src/models/v1/remove-keyword/index.ts @@ -0,0 +1 @@ +export type { RemoveKeyword } from './remove-keyword'; diff --git a/packages/sms/src/models/v1/remove-keyword/remove-keyword.ts b/packages/sms/src/models/v1/remove-keyword/remove-keyword.ts new file mode 100644 index 00000000..59a853f1 --- /dev/null +++ b/packages/sms/src/models/v1/remove-keyword/remove-keyword.ts @@ -0,0 +1,15 @@ +/** + * Keyword to be sent in MO to remove MSISDN to a group + */ +export interface RemoveKeyword { + /** Opt-out keyword like "LEAVE" if `auto_update.to` is dedicated long/short number or unique brand keyword like "Sinch" if it is a shared short code. */ + first_word: string; + /** Opt-out keyword like "LEAVE" if `auto_update.to` is shared short code. */ + second_word?: string; +} + +/** Validation regex for first_word */ +export const firstWordPattern = /^\w+$/; + +/** Validation regex for second_word */ +export const secondWordPattern = /^\w+$/; diff --git a/packages/sms/src/models/v1/replace-group-request/replace-group-request.ts b/packages/sms/src/models/v1/replace-group-request/replace-group-request.ts index 0dbf3659..8dcf02f5 100644 --- a/packages/sms/src/models/v1/replace-group-request/replace-group-request.ts +++ b/packages/sms/src/models/v1/replace-group-request/replace-group-request.ts @@ -1,9 +1,12 @@ -export interface ReplaceGroupRequest { +import { GroupAutoUpdate } from '../group-auto-update'; +export interface ReplaceGroupRequest { /** Name of group. */ name?: string; - /** The initial members of the group. Constraints: Elements must be phone numbers in E.164 format MSISDNs. */ + /** The initial members of the group. Constraints: Elements must be phone numbers in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format MSISDNs. */ members: string[]; + /** Phone numbers ([MSISDNs](https://community.sinch.com/t5/Glossary/MSISDN/ta-p/7628)) of child group will be included in this group. If present then this group will be auto populated. Constraints: Elements must be group IDs. */ + child_groups?: string[]; + /** @see GroupAutoUpdate */ + auto_update?: GroupAutoUpdate; } - - diff --git a/packages/sms/src/models/v1/requests/delivery-reports/delivery-reports-request-data.ts b/packages/sms/src/models/v1/requests/delivery-reports/delivery-reports-request-data.ts index 428e2c2f..9940c1a7 100644 --- a/packages/sms/src/models/v1/requests/delivery-reports/delivery-reports-request-data.ts +++ b/packages/sms/src/models/v1/requests/delivery-reports/delivery-reports-request-data.ts @@ -1,14 +1,19 @@ -import { DeliveryReportStatusEnum } from '../../enums'; +import { DeliveryReceiptCodeEnum, DeliveryStatusEnum } from '../../enums'; export interface GetDeliveryReportByBatchIdRequestData { /** The batch ID you received from sending a message. */ 'batch_id': string; - /** The type of delivery report. - A `summary` will count the number of messages sent per status. - A `full` report give that of a `summary` report but in addition, lists phone numbers. */ + /** + * The type of delivery report. + * - A `summary` will count the number of messages sent per status. + * - A `full` report give that of a `summary` report but in addition, lists phone numbers. + */ 'type'?: 'summary' | 'full'; - /** Comma separated list of delivery_report_statuses to include */ - 'status'?: DeliveryReportStatusEnum[]; - /** Comma separated list of delivery_receipt_error_codes to include */ - 'code'?: string | number | number[]; + /** Comma separated list of delivery report statuses to include */ + 'status'?: DeliveryStatusEnum | DeliveryStatusEnum[]; + /** Comma separated list of delivery receipt codes to include */ + // TODO V2: remove string type + 'code'?: string | DeliveryReceiptCodeEnum | DeliveryReceiptCodeEnum[]; } export type GetDeliveryReportByPhoneNumberRequestData = @@ -42,9 +47,10 @@ export interface ListDeliveryReportsRequestData { /** Only list messages received before this date/time. */ 'end_date'?: Date; /** Comma separated list of delivery report statuses to include. */ - 'status'?: DeliveryReportStatusEnum[]; - /** Comma separated list of delivery receipt error codes to include. */ - 'code'?: string; + 'status'?: DeliveryStatusEnum | DeliveryStatusEnum[]; + /** Comma separated list of delivery receipt codes to include. */ + // TODO V2: remove string type + 'code'?: string | DeliveryReceiptCodeEnum | DeliveryReceiptCodeEnum[]; /** Client reference to include */ 'client_reference'?: string; } diff --git a/packages/sms/src/models/v1/requests/groups/groups-request-data.ts b/packages/sms/src/models/v1/requests/groups/groups-request-data.ts index 9c6f40d3..930027e4 100644 --- a/packages/sms/src/models/v1/requests/groups/groups-request-data.ts +++ b/packages/sms/src/models/v1/requests/groups/groups-request-data.ts @@ -4,7 +4,7 @@ import { UpdateGroupRequest } from '../../update-group-request'; export interface CreateGroupRequestData { /** */ - 'createGroupRequestBody'?: CreateGroupRequest; + 'createGroupRequestBody': CreateGroupRequest; } export interface DeleteGroupRequestData { /** ID of a group that you are interested in getting. */ @@ -24,7 +24,7 @@ export interface ReplaceGroupRequestData { /** ID of a group that you are interested in getting. */ 'group_id': string; /** */ - 'replaceGroupRequestBody'?: ReplaceGroupRequest; + 'replaceGroupRequestBody': ReplaceGroupRequest; } export interface GetGroupRequestData { /** ID of a group that you are interested in getting. */ @@ -34,5 +34,5 @@ export interface UpdateGroupRequestData { /** ID of a group that you are interested in getting. */ 'group_id': string; /** */ - 'updateGroupRequestBody'?: UpdateGroupRequest; + 'updateGroupRequestBody': UpdateGroupRequest; } diff --git a/packages/sms/src/models/v1/text-request/text-request.ts b/packages/sms/src/models/v1/text-request/text-request.ts index 8fdb6fa3..26a737fa 100644 --- a/packages/sms/src/models/v1/text-request/text-request.ts +++ b/packages/sms/src/models/v1/text-request/text-request.ts @@ -2,7 +2,7 @@ import { ParameterGroup } from '../parameter-group'; import { DeliveryReportEnum } from '../enums'; export interface TextRequest { - /** List of Phone numbers and group IDs that will receive the batch. More info */ + /** List of Phone numbers and group IDs that will receive the batch. [More info](https://community.sinch.com/t5/Glossary/MSISDN/ta-p/7628) */ to: string[]; /** Sender number. Must be valid phone number, short code or alphanumeric. Required if Automatic Default Originator not configured. */ from?: string; @@ -24,7 +24,7 @@ export interface TextRequest { callback_url?: string; /** The client identifier of a batch message. If set, the identifier will be added in the delivery report/callback of this batch */ client_reference?: string; - /** If set to `true`, then [feedback](/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ + /** If set to `true`, then [feedback](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ feedback_enabled?: boolean; /** Shows message on screen without user interaction while not saving the message to the inbox. */ flash_message?: boolean; diff --git a/packages/sms/src/models/v1/text-response/text-response.ts b/packages/sms/src/models/v1/text-response/text-response.ts index fc27053a..f1c0dea2 100644 --- a/packages/sms/src/models/v1/text-response/text-response.ts +++ b/packages/sms/src/models/v1/text-response/text-response.ts @@ -32,7 +32,7 @@ export interface TextResponse { callback_url?: string; /** The client identifier of a batch message. If set, the identifier will be added in the delivery report/callback of this batch */ client_reference?: string; - /** If set to `true`, then [feedback](/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ + /** If set to `true`, then [feedback](https://developers.sinch.com/docs/sms/api-reference/sms/tag/Batches/#tag/Batches/operation/deliveryFeedback) is expected after successful delivery. */ feedback_enabled?: boolean; /** Shows message on screen without user interaction while not saving the message to the inbox. */ flash_message?: boolean; diff --git a/packages/sms/src/models/v1/update-group-request-auto-update-add/index.ts b/packages/sms/src/models/v1/update-group-request-auto-update-add/index.ts deleted file mode 100644 index 33980879..00000000 --- a/packages/sms/src/models/v1/update-group-request-auto-update-add/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { UpdateGroupRequestAutoUpdateAdd } from './update-group-request-auto-update-add'; diff --git a/packages/sms/src/models/v1/update-group-request-auto-update-add/update-group-request-auto-update-add.ts b/packages/sms/src/models/v1/update-group-request-auto-update-add/update-group-request-auto-update-add.ts deleted file mode 100644 index d4502d9c..00000000 --- a/packages/sms/src/models/v1/update-group-request-auto-update-add/update-group-request-auto-update-add.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface UpdateGroupRequestAutoUpdateAdd { - - /** Keyword to be sent in MO to add phone number to a group opt-in keyword like \"JOIN\". If `auto_update.to` is dedicated long/short number or unique brand keyword like \"Sinch\" if it is a shared short code. Constraints: Must be one word. */ - first_word?: string; - /** Opt-in keyword like \"JOIN\" if auto_update.to is shared short code. Constraints: Must be one word. */ - second_word?: string; -} - - -/** Validation regex for first_word */ -export const firstWordPattern = /^\w+$/; -/** Validation regex for second_word */ -export const secondWordPattern = /^\w+$/; diff --git a/packages/sms/src/models/v1/update-group-request-auto-update-remove/index.ts b/packages/sms/src/models/v1/update-group-request-auto-update-remove/index.ts deleted file mode 100644 index be9fe994..00000000 --- a/packages/sms/src/models/v1/update-group-request-auto-update-remove/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { UpdateGroupRequestAutoUpdateRemove } from './update-group-request-auto-update-remove'; diff --git a/packages/sms/src/models/v1/update-group-request-auto-update-remove/update-group-request-auto-update-remove.ts b/packages/sms/src/models/v1/update-group-request-auto-update-remove/update-group-request-auto-update-remove.ts deleted file mode 100644 index 0f55e6f7..00000000 --- a/packages/sms/src/models/v1/update-group-request-auto-update-remove/update-group-request-auto-update-remove.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Keyword to be sent in MO to remove from a group. - */ -export interface UpdateGroupRequestAutoUpdateRemove { - - /** Opt-out keyword. For example, \"LEAVE\" if `auto_update.to` is a dedicated long/short number or a unique brand keyword like \"Sinch\" (if it is a shared short code). Constraints: Must be one word. */ - first_word?: string; - /** Opt-out keyword. For example, \"LEAVE\" if `auto_update.to` is a shared short code. Constraints: Must be one word. */ - second_word?: string; -} - - -/** Validation regex for first_word */ -export const firstWordPattern = /^\w+$/; -/** Validation regex for second_word */ -export const secondWordPattern = /^\w+$/; diff --git a/packages/sms/src/models/v1/update-group-request-auto-update/index.ts b/packages/sms/src/models/v1/update-group-request-auto-update/index.ts deleted file mode 100644 index b312ba1f..00000000 --- a/packages/sms/src/models/v1/update-group-request-auto-update/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { UpdateGroupRequestAutoUpdate } from './update-group-request-auto-update'; diff --git a/packages/sms/src/models/v1/update-group-request-auto-update/update-group-request-auto-update.ts b/packages/sms/src/models/v1/update-group-request-auto-update/update-group-request-auto-update.ts deleted file mode 100644 index e245759d..00000000 --- a/packages/sms/src/models/v1/update-group-request-auto-update/update-group-request-auto-update.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { UpdateGroupRequestAutoUpdateAdd } from '../update-group-request-auto-update-add'; -import { UpdateGroupRequestAutoUpdateRemove } from '../update-group-request-auto-update-remove'; - -export interface UpdateGroupRequestAutoUpdate { - - /** Short code or long number addressed in MO. Constraints: Must be a valid phone number or short code. */ - to?: string; - /** @see UpdateGroupRequestAutoUpdateAdd */ - add?: UpdateGroupRequestAutoUpdateAdd; - /** @see UpdateGroupRequestAutoUpdateRemove */ - remove?: UpdateGroupRequestAutoUpdateRemove; -} - - diff --git a/packages/sms/src/models/v1/update-group-request/update-group-request.ts b/packages/sms/src/models/v1/update-group-request/update-group-request.ts index 98ef9e2a..f9639bc8 100644 --- a/packages/sms/src/models/v1/update-group-request/update-group-request.ts +++ b/packages/sms/src/models/v1/update-group-request/update-group-request.ts @@ -1,7 +1,6 @@ -import { UpdateGroupRequestAutoUpdate } from '../update-group-request-auto-update'; +import { GroupAutoUpdate } from '../group-auto-update'; export interface UpdateGroupRequest { - /** The name of the group. Omitting `name` from the JSON body will leave the name unchanged. To remove an existing name set, name explicitly to the JSON value `null`. */ name?: string | null; /** Add a list of phone numbers (MSISDNs) to this group. The phone numbers are a strings within an array and must be in E.164 format. */ @@ -12,8 +11,6 @@ export interface UpdateGroupRequest { add_from_group?: string; /** Remove the members in a specified group from this group. Constraints: Must be valid group ID */ remove_from_group?: string; - /** @see UpdateGroupRequestAutoUpdate */ - auto_update?: UpdateGroupRequestAutoUpdate; + /** @see GroupAutoUpdate */ + auto_update?: GroupAutoUpdate; } - - diff --git a/packages/sms/src/rest/v1/callbacks/callbacks-webhook.ts b/packages/sms/src/rest/v1/callbacks/callbacks-webhook.ts index 2f833962..2e739848 100644 --- a/packages/sms/src/rest/v1/callbacks/callbacks-webhook.ts +++ b/packages/sms/src/rest/v1/callbacks/callbacks-webhook.ts @@ -1,17 +1,31 @@ -import { DeliveryReport, MOBinary, MOText, RecipientDeliveryReport } from '../../../models'; -import { CallbackProcessor } from '@sinch/sdk-client'; +import { DeliveryReport, MOBinary, MOMedia, MOText, RecipientDeliveryReport } from '../../../models'; +import { CallbackProcessor, validateWebhookSignature } from '@sinch/sdk-client'; import { IncomingHttpHeaders } from 'http'; -export type SmsCallback = DeliveryReport | RecipientDeliveryReport | MOText | MOBinary; +export type SmsCallback = DeliveryReport | RecipientDeliveryReport | MOText | MOBinary | MOMedia; export class SmsCallbackWebhooks implements CallbackProcessor{ + private readonly appSecret: string | undefined; + + constructor(appSecret?: string) { + this.appSecret = appSecret; + } + public validateAuthenticationHeader( + headers: IncomingHttpHeaders, + body: any, // eslint-disable-next-line @typescript-eslint/no-unused-vars - _headers: IncomingHttpHeaders, _body: any, _path: string, _method: string, + _path?: string, _method?: string, ): boolean { - // No header validation is implemented for SMS API - return true; + if (!this.appSecret) { + return false; + } + return validateWebhookSignature( + this.appSecret, + headers, + body, + ); } /** @@ -21,10 +35,14 @@ export class SmsCallbackWebhooks implements CallbackProcessor{ * @return {SmsCallback} - The parsed SMS event object */ public parseEvent(eventBody: any): SmsCallback { + if (typeof eventBody === 'string') { + eventBody = JSON.parse(eventBody); + } if (eventBody.type) { let recipientDeliveryReport: RecipientDeliveryReport | null = null; let moText: MOText | null = null; let moBinary: MOBinary | null = null; + let moMedia: MOMedia | null = null; switch (eventBody.type) { case 'delivery_report_sms': case 'delivery_report_mms': @@ -57,12 +75,20 @@ export class SmsCallbackWebhooks implements CallbackProcessor{ moBinary.sent_at = new Date(moBinary.sent_at); } return moBinary; + case 'mo_media': + moMedia = eventBody as MOMedia; + if (moMedia.received_at) { + moMedia.received_at = new Date(moMedia.received_at); + } + if (moMedia.sent_at) { + moMedia.sent_at = new Date(moMedia.sent_at); + } + return moMedia; default: throw new Error(`Unknown SMS event type: ${eventBody.type}`); } } - console.log(eventBody); - throw new Error('Unknown SMS event'); + throw new Error(`Unknown SMS event: ${JSON.stringify(eventBody)}`); }; } diff --git a/packages/sms/src/rest/v1/sms-domain-api.ts b/packages/sms/src/rest/v1/sms-domain-api.ts index eadc3e32..fe29fe18 100644 --- a/packages/sms/src/rest/v1/sms-domain-api.ts +++ b/packages/sms/src/rest/v1/sms-domain-api.ts @@ -12,6 +12,10 @@ import { SupportedSmsRegion, } from '@sinch/sdk-client'; +export const DEFAULT_SMS_REGION_DEPRECATION_WARNING = '** DEPRECATION NOTICE ** ' + + 'The "smsRegion" property will become mandatory in the next major version of the SDK and not default ' + + 'to "us" anymore. Please set it to a valid region.'; + export class SmsDomainApi implements Api { public readonly apiName: string; public client?: ApiClient; @@ -28,6 +32,8 @@ export class SmsDomainApi implements Api { */ public setHostname(hostname: string) { try { + // The following line is a workaround to detect if the hostname is set for the Conversation or Templates API - To be deleted in 2.0 + this.sinchClientParameters.smsHostname = hostname; this.client = this.getSinchClient(); this.client.apiClientOptions.hostname = hostname; } catch (error) { @@ -81,6 +87,10 @@ export class SmsDomainApi implements Api { public getSinchClient(): ApiClient { if (!this.client) { const region = this.sinchClientParameters.smsRegion ?? SmsRegion.UNITED_STATES; + // Deprecation Notice - to remove in 2.0 + if (!this.sinchClientParameters.smsRegion && !this.sinchClientParameters.smsHostname) { + console.warn(DEFAULT_SMS_REGION_DEPRECATION_WARNING); + } if(!Object.values(SupportedSmsRegion).includes(region as SupportedSmsRegion)) { console.warn(`The region "${region}" is not known as a supported region for the SMS API`); } diff --git a/packages/sms/tests/rest/v1/batches/batches-api.test.ts b/packages/sms/tests/rest/v1/batches/batches-api.test.ts index 6f1f94a2..60e05a0b 100644 --- a/packages/sms/tests/rest/v1/batches/batches-api.test.ts +++ b/packages/sms/tests/rest/v1/batches/batches-api.test.ts @@ -220,7 +220,6 @@ describe('BatchesApi', () => { client_reference: 'Sinch Node.js SDK', send_at: new Date('2023-11-20T12:34:56.789Z'), expire_at: new Date('2023-11-23T12:34:56.789Z'), - flash_message: false, udh: textToHex('UserDataHeader'), }; @@ -236,15 +235,6 @@ describe('BatchesApi', () => { }); describe ('sendSMS', () => { - const commonResponseData = { - canceled: false, - created_at: new Date('2023-11-16T12:34:56.789Z'), - modified_at: new Date('2023-11-16T12:34:56.789Z'), - send_at: new Date('2023-11-20T12:34:56.789Z'), - expire_at: new Date('2023-11-23T12:34:56.789Z'), - flash_message: false, - }; - it('should make a POST request to send a message', async () => { // Given const requestData: Sms.SendSMSRequestData = { @@ -268,7 +258,12 @@ describe('BatchesApi', () => { from: '17818510001', body: 'Hello, this is a SMS from Sinch', delivery_report: 'none', - ...commonResponseData, + canceled: false, + created_at: new Date('2023-11-16T12:34:56.789Z'), + modified_at: new Date('2023-11-16T12:34:56.789Z'), + send_at: new Date('2023-11-20T12:34:56.789Z'), + expire_at: new Date('2023-11-23T12:34:56.789Z'), + flash_message: false, }; // When @@ -289,10 +284,23 @@ describe('BatchesApi', () => { to: [ '+33444555666', ], - from: '+17818510001', - body: 'Hello, this is a SMS from Sinch', + body: 'Hello ${name}, this is a SMS from Sinch', + parameters: { + name: { + '+33444555666': 'Bob', + }, + }, delivery_report: 'none', send_at: new Date('2023-11-20T12:34:56.789Z'), + expire_at: new Date('2023-11-23T12:34:56.789Z'), + callback_url: 'https://override.callback.url', + client_reference: 'my-client-reference', + feedback_enabled: true, + flash_message: true, + truncate_concat: true, + max_number_of_message_parts: 2, + from_ton: 6, + from_npi: 18, }, }; @@ -303,9 +311,14 @@ describe('BatchesApi', () => { '33444555666', ], from: '17818510001', - body: 'Hello, this is a SMS from Sinch', + body: 'Hello ${name}, this is a SMS from Sinch', delivery_report: 'none', - ...commonResponseData, + canceled: false, + created_at: new Date('2023-11-16T12:34:56.789Z'), + modified_at: new Date('2023-11-16T12:34:56.789Z'), + send_at: new Date('2023-11-20T12:34:56.789Z'), + expire_at: new Date('2023-11-23T12:34:56.789Z'), + flash_message: false, }; // When @@ -331,6 +344,12 @@ describe('BatchesApi', () => { delivery_report: 'none', udh: textToHex('UserDataHeader'), send_at: new Date('2023-11-20T12:34:56.789Z'), + expire_at: new Date('2023-11-23T12:34:56.789Z'), + callback_url: 'https://override.callback.url', + client_reference: 'my-client-reference', + feedback_enabled: true, + from_ton: 6, + from_npi: 18, }, }; @@ -344,7 +363,11 @@ describe('BatchesApi', () => { body: 'SGVsbG8sIHRoaXMgaXMgYSBTTVMgZnJvbSBTaW5jaA==', delivery_report: 'none', udh: textToHex('UserDataHeader'), - ...commonResponseData, + canceled: false, + created_at: new Date('2023-11-16T12:34:56.789Z'), + modified_at: new Date('2023-11-16T12:34:56.789Z'), + send_at: new Date('2023-11-20T12:34:56.789Z'), + expire_at: new Date('2023-11-23T12:34:56.789Z'), }; // When @@ -368,10 +391,21 @@ describe('BatchesApi', () => { from: '+17818510001', body: { url: 'https://media.body.url', - message: 'Text message coming along with the media file', + message: 'Hello ${name}, this is a SMS from Sinch', + subject: 'Subject of the media message', + }, + parameters: { + name: { + '+33444555666': 'Bob', + }, }, delivery_report: 'none', send_at: new Date('2023-11-20T12:34:56.789Z'), + expire_at: new Date('2023-11-23T12:34:56.789Z'), + callback_url: 'https://override.callback.url', + client_reference: 'my-client-reference', + feedback_enabled: true, + strict_validation: true, }, }; @@ -384,10 +418,15 @@ describe('BatchesApi', () => { from: '17818510001', body: { url: 'https://media.body.url', - message: 'Text message coming along with the media file', + message: 'Hello ${name}, this is a SMS from Sinch', + subject: 'Subject of the media message', }, delivery_report: 'none', - ...commonResponseData, + canceled: false, + created_at: new Date('2023-11-16T12:34:56.789Z'), + modified_at: new Date('2023-11-16T12:34:56.789Z'), + send_at: new Date('2023-11-20T12:34:56.789Z'), + expire_at: new Date('2023-11-23T12:34:56.789Z'), }; // When diff --git a/packages/sms/tests/rest/v1/callbacks/callbacks-webhook.test.ts b/packages/sms/tests/rest/v1/callbacks/callbacks-webhook.test.ts index f9d2b43a..51200627 100644 --- a/packages/sms/tests/rest/v1/callbacks/callbacks-webhook.test.ts +++ b/packages/sms/tests/rest/v1/callbacks/callbacks-webhook.test.ts @@ -1,5 +1,61 @@ import { Sms, SmsCallbackWebhooks } from '../../../../src'; +describe('SMS Webhook Signature Validation', () => { + + // eslint-disable-next-line max-len + const SMS_BODY = '{"at":"2025-01-13T09:22:40.914Z","batch_id":"01JHFFHQ0P99JPPNQPJDV7JTBP","client_reference":"a client reference","code":0,"operator_status_at":"2025-01-13T09:22:00Z","recipient":"33662162466","status":"Delivered","type":"recipient_delivery_report_sms"}'; + const NONCE = '01JHFFHWYY7HSS4FWTMDTQEK8V'; + const TIMESTAMP = '1736760161'; + const SECRET = 'SMSWebhooksSecret'; + const VALID_SIGNATURE = 'ZoHei66PPN/kZjw7hFVfGhJOnml3iGNCMWoyQVcE5o0='; + + let callbackWebhooks: SmsCallbackWebhooks; + + beforeEach(() => { + callbackWebhooks = new SmsCallbackWebhooks(SECRET); + }); + + it('should authorize a valid authorization header', () => { + const headers = { + 'x-sinch-webhook-signature': VALID_SIGNATURE, + 'x-sinch-webhook-signature-algorithm': 'HmacSHA256', + 'x-sinch-webhook-signature-nonce': NONCE, + 'x-sinch-webhook-signature-timestamp': TIMESTAMP, + }; + const validationStatus = callbackWebhooks.validateAuthenticationHeader( + headers, SMS_BODY, + ); + expect(validationStatus).toBeTruthy(); + }); + + it('should reject a signature id the secret is not set', () => { + callbackWebhooks = new SmsCallbackWebhooks(); + const headers = { + 'x-sinch-webhook-signature': VALID_SIGNATURE, + 'x-sinch-webhook-signature-algorithm': 'HmacSHA256', + 'x-sinch-webhook-signature-nonce': NONCE, + 'x-sinch-webhook-signature-timestamp': TIMESTAMP, + }; + const validationStatus = callbackWebhooks.validateAuthenticationHeader( + headers, SMS_BODY, + ); + expect(validationStatus).toBeFalsy(); + }); + + it('should reject an invalid authorization header', () => { + const headers = { + 'x-sinch-webhook-signature': 'invalid-signature', + 'x-sinch-webhook-signature-algorithm': 'HmacSHA256', + 'x-sinch-webhook-signature-nonce': NONCE, + 'x-sinch-webhook-signature-timestamp': TIMESTAMP, + }; + const validationStatus = callbackWebhooks.validateAuthenticationHeader( + headers, SMS_BODY, + ); + expect(validationStatus).toBeFalsy(); + }); +}); + describe('SMS Callback Webhook', () => { let callbackWebhooks: SmsCallbackWebhooks; @@ -10,11 +66,14 @@ describe('SMS Callback Webhook', () => { callbackWebhooks = new SmsCallbackWebhooks(); }); - it('should not throw an error when parsing the \'mo_text\' event', () => { const payload = { + id: '01XXXXX21XXXXX119Z8P1XXXXX', type: 'mo_text', + from: '16051234567', + to: '13185551234', body: 'This is the SMS body', + operator_id: 'operator', sent_at: DATE_AS_STRING, received_at: DATE_AS_STRING, }; @@ -27,9 +86,13 @@ describe('SMS Callback Webhook', () => { it('should not throw an error when parsing the \'mo_binary\' event', () => { const payload = { + id: '01XXXXX21XXXXX119Z8P1XXXXX', type: 'mo_binary', + from: '16051234567', + to: '13185551234', body: 'VGhpcyBpcyB0aGUgU01TIGJvZHk=', udh: '5573657244617461486561646572', + operator_id: 'operator', sent_at: DATE_AS_STRING, received_at: DATE_AS_STRING, }; @@ -40,6 +103,34 @@ describe('SMS Callback Webhook', () => { expect(parsedResult.received_at).toStrictEqual(DATE_AS_DATE); }); + it('should not throw an error when parsing the \'mo_media\' event', () => { + const payload = { + id: '01XXXXX21XXXXX119Z8P1XXXXX', + type: 'mo_media', + from: '16051234567', + to: '13185551234', + body: { + subject: 'This is the subject', + message: 'This is the message', + media: [ + { + url: 'https://some.s3.example.com/inbounds/image.png', + code: 1, + content_type: 'image/png', + status: 'Failed', + }, + ], + }, + sent_at: DATE_AS_STRING, + received_at: DATE_AS_STRING, + }; + const parsedResultFunction = () => callbackWebhooks.parseEvent(payload); + expect(parsedResultFunction).not.toThrow(); + const parsedResult: Sms.MOText = parsedResultFunction() as Sms.MOText; + expect(parsedResult.sent_at).toStrictEqual(DATE_AS_DATE); + expect(parsedResult.received_at).toStrictEqual(DATE_AS_DATE); + }); + it('should not throw an error when parsing the \'delivery_report_sms\' event', () => { const payload = { type: 'delivery_report_sms', @@ -119,7 +210,7 @@ describe('SMS Callback Webhook', () => { unknownProperty: 'anyValue', }; const parsedResultFunction = () => callbackWebhooks.parseEvent(payload); - expect(parsedResultFunction).toThrow('Unknown SMS event'); + expect(parsedResultFunction).toThrow('Unknown SMS event: {"unknownProperty":"anyValue"}'); }); it('should throw an error when parsing a non-existing event type', () => { diff --git a/packages/sms/tests/rest/v1/callbacks/webhooks-events.steps.ts b/packages/sms/tests/rest/v1/callbacks/webhooks-events.steps.ts index b1de8ac8..9a79f2de 100644 --- a/packages/sms/tests/rest/v1/callbacks/webhooks-events.steps.ts +++ b/packages/sms/tests/rest/v1/callbacks/webhooks-events.steps.ts @@ -1,18 +1,21 @@ import { Given, Then, When } from '@cucumber/cucumber'; import { SmsCallbackWebhooks, SmsCallback, Sms } from '../../../../src'; import assert from 'assert'; +import { IncomingHttpHeaders } from 'http'; let smsCallbackWebhook: SmsCallbackWebhooks; let rawEvent: any; let event: SmsCallback; +let formattedHeaders: IncomingHttpHeaders; const processEvent = async (response: Response) => { + formattedHeaders = Object.fromEntries(response.headers.entries()); rawEvent = await response.text(); - event = smsCallbackWebhook.parseEvent(JSON.parse(rawEvent)); + event = smsCallbackWebhook.parseEvent(rawEvent); }; Given('the SMS Webhooks handler is available', () => { - smsCallbackWebhook = new SmsCallbackWebhooks(); + smsCallbackWebhook = new SmsCallbackWebhooks('KayakingTheSwell'); }); When('I send a request to trigger an "incoming SMS" event', async () => { @@ -20,6 +23,11 @@ When('I send a request to trigger an "incoming SMS" event', async () => { await processEvent(response); }); +// eslint-disable-next-line @typescript-eslint/no-unused-vars +Then('the header of the event {string} contains a valid signature', (_event) => { + assert.ok(smsCallbackWebhook.validateAuthenticationHeader(formattedHeaders, rawEvent)); +}); + Then('the SMS event describes an "incoming SMS" event', () => { const incomingSmsEvent = event as Sms.MOText; assert.equal(incomingSmsEvent.id, '01W4FFL35P4NC4K35SMSBATCH8'); @@ -44,7 +52,7 @@ Then('the SMS event describes an "SMS delivery report" event', () => { const status = deliveryReportEvent.statuses[0]; assert.equal(status.code, 0); assert.equal(status.count, 2); - const deliveryStatus: Sms.DeliveryReportStatusEnum = 'Delivered'; + const deliveryStatus: Sms.DeliveryStatusEnum = 'Delivered'; assert.equal(status.status, deliveryStatus); assert.ok(status.recipients); assert.equal(status.recipients[0], '12017777777'); @@ -58,12 +66,17 @@ When('I send a request to trigger an "SMS recipient delivery report" event with await processEvent(response); }); +// eslint-disable-next-line @typescript-eslint/no-unused-vars,max-len +Then('the header of the event {string} with the status {string} contains a valid signature', (_event: string, _status: string) => { + assert.ok(smsCallbackWebhook.validateAuthenticationHeader(formattedHeaders, rawEvent)); +}); + Then('the SMS event describes an SMS recipient delivery report event with the status "Delivered"', () => { const recipientDeliveryReportEvent = event as Sms.RecipientDeliveryReport; assert.equal(recipientDeliveryReportEvent.batch_id, '01W4FFL35P4NC4K35SMSBATCH9'); assert.equal(recipientDeliveryReportEvent.recipient, '12017777777'); assert.equal(recipientDeliveryReportEvent.code, 0); - const deliveryStatus: Sms.DeliveryReportStatusEnum = 'Delivered'; + const deliveryStatus: Sms.DeliveryStatusEnum = 'Delivered'; assert.equal(recipientDeliveryReportEvent.status, deliveryStatus); assert.equal(recipientDeliveryReportEvent.type, 'recipient_delivery_report_sms'); assert.equal(recipientDeliveryReportEvent.client_reference, 'client-ref'); @@ -76,7 +89,7 @@ Then('the SMS event describes an SMS recipient delivery report event with the st assert.equal(recipientDeliveryReportEvent.batch_id, '01W4FFL35P4NC4K35SMSBATCH9'); assert.equal(recipientDeliveryReportEvent.recipient, '12010000000'); assert.equal(recipientDeliveryReportEvent.code, 412); - const deliveryStatus: Sms.DeliveryReportStatusEnum = 'Aborted'; + const deliveryStatus: Sms.DeliveryStatusEnum = 'Aborted'; assert.equal(recipientDeliveryReportEvent.status, deliveryStatus); assert.equal(recipientDeliveryReportEvent.type, 'recipient_delivery_report_sms'); assert.equal(recipientDeliveryReportEvent.client_reference, 'client-ref'); diff --git a/packages/sms/tests/rest/v1/delivery-reports/delivery-reports-api.test.ts b/packages/sms/tests/rest/v1/delivery-reports/delivery-reports-api.test.ts index f4d98518..d79cee7c 100644 --- a/packages/sms/tests/rest/v1/delivery-reports/delivery-reports-api.test.ts +++ b/packages/sms/tests/rest/v1/delivery-reports/delivery-reports-api.test.ts @@ -24,12 +24,15 @@ describe('DeliveryReportsApi', () => { // Given const requestData: Sms.GetDeliveryReportByBatchIdRequestData = { batch_id: '01HF28S9AAGRKWP2CY92BJB569', + code: 402, + status: 'Failed', + type: 'full', }; const expectedResponse: Sms.DeliveryReport = { batch_id: '01HF28S9AAGRKWP2CY92BJB569', statuses: [ { - code: 60, + code: 402, count: 1, recipients: [ '33444555666', @@ -62,7 +65,7 @@ describe('DeliveryReportsApi', () => { }; const expectedResponse: Sms.RecipientDeliveryReport = { batch_id: '01HF28S9AAGRKWP2CY92BJB569', - code: 60, + code: 400, at: new Date('2023-11-12T17:20:00Z'), recipient: '33444555666', status: 'Failed', @@ -83,15 +86,27 @@ describe('DeliveryReportsApi', () => { describe ('getDeliveryReports', () => { it('should make a GET request to list the delivery reports', async () => { // Given - const requestData: Sms.ListDeliveryReportsRequestData = {}; + const requestData: Sms.ListDeliveryReportsRequestData = { + code: [401, 402], + status: ['Failed', 'Cancelled'], + start_date: new Date('2023-11-12T00:00:00Z'), + end_date: new Date('2023-11-19T23:59:59.999Z'), + client_reference: 'my-client-reference', + }; const mockData: Sms.RecipientDeliveryReport[] = [ { batch_id: '01HF28S9AAGRKWP2CY92BJB569', - code: 60, + code: 401, at: new Date('2023-11-12T17:20:00Z'), recipient: '33444555666', status: 'Failed', type: 'recipient_delivery_report_sms', + client_reference: 'my-client-reference', + applied_originator: 'Sinch', + encoding: 'GSM', + number_of_message_parts: 1, + operator: 'Sinch', + operator_status_at: new Date('2023-11-12T17:20:00Z'), }, ]; const expectedResponse = { diff --git a/packages/sms/tests/rest/v1/delivery-reports/delivery-reports.steps.ts b/packages/sms/tests/rest/v1/delivery-reports/delivery-reports.steps.ts index 090f3ef8..c6c581b2 100644 --- a/packages/sms/tests/rest/v1/delivery-reports/delivery-reports.steps.ts +++ b/packages/sms/tests/rest/v1/delivery-reports/delivery-reports.steps.ts @@ -41,13 +41,13 @@ Then('the response contains a summary SMS delivery report', () => { assert.equal(status.code, 15); assert.equal(status.count, 1); assert.equal(status.recipients, undefined); - const failedStatus: Sms.DeliveryReportStatusEnum = 'Failed'; + const failedStatus: Sms.DeliveryStatusEnum = 'Failed'; assert.equal(status.status, failedStatus); status = deliveryReport.statuses[1]; assert.equal(status.code, 0); assert.equal(status.count, 1); assert.equal(status.recipients, undefined); - const deliveredStatus: Sms.DeliveryReportStatusEnum = 'Delivered'; + const deliveredStatus: Sms.DeliveryStatusEnum = 'Delivered'; assert.equal(status.status, deliveredStatus); assert.equal(deliveryReport.total_message_count, 2); assert.equal(deliveryReport.type, 'delivery_report_sms'); @@ -69,7 +69,7 @@ Then('the response contains a full SMS delivery report', () => { assert.equal(status.code, 0); assert.equal(status.count, 1); assert.equal(status.recipients[0], '12017777777'); - const deliveredStatus: Sms.DeliveryReportStatusEnum = 'Delivered'; + const deliveredStatus: Sms.DeliveryStatusEnum = 'Delivered'; assert.equal(status.status, deliveredStatus); }); @@ -85,7 +85,7 @@ Then('the response contains the recipient\'s delivery report details', () => { assert.equal(recipientDeliveryReport.batch_id, '01W4FFL35P4NC4K35SMSBATCH1'); assert.equal(recipientDeliveryReport.recipient, '12017777777'); assert.equal(recipientDeliveryReport.client_reference, 'reference_e2e'); - const deliveredStatus: Sms.DeliveryReportStatusEnum = 'Delivered'; + const deliveredStatus: Sms.DeliveryStatusEnum = 'Delivered'; assert.equal(recipientDeliveryReport.status, deliveredStatus); assert.equal(recipientDeliveryReport.type, 'recipient_delivery_report_sms'); assert.equal(recipientDeliveryReport.code, 0); diff --git a/packages/sms/tests/rest/v1/groups/groups-api.test.ts b/packages/sms/tests/rest/v1/groups/groups-api.test.ts index 691f7fed..2f6eab48 100644 --- a/packages/sms/tests/rest/v1/groups/groups-api.test.ts +++ b/packages/sms/tests/rest/v1/groups/groups-api.test.ts @@ -29,6 +29,21 @@ describe('GroupsApi', () => { '+33111222333', '+33444555666', ], + child_groups: [ + 'groupId1', + 'groupId2', + ], + auto_update: { + to: 'short_code', + add: { + first_word: 'JOIN', + second_word: 'Sinch', + }, + remove: { + first_word: 'LEAVE', + second_word: 'Sinch', + }, + }, }, }; const expectedResponse: Sms.Group = { @@ -37,6 +52,21 @@ describe('GroupsApi', () => { size: 2, created_at: new Date('2023-11-16T12:34:56.789Z'), modified_at: new Date('2023-11-16T12:34:56.789Z'), + auto_update: { + to: 'short_code', + add: { + first_word: 'JOIN', + second_word: 'Sinch', + }, + remove: { + first_word: 'LEAVE', + second_word: 'Sinch', + }, + }, + child_groups: [ + 'groupId1', + 'groupId2', + ], }; // When @@ -103,7 +133,21 @@ describe('GroupsApi', () => { size: 2, created_at: new Date('2023-11-16T12:34:56.789Z'), modified_at: new Date('2023-11-16T12:34:56.789Z'), - child_groups: [], + auto_update: { + to: 'short_code', + add: { + first_word: 'JOIN', + second_word: 'Sinch', + }, + remove: { + first_word: 'LEAVE', + second_word: 'Sinch', + }, + }, + child_groups: [ + 'groupId1', + 'groupId2', + ], }, ]; const expectedResponse = { @@ -135,6 +179,21 @@ describe('GroupsApi', () => { members: [ '+33777888999', ], + auto_update: { + to: 'short_code', + add: { + first_word: 'JOIN', + second_word: 'Sinch', + }, + remove: { + first_word: 'LEAVE', + second_word: 'Sinch', + }, + }, + child_groups: [ + 'groupId1', + 'groupId2', + ], }, }; const expectedResponse: Sms.Group = { @@ -187,10 +246,28 @@ describe('GroupsApi', () => { const requestData: Sms.UpdateGroupRequestData = { group_id: '01HF6EFE21REWJC3B3JWG4FYZ7', updateGroupRequestBody: { + name: 'My new group name', add: [ '+33111222333', '+33444555666', ], + remove: [ + '+33333222111', + '+33666555444', + ], + add_from_group: 'groupId1', + remove_from_group: 'groupId2', + auto_update: { + to: 'short_code', + add: { + first_word: 'JOIN', + second_word: 'Sinch', + }, + remove: { + first_word: 'LEAVE', + second_word: 'Sinch', + }, + }, }, }; const expectedResponse: Sms.Group = { @@ -199,6 +276,21 @@ describe('GroupsApi', () => { size: 3, created_at: new Date('2023-11-16T12:34:56.789Z'), modified_at: new Date('2023-11-16T12:44:56.789Z'), + auto_update: { + to: 'short_code', + add: { + first_word: 'JOIN', + second_word: 'Sinch', + }, + remove: { + first_word: 'LEAVE', + second_word: 'Sinch', + }, + }, + child_groups: [ + 'groupId1', + 'groupId2', + ], }; // When diff --git a/packages/sms/tests/rest/v1/inbounds/inbounds-api.test.ts b/packages/sms/tests/rest/v1/inbounds/inbounds-api.test.ts index 2091f783..3778b348 100644 --- a/packages/sms/tests/rest/v1/inbounds/inbounds-api.test.ts +++ b/packages/sms/tests/rest/v1/inbounds/inbounds-api.test.ts @@ -54,7 +54,7 @@ describe('InboundsApi', () => { }); describe ('retrieveInboundMessage', () => { - it('should make a GET request to retrieve an inbound message by its ID', async () => { + it('should make a GET request to retrieve an inbound message by its ID (mo_text)', async () => { // Given const requestData: Sms.GetInboundMessageRequestData = { inbound_id: '01HEWZK16ENY7SZF7A2YBYGZDP', @@ -67,6 +67,74 @@ describe('InboundsApi', () => { received_at: new Date('2023-11-16T12:34:56.789Z'), sent_at: new Date('2023-11-16T12:33:56.789Z'), type: 'mo_text', + client_reference: 'client_reference_value', + operator_id: 'operator_id_value', + }; + + // When + fixture.get.mockResolvedValue(expectedResponse); + inboundsApi.get = fixture.get; + const response = await inboundsApi.get(requestData); + + // Then + expect(response).toEqual(expectedResponse); + expect(fixture.get).toHaveBeenCalledWith(requestData); + }); + + it('should make a GET request to retrieve an inbound message by its ID (mo_binary)', async () => { + // Given + const requestData: Sms.GetInboundMessageRequestData = { + inbound_id: '01HEWZK16ENY7SZF7A2YBYGZDP', + }; + const expectedResponse: Sms.InboundMessageResponse = { + id: '01HEWZK16ENY7SZF7A2YBYGZDP', + from: '17818510001', + to: '33444555666', + body: 'VGhpcyBpcyB0aGUgU01TIGJvZHk=', + udh: '5573657244617461486561646572', + received_at: new Date('2023-11-16T12:34:56.789Z'), + sent_at: new Date('2023-11-16T12:33:56.789Z'), + type: 'mo_binary', + client_reference: 'client_reference_value', + operator_id: 'operator_id_value', + }; + + // When + fixture.get.mockResolvedValue(expectedResponse); + inboundsApi.get = fixture.get; + const response = await inboundsApi.get(requestData); + + // Then + expect(response).toEqual(expectedResponse); + expect(fixture.get).toHaveBeenCalledWith(requestData); + }); + + it('should make a GET request to retrieve an inbound message by its ID (mo_media)', async () => { + // Given + const requestData: Sms.GetInboundMessageRequestData = { + inbound_id: '01HEWZK16ENY7SZF7A2YBYGZDP', + }; + const expectedResponse: Sms.InboundMessageResponse = { + id: '01HEWZK16ENY7SZF7A2YBYGZDP', + from: '17818510001', + to: '33444555666', + body: { + message: 'A message body', + subject: 'A message subject', + media: [ + { + code: 0, + content_type: 'image/jpeg', + status: 'Uploaded', + url: 'https://example.com/follow-the-white-rabbit.jpg', + }, + ], + }, + received_at: new Date('2023-11-16T12:34:56.789Z'), + sent_at: new Date('2023-11-16T12:33:56.789Z'), + type: 'mo_media', + client_reference: 'client_reference_value', + operator_id: 'operator_id_value', }; // When diff --git a/packages/sms/tests/rest/v1/sms-api.test.ts b/packages/sms/tests/rest/v1/sms-api.test.ts index 08576075..d8645162 100644 --- a/packages/sms/tests/rest/v1/sms-api.test.ts +++ b/packages/sms/tests/rest/v1/sms-api.test.ts @@ -1,10 +1,11 @@ -import { SmsDomainApi } from '../../../src/rest/v1/sms-domain-api'; +import { DEFAULT_SMS_REGION_DEPRECATION_WARNING, SmsDomainApi } from '../../../src/rest/v1/sms-domain-api'; import { ApiHostname, ServicePlanIdCredentials, SmsRegion, UnifiedCredentials } from '@sinch/sdk-client'; describe('SMS API', () => { let smsApi: SmsDomainApi; let paramsWithServicePlanId: ServicePlanIdCredentials & Pick; let paramsWithProjectId: UnifiedCredentials & Pick; + let warnSpy: jest.SpyInstance; const CUSTOM_HOSTNAME = 'https://new.host.name'; beforeEach(() => { @@ -17,11 +18,17 @@ describe('SMS API', () => { keyId: 'KEY_ID', keySecret: 'KEY_SECRET', }; + warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + }); + + afterEach(() => { + jest.clearAllMocks(); }); it('should initialize the client with unified credentials and use the "zt." URL', () => { smsApi = new SmsDomainApi(paramsWithProjectId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); expect(smsApi.client).toBeDefined(); expect(smsApi.client?.apiClientOptions.projectId).toBe('PROJECT_ID'); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://zt.us.sms.api.sinch.com'); @@ -30,6 +37,7 @@ describe('SMS API', () => { it('should initialize the client with servicePlanId credentials and use standard URL', () => { smsApi = new SmsDomainApi(paramsWithServicePlanId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); expect(smsApi.client).toBeDefined(); expect(smsApi.client?.apiClientOptions.projectId).toBe('SERVICE_PLAN_ID'); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://us.sms.api.sinch.com'); @@ -39,15 +47,15 @@ describe('SMS API', () => { paramsWithServicePlanId.smsRegion = SmsRegion.CANADA; smsApi = new SmsDomainApi(paramsWithServicePlanId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://ca.sms.api.sinch.com'); }); it('should log a warning when using an unsupported region', async () => { paramsWithProjectId.smsRegion = 'bzh'; smsApi = new SmsDomainApi(paramsWithProjectId, 'dummy'); - console.warn = jest.fn(); smsApi.getSinchClient(); - expect(console.warn).toHaveBeenCalledWith( + expect(warnSpy).toHaveBeenCalledWith( 'The region "bzh" is not known as a supported region for the SMS API'); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://zt.bzh.sms.api.sinch.com'); }); @@ -56,6 +64,7 @@ describe('SMS API', () => { paramsWithProjectId.smsHostname = CUSTOM_HOSTNAME; smsApi = new SmsDomainApi(paramsWithProjectId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(smsApi.client?.apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); }); @@ -63,18 +72,22 @@ describe('SMS API', () => { paramsWithServicePlanId.smsHostname = CUSTOM_HOSTNAME; smsApi = new SmsDomainApi(paramsWithServicePlanId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(smsApi.client?.apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); }); it('should update the hostname', () => { smsApi = new SmsDomainApi(paramsWithServicePlanId, 'dummy'); smsApi.setHostname(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); + expect(smsApi.client).toBeDefined(); expect(smsApi.client?.apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); }); it ('should update the region with OAuth2 credentials', () => { smsApi = new SmsDomainApi(paramsWithProjectId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); expect(smsApi.client).toBeDefined(); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://zt.us.sms.api.sinch.com'); smsApi.setRegion(SmsRegion.UNITED_STATES); @@ -90,6 +103,7 @@ describe('SMS API', () => { it ('should update the region with servicePlanId credentials', () => { smsApi = new SmsDomainApi(paramsWithServicePlanId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); expect(smsApi.client).toBeDefined(); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://us.sms.api.sinch.com'); smsApi.setRegion(SmsRegion.UNITED_STATES); @@ -111,6 +125,7 @@ describe('SMS API', () => { it('should update the credentials and URL when adding SMS credentials to the unified credentials', () => { smsApi = new SmsDomainApi(paramsWithProjectId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); expect(smsApi.client?.apiClientOptions.projectId).toBe('PROJECT_ID'); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://zt.us.sms.api.sinch.com'); smsApi.setCredentials({ @@ -124,6 +139,7 @@ describe('SMS API', () => { it('should update the credentials and URL when adding SMS credentials on BR region to the unified credentials', () => { smsApi = new SmsDomainApi(paramsWithProjectId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); expect(smsApi.client?.apiClientOptions.projectId).toBe('PROJECT_ID'); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://zt.us.sms.api.sinch.com'); smsApi.setCredentials({ @@ -138,6 +154,7 @@ describe('SMS API', () => { it('should not update the credentials nor URL when adding unified credentials to the SMS credentials', () => { smsApi = new SmsDomainApi(paramsWithServicePlanId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); expect(smsApi.client?.apiClientOptions.projectId).toBe('SERVICE_PLAN_ID'); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://us.sms.api.sinch.com'); smsApi.setCredentials({ @@ -151,14 +168,15 @@ describe('SMS API', () => { it('should update the region in the URL when adding unified credentials and region to the SMS credentials', () => { smsApi = new SmsDomainApi(paramsWithServicePlanId, 'dummy'); smsApi.getSinchClient(); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(smsApi.client?.apiClientOptions.projectId).toBe('SERVICE_PLAN_ID'); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://us.sms.api.sinch.com'); - console.warn = jest.fn(); smsApi.setCredentials({ ...paramsWithProjectId, smsRegion: SmsRegion.BRAZIL, }); - expect(console.warn).toHaveBeenCalledWith( + expect(warnSpy).toHaveBeenCalledWith( 'As the servicePlanId and the apiToken are provided, all other credentials will be disregarded.'); expect(smsApi.client?.apiClientOptions.projectId).toBe('SERVICE_PLAN_ID'); expect(smsApi.client?.apiClientOptions.hostname).toBe('https://br.sms.api.sinch.com'); diff --git a/packages/sms/tests/rest/v1/sms-service.test.ts b/packages/sms/tests/rest/v1/sms-service.test.ts index 590964d9..3bf0f5c3 100644 --- a/packages/sms/tests/rest/v1/sms-service.test.ts +++ b/packages/sms/tests/rest/v1/sms-service.test.ts @@ -1,10 +1,20 @@ import { SinchClientParameters, SmsRegion } from '@sinch/sdk-client'; import { BatchesApi, DeliveryReportsApi, GroupsApi, InboundsApi, SmsService } from '../../../src'; +import { DEFAULT_SMS_REGION_DEPRECATION_WARNING } from '../../../src/rest/v1/sms-domain-api'; describe('SMS Service', () => { const DEFAULT_HOSTNAME = 'https://zt.us.sms.api.sinch.com'; const EUROPE_HOSTNAME = 'https://zt.eu.sms.api.sinch.com'; const CUSTOM_HOSTNAME = 'https://new.host.name'; + let warnSpy: jest.SpyInstance; + + beforeEach(() => { + warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); it('should initialize all the APIs', () => { // Given @@ -23,9 +33,16 @@ describe('SMS Service', () => { expect(smsService.inbounds).toBeInstanceOf(InboundsApi); expect(smsService.groups).toBeInstanceOf(GroupsApi); expect(smsService.batches.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(smsService.deliveryReports.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(smsService.inbounds.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); + warnSpy.mockClear(); expect(smsService.groups.getSinchClient().apiClientOptions.hostname).toBe(DEFAULT_HOSTNAME); + expect(warnSpy).toHaveBeenCalledWith(DEFAULT_SMS_REGION_DEPRECATION_WARNING); }); it('should set a custom hostname for all APIs', () => { @@ -42,9 +59,13 @@ describe('SMS Service', () => { // Then expect(smsService.batches.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(smsService.deliveryReports.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(smsService.inbounds.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(smsService.groups.getSinchClient().apiClientOptions.hostname).toBe(CUSTOM_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); }); it('should update the default region for all APIs', () => { @@ -61,8 +82,12 @@ describe('SMS Service', () => { // Then expect(smsService.batches.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(smsService.deliveryReports.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(smsService.inbounds.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); expect(smsService.groups.getSinchClient().apiClientOptions.hostname).toBe(EUROPE_HOSTNAME); + expect(warnSpy).toHaveBeenCalledTimes(0); }); }); diff --git a/packages/verification/CHANGELOG.md b/packages/verification/CHANGELOG.md index 6e98766f..1e2edab6 100644 --- a/packages/verification/CHANGELOG.md +++ b/packages/verification/CHANGELOG.md @@ -1,3 +1,12 @@ +## Version 1.3.0 +- [Tech] Update dependency `@sinch/sdk-client` to `1.3.0`. +- [Feature] Support string input when parsing webhook events +- [Feature] Support `VerificationSmsDeliveredEvent` as callback event + +## Version 1.2.1 +- [Tech] Update dependency `@sinch/sdk-client` to `1.2.1` +- [Bugfix] Fix refresh token issue + ## Version 1.2.0 - [Tech] Update dependency `@sinch/sdk-client` to `1.2.0`. - [Feature] Support the `locale` parameter in the `SmsOptions` interface. diff --git a/packages/verification/package.json b/packages/verification/package.json index 63213a36..bab0a180 100644 --- a/packages/verification/package.json +++ b/packages/verification/package.json @@ -1,6 +1,6 @@ { "name": "@sinch/verification", - "version": "1.2.0", + "version": "1.3.0", "description": "Sinch Verification API", "homepage": "", "repository": { @@ -29,7 +29,7 @@ "test:e2e": "cucumber-js" }, "dependencies": { - "@sinch/sdk-client": "^1.2.0" + "@sinch/sdk-client": "^1.3.0" }, "devDependencies": {}, "publishConfig": { diff --git a/packages/verification/src/models/v1/mod-callbacks/index.ts b/packages/verification/src/models/v1/mod-callbacks/index.ts index 7a45a655..e8db2943 100644 --- a/packages/verification/src/models/v1/mod-callbacks/index.ts +++ b/packages/verification/src/models/v1/mod-callbacks/index.ts @@ -9,3 +9,5 @@ export * from './verification-request-event-response'; // 'Verification Result Event' received from Sinch server (no response data needed) export * from './verification-result-event'; export * from './verification-result-event-response'; +// 'Verification Sms Delivered Event' received from Sinch server +export * from './verification-sms-delivered-event'; diff --git a/packages/verification/src/models/v1/mod-callbacks/sms-request-event-response/sms-request-event-response.ts b/packages/verification/src/models/v1/mod-callbacks/sms-request-event-response/sms-request-event-response.ts index a6cc8294..21d9bd55 100644 --- a/packages/verification/src/models/v1/mod-callbacks/sms-request-event-response/sms-request-event-response.ts +++ b/packages/verification/src/models/v1/mod-callbacks/sms-request-event-response/sms-request-event-response.ts @@ -8,7 +8,7 @@ export interface SmsRequestEventResponse { } export interface SmsProperties { - /** The SMS PIN that should be used. By default, the Sinch dashboard will automatically generate PIN codes for SMS verification. If you want to set your own PIN, you can specify it in the response to the Verification Request Event. */ + /** The SMS OTP that should be used. By default, the Sinch dashboard will automatically generate OTP codes for SMS verification. If you want to set your own OTP, you can specify it in the response to the Verification Request Event. */ code?: string; /** List of strings */ acceptLanguage?: string[]; diff --git a/packages/verification/src/models/v1/mod-callbacks/verification-callback-event.ts b/packages/verification/src/models/v1/mod-callbacks/verification-callback-event.ts index 2ce27cad..f8dfa988 100644 --- a/packages/verification/src/models/v1/mod-callbacks/verification-callback-event.ts +++ b/packages/verification/src/models/v1/mod-callbacks/verification-callback-event.ts @@ -1,4 +1,8 @@ import { VerificationRequestEvent } from './verification-request-event'; import { VerificationResultEvent } from './verification-result-event'; +import { VerificationSmsDeliveredEvent } from './verification-sms-delivered-event'; -export type VerificationCallbackEvent = VerificationRequestEvent | VerificationResultEvent; +export type VerificationCallbackEvent = + VerificationRequestEvent + | VerificationResultEvent + | VerificationSmsDeliveredEvent; diff --git a/packages/verification/src/models/v1/mod-callbacks/verification-request-event/index.ts b/packages/verification/src/models/v1/mod-callbacks/verification-request-event/index.ts index 7b8a4b6f..9ff5ffcf 100644 --- a/packages/verification/src/models/v1/mod-callbacks/verification-request-event/index.ts +++ b/packages/verification/src/models/v1/mod-callbacks/verification-request-event/index.ts @@ -1 +1 @@ -export type { VerificationRequestEvent, MethodEnum } from './verification-request-event'; +export type { VerificationRequestEvent, VerificationRequestMethod, MethodEnum } from './verification-request-event'; diff --git a/packages/verification/src/models/v1/mod-callbacks/verification-request-event/verification-request-event.ts b/packages/verification/src/models/v1/mod-callbacks/verification-request-event/verification-request-event.ts index 198ec43f..13db3020 100644 --- a/packages/verification/src/models/v1/mod-callbacks/verification-request-event/verification-request-event.ts +++ b/packages/verification/src/models/v1/mod-callbacks/verification-request-event/verification-request-event.ts @@ -8,7 +8,7 @@ export interface VerificationRequestEvent { /** The type of the event. */ event: 'VerificationRequestEvent'; /** The verification method. */ - method: MethodEnum; + method: VerificationRequestMethod; /** @see Identity */ identity: Identity; /** The amount of money and currency of the verification request. */ @@ -23,5 +23,7 @@ export interface VerificationRequestEvent { acceptLanguage?: string[]; } +/** @deprecated Use VerificationRequestMethod instead */ export type MethodEnum = 'sms' | 'flashcall' | 'callout'; +export type VerificationRequestMethod = 'sms' | 'flashcall' | 'callout'; diff --git a/packages/verification/src/models/v1/mod-callbacks/verification-result-event/index.ts b/packages/verification/src/models/v1/mod-callbacks/verification-result-event/index.ts index 4ec70891..71b75077 100644 --- a/packages/verification/src/models/v1/mod-callbacks/verification-result-event/index.ts +++ b/packages/verification/src/models/v1/mod-callbacks/verification-result-event/index.ts @@ -1 +1 @@ -export type { VerificationResultEvent } from './verification-result-event'; +export type { VerificationResultEvent, VerificationResultMethod } from './verification-result-event'; diff --git a/packages/verification/src/models/v1/mod-callbacks/verification-result-event/verification-result-event.ts b/packages/verification/src/models/v1/mod-callbacks/verification-result-event/verification-result-event.ts index a3df263e..415aa191 100644 --- a/packages/verification/src/models/v1/mod-callbacks/verification-result-event/verification-result-event.ts +++ b/packages/verification/src/models/v1/mod-callbacks/verification-result-event/verification-result-event.ts @@ -8,7 +8,7 @@ export interface VerificationResultEvent { /** The type of the event. */ event: 'VerificationResultEvent'; /** The verification method. */ - method: MethodEnum; + method: VerificationResultMethod; /** @see Identity */ identity: Identity; /** The status of the verification request. */ @@ -23,4 +23,4 @@ export interface VerificationResultEvent { custom?: string; } -export type MethodEnum = 'sms' | 'flashcall' | 'callout' | 'seamless'; +export type VerificationResultMethod = 'sms' | 'flashcall' | 'callout' | 'seamless'; diff --git a/packages/verification/src/models/v1/mod-callbacks/verification-sms-delivered-event/index.ts b/packages/verification/src/models/v1/mod-callbacks/verification-sms-delivered-event/index.ts new file mode 100644 index 00000000..8709894d --- /dev/null +++ b/packages/verification/src/models/v1/mod-callbacks/verification-sms-delivered-event/index.ts @@ -0,0 +1 @@ +export type { VerificationSmsDeliveredEvent } from './verification-sms-delivered-event'; diff --git a/packages/verification/src/models/v1/mod-callbacks/verification-sms-delivered-event/verification-sms-delivered-event.ts b/packages/verification/src/models/v1/mod-callbacks/verification-sms-delivered-event/verification-sms-delivered-event.ts new file mode 100644 index 00000000..d82208d1 --- /dev/null +++ b/packages/verification/src/models/v1/mod-callbacks/verification-sms-delivered-event/verification-sms-delivered-event.ts @@ -0,0 +1,18 @@ +import { Identity } from '../../identity'; + +export interface VerificationSmsDeliveredEvent { + /** The ID of the verification request. */ + id: string; + /** The type of the event. */ + event: 'VerificationSmsDeliveredEvent'; + /** The verification method. */ + method: 'sms' | string; + /** @see Identity */ + identity: Identity; + /** The result of the SMS delivery. Possible values can be extended in the future. */ + smsResult: 'Successful' | 'Failed' | string; + /** Used to pass your own reference in the request for tracking purposes. */ + reference?: string; + /** Can be used to pass custom data in the request. */ + custom?: string; +} diff --git a/packages/verification/src/models/v1/start-verification-request/start-verification-request.ts b/packages/verification/src/models/v1/start-verification-request/start-verification-request.ts index 5f4d4346..1158705f 100644 --- a/packages/verification/src/models/v1/start-verification-request/start-verification-request.ts +++ b/packages/verification/src/models/v1/start-verification-request/start-verification-request.ts @@ -57,7 +57,7 @@ export interface SmsOptions { export type CodeType = 'Numeric' | 'Alpha' | 'Alphanumeric'; /** - * An optional object for flashCall verifications. It allows you to specify dial time out parameter for flashCall. FlashCallOptions object can be specified optionally, and only if the verification request was triggered from your backend (no SDK client) through an [Application signed request](/docs/voice/api-reference/authentication/signed-request). + * An optional object for Flash Call Verification, considered only when the verification request originates from your backend (not an SDK client) via an [Application signed request](https://developers.sinch.com/docs/voice/api-reference/authentication/signed-request). */ export interface FlashCallOptions { /** The dial timeout in seconds. */ diff --git a/packages/verification/src/models/v1/verification-report-request/verification-report-request.ts b/packages/verification/src/models/v1/verification-report-request/verification-report-request.ts index 0ed08e86..c6aee798 100644 --- a/packages/verification/src/models/v1/verification-report-request/verification-report-request.ts +++ b/packages/verification/src/models/v1/verification-report-request/verification-report-request.ts @@ -16,7 +16,7 @@ export interface FlashCallVerificationReportRequest { } interface FlashCallContent { - /** The caller ID of the FlashCall. */ + /** The caller ID of the flash call. Caller ID in flash call verification refers to the phone number from which the call was made to the user's device. The verification system uses this incoming number as One Time Password (OTP) */ cli: string; } diff --git a/packages/verification/src/rest/v1/callbacks/callbacks-webhook.ts b/packages/verification/src/rest/v1/callbacks/callbacks-webhook.ts index 4fec4b6e..f3277562 100644 --- a/packages/verification/src/rest/v1/callbacks/callbacks-webhook.ts +++ b/packages/verification/src/rest/v1/callbacks/callbacks-webhook.ts @@ -1,8 +1,13 @@ -import { VerificationCallbackEvent, VerificationRequestEvent, VerificationResultEvent } from '../../../models'; +import { + VerificationCallbackEvent, + VerificationRequestEvent, + VerificationResultEvent, + VerificationSmsDeliveredEvent, +} from '../../../models'; import { CallbackProcessor, SinchClientParameters, validateAuthenticationHeader } from '@sinch/sdk-client'; import { IncomingHttpHeaders } from 'http'; -/** @deprecated Use Verification.VerificationCallback instead */ +/** @deprecated Use Verification.VerificationCallbackEvent instead */ export type VerificationCallback = VerificationRequestEvent | VerificationResultEvent; export class VerificationCallbackWebhooks implements CallbackProcessor{ @@ -43,12 +48,17 @@ export class VerificationCallbackWebhooks implements CallbackProcessor { let callbackWebhooks: VerificationCallbackWebhooks; @@ -72,6 +73,20 @@ describe('Verification Callback Webhook', () => { expect(parsedResultFunction).not.toThrow(); }); + it('should NOT thrown an error when parsing the \'VerificationSmsDeliveredEvent\' event', () => { + const payload = { + event: 'VerificationSmsDeliveredEvent', + id: 'eventId', + identity: { + type: 'number', + endpoint: '+1234567890', + }, + smsResult: 'Failed', + } as VerificationSmsDeliveredEvent; + const parsedResultFunction = () => callbackWebhooks.parseEvent(payload); + expect(parsedResultFunction).not.toThrow(); + }); + it('should throw an error when parsing a random object', () => { const payload = { unknownProperty: 'anyValue', diff --git a/packages/verification/tests/rest/v1/callbacks/webhooks-events.steps.ts b/packages/verification/tests/rest/v1/callbacks/webhooks-events.steps.ts index 26183495..583f2e67 100644 --- a/packages/verification/tests/rest/v1/callbacks/webhooks-events.steps.ts +++ b/packages/verification/tests/rest/v1/callbacks/webhooks-events.steps.ts @@ -9,18 +9,15 @@ let event: Verification.VerificationCallbackEvent; let formattedHeaders: IncomingHttpHeaders; const processEvent = async (response: Response) => { - formattedHeaders = {}; - response.headers.forEach((value, name) => { - formattedHeaders[name.toLowerCase()] = value; - }); + formattedHeaders = Object.fromEntries(response.headers.entries()); rawEvent = await response.text(); - event = verificationCallbackWebhook.parseEvent(JSON.parse(rawEvent)); + event = verificationCallbackWebhook.parseEvent(rawEvent); }; Given('the Verification Webhooks handler is available', () => { verificationCallbackWebhook = new VerificationCallbackWebhooks({ applicationKey: 'appKey', - applicationSecret: 'appSecret', + applicationSecret: 'YXBwU2VjcmV0', // base64 value for 'appSecret' }); }); @@ -29,7 +26,8 @@ When('I send a request to trigger a "Verification Request" event', async () => { await processEvent(response); }); -Then('the header of the Verification event "Verification Request" contains a valid authorization', () => { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +Then('the header of the Verification event {string} contains a valid authorization', (_eventType: string) => { assert.ok(verificationCallbackWebhook.validateAuthenticationHeader( formattedHeaders, rawEvent, @@ -66,14 +64,6 @@ When('I send a request to trigger a "Verification Result" event', async () => { await processEvent(response); }); -Then('the header of the Verification event "Verification Result" contains a valid authorization', () => { - assert.ok(verificationCallbackWebhook.validateAuthenticationHeader( - formattedHeaders, - rawEvent, - '/webhooks/verification', - 'POST')); -}); - Then('the Verification event describes a "Verification Result" event type', () => { const verificationRequestEvent = event as Verification.VerificationResultEvent; assert.equal(verificationRequestEvent.id, '1ce0ffee-c0de-5eed-d00d-f00dfeed1337'); @@ -87,3 +77,22 @@ Then('the Verification event describes a "Verification Result" event type', () = assert.equal(verificationRequestEvent.identity.type, identity.type); assert.equal(verificationRequestEvent.identity.endpoint, identity.endpoint); }); + +When('I send a request to trigger a "Verification SMS Delivered Event" event', async () => { + const response = await fetch('http://localhost:3018/webhooks/verification/verification-sms-delivery-event'); + await processEvent(response); +}); + +Then('the Verification event describes a "Verification SMS Delivered Event" event type', () => { + const verificationSmsDeliveredEvent = event as Verification.VerificationSmsDeliveredEvent; + assert.equal(verificationSmsDeliveredEvent.smsResult, 'Successful'); + assert.equal(verificationSmsDeliveredEvent.id, '0198511c-d1d1-8bf3-109b-85455d310123'); + assert.equal(verificationSmsDeliveredEvent.event, 'VerificationSmsDeliveredEvent'); + assert.equal(verificationSmsDeliveredEvent.method, 'sms'); + const identity: Verification.Identity = { + type: 'number', + endpoint: '+33123456789', + }; + assert.equal(verificationSmsDeliveredEvent.identity.type, identity.type); + assert.equal(verificationSmsDeliveredEvent.identity.endpoint, identity.endpoint); +}); diff --git a/packages/verification/tests/rest/v1/verifications/report.steps.ts b/packages/verification/tests/rest/v1/verifications/report.steps.ts index 9d0055bf..07e79096 100644 --- a/packages/verification/tests/rest/v1/verifications/report.steps.ts +++ b/packages/verification/tests/rest/v1/verifications/report.steps.ts @@ -16,9 +16,10 @@ Given('the Verification service "Report" is available', () => { reportVerificationApi = verificationService.verifications; }); -When('I send a request to report an SMS verification with the verification ID', async () => { +// eslint-disable-next-line max-len +When('I send a request to report an SMS verification by {string} with the verification ID {string}', async (_method: string, verificationId: string) => { reportSmsResponse = await reportVerificationApi.reportSmsById({ - id: '1ce0ffee-c0de-5eed-d00d-f00dfeed1337', + id: verificationId, reportSmsVerificationByIdRequestBody: { sms: { code: 'OQP1', @@ -27,9 +28,10 @@ When('I send a request to report an SMS verification with the verification ID', }); }); -When('I send a request to report an SMS verification with the phone number', async () => { +// eslint-disable-next-line max-len +When('I send a request to report an SMS verification by {string} with the phone number {string}', async (_method: string, phoneNumber: string) => { reportSmsResponse = await reportVerificationApi.reportSmsByIdentity({ - endpoint: '+46123456789', + endpoint: phoneNumber, reportSmsVerificationByIdentityRequestBody: { sms: { code: 'OQP1', @@ -38,16 +40,18 @@ When('I send a request to report an SMS verification with the phone number', asy }); }); -Then('the response contains the details of an SMS verification report', () => { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +Then('the response by {string} contains the details of an SMS verification report', (_method: string) => { assert.equal(reportSmsResponse.id, '1ce0ffee-c0de-5eed-d00d-f00dfeed1337'); assert.equal(reportSmsResponse.method, 'sms'); const successfulStatus: Verification.VerificationStatusEnum = 'SUCCESSFUL'; assert.equal(reportSmsResponse.status, successfulStatus); }); -When('I send a request to report a Phone Call verification with the verification ID', async () => { +// eslint-disable-next-line max-len +When('I send a request to report a Phone Call verification by {string} with the verification ID {string}', async (_method: string, verificationId: string) => { reportPhoneCallResponse = await reportVerificationApi.reportPhoneCallById({ - id: '1ce0ffee-c0de-5eed-d11d-f00dfeed1337', + id: verificationId, reportPhoneCallVerificationByIdRequestBody: { phoneCall: { code: '123456', @@ -56,9 +60,10 @@ When('I send a request to report a Phone Call verification with the verification }); }); -When('I send a request to report a Phone Call verification with the phone number', async () => { +// eslint-disable-next-line max-len +When('I send a request to report a Phone Call verification by {string} with the phone number {string}', async (_method: string, phoneNumber: string) => { reportPhoneCallResponse = await reportVerificationApi.reportPhoneCallByIdentity({ - endpoint: '+33612345678', + endpoint: phoneNumber, reportPhoneCallVerificationByIdentityRequestBody: { phoneCall: { code: '123456', @@ -67,7 +72,8 @@ When('I send a request to report a Phone Call verification with the phone number }); }); -Then('the response contains the details of a Phone Call verification report', () => { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +Then('the response by {string} contains the details of a Phone Call verification report', (_method: string) => { assert.equal(reportPhoneCallResponse.id, '1ce0ffee-c0de-5eed-d11d-f00dfeed1337'); assert.equal(reportPhoneCallResponse.method, 'callout'); const successfulStatus: Verification.VerificationStatusEnum = 'SUCCESSFUL'; @@ -75,9 +81,10 @@ Then('the response contains the details of a Phone Call verification report', () assert.equal(reportPhoneCallResponse.callComplete, true); }); -When('I send a request to report a Flash Call verification with the verification ID', async () => { +// eslint-disable-next-line max-len +When('I send a request to report a Flash Call verification by {string} with the verification ID {string}', async (_method: string, verificationId: string) => { reportFlashCallResponse = await reportVerificationApi.reportFlashCallById({ - id: '1ce0ffee-c0de-5eed-d11d-f00dfeed1337', + id: verificationId, reportFlashCallVerificationByIdRequestBody: { flashCall: { cli: '+18156540001', @@ -86,9 +93,10 @@ When('I send a request to report a Flash Call verification with the verification }); }); -When('I send a request to report a Flash Call verification with the phone number', async () => { +// eslint-disable-next-line max-len +When('I send a request to report a Flash Call verification by {string} with the phone number {string}', async (_method: string, phoneNumber: string) => { reportFlashCallResponse = await reportVerificationApi.reportFlashCallByIdentity({ - endpoint: '+33612345678', + endpoint: phoneNumber, reportFlashCallVerificationByIdentityRequestBody: { flashCall: { cli: '+18156540001', @@ -97,7 +105,8 @@ When('I send a request to report a Flash Call verification with the phone number }); }); -Then('the response contains the details of a Flash Call verification report', () => { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +Then('the response by {string} contains the details of a Flash Call verification report', (_method: string) => { assert.equal(reportFlashCallResponse.id, '1ce0ffee-c0de-5eed-d22d-f00dfeed1337'); assert.equal(reportFlashCallResponse.method, 'flashcall'); const successfulStatus: Verification.VerificationStatusEnum = 'SUCCESSFUL'; @@ -106,7 +115,8 @@ Then('the response contains the details of a Flash Call verification report', () assert.equal(reportFlashCallResponse.callComplete, true); }); -Then('the response contains the details of a failed Flash Call verification report', () => { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +Then('the response by {string} contains the details of a failed Flash Call verification report', (_method: string) => { assert.equal(reportFlashCallResponse.id, '1ce0ffee-c0de-5eed-d22d-f00dfeed1337'); assert.equal(reportFlashCallResponse.method, 'flashcall'); const failStatus: Verification.VerificationStatusEnum = 'FAIL'; diff --git a/packages/voice/CHANGELOG.md b/packages/voice/CHANGELOG.md index 210944f6..c0db211c 100644 --- a/packages/voice/CHANGELOG.md +++ b/packages/voice/CHANGELOG.md @@ -1,3 +1,18 @@ +## Version 1.3.0 +- [Tech] Update dependency `@sinch/sdk-client` to `1.3.0`. +- [Feature] Add enum values for properties previsously defined as `string` +- [Feature] Support Voice ICE instruction `stopRecording` +- [Feature] Support Voice PIE action `connectPstn` +- [Feature] Support Voice ICE action `connectStream` (beta feature) +- [Feature] Support string input when parsing webhook events +- **Deprecations** + - Interface `Participant` is deprecated, use `Destination` instead + - Endpoint `QueryNumber` is deprecated, it will be replaced by the `NumberLookup` API + +## Version 1.2.1 +- [Tech] Update dependency `@sinch/sdk-client` to `1.2.1` +- [Bugfix] Fix refresh token issue + ## Version 1.2.0 - [Tech] Update dependency `@sinch/sdk-client` to `1.2.0`. - [Feature] In the interface `Participant`, the property `type` defines a list of string values on top of a generic string. diff --git a/packages/voice/package.json b/packages/voice/package.json index a27aff2e..15b503a1 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -1,6 +1,6 @@ { "name": "@sinch/voice", - "version": "1.2.0", + "version": "1.3.0", "description": "Sinch Voice API", "homepage": "", "repository": { @@ -29,7 +29,7 @@ "test:e2e": "cucumber-js" }, "dependencies": { - "@sinch/sdk-client": "^1.2.0" + "@sinch/sdk-client": "^1.3.0" }, "devDependencies": {}, "publishConfig": { diff --git a/packages/voice/src/models/v1/answering-machine-detection/answering-machine-detection.ts b/packages/voice/src/models/v1/answering-machine-detection/answering-machine-detection.ts new file mode 100644 index 00000000..ac83e916 --- /dev/null +++ b/packages/voice/src/models/v1/answering-machine-detection/answering-machine-detection.ts @@ -0,0 +1,8 @@ +export interface AnsweringMachineDetection { + /** The determination by the system of who answered the call. */ + status?: 'machine' | 'human' | 'notsure' | 'hangup' | string; + /** The reason that the system used to determine who answered the call. */ + reason?: 'longgreeting' | 'initialsilence' | 'greeting' | 'beep' | 'n/a' | string; + /** The length of the call. */ + duration?: number; +} diff --git a/packages/voice/src/models/v1/answering-machine-detection/index.ts b/packages/voice/src/models/v1/answering-machine-detection/index.ts new file mode 100644 index 00000000..538aa615 --- /dev/null +++ b/packages/voice/src/models/v1/answering-machine-detection/index.ts @@ -0,0 +1 @@ +export type { AnsweringMachineDetection } from './answering-machine-detection'; diff --git a/packages/voice/src/models/v1/assign-numbers/assign-numbers.ts b/packages/voice/src/models/v1/assign-numbers/assign-numbers.ts index 4ecdf09c..9db738f8 100644 --- a/packages/voice/src/models/v1/assign-numbers/assign-numbers.ts +++ b/packages/voice/src/models/v1/assign-numbers/assign-numbers.ts @@ -1,3 +1,5 @@ +import { Capability } from '../enums'; + export interface AssignNumbers { /** The phone number or list of numbers in E.164 format. */ @@ -5,5 +7,5 @@ export interface AssignNumbers { /** indicates the application where the number(s) will be assigned. If empty, the application key that is used to sign the request will be used. */ applicationkey?: string; /** indicates the DID capability that needs to be assigned to the chosen application. Valid values are 'voice' and 'sms'. Please note that the DID needs to support the selected capability. */ - capability?: 'voice' | 'sms'; + capability?: Capability; } diff --git a/packages/voice/src/models/v1/callout-response/callout-response.ts b/packages/voice/src/models/v1/callout-response/callout-response.ts index 460e04e5..c819e771 100644 --- a/packages/voice/src/models/v1/callout-response/callout-response.ts +++ b/packages/voice/src/models/v1/callout-response/callout-response.ts @@ -6,5 +6,3 @@ export interface CalloutResponse { /** The returned call identifier. */ callId?: string; } - - diff --git a/packages/voice/src/models/v1/conference-callout-request/conference-callout-request.ts b/packages/voice/src/models/v1/conference-callout-request/conference-callout-request.ts index 54a96829..41e3f6b2 100644 --- a/packages/voice/src/models/v1/conference-callout-request/conference-callout-request.ts +++ b/packages/voice/src/models/v1/conference-callout-request/conference-callout-request.ts @@ -1,19 +1,18 @@ -import { Destination } from '../destination'; +import { CalloutDestination } from '../destination'; import { ConferenceDtmfOptions } from '../conference-dtmf-options'; -import { MusicOnHold } from '../enums'; +import { Domain, MusicOnHold } from '../enums'; /** * The conference callout calls a phone number or a user. When the call is answered, it's connected to a conference room. */ export interface ConferenceCalloutRequest { - /** The number that will be displayed as the incoming caller. To set your own CLI, you may use your verified number or your Dashboard number. The number must be in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format. */ cli?: string; - /** @see Destination */ - destination: Destination; + /** The type of device and number or endpoint to call. */ + destination: CalloutDestination; /** The conferenceId of the conference to which you want the callee to join. If the conferenceId doesn't exist a conference room will be created. */ conferenceId: string; - /** Options to control how DTMF signals are used by the participant in the conference. For information on how to use this feature, read more [here](../../../conference-dtmf). */ + /** Options to control how DTMF signals are used by the participant in the conference. For information on how to use this feature, read more [here](https://developers.sinch.com/docs/voice/api-reference/conference-dtmf). */ conferenceDtmfOptions?: ConferenceDtmfOptions; /** When the destination picks up, this DTMF tones will be played to the callee. Valid characters in the string are "0"-"9", "#" and "w". A "w" will render a 500 ms pause. Example: "ww1234#w#" will render a 1s pause, the DTMF tones "1", "2", "3", "4" and "#" followed by a 0.5s pause and finally the DTMF tone for "#". This can be used if the callout destination for instance require a conference PIN code or an extension to be entered. */ dtmf?: string; @@ -24,7 +23,7 @@ export interface ConferenceCalloutRequest { enableDice?: boolean; /** If `enablePie` is set to true and the application has a callback URL specified, you will receive a PIE callback after a `runMenu` action, with the information of the action that the user took. If it's set to false, no PIE event will be sent to your backend. */ enablePie?: boolean; - /** The voice and language you want to use for the prompts. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](../../../voice-locales/) */ + /** The voice and language you want to use for the prompts. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](https://developers.sinch.com/docs/voice/api-reference/voice-locales/) */ locale?: string; /** The text that will be spoken as a greeting. */ greeting?: string; @@ -32,6 +31,6 @@ export interface ConferenceCalloutRequest { mohClass?: MusicOnHold; /** Used to input custom data. */ custom?: string; - /** can be either “pstn” for PSTN endpoint or “mxp” for data (app or web) clients. */ - domain?: string; + /** @see Domain */ + domain?: Domain; } diff --git a/packages/voice/src/models/v1/conference-dtmf-options/conference-dtmf-options.ts b/packages/voice/src/models/v1/conference-dtmf-options/conference-dtmf-options.ts index 1a9cdd2f..36434380 100644 --- a/packages/voice/src/models/v1/conference-dtmf-options/conference-dtmf-options.ts +++ b/packages/voice/src/models/v1/conference-dtmf-options/conference-dtmf-options.ts @@ -1,14 +1,11 @@ /** - * Options to control how DTMF signals are used by the participant in the conference. For information on how to use this feature, read more [here](../../conference-dtmf). + * Options to control how DTMF signals are used by the participant in the conference. For information on how to use this feature, read more [here](https://developers.sinch.com/docs/voice/api-reference/conference-dtmf). */ export interface ConferenceDtmfOptions { - /** Determines what DTMF mode the participant will use in the call. */ - mode?: 'ignore' | 'forward' | 'detect'; + mode?: 'ignore' | 'forward' | 'detect' | string; /** The maximum number of accepted digits before sending the collected input via a PIE callback. The default value is `1`. If the value is greater than `1`, the PIE callback is triggered by one of the three following events: - No additional digit is entered before the `timeoutMills` timeout period has elapsed. - The `#` character is entered. - The maximum number of digits has been entered. */ maxDigits?: number; /** The number of milliseconds that the system will wait between entered digits before triggering the PIE callback. The default value is `3000`. */ timeoutMills?: number; } - - diff --git a/packages/voice/src/models/v1/custom-callout-request/custom-callout-request.ts b/packages/voice/src/models/v1/custom-callout-request/custom-callout-request.ts index 4cc0f999..2270564e 100644 --- a/packages/voice/src/models/v1/custom-callout-request/custom-callout-request.ts +++ b/packages/voice/src/models/v1/custom-callout-request/custom-callout-request.ts @@ -1,24 +1,23 @@ -import { Destination } from '../destination'; +import { CalloutDestination } from '../destination'; /** * The custom callout, the server initiates a call from the servers that can be controlled by specifying how the call should progress at each call event. */ export interface CustomCalloutRequest { - /** The number that will be displayed as the incoming caller, to set your own CLI, you may use your verified number or your Dashboard virtual number, it must be in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format. */ cli?: string; - /** @see Destination */ - destination?: Destination; + /** The type of device and number or endpoint to call. */ + destination?: CalloutDestination; /** When the destination picks up, this DTMF tones will be played to the callee. Valid characters in the string are "0"-"9", "#", and "w". A "w" will render a 500 ms pause. For example, "ww1234#w#" will render a 1s pause, the DTMF tones "1", "2", "3", "4" and "#" followed by a 0.5s pause and finally the DTMF tone for "#". This can be used if the callout destination for instance require a conference PIN code or an extension to be entered. */ dtmf?: string; /** Can be used to input custom data. */ custom?: string; /** The maximum amount of time in seconds that the call will last. */ maxDuration?: number; - /** You can use inline SVAML to replace a callback URL when using custom callouts. Ensure that the JSON object is escaped correctly. If inline ICE SVAML is passed, exclude *cli* and *destination* properties from the *customCallout* request body. Example: ```"{"action":{"name":"connectPstn","number":"46000000001","maxDuration":90}}"``` */ + /** You can use inline [SVAML](https://developers.sinch.com/docs/voice/api-reference/svaml/) to replace a callback URL when using custom callouts. Ensure that the JSON object is escaped correctly. If inline ICE SVAML is passed, exclude *cli* and *destination* properties from the *customCallout* request body. Example: ```"{"action":{"name":"connectPstn","number":"46000000001","maxDuration":90}}"``` */ ice?: string; - /** You can use inline SVAML to replace a callback URL when using custom callouts. Ensure that the JSON object is escaped correctly. Example: ```"{"action": {"name": "RunMenu","locale": "en-US","menus": [{"id": "main","mainPrompt": "#tts[ Welcome to the main menu. Press 1 for a callback or 2 for a cancel]","timeoutMills": 5000,"options": [ {"dtmf": "1","action": "return(callback)"}, {"dtmf": "2","action": "return(cancel)"}]}]}}"``` */ + /** You can use inline [SVAML](https://developers.sinch.com/docs/voice/api-reference/svaml/) to replace a callback URL when using custom callouts. Ensure that the JSON object is escaped correctly. Example: ```"{"action": {"name": "RunMenu","locale": "en-US","menus": [{"id": "main","mainPrompt": "#tts[ Welcome to the main menu. Press 1 for a callback or 2 for a cancel]","timeoutMills": 5000,"options": [ {"dtmf": "1","action": "return(callback)"}, {"dtmf": "2","action": "return(cancel)"}]}]}}"``` */ ace?: string; - /** Note: PIE callbacks are not available for DATA Calls; only PSTN and SIP calls. You can use inline SVAML to replace a callback URL when using custom callouts. Ensure that the JSON object is escaped correctly. A PIE event will contain a value chosen from an IVR choice. Usually a PIE event wil contain a URL to a callback sever that will receive the choice and be able to parse it. This could result in further SVAML or some other application logic function. Example: ```"https://your-application-server-host/application"``` */ + /** Note: PIE callbacks are not available for DATA Calls; only PSTN and SIP calls. You can use inline [SVAML](https://developers.sinch.com/docs/voice/api-reference/svaml/) to replace a callback URL when using custom callouts. Ensure that the JSON object is escaped correctly. A PIE event will contain a value chosen from an IVR choice. Usually a PIE event wil contain a URL to a callback sever that will receive the choice and be able to parse it. This could result in further SVAML or some other application logic function. Example: ```"https://your-application-server-host/application"``` */ pie?: string; } diff --git a/packages/voice/src/models/v1/destination/destination.ts b/packages/voice/src/models/v1/destination/destination.ts index 27000138..1b725e8b 100644 --- a/packages/voice/src/models/v1/destination/destination.ts +++ b/packages/voice/src/models/v1/destination/destination.ts @@ -1,10 +1,64 @@ +/** + * Known destination from event (ICE, DICE) + */ +export type Destination = DestinationDid | DestinationMxp | DestinationPstn | DestinationSip; + +/** + * Known callout destination (TTS, Conference, Custom) + */ +export type CalloutDestination = DestinationMxp | DestinationPstn | DestinationSip; + +/** + * An object containing information about the participant (caller or callee) of the call. + */ +export type Participant = Destination; + +/** + * The type of device and phone number called. + */ +export interface DestinationDid { + /** Type `did` for Direct Inward Dialling */ + type: 'did' | 'Did' | string; + /** Number that the caller has called */ + endpoint: string; +} + +/** + * The type of device and number or endpoint to call. + */ +export interface DestinationMxp { + /** Type `userName` used for data endpoints. */ + type: 'username' | 'Username' | string; + /** For type `userName` the value is the username for a data endpoint. */ + endpoint: string; +} + /** * The type of device and number or endpoint to call. */ -export interface Destination { +export interface DestinationPstn { + /** Type `number` used for PSTN endpoints. */ + type: 'number' | 'Number' | string; + /** If the type is `number` the value of the endpoint is a phone number. */ + endpoint: string; +} - /** Can be of type `number` for PSTN endpoints or of type `username` for data endpoints. */ - type: 'number' | 'username'; - /** If the type is `number` the value of the endpoint is a phone number. If the type is `username` the value is the username for a data endpoint. */ +/** + * The type of device and number or endpoint to call. + */ +export interface DestinationSip { + /** Type `sip` for SIP infrastructures. */ + type: 'sip' | 'Sip' | string; + /** For type `sip` the value is the SIP address for a SIP endpoint. */ + endpoint: string; +} + +/** + * Specifies where to route the Stream call. + */ +export interface DestinationStream { + /** This attribute defines the streaming protocol - currently only Websocket is supported. */ + type: 'websocket' | 'Websocket' | string; + /** The Stream/Websocket server address. */ endpoint: string; } diff --git a/packages/voice/src/models/v1/destination/index.ts b/packages/voice/src/models/v1/destination/index.ts index eea5c14e..6d49fa69 100644 --- a/packages/voice/src/models/v1/destination/index.ts +++ b/packages/voice/src/models/v1/destination/index.ts @@ -1 +1,10 @@ -export type { Destination } from './destination'; +export type { + CalloutDestination, + Destination, + Participant, + DestinationDid, + DestinationMxp, + DestinationPstn, + DestinationSip, + DestinationStream, +} from './destination'; diff --git a/packages/voice/src/models/v1/enums.ts b/packages/voice/src/models/v1/enums.ts index b88b2ac7..7e9f7e8a 100644 --- a/packages/voice/src/models/v1/enums.ts +++ b/packages/voice/src/models/v1/enums.ts @@ -1,5 +1,11 @@ -export type ResultEnum = 'N/A' | 'ANSWERED' | 'BUSY' | 'NOANSWER' | 'FAILED'; +/** + * Contains the result of a call. + */ +export type ResultEnum = 'N/A' | 'ANSWERED' | 'BUSY' | 'NOANSWER' | 'FAILED' | string; +/** + * Contains the reason why a call ended. + */ export type ReasonEnum = 'N/A' | 'TIMEOUT' | 'CALLERHANGUP' @@ -9,7 +15,8 @@ export type ReasonEnum = 'N/A' | 'MANAGERHANGUP' | 'CANCEL' | 'GENERALERROR' - | 'INVALIDSVAMLACTION'; + | 'INVALIDSVAMLACTION' + | string; export type TtsVoice = 'arb' | 'arb/female' | 'Zeina' | 'az-AZ' | 'az-AZ/female' | 'az-AZ/male' |'Banu' | 'Babek' @@ -66,5 +73,19 @@ export type TtsVoice = 'arb' | 'arb/female' | 'Zeina' | 'uz-UZ' | 'uz-UZ/female' | 'uz-UZ/male' | 'Madina' | 'Sardor' | 'vi-VN' | 'vi-VN/female' | 'vi-VN/male' | 'HoaiMy' | 'NamMinh' | 'cy-GB' | 'cy-GB/female' | 'Gwyneth' + | string; -export type MusicOnHold = 'ring' | 'music1' | 'music2' | 'music3'; +/** + * Available Music On Hold values + */ +export type MusicOnHold = 'ring' | 'music1' | 'music2' | 'music3' | string; + +/** + * Valid values are `voice` and `sms` + */ +export type Capability = 'voice' | 'sms' | string; + +/** + * Can be either `pstn` for PSTN endpoint or `mxp` for data (app or web) clients. + */ +export type Domain = 'pstn' | 'mxp' | 'PSTN' | 'MXP'; diff --git a/packages/voice/src/models/v1/get-call-information/get-call-information.ts b/packages/voice/src/models/v1/get-call-information/get-call-information.ts index efc6f321..84d63eec 100644 --- a/packages/voice/src/models/v1/get-call-information/get-call-information.ts +++ b/packages/voice/src/models/v1/get-call-information/get-call-information.ts @@ -1,6 +1,6 @@ import { ReasonEnum, ResultEnum } from '../enums'; import { VoicePrice } from '../voice-price'; -import { Participant } from '../participant'; +import { Participant } from '../destination'; export interface GetCallInformation { @@ -9,13 +9,13 @@ export interface GetCallInformation { /** Contains the callee information. */ to?: Participant; /** Must be `pstn` for PSTN. */ - domain?: 'pstn'; + domain?: 'pstn' | string; /** The unique identifier of the call. */ callId?: string; /** The duration of the call in seconds. */ duration?: number; /** The status of the call. Either `ONGOING` or `FINAL` */ - status?: 'ONGOING' | 'FINAL'; + status?: 'ONGOING' | 'FINAL' | string; /** Contains the result of a call. */ result?: ResultEnum; /** Contains the reason why a call ended. */ diff --git a/packages/voice/src/models/v1/get-callbacks/get-callbacks.ts b/packages/voice/src/models/v1/get-callbacks/get-callbacks.ts index 35e3a565..3b137a2d 100644 --- a/packages/voice/src/models/v1/get-callbacks/get-callbacks.ts +++ b/packages/voice/src/models/v1/get-callbacks/get-callbacks.ts @@ -1,11 +1,12 @@ export interface GetCallbacks { - /** Gets primary and if configured fallback callback URLs */ url?: GetCallbacksUrl; } +/** + * Contains primary and/or fallback callback URLs + */ export interface GetCallbacksUrl { - /** Your primary callback URL */ primary?: string; /** Your fallback callback URL (returned if configured). It is used only if Sinch platform gets a timeout or error from your primary callback URL. */ diff --git a/packages/voice/src/models/v1/get-conference-info-response/get-conference-info-response.ts b/packages/voice/src/models/v1/get-conference-info-response/get-conference-info-response.ts index a48eb051..30e312c8 100644 --- a/packages/voice/src/models/v1/get-conference-info-response/get-conference-info-response.ts +++ b/packages/voice/src/models/v1/get-conference-info-response/get-conference-info-response.ts @@ -2,13 +2,11 @@ * The response returns information about the participants in the conference. */ export interface GetConferenceInfoResponse { - - /** List of GetConferenceInfoResponseParticipantsInners */ + /** List of ParticipantDetails */ participants?: ParticipantDetails[]; } export interface ParticipantDetails { - /** The phone number of the PSTN participant that was connected in the conference, or whatever was passed as CLI for data originated/terminated calls. */ cli?: string; /** The callId of the call leg that the participant joined the conference. */ diff --git a/packages/voice/src/models/v1/helper.ts b/packages/voice/src/models/v1/helper.ts index 73494f7a..c05c3877 100644 --- a/packages/voice/src/models/v1/helper.ts +++ b/packages/voice/src/models/v1/helper.ts @@ -3,6 +3,7 @@ import { ConnectMxpProps, ConnectPstnProps, ConnectSipProps, + ConnectStreamProps, ParkProps, RunMenuProps, StartRecordingOptions, @@ -10,6 +11,7 @@ import { SvamlActionConnectMxp, SvamlActionConnectPstn, SvamlActionConnectSip, + SvamlActionConnectStream, SvamlActionContinue, SvamlActionHangup, SvamlActionPark, @@ -111,6 +113,12 @@ export const svamlActionHelper = { ...connectSipProps, }; }, + buildConnectStream: (connectStreamProps: ConnectStreamProps): SvamlActionConnectStream => { + return { + name: 'connectStream', + ...connectStreamProps, + }; + }, buildContinue: (): SvamlActionContinue => { return { name: 'continue', @@ -208,6 +216,7 @@ export const iceActionHelper = { connectMxp: svamlActionHelper.buildConnectMxp, connectConf: svamlActionHelper.buildConnectConf, connectSip: svamlActionHelper.buildConnectSip, + connectStream: svamlActionHelper.buildConnectStream, runMenu: svamlActionHelper.buildRunMenu, park: svamlActionHelper.buildPark, }; @@ -218,6 +227,7 @@ export const iceInstructionHelper = { sendDtmf: svamlInstructionHelper.buildSendDtmf, setCookie: svamlInstructionHelper.buildSetCookie, startRecording: svamlInstructionHelper.buildStartRecording, + stopRecording: svamlInstructionHelper.buildStopRecording, answer: svamlInstructionHelper.buildAnswer, }; @@ -225,6 +235,7 @@ export const pieActionHelper = { hangup: svamlActionHelper.buildHangup, continue: svamlActionHelper.buildContinue, connectConf: svamlActionHelper.buildConnectConf, + connectPstn: svamlActionHelper.buildConnectPstn, connectSip: svamlActionHelper.buildConnectSip, runMenu: svamlActionHelper.buildRunMenu, }; diff --git a/packages/voice/src/models/v1/index.ts b/packages/voice/src/models/v1/index.ts index bbc8cac5..fa877ca3 100644 --- a/packages/voice/src/models/v1/index.ts +++ b/packages/voice/src/models/v1/index.ts @@ -1,3 +1,4 @@ +export * from './answering-machine-detection'; export * from './call-header'; export * from './conference-callout-request'; export * from './conference-dtmf-options'; @@ -11,7 +12,6 @@ export * from './callout-response'; export * from './get-conference-info-response'; export * from './list-numbers-response'; export * from './query-number-response'; -export * from './participant'; export * from './manage-conference-participant-request'; export * from './menu'; export * from './option'; diff --git a/packages/voice/src/models/v1/list-numbers-response/list-numbers-response.ts b/packages/voice/src/models/v1/list-numbers-response/list-numbers-response.ts index 553d0282..72c22062 100644 --- a/packages/voice/src/models/v1/list-numbers-response/list-numbers-response.ts +++ b/packages/voice/src/models/v1/list-numbers-response/list-numbers-response.ts @@ -1,15 +1,15 @@ -export interface ListNumbersResponse { +import { Capability } from '../enums'; +export interface ListNumbersResponse { /** The object type. Will always be list of numbers, associated application keys and capabilities */ numbers?: NumberInformation[]; } export interface NumberInformation { - /** Numbers that you own in E.164 format. */ number?: string; /** Indicates the application where the number(s) will be assigned. If no number is assigned the applicationkey will not be returned. */ applicationkey?: string; /** indicates the DID capability that needs to be assigned to the chosen application. Valid values are 'voice' and 'sms'. Please note that the DID needs to support the selected capability. */ - capability?: 'voice' | 'sms'; + capability?: Capability; } diff --git a/packages/voice/src/models/v1/manage-conference-participant-request/manage-conference-participant-request.ts b/packages/voice/src/models/v1/manage-conference-participant-request/manage-conference-participant-request.ts index a7add3c9..417d8d7b 100644 --- a/packages/voice/src/models/v1/manage-conference-participant-request/manage-conference-participant-request.ts +++ b/packages/voice/src/models/v1/manage-conference-participant-request/manage-conference-participant-request.ts @@ -4,9 +4,8 @@ import { MusicOnHold } from '../enums'; * */ export interface ManageConferenceParticipantRequest { - /** Action to apply on conference participant. */ - command: 'mute' | 'unmute' | 'onhold' | 'resume'; + command: 'mute' | 'unmute' | 'onhold' | 'resume' | string; /** Means "music on hold". If this optional parameter is included, plays music to the first participant in a conference while they're alone and waiting for other participants to join. If `moh` isn't specified, the user will only hear silence while alone in the conference. This property is only available to use with the `onhold` command. */ moh?: MusicOnHold; } diff --git a/packages/voice/src/models/v1/menu/menu.ts b/packages/voice/src/models/v1/menu/menu.ts index 20759132..53686ed3 100644 --- a/packages/voice/src/models/v1/menu/menu.ts +++ b/packages/voice/src/models/v1/menu/menu.ts @@ -4,16 +4,15 @@ import { Option } from '../option'; * An IVR menu that contains an audio prompt as well as configured options. */ export interface Menu { - /** The identifier of a menu. One menu must have the ID value of `main`. */ id: string; - /** The main voice prompt that the user hears when the menu starts the first time. You can use text-to-speech using the `#tts[]` element, SSML commands using the `#ssml[]` element, pre-recorded messages, or URL references to external media resources. You can use multiple prompts by separating each prompt with a semi-colon (`;`). If multiple prompts are used, they will be played in the order they are specified, without any pauses between playback. For external media resources, you can use an `#href[...]` or directly specify the full URL. Check the [Supported audio formats](/docs/voice/api-reference/supported-audio-formats) section for more information. */ + /** The main voice prompt that the user hears when the menu starts the first time. You can use text-to-speech using the `#tts[]` element, SSML commands using the `#ssml[]` element, pre-recorded messages, or URL references to external media resources. You can use multiple prompts by separating each prompt with a semi-colon (`;`). If multiple prompts are used, they will be played in the order they are specified, without any pauses between playback. For external media resources, you can use an `#href[...]` or directly specify the full URL. Check the [Supported audio formats](https://developers.sinch.com/docs/voice/api-reference/supported-audio-formats) section for more information. */ mainPrompt?: string; - /** The prompt that will be played if valid or expected DTMF digits are not entered. You can use text-to-speech using the `#tts[]` element, SSML commands using the `#ssml[]` element, pre-recorded messages, or URL references to external media resources. You can use multiple prompts by separating each prompt with a semi-colon (`;`). If multiple prompts are used, they will be played in the order they are specified, without any pauses between playback. For external media resources, you can use an `#href[...]` or directly specify the full URL. Check the [Supported audio formats](/docs/voice/api-reference/supported-audio-formats) section for more information. */ + /** The prompt that will be played if valid or expected DTMF digits are not entered. You can use text-to-speech using the `#tts[]` element, SSML commands using the `#ssml[]` element, pre-recorded messages, or URL references to external media resources. You can use multiple prompts by separating each prompt with a semi-colon (`;`). If multiple prompts are used, they will be played in the order they are specified, without any pauses between playback. For external media resources, you can use an `#href[...]` or directly specify the full URL. Check the [Supported audio formats](https://developers.sinch.com/docs/voice/api-reference/supported-audio-formats) section for more information. */ repeatPrompt?: string; /** The number of times that the `repeatPrompt` is played. */ repeats?: number; - /** The maximum number of digits expected for a user to enter. Once these digits are collected, a [Prompt Input Event (PIE)](../../voice/tag/Callbacks/#tag/Callbacks/operation/pie) is triggered containing these digits. */ + /** The maximum number of digits expected for a user to enter. Once these digits are collected, a [Prompt Input Event (PIE)](https://developers.sinch.com/voice/tag/Callbacks/#tag/Callbacks/operation/pie) is triggered containing these digits. */ maxDigits?: number; /** Determines silence for the purposes of collecting a DTMF or voice response in milliseconds. If the timeout is reached, the response is considered completed and will be submitted. */ timeoutMills?: number; @@ -22,5 +21,3 @@ export interface Menu { /** The set of options available in the menu. */ options?: Option[]; } - - diff --git a/packages/voice/src/models/v1/mod-callbacks/ace-request/ace-request.ts b/packages/voice/src/models/v1/mod-callbacks/ace-request/ace-request.ts index 7170cfa9..593a6c78 100644 --- a/packages/voice/src/models/v1/mod-callbacks/ace-request/ace-request.ts +++ b/packages/voice/src/models/v1/mod-callbacks/ace-request/ace-request.ts @@ -1,8 +1,9 @@ +import { AnsweringMachineDetection } from '../../answering-machine-detection'; + /** * The request body of an Answered Call Event. */ export interface AceRequest { - /** Must have the value `ace`. */ event?: 'ace'; /** The unique ID assigned to this call. */ @@ -13,18 +14,8 @@ export interface AceRequest { version?: number; /** A string that can be used to pass custom information related to the call. */ custom?: string; - /** If [Answering Machine Detection](/docs/voice/api-reference/amd_v2) (AMD) is enabled, this object contains information about whether the call was answered by a machine. */ + /** If [Answering Machine Detection](https://developers.sinch.com/docs/voice/api-reference/amd_v2) (AMD) is enabled, this object contains information about whether the call was answered by a machine. */ amd?: AnsweringMachineDetection; /** The unique application key. You can find it in the Sinch [dashboard](https://dashboard.sinch.com/voice/apps). */ applicationKey?: string; } - -export interface AnsweringMachineDetection { - - /** The determination by the system of who answered the call. */ - status?: string; - /** The reason that the system used to determine who answered the call. */ - reason?: string; - /** The length of the call. */ - duration?: number; -} diff --git a/packages/voice/src/models/v1/mod-callbacks/ace-request/index.ts b/packages/voice/src/models/v1/mod-callbacks/ace-request/index.ts index 6e0f7b57..5ae17def 100644 --- a/packages/voice/src/models/v1/mod-callbacks/ace-request/index.ts +++ b/packages/voice/src/models/v1/mod-callbacks/ace-request/index.ts @@ -1 +1 @@ -export type { AceRequest, AnsweringMachineDetection } from './ace-request'; +export type { AceRequest } from './ace-request'; diff --git a/packages/voice/src/models/v1/mod-callbacks/dice-request/dice-request.ts b/packages/voice/src/models/v1/mod-callbacks/dice-request/dice-request.ts index a3d7861f..28161b53 100644 --- a/packages/voice/src/models/v1/mod-callbacks/dice-request/dice-request.ts +++ b/packages/voice/src/models/v1/mod-callbacks/dice-request/dice-request.ts @@ -1,13 +1,12 @@ import { CallHeader } from '../../call-header'; import { VoicePrice } from '../../voice-price'; -import { Participant } from '../../participant'; -import { ReasonEnum, ResultEnum } from '../../enums'; +import { ResultEnum } from '../../enums'; +import { Destination } from '../../destination'; /** * The request body of a Disconnected Call Event. */ export interface DiceRequest { - /** Must have the value `dice`. */ event?: 'dice'; /** The unique ID assigned to this call. */ @@ -15,7 +14,7 @@ export interface DiceRequest { /** The timestamp in UTC format. */ timestamp?: Date; /** The reason the call was disconnected. */ - reason?: ReasonEnum; + reason?: DiceReasonEnum; /** The result of the call. */ result?: ResultEnum; /** The current API version. */ @@ -26,16 +25,17 @@ export interface DiceRequest { debit?: VoicePrice; /** An object containing currency and rate per minute for the call. */ userRate?: VoicePrice; - /** @see Participant */ - to?: Participant; + /** An object containing information about the recipient of the call. */ + to?: Destination; /** The duration of the call in seconds. */ duration?: number; /** Information about the initiator of the call. */ from?: string; - /** If the call was initiated by a Sinch SDK client, call headers are the headers specified by the *caller* client. Read more about call headers [here](../../../call-headers/). */ + /** If the call was initiated by a Sinch SDK client, call headers are the headers specified by the *caller* client. Read more about call headers [here](https://developers.sinch.com/call-headers/). */ callHeaders?: CallHeader[]; /** The unique application key. You can find it in the Sinch [dashboard](https://dashboard.sinch.com/voice/apps). */ applicationKey?: string; } - +export type DiceReasonEnum = 'N/A' | 'TIMEOUT' | 'CALLERHANGUP' | 'CALLEEHANGUP' | 'BLOCKED' | 'MANAGERHANGUP' + | 'NOCREDITPARTNER' | 'GENERALERROR' | 'CANCEL' | 'USERNOTFOUND' | 'CALLBACKERROR' | string; diff --git a/packages/voice/src/models/v1/mod-callbacks/dice-request/index.ts b/packages/voice/src/models/v1/mod-callbacks/dice-request/index.ts index 720f793d..4762d9c2 100644 --- a/packages/voice/src/models/v1/mod-callbacks/dice-request/index.ts +++ b/packages/voice/src/models/v1/mod-callbacks/dice-request/index.ts @@ -1 +1 @@ -export type { DiceRequest } from './dice-request'; +export type { DiceRequest, DiceReasonEnum } from './dice-request'; diff --git a/packages/voice/src/models/v1/mod-callbacks/ice-request/ice-request.ts b/packages/voice/src/models/v1/mod-callbacks/ice-request/ice-request.ts index c816fbe0..e43c5998 100644 --- a/packages/voice/src/models/v1/mod-callbacks/ice-request/ice-request.ts +++ b/packages/voice/src/models/v1/mod-callbacks/ice-request/ice-request.ts @@ -1,12 +1,12 @@ import { CallHeader } from '../../call-header'; -import { Participant } from '../../participant'; import { VoicePrice } from '../../voice-price'; +import { Domain } from '../../enums'; +import { Destination } from '../../destination'; /** * The request body of an Incoming Call Event. */ export interface IceRequest { - /** Must have the value `ice`. */ event?: 'ice'; /** The unique ID assigned to this call. */ @@ -24,18 +24,18 @@ export interface IceRequest { /** The number that will be displayed to the recipient of the call. To set your own CLI, you may use your verified number or your Dashboard virtual number and add it to the `connectPSTN` SVAML response to the Incoming Call Event request. It must be in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format. */ cli?: string; /** An object containing information about the recipient of the call. */ - to?: Participant; + to?: Destination; /** The domain destination of the incoming call. */ - domain?: string; + domain?: Domain; /** The unique application key. You can find it in the Sinch [dashboard](https://dashboard.sinch.com/voice/apps). */ applicationKey?: string; /** The origination domain of the incoming call. */ - originationType?: string; + originationType?: Domain; /** The duration of the call in seconds. */ duration?: number; /** The redirected dialled number identification service. */ rdnis?: string; - /** If the call is initiated by a Sinch SDK client, call headers are the headers specified by the *caller* client. Read more about call headers [here](../../../call-headers). */ + /** If the call is initiated by a Sinch SDK client, call headers are the headers specified by the *caller* client. Read more about call headers [here](https://developers.sinch.com/call-headers). */ callHeaders?: CallHeader[]; } diff --git a/packages/voice/src/models/v1/mod-callbacks/ice-response/ice-response.ts b/packages/voice/src/models/v1/mod-callbacks/ice-response/ice-response.ts index 3915d7eb..a7053a40 100644 --- a/packages/voice/src/models/v1/mod-callbacks/ice-response/ice-response.ts +++ b/packages/voice/src/models/v1/mod-callbacks/ice-response/ice-response.ts @@ -4,6 +4,7 @@ import { SvamlActionConnectMxp, SvamlActionConnectConf, SvamlActionConnectSip, + SvamlActionConnectStream, SvamlActionRunMenu, SvamlActionPark, SvamlInstructionPlayFiles, @@ -19,6 +20,7 @@ export type IceSvamlAction = SvamlActionHangup | SvamlActionConnectMxp | SvamlActionConnectConf | SvamlActionConnectSip + | SvamlActionConnectStream | SvamlActionRunMenu | SvamlActionPark; diff --git a/packages/voice/src/models/v1/mod-callbacks/notify-request/notify-request.ts b/packages/voice/src/models/v1/mod-callbacks/notify-request/notify-request.ts index 8383d6b0..d0ec9127 100644 --- a/packages/voice/src/models/v1/mod-callbacks/notify-request/notify-request.ts +++ b/packages/voice/src/models/v1/mod-callbacks/notify-request/notify-request.ts @@ -1,3 +1,5 @@ +import { AnsweringMachineDetection } from '../../answering-machine-detection'; + /** * The request body of a Notify Event. */ @@ -15,8 +17,10 @@ export interface NotifyRequest { type?: NotifyRequestType; /** An optional parameter containing notification-specific information. */ custom?: string; - /** The details about the 'amd' or 'amd_beep' event type */ - amd?: AmdStatus; + /** The results of the detection and/or the beep detection. */ + amd?: AnsweringMachineDetection; + /** The URL where the recording or transcription is available */ + destination?: string } type NotifyRequestType = @@ -26,12 +30,3 @@ type NotifyRequestType = | 'amd' | 'amd_beep' | string; // wildcard as there is no specification of the list of all notifications - -interface AmdStatus { - /** */ - status?: 'machine' | 'human' | string; - /** */ - reason?: 'greeting' | 'beep' | 'n/a' | string; - /** */ - duration?: number; -} diff --git a/packages/voice/src/models/v1/mod-callbacks/pie-request/index.ts b/packages/voice/src/models/v1/mod-callbacks/pie-request/index.ts index 57d27616..12e1bc6f 100644 --- a/packages/voice/src/models/v1/mod-callbacks/pie-request/index.ts +++ b/packages/voice/src/models/v1/mod-callbacks/pie-request/index.ts @@ -1 +1 @@ -export type { PieRequest, MenuResult, PieInformationType } from './pie-request'; +export type { PieRequest, MenuResult } from './pie-request'; diff --git a/packages/voice/src/models/v1/mod-callbacks/pie-request/pie-request.ts b/packages/voice/src/models/v1/mod-callbacks/pie-request/pie-request.ts index dff7c992..249d67eb 100644 --- a/packages/voice/src/models/v1/mod-callbacks/pie-request/pie-request.ts +++ b/packages/voice/src/models/v1/mod-callbacks/pie-request/pie-request.ts @@ -2,7 +2,6 @@ * The request body of a Prompt Input Event. */ export interface PieRequest { - /** Must have the value `pie`. */ event?: 'pie'; /** The unique ID assigned to this call. */ @@ -20,15 +19,12 @@ export interface PieRequest { } export interface MenuResult { - /** The ID of the menu that triggered the prompt input event. */ menuId?: string; /** The type of information that's returned. */ - type?: PieInformationType; + type?: 'error' | 'return' | 'sequence' | 'timeout' | 'hangup' | 'invalidinput' | string; /** The value of the returned information. */ value?: string; /** The type of input received. */ - inputMethod?: string; + inputMethod?: 'dtmf' | 'voice' | string; } - -export type PieInformationType = 'error' | 'return' | 'sequence' | 'timeout' | 'hangup' | 'invalidinput'; diff --git a/packages/voice/src/models/v1/mod-svaml/index.ts b/packages/voice/src/models/v1/mod-svaml/index.ts index 683db975..f127fe16 100644 --- a/packages/voice/src/models/v1/mod-svaml/index.ts +++ b/packages/voice/src/models/v1/mod-svaml/index.ts @@ -3,6 +3,7 @@ export * from './svaml-action-connect-conf'; export * from './svaml-action-connect-mxp'; export * from './svaml-action-connect-pstn'; export * from './svaml-action-connect-sip'; +export * from './svaml-action-connect-stream'; export * from './svaml-action-continue'; export * from './svaml-action-hangup'; export * from './svaml-action-park'; diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-conf/svaml-action-connect-conf.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-conf/svaml-action-connect-conf.ts index ab731ca5..62a9895d 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-conf/svaml-action-connect-conf.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-conf/svaml-action-connect-conf.ts @@ -2,15 +2,14 @@ import { ConferenceDtmfOptions } from '../../conference-dtmf-options'; import { MusicOnHold } from '../../enums'; /** - * Connects an incoming call to a conference. Available to use in a response to an [Incoming Call Event](../../voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback. + * Connects an incoming call to a conference. Available to use in a response to an [Incoming Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback. */ export interface SvamlActionConnectConf { - /** The name property. Must have the value `connectConf`. */ name: 'connectConf'; /** The unique identifier of the conference. Shouldn't exceed 64 characters. */ conferenceId: string; - /** Options to control how DTMF signals are used by the participant in the conference. For information on how to use this feature, read more [here](../../conference-dtmf). */ + /** Options to control how DTMF signals are used by the participant in the conference. For information on how to use this feature, read more [here](https://developers.sinch.com/docs/voice/api-reference/conference-dtmf). */ conferenceDtmfOptions?: ConferenceDtmfOptions; /** Means "music on hold". If this optional parameter is included, plays music to the first participant in a conference while they're alone and waiting for other participants to join. If `moh` isn't specified, the user will only hear silence while alone in the conference. */ moh?: MusicOnHold; diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-mxp/svaml-action-connect-mxp.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-mxp/svaml-action-connect-mxp.ts index b5425fd2..1c3c390b 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-mxp/svaml-action-connect-mxp.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-mxp/svaml-action-connect-mxp.ts @@ -1,16 +1,15 @@ import { CallHeader } from '../../call-header'; -import { Destination } from '../../destination'; +import { DestinationMxp } from '../../destination'; /** - * Determines how an application-to-application call is connected. Available to use in a response to an [Incoming Call Event](../../voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback. + * Determines how an application-to-application call is connected. Available to use in a response to an [Incoming Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback. */ export interface SvamlActionConnectMxp { - /** The name property. Must have the value `connectMxp`. */ name: 'connectMxp'; /** Allows you to specify or override the final destination of the call. If the final destination of the call is not dialed, this is a required parameter. */ - destination?: Destination; - /** An optional parameter that allows you to specify or override call headers provided to the receiving Sinch SDK client. Read more about call headers [here](../../call-headers/). */ + destination?: DestinationMxp; + /** An optional parameter that allows you to specify or override call headers provided to the receiving Sinch SDK client. Read more about call headers [here](https://developers.sinch.com/docs/voice/api-reference/call-headers/). */ callHeaders?: CallHeader[]; } diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-pstn/svaml-action-connect-pstn.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-pstn/svaml-action-connect-pstn.ts index 6d5c1056..aa9f582f 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-pstn/svaml-action-connect-pstn.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-pstn/svaml-action-connect-pstn.ts @@ -1,8 +1,7 @@ /** - * Determines how a PSTN call is connected. Available to use in a response to an [Incoming Call Event](../../voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback. + * Determines how a PSTN call is connected. Available to use in a response to an [Incoming Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback. */ export interface SvamlActionConnectPstn { - /** The name property. Must have the value `connectPstn`. */ name: 'connectPstn'; /** Used to override where PSTN call is connected. If not specified, the extension the client called is used. */ @@ -15,7 +14,7 @@ export interface SvamlActionConnectPstn { dialTimeout?: number; /** Used to override the CLI (or caller ID) of the client. The phone number of the person who initiated the call is shown as the CLI. To set your own CLI, you may use your verified number or your Dashboard virtual number. */ cli?: string; - /** If enabled, suppresses [ACE](../../voice/tag/Callbacks/#tag/Callbacks/operation/ace) and [DICE](../../voice/tag/Callbacks/#tag/Callbacks/operation/dice) callbacks for the call. */ + /** If enabled, suppresses [ACE](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ace) and [DICE](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/dice) callbacks for the call. */ suppressCallbacks?: boolean; /** A string that determines the DTMF tones to play to the callee when the call is picked up. Valid characters are: `0-9`, `#`, and `w`. `w` renders a 500ms pause. For example, the string `ww1234#w#`, plays a 1-second pause, the DTMF tones for `1`, `2`, `3`, `4`, and `#`, followed by a 500ms pause and finally the `#` tone. This is useful if the callout destination requires a conference PIN code or an extension. If there is a calling party, it will hear progress while the DTMF is sent. */ dtmf?: string; @@ -26,7 +25,6 @@ export interface SvamlActionConnectPstn { } export interface EnableAmd { - /** Sets whether AMD is enabled. */ enabled?: boolean; /** To be set to 'true' in order to be notified when the beep is detected */ diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-sip/index.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-sip/index.ts index f2f52f85..d3441adc 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-sip/index.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-sip/index.ts @@ -1 +1 @@ -export type { SvamlActionConnectSip, SipDestination, ConnectSipProps } from './svaml-action-connect-sip'; +export type { SvamlActionConnectSip, ConnectSipProps } from './svaml-action-connect-sip'; diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-sip/svaml-action-connect-sip.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-sip/svaml-action-connect-sip.ts index f83678b3..01270d1c 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-sip/svaml-action-connect-sip.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-sip/svaml-action-connect-sip.ts @@ -1,35 +1,27 @@ import { CallHeader } from '../../call-header'; import { MusicOnHold } from '../../enums'; +import { DestinationSip } from '../../destination'; /** - * Determines how to route a call to a SIP server. Available to use in a response to an [Incoming Call Event](../../../voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback. + * Determines how to route a call to a SIP server. Available to use in a response to an [Incoming Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback. */ export interface SvamlActionConnectSip { - /** The name property. Must have the value `connectSip`. */ name: 'connectSip'; /** Specifies where to route the SIP call. */ - destination: SipDestination; + destination: DestinationSip; /** The max duration of the call in seconds (max 14400 seconds). If the call is still connected at that time, it will be automatically disconnected. */ maxDuration?: number; /** Used to override the CLI (or caller ID) of the client. The phone number of the person who initiated the call is shown as the CLI. To set your own CLI, you may use your verified number or your Dashboard virtual number. */ cli?: string; /** An optional parameter to specify the SIP transport protocol. If unspecified, UDP is used. */ - transport?: 'udp' | 'tcp' | 'tls'; - /** If enabled, suppresses [ACE](../../voice/tag/Callbacks/#tag/Callbacks/operation/ace) and [DICE](../../voice/tag/Callbacks/#tag/Callbacks/operation/dice) callbacks for the call. */ + transport?: 'udp' | 'tcp' | 'tls' | 'UDP' | 'TCP' | 'TLS' | string; + /** If enabled, suppresses [ACE](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ace) and [DICE](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/dice) callbacks for the call. */ suppressCallbacks?: boolean; - /** [Private SIP headers](../../sip-trunking/#receiving-calls-from-sinch-platform-to-your-sip-infrastructure) to send with the call. */ + /** [Private SIP headers](https://developers.sinch.com/docs/voice/api-reference/sip-trunking/#receiving-calls-from-sinch-platform-to-your-sip-infrastructure) to send with the call. */ callHeaders?: CallHeader[]; /** Means \"music on hold\". If this optional parameter is included, plays music to the connected participant if the SIP call is placed on hold. If `moh` isn't specified and the SIP call is placed on hold, the user will only hear silence while during the holding period . */ moh?: MusicOnHold; } -export interface SipDestination { - - /** The SIP address. */ - endpoint: string; - /** */ - type?: 'Sip' -} - export type ConnectSipProps = Omit; diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-stream/index.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-stream/index.ts new file mode 100644 index 00000000..0feb7a14 --- /dev/null +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-stream/index.ts @@ -0,0 +1 @@ +export type { SvamlActionConnectStream, ConnectStreamProps } from './svaml-action-connect-stream'; diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-stream/svaml-action-connect-stream.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-stream/svaml-action-connect-stream.ts new file mode 100644 index 00000000..05bac65d --- /dev/null +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-connect-stream/svaml-action-connect-stream.ts @@ -0,0 +1,18 @@ +import { CallHeader } from '../../call-header'; +import { DestinationStream } from '../../destination'; + +/** + * Determines how to route a call to a Stream/websocket server. Available to use in a response to an [Incoming Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback. + */ +export interface SvamlActionConnectStream { + /** The name property. Must have the value `connectStream`. */ + name: 'connectStream'; + /** Specifies where to route the Stream call. */ + destination: DestinationStream; + /** The max duration of the call in seconds (max 14400 seconds). If the call is still connected at that time, it will be automatically disconnected. */ + maxDuration?: number; + /** "These custom parameters (headers/messages) are sent to your WebSocket server in the initial message when the ConnectStream is established." */ + callHeaders?: CallHeader[]; +} + +export type ConnectStreamProps = Omit; diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-continue/svaml-action-continue.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-continue/svaml-action-continue.ts index 9fc369ab..b127f9a6 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-action-continue/svaml-action-continue.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-continue/svaml-action-continue.ts @@ -1,8 +1,7 @@ /** - * Continues to set up a call. Available to use in a response to an [Answered Call Event](../../../voice/tag/Callbacks/#tag/Callbacks/operation/ace) callback. + * Continues to set up a call. Available to use in a response to an [Answered Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ace) callback. */ export interface SvamlActionContinue { - /** The name property. Must have the value `continue`. */ name: 'continue'; } diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-hangup/svaml-action-hangup.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-hangup/svaml-action-hangup.ts index 66f45bbe..26230124 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-action-hangup/svaml-action-hangup.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-hangup/svaml-action-hangup.ts @@ -1,8 +1,7 @@ /** - * Hangs up a call. Available to use in a response to an [Incoming Call Event](../../../docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback or an [Answered Call Event](../../../docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ace) callback. + * Hangs up a call. Available to use in a response to an [Incoming Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback or an [Answered Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ace) callback. */ export interface SvamlActionHangup { - /** The name property. Must have the value `hangup`. */ name: 'hangup'; } diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-park/svaml-action-park.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-park/svaml-action-park.ts index 4f386ed7..23d2f23f 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-action-park/svaml-action-park.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-park/svaml-action-park.ts @@ -4,10 +4,9 @@ import { TtsVoice } from '../../enums'; * Parks the call and places the caller on hold. The caller is placed into a loop, listening to an IVR prompt (either a pre-recorded audio file or generated by text to speech). If the call is unparked, prompts will stop playing immediately. If the max duration is reached, the last prompt will be fully played until the call ends. */ export interface SvamlActionPark { - /** The name property. Must have the value `park`. */ name: 'park'; - /** The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](../../voice-locales). */ + /** The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](https://developers.sinch.com/docs/voice/api-reference/voice-locales). */ locale?: TtsVoice; /** That prompt that is played when the call is first answered. You can use text-to-speech using the `#tts[]` element, SSML commands using the `#ssml[]` element. */ introPrompt?: string; diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-action-run-menu/svaml-action-run-menu.ts b/packages/voice/src/models/v1/mod-svaml/svaml-action-run-menu/svaml-action-run-menu.ts index cdd8d1ee..2ecf41a9 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-action-run-menu/svaml-action-run-menu.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-action-run-menu/svaml-action-run-menu.ts @@ -2,15 +2,14 @@ import { Menu } from '../../menu'; import { TtsVoice } from '../../enums'; /** - * Plays an interactive voice response (IVR) menu to the callee. This menu can play pre-recorded files or text-to-speech messages, collect DTMF tones, and trigger the [Prompt Input Event](../../voice/tag/Callbacks/#tag/Callbacks/operation/pie) (PIE) callback towards your backend, notifying you of the actions the callee took. Available to use in a response to an [Incoming Call Event](../../voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback or an [Answered Call Event](../../voice/tag/Callbacks/#tag/Callbacks/operation/ace) callback. Also be used in combination with the [Conferences](/docs/voice/api-reference/voice/tag/Conferences/#tag/Conferences) endpoint of the Voice API. + * Plays an interactive voice response (IVR) menu to the callee. This menu can play pre-recorded files or text-to-speech messages, collect DTMF tones, and trigger the [Prompt Input Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/pie) (PIE) callback towards your backend, notifying you of the actions the callee took. Available to use in a response to an [Incoming Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ice) callback or an [Answered Call Event](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Callbacks/#tag/Callbacks/operation/ace) callback. Also be used in combination with the [Conferences](https://developers.sinch.com/docs/voice/api-reference/voice/tag/Conferences/#tag/Conferences) endpoint of the Calling API. */ export interface SvamlActionRunMenu { - /** The name property. Must have the value `runMenu`. */ name: 'runMenu'; /** 'Barging' means that the user can press a DTMF digit before the prompt has finished playing. If a valid input is pressed, the message will stop playing and accept the input. If `barge` is disabled, the user must listen to the entire prompt before input is accepted. By default, barging is enabled. */ barge?: boolean; - /** The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](../../voice-locales). If using the `enableVoice` to enable voice detection, the `locale` property is required in order to select the input language. */ + /** The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](https://developers.sinch.com/docs/voice/api-reference/voice-locales). If using the `enableVoice` to enable voice detection, the `locale` property is required in order to select the input language. */ locale?: TtsVoice; /** Selects the menu item from the `menus` array to play first. */ mainMenu?: string; diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-instruction-play-files/svaml-instruction-play-files.ts b/packages/voice/src/models/v1/mod-svaml/svaml-instruction-play-files/svaml-instruction-play-files.ts index c2a624d9..48737c91 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-instruction-play-files/svaml-instruction-play-files.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-instruction-play-files/svaml-instruction-play-files.ts @@ -4,12 +4,11 @@ import { TtsVoice } from '../../enums'; * Plays Interactive Voice Response (IVR) files for the supported locale or SSML commands at the Sinch backend. An IVR message is played only on the caller's side. */ export interface SvamlInstructionPlayFiles { - /** The `name` property. Must have the value `playFiles`. */ name: 'playFiles'; /** The IDs of the files which will be played. These can be a URL to a file, SSML commands using the `#ssml[]` element, or text using the `#tts[]` element. */ ids: string[]; - /** If using SSML or TTS, this is a required field. The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](../../voice-locales). */ + /** If using SSML or TTS, this is a required field. The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](https://developers.sinch.com/docs/voice/api-reference/voice-locales). */ locale?: TtsVoice; } diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-instruction-say/svaml-instruction-say.ts b/packages/voice/src/models/v1/mod-svaml/svaml-instruction-say/svaml-instruction-say.ts index 6d6c11db..1429cda8 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-instruction-say/svaml-instruction-say.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-instruction-say/svaml-instruction-say.ts @@ -4,12 +4,11 @@ import { TtsVoice } from '../../enums'; * Plays a synthesized text-to-speech message to the end user. The message is provided in the text field. */ export interface SvamlInstructionSay { - /** The `name` property. Must have the value `say`. */ name: 'say'; /** Contains the message that will be spoken. Default maximum length is 600 characters. To change this limit, please contact support. */ text?: string; - /** The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](../../voice-locales). */ + /** The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](https://developers.sinch.com/docs/voice/api-reference/voice-locales). */ locale?: TtsVoice; } diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-instruction-start-recording/svaml-instruction-start-recording.ts b/packages/voice/src/models/v1/mod-svaml/svaml-instruction-start-recording/svaml-instruction-start-recording.ts index 0faccc51..e3e40fe7 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-instruction-start-recording/svaml-instruction-start-recording.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-instruction-start-recording/svaml-instruction-start-recording.ts @@ -2,10 +2,9 @@ * Starts a recording of the call. */ export interface SvamlInstructionStartRecording { - /** The `name` property. Must have the value `startRecording`. */ name: 'startRecording'; - /** An object that specifies details about the recording. For more details, see [Recording Options](../../recording/#recording-options). */ + /** An object that specifies details about the recording. For more details, see [Recording Options](https://developers.sinch.com/docs/voice/api-reference/recording/#recording-options). */ options?: StartRecordingOptions; } diff --git a/packages/voice/src/models/v1/mod-svaml/svaml-instruction/svaml-instruction.ts b/packages/voice/src/models/v1/mod-svaml/svaml-instruction/svaml-instruction.ts index f5f5ec0f..42889fcc 100644 --- a/packages/voice/src/models/v1/mod-svaml/svaml-instruction/svaml-instruction.ts +++ b/packages/voice/src/models/v1/mod-svaml/svaml-instruction/svaml-instruction.ts @@ -7,7 +7,7 @@ import { SvamlInstructionStartRecording } from '../svaml-instruction-start-recor import { SvamlInstructionStopRecording } from '../svaml-instruction-stop-recording'; /** - * Instructions allow an application to play a message or file, start recording, and various other tasks. For more information about instructions, see the [SVAML](../../svaml/) documentation. + * Instructions allow an application to play a message or file, start recording, and various other tasks. For more information about instructions, see the [SVAML](https://developers.sinch.com/docs/voice/api-reference/svaml/) documentation. */ export type SvamlInstruction = SvamlInstructionPlayFiles | SvamlInstructionSay diff --git a/packages/voice/src/models/v1/option/option.ts b/packages/voice/src/models/v1/option/option.ts index 0dd82a7f..5ebe9233 100644 --- a/packages/voice/src/models/v1/option/option.ts +++ b/packages/voice/src/models/v1/option/option.ts @@ -2,9 +2,12 @@ * A configured option that the user can trigger to perform an action. */ export interface Option { - /** A DTMF digit the user can press to trigger the configured action. */ dtmf: string; - /** Determines which action is taken when the DTMF digit is pressed. */ + /** + * Determines which action is taken when the DTMF digit is pressed. The following values are accepted: + * - If you want to navigate to another menu, use `menu(value)`. + * - If you want to perform another behavior you have coded in your application, use `return(value)`, where `(value)` is the name of the method you want to execute. + */ action: string; } diff --git a/packages/voice/src/models/v1/participant/index.ts b/packages/voice/src/models/v1/participant/index.ts deleted file mode 100644 index c82a002d..00000000 --- a/packages/voice/src/models/v1/participant/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Participant } from './participant'; diff --git a/packages/voice/src/models/v1/participant/participant.ts b/packages/voice/src/models/v1/participant/participant.ts deleted file mode 100644 index 004b70b1..00000000 --- a/packages/voice/src/models/v1/participant/participant.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * An object containing information about the participant (caller or callee) of the call. - */ -export interface Participant { - - /** The type of the participant (caller or callee). */ - type?: 'number' | 'Number' | 'username' | 'Username' | 'sip' | 'did' | string; - /** The phone number, user name, or other identifier of the participant (caller or callee). */ - endpoint?: string; -} - - diff --git a/packages/voice/src/models/v1/query-number-response/query-number-response.ts b/packages/voice/src/models/v1/query-number-response/query-number-response.ts index e36d56d9..b0e6908b 100644 --- a/packages/voice/src/models/v1/query-number-response/query-number-response.ts +++ b/packages/voice/src/models/v1/query-number-response/query-number-response.ts @@ -1,19 +1,20 @@ import { VoicePrice } from '../voice-price'; export interface QueryNumberResponse { - - /** The type of method. */ + /** + * The type of method. + * @deprecated To remove in V2 + */ method?: string; /** The number details object. */ number?: NumberDetails; } export interface NumberDetails { - /** The ISO 3166-1 formatted country code. */ countryId?: string; /** The type of the number. */ - numberType?: 'Unknown' | 'Fixed' | 'Mobile' | 'Other'; + numberType?: 'Unknown' | 'Fixed' | 'Mobile' | 'Other' | string; /** The number in E.164 format. */ normalizedNumber?: string; /** Concerns whether the call is restricted or not. */ diff --git a/packages/voice/src/models/v1/requests/calls/calls-request-data.ts b/packages/voice/src/models/v1/requests/calls/calls-request-data.ts index aa5ab965..34ea93ac 100644 --- a/packages/voice/src/models/v1/requests/calls/calls-request-data.ts +++ b/packages/voice/src/models/v1/requests/calls/calls-request-data.ts @@ -8,7 +8,7 @@ export interface ManageWithCallLegRequestData { /** The unique identifier of the call. This value is generated by the system. */ 'callId': string; /** Specifies which part of the call will be managed. This option is used only by the `PlayFiles` and `Say` instructions to indicate which channel the sound will be played on. Valid options are `caller`, `callee` or `both`. If not specified, the default value is `caller`.
The `callLeg` identifier is ignored for calls that are part of a conference and calls initiated using the Callout API. */ - 'callLeg': 'caller' | 'callee' | 'both'; + 'callLeg': 'caller' | 'callee' | 'both' | string; /** */ 'manageWithCallLegRequestBody'?: SVAMLRequestBody; } diff --git a/packages/voice/src/models/v1/tts-callout-request/tts-callout-request.ts b/packages/voice/src/models/v1/tts-callout-request/tts-callout-request.ts index 94449b89..83b2c3bc 100644 --- a/packages/voice/src/models/v1/tts-callout-request/tts-callout-request.ts +++ b/packages/voice/src/models/v1/tts-callout-request/tts-callout-request.ts @@ -1,4 +1,4 @@ -import { Destination } from '../destination'; +import { CalloutDestination } from '../destination'; import { TtsVoice } from '../enums'; /** @@ -9,18 +9,18 @@ export interface TtsCalloutRequest { /** The number that will be displayed as the incoming caller. To set your own CLI, you may use your verified number or your Dashboard number. The number must be in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format. */ cli?: string; /** The type of device and number or endpoint to call. */ - destination: Destination; + destination: CalloutDestination; /** When the destination picks up, this DTMF tones will be played to the callee. Valid characters in the string are "0"-"9", "#", and "w". A "w" will render a 500 ms pause. For example, "ww1234#w#" will render a 1s pause, the DTMF tones "1", "2", "3", "4" and "#" followed by a 0.5s pause and finally the DTMF tone for "#". This can be used if the callout destination for instance require a conference PIN code or an extension to be entered. */ dtmf?: string; /** Can be either `pstn` for PSTN endpoint or `mxp` for data (app or web) clients. */ domain?: 'pstn' | 'mxp'; /** Can be used to input custom data. */ custom?: string; - /** The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](../../../voice-locales/). */ + /** The voice and language you want to use for the text-to-speech message. This can either be defined by the ISO 639 locale and language code or by specifying a particular voice. Supported languages and voices are detailed [here](https://developers.sinch.com/docs/voice/api-reference/voice-locales/). */ locale?: TtsVoice; /** The text that will be spoken in the text-to-speech message. _Every application's default maximum characters allowed in text-to-speech is 600 characters. Contact support if you wish this limit to be changed._ */ text?: string; - /** An advanced alternative to using ```text```. __TTS__ _Text To Speech:_ The equivalent of text but within the prompt property. Example: _```#tts[Hello from Sinch]```_ __TTS with SSML__ _Text To Speech with Speech Synthesis Markup Language (SSML)._ This is an XML-based markup language for assisting the generation of synthetic speech in the Web and other applications. AWS Polly supports a sub-set of SSML. This allows us to use SSML-enhanced text for additional control over how Polly generates speech from the text. Details and examples of supported tags are [here](https://docs.aws.amazon.com/polly/latest/dg/supportedtags.html) __Externally hosted media:__ Provide a URL to your own hosted media. Please check [here](../../../supported-audio-formats/#limits) to read about audio content type and usage limits. _Every application's default maximum allowed in TTS or TTS SSML is 600 characters. Contact support if you wish this limit to be changed._ _Several prompts can be used, separated by a semi-colon_ ```;``` Example: _```#tts[Hello from Sinch];#ssml[Have a great day!]```_ */ + /** An advanced alternative to using ```text```. __TTS__ _Text To Speech:_ The equivalent of text but within the prompt property. Example: _```#tts[Hello from Sinch]```_ __TTS with SSML__ _Text To Speech with Speech Synthesis Markup Language (SSML)._ This is an XML-based markup language for assisting the generation of synthetic speech in the Web and other applications. AWS Polly supports a sub-set of SSML. This allows us to use SSML-enhanced text for additional control over how Polly generates speech from the text. Details and examples of supported tags are [here](https://docs.aws.amazon.com/polly/latest/dg/supportedtags.html) __Externally hosted media:__ Provide a URL to your own hosted media. Please check [here](https://developers.sinch.com/docs/voice/api-reference/supported-audio-formats/#limits) to read about audio content type and usage limits. _Every application\'s default maximum allowed in TTS or TTS SSML is 600 characters. Contact support if you wish this limit to be changed._ _Several prompts can be used, separated by a semi-colon_ ```;``` Example: _```#tts[Hello from Sinch];#ssml[Have a great day!]```_ */ prompts?: string; /** If `enableAce` is set to `true` and the application has a callback URL specified, you will receive an ACE callback when the call is answered. When the callback is received, your platform must respond with a svamlet, containing the “connectconf” action in order to add the call to a conference or create the conference if it's the first call. If it's set to `false`, no ACE event will be sent to your backend. */ enableAce?: boolean; diff --git a/packages/voice/src/models/v1/unassign-numbers/unassign-numbers.ts b/packages/voice/src/models/v1/unassign-numbers/unassign-numbers.ts index a7e3b00e..2e0f55b7 100644 --- a/packages/voice/src/models/v1/unassign-numbers/unassign-numbers.ts +++ b/packages/voice/src/models/v1/unassign-numbers/unassign-numbers.ts @@ -5,5 +5,5 @@ export interface UnassignNumbers { /** Indicates the application where the number(s) was assigned. If empty, the application key that is used to sign the request will be used. */ applicationkey?: string; /** (optional) indicates the DID capability that was assigned to the chosen application. Please note that the DID needs to support the selected capability. */ - capability?: 'voice' | 'sms'; + capability?: 'voice' | 'sms' | string; } diff --git a/packages/voice/src/rest/v1/callbacks/callbacks-webhook.ts b/packages/voice/src/rest/v1/callbacks/callbacks-webhook.ts index e23b73ec..551b9e61 100644 --- a/packages/voice/src/rest/v1/callbacks/callbacks-webhook.ts +++ b/packages/voice/src/rest/v1/callbacks/callbacks-webhook.ts @@ -42,6 +42,9 @@ export class VoiceCallbackWebhooks implements CallbackProcessor { expect(builtAction).toEqual(expectedResult); }); + it('should build a connectStream action', () => { + const connectStreamProps: Voice.ConnectStreamProps = { + destination: { + type: 'Websocket', + endpoint: 'wss://example.com/stream', + }, + maxDuration: 3000, + callHeaders: CALL_HEADERS, + }; + const expectedResult: Voice.SvamlActionConnectStream = { + ...connectStreamProps, + name: 'connectStream', + }; + const builtAction = Voice.svamlActionHelper.buildConnectStream(connectStreamProps); + expect(builtAction).toEqual(expectedResult); + }); + it('should build a continue action', () => { const expectedResult: Voice.SvamlActionContinue = { name: 'continue', @@ -315,7 +332,7 @@ describe('Voice models helpers', () => { }); describe('ICE response builder', () => { - it('should build an ICE response', () => { + it('should build an ICE response with a \'park\' action', () => { const parkProps: Voice.ParkProps = { introPrompt: '#tts[Welcome]', holdPrompt: '#tts[Thank you for your patience, your call is very important to us.]', @@ -340,6 +357,33 @@ describe('Voice models helpers', () => { }; expect(iceResponse).toEqual(expectedResult); }); + + it('should build an ICE response with a \'connectStream\' action', () => { + const connectStreamProps: Voice.ConnectStreamProps = { + destination: { + type: 'Websocket', + endpoint: 'wss://example.com/stream', + }, + }; + const iceResponse = new Voice.IceSvamletBuilder() + .setAction(Voice.iceActionHelper.connectStream(connectStreamProps)) + .addInstruction(Voice.iceInstructionHelper.setCookie('sinch-app', 'app-id-value')) + .build(); + const expectedResult: Voice.IceResponse = { + action: { + name: 'connectStream', + ...connectStreamProps, + }, + instructions: [ + { + name: 'setCookie', + key: 'sinch-app', + value: 'app-id-value', + }, + ], + }; + expect(iceResponse).toEqual(expectedResult); + }); }); describe('PIE response builder', () => { diff --git a/packages/voice/tests/rest/v1/callbacks/webhooks-events.steps.ts b/packages/voice/tests/rest/v1/callbacks/webhooks-events.steps.ts index 0e94c573..eaefabb8 100644 --- a/packages/voice/tests/rest/v1/callbacks/webhooks-events.steps.ts +++ b/packages/voice/tests/rest/v1/callbacks/webhooks-events.steps.ts @@ -9,12 +9,9 @@ let event: Voice.VoiceCallbackEvent; let formattedHeaders: IncomingHttpHeaders; const processEvent = async (response: Response) => { - formattedHeaders = {}; - response.headers.forEach((value, name) => { - formattedHeaders[name.toLowerCase()] = value; - }); + formattedHeaders = Object.fromEntries(response.headers.entries()); rawEvent = await response.text(); - event = voiceCallbackWebhooks.parseEvent(JSON.parse(rawEvent)); + event = voiceCallbackWebhooks.parseEvent(rawEvent); }; @@ -124,7 +121,7 @@ Then('the Voice event describes a "DICE" event', () => { amount: 0.0095, }; assert.deepEqual(diceEvent.userRate, userRate); - const destinationParticipant: Voice.Participant = { + const destinationParticipant: Voice.Destination = { type: 'number', endpoint: '12017777777', }; @@ -184,7 +181,7 @@ Then('the Voice event describes a "ICE" event', () => { }; assert.deepEqual(iceEvent.userRate, price); assert.equal(iceEvent.cli, '12015555555'); - const destination: Voice.Participant = { + const destination: Voice.Destination = { type: 'did', endpoint: '+12017777777', }; @@ -192,5 +189,69 @@ Then('the Voice event describes a "ICE" event', () => { assert.equal(iceEvent.domain, 'pstn'); assert.equal(iceEvent.originationType, 'PSTN'); assert.equal(iceEvent.rdnis, ''); +}); + +When('I send a request to trigger a "recording_finished" event', async () => { + const response = await fetch('http://localhost:3019/webhooks/voice/notify/recording_finished'); + await processEvent(response); +}); + +Then('the header of the "recording_finished" event contains a valid authorization', () => { + assert.ok(voiceCallbackWebhooks.validateAuthenticationHeader( + formattedHeaders, + rawEvent, + '/webhooks/voice', + 'POST')); +}); + +Then('the Voice event describes a "notify" event with a "recording_finished" type', () => { + const notifyEvent = event as Voice.NotifyRequest; + assert.equal(notifyEvent.callid, '33dd8e62-0ac6-4e0c-a89f-36d121f861f9'); + assert.equal(notifyEvent.event, 'notify'); + assert.equal(notifyEvent.version, 1); + assert.equal(notifyEvent.type, 'recording_finished'); +}); + +When('I send a request to trigger a "recording_available" event', async () => { + const response = await fetch('http://localhost:3019/webhooks/voice/notify/recording_available'); + await processEvent(response); +}); + +Then('the header of the "recording_available" event contains a valid authorization', () => { + assert.ok(voiceCallbackWebhooks.validateAuthenticationHeader( + formattedHeaders, + rawEvent, + '/webhooks/voice', + 'POST')); +}); + +Then('the Voice event describes a "notify" event with a "recording_available" type', () => { + const notifyEvent = event as Voice.NotifyRequest; + assert.equal(notifyEvent.callid, '33dd8e62-0ac6-4e0c-a89f-36d121f861f9'); + assert.equal(notifyEvent.event, 'notify'); + assert.equal(notifyEvent.version, 1); + assert.equal(notifyEvent.type, 'recording_available'); + assert.equal(notifyEvent.destination, 'azure://sinchsdk/voice-recordings/my-recording.mp3'); +}); + +When('I send a request to trigger a "transcription_available" event', async () => { + const response = await fetch('http://localhost:3019/webhooks/voice/notify/transcription_available'); + await processEvent(response); +}); + +Then('the header of the "transcription_available" event contains a valid authorization', () => { + assert.ok(voiceCallbackWebhooks.validateAuthenticationHeader( + formattedHeaders, + rawEvent, + '/webhooks/voice', + 'POST')); +}); +Then('the Voice event describes a "notify" event with a "transcription_available" type', () => { + const notifyEvent = event as Voice.NotifyRequest; + assert.equal(notifyEvent.callid, '33dd8e62-0ac6-4e0c-a89f-36d121f861f9'); + assert.equal(notifyEvent.event, 'notify'); + assert.equal(notifyEvent.version, 1); + assert.equal(notifyEvent.type, 'transcription_available'); + assert.equal(notifyEvent.destination, 'azure://sinchsdk/voice-recordings/my-recording-transcript.json'); }); diff --git a/packages/voice/tests/rest/v1/calls/calls.steps.ts b/packages/voice/tests/rest/v1/calls/calls.steps.ts index d16d218f..ccd1b9b8 100644 --- a/packages/voice/tests/rest/v1/calls/calls.steps.ts +++ b/packages/voice/tests/rest/v1/calls/calls.steps.ts @@ -25,7 +25,7 @@ When('I send a request to get a call\'s information', async () => { Then('the response contains the information about the call', () => { assert.equal(callInformation.callId, '1ce0ffee-ca11-ca11-ca11-abcdef000003'); - const participant: Voice.Participant = { + const participant: Voice.Destination = { type: 'Number', endpoint: '+12017777777', }; diff --git a/yarn.lock b/yarn.lock index 54f7f093..752e8958 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,30 +2,13 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@angular-devkit/core@17.0.9": - version "17.0.9" - resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.9.tgz" - integrity sha512-r5jqwpWOgowqe9KSDqJ3iSbmsEt2XPjSvRG4DSI2T9s31bReoMtreo8b7wkRa2B3hbcDnstFbn8q27VvJDqRaQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - ajv "8.12.0" - ajv-formats "2.1.1" - jsonc-parser "3.2.0" - picomatch "3.0.1" - rxjs "7.8.1" - source-map "0.7.4" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@angular-devkit/core@17.3.11": version "17.3.11" @@ -51,17 +34,6 @@ symbol-observable "4.0.0" yargs-parser "21.1.1" -"@angular-devkit/schematics@17.0.9": - version "17.0.9" - resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.9.tgz" - integrity sha512-5ti7g45F2KjDJS0DbgnOGI1GyKxGpn4XsKTYJFJrSAWj6VpuvPy/DINRrXNuRVo09VPEkqA+IW7QwaG9icptQg== - dependencies: - "@angular-devkit/core" "17.0.9" - jsonc-parser "3.2.0" - magic-string "0.30.5" - ora "5.4.1" - rxjs "7.8.1" - "@angular-devkit/schematics@17.3.11": version "17.3.11" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-17.3.11.tgz#37095fb08b0ab0343c7c0dde57ca81115178714f" @@ -73,1098 +45,875 @@ ora "5.4.1" rxjs "7.8.1" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.26.2", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== - -"@babel/compat-data@^7.25.2", "@babel/compat-data@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" - integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" -"@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz" - integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.6" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" - "@babel/types" "^7.23.6" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" +"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790" + integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw== -"@babel/core@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" - integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.25.2": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.0.tgz#55dad808d5bf3445a108eefc88ea3fdf034749a4" + integrity sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-module-transforms" "^7.25.2" - "@babel/helpers" "^7.25.0" - "@babel/parser" "^7.25.0" - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.2" - "@babel/types" "^7.25.2" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.0" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.27.3" + "@babel/helpers" "^7.27.6" + "@babel/parser" "^7.28.0" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.0" + "@babel/types" "^7.28.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.28.0", "@babel/generator@^7.7.2": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.0.tgz#9cc2f7bd6eb054d77dc66c2664148a0c5118acd2" + integrity sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" + "@babel/parser" "^7.28.0" + "@babel/types" "^7.28.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" -"@babel/generator@^7.25.0", "@babel/generator@^7.25.6": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" - integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== +"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== dependencies: - "@babel/types" "^7.25.6" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" + "@babel/types" "^7.27.3" -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-annotate-as-pure@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" - integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" - integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" - integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== - dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-validator-option" "^7.24.8" - browserslist "^4.23.1" + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0", "@babel/helper-create-class-features-plugin@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz#57eaf1af38be4224a9d9dd01ddde05b741f50e14" - integrity sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/traverse" "^7.25.4" +"@babel/helper-create-class-features-plugin@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz#5bee4262a6ea5ddc852d0806199eb17ca3de9281" + integrity sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.27.1" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53" + integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" + "@babel/helper-annotate-as-pure" "^7.27.1" + regexpu-core "^6.2.0" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0", "@babel/helper-create-regexp-features-plugin@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" - integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== +"@babel/helper-define-polyfill-provider@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" + integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + debug "^4.4.1" lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" - integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== - dependencies: - "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.8" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" - integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.2" - -"@babel/helper-optimise-call-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" - integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" - integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== - -"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" - integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-wrap-function" "^7.25.0" - "@babel/traverse" "^7.25.0" - -"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" - integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/traverse" "^7.25.0" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" - integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-string-parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" - integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" - integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== - -"@babel/helper-wrap-function@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" - integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== - dependencies: - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/helpers@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz" - integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" - "@babel/types" "^7.23.6" - -"@babel/helpers@^7.25.0": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" - integrity sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q== - dependencies: - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.6" - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" + resolve "^1.22.10" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-member-expression-to-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" + integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" + integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.3" + +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helper-wrap-function@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz#b88285009c31427af318d4fe37651cd62a142409" + integrity sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ== + dependencies: + "@babel/template" "^7.27.1" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helpers@^7.27.6": + version "7.28.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.2.tgz#80f0918fecbfebea9af856c419763230040ee850" + integrity sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.2" -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e" + integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== - -"@babel/parser@^7.25.0", "@babel/parser@^7.25.6": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" - integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== + "@babel/types" "^7.28.0" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" + integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== dependencies: - "@babel/types" "^7.25.6" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" - integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.3" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" - integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" - integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" - integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" - integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz#bb1c25af34d75115ce229a1de7fa44bf8f955670" + integrity sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.24.7": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz#bb918905c58711b86f9710d74a3744b6c56573b5" - integrity sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ== +"@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz#6d4c78f042db0e82fd6436cd65fec5dc78ad2bde" - integrity sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ== +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== +"@babel/plugin-syntax-jsx@^7.27.1", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" + integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.24.7": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz#04db9ce5a9043d9c635e75ae7969a2cd50ca97ff" - integrity sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.27.1", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" - integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-async-generator-functions@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz#2afd4e639e2d055776c9f091b6c0c180ed8cf083" - integrity sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg== +"@babel/plugin-transform-async-generator-functions@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" + integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-remap-async-to-generator" "^7.25.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/traverse" "^7.25.4" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" - integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== +"@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" + integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" -"@babel/plugin-transform-block-scoped-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" - integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" - integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== +"@babel/plugin-transform-block-scoping@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz#e7c50cbacc18034f210b93defa89638666099451" + integrity sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-class-properties@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz#bae7dbfcdcc2e8667355cd1fb5eda298f05189fd" - integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== +"@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-class-static-block@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" - integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== +"@babel/plugin-transform-class-static-block@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz#7e920d5625b25bbccd3061aefbcc05805ed56ce4" + integrity sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-classes@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz#d29dbb6a72d79f359952ad0b66d88518d65ef89a" - integrity sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg== +"@babel/plugin-transform-classes@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz#12fa46cffc32a6e084011b650539e880add8a0f8" + integrity sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/traverse" "^7.25.4" - globals "^11.1.0" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-computed-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" - integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== +"@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/template" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" -"@babel/plugin-transform-destructuring@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" - integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== +"@babel/plugin-transform-destructuring@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz#0f156588f69c596089b7d5b06f5af83d9aa7f97a" + integrity sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-dotall-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" - integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== +"@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-keys@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" - integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" - integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-dynamic-import@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" - integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-exponentiation-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" - integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== +"@babel/plugin-transform-explicit-resource-management@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" + integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" -"@babel/plugin-transform-export-namespace-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" - integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== +"@babel/plugin-transform-exponentiation-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1" + integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-for-of@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" - integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-function-name@^7.25.1": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" - integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== dependencies: - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-json-strings@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" - integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-literals@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" - integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== +"@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-logical-assignment-operators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" - integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-member-expression-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" - integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== +"@babel/plugin-transform-logical-assignment-operators@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa" + integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-amd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" - integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" - integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== dependencies: - "@babel/helper-module-transforms" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-systemjs@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" - integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== +"@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" + integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== dependencies: - "@babel/helper-module-transforms" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.0" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-umd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" - integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== +"@babel/plugin-transform-modules-systemjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed" + integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" - integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-new-target@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" - integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" + integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" - integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-numeric-separator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" - integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" + integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-rest-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== +"@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-super@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" - integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== +"@babel/plugin-transform-object-rest-spread@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz#d23021857ffd7cd809f54d624299b8086402ed8d" + integrity sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-optional-catch-binding@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" - integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" -"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" - integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== +"@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" + integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-parameters@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" - integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== +"@babel/plugin-transform-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f" + integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-private-methods@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz#9bbefbe3649f470d681997e0b64a4b254d877242" - integrity sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw== +"@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-private-property-in-object@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" - integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== +"@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-property-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" - integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== +"@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" + integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" - integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - regenerator-transform "^0.15.2" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-reserved-words@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" - integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== +"@babel/plugin-transform-regenerator@^7.28.0": + version "7.28.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz#bde80603442ff4bb4e910bc8b35485295d556ab1" + integrity sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-shorthand-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" - integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== +"@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" - integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-sticky-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" - integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-template-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" - integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== +"@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-typeof-symbol@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" - integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typescript@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" - integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-typescript" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-escapes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" - integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-property-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" - integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== +"@babel/plugin-transform-typescript@^7.27.1": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz#796cbd249ab56c18168b49e3e1d341b72af04a6b" + integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" -"@babel/plugin-transform-unicode-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" - integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-sets-regex@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz#be664c2a0697ffacd3423595d5edef6049e8946c" - integrity sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA== +"@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/preset-env@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.4.tgz#be23043d43a34a2721cd0f676c7ba6f1481f6af6" - integrity sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw== - dependencies: - "@babel/compat-data" "^7.25.4" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-option" "^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.0.tgz#d23a6bc17b43227d11db77081a0779c706b5569c" + integrity sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg== + dependencies: + "@babel/compat-data" "^7.28.0" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.27.1" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.7" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.4" - "@babel/plugin-transform-async-to-generator" "^7.24.7" - "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.25.0" - "@babel/plugin-transform-class-properties" "^7.25.4" - "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.25.4" - "@babel/plugin-transform-computed-properties" "^7.24.7" - "@babel/plugin-transform-destructuring" "^7.24.8" - "@babel/plugin-transform-dotall-regex" "^7.24.7" - "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" - "@babel/plugin-transform-dynamic-import" "^7.24.7" - "@babel/plugin-transform-exponentiation-operator" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.24.7" - "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.25.1" - "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.25.2" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" - "@babel/plugin-transform-member-expression-literals" "^7.24.7" - "@babel/plugin-transform-modules-amd" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.8" - "@babel/plugin-transform-modules-systemjs" "^7.25.0" - "@babel/plugin-transform-modules-umd" "^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" - "@babel/plugin-transform-new-target" "^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" - "@babel/plugin-transform-numeric-separator" "^7.24.7" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-object-super" "^7.24.7" - "@babel/plugin-transform-optional-catch-binding" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.8" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.25.4" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-property-literals" "^7.24.7" - "@babel/plugin-transform-regenerator" "^7.24.7" - "@babel/plugin-transform-reserved-words" "^7.24.7" - "@babel/plugin-transform-shorthand-properties" "^7.24.7" - "@babel/plugin-transform-spread" "^7.24.7" - "@babel/plugin-transform-sticky-regex" "^7.24.7" - "@babel/plugin-transform-template-literals" "^7.24.7" - "@babel/plugin-transform-typeof-symbol" "^7.24.8" - "@babel/plugin-transform-unicode-escapes" "^7.24.7" - "@babel/plugin-transform-unicode-property-regex" "^7.24.7" - "@babel/plugin-transform-unicode-regex" "^7.24.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.4" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.28.0" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.0" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.27.1" + "@babel/plugin-transform-classes" "^7.28.0" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.0" + "@babel/plugin-transform-exponentiation-operator" "^7.27.1" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.27.1" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.28.0" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.28.0" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.6" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.37.1" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + core-js-compat "^3.43.0" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -1172,106 +921,59 @@ esutils "^2.0.2" "@babel/preset-typescript@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" - integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-typescript" "^7.24.7" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.8.4": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz" - integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/template@^7.24.7", "@babel/template@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" - integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/traverse@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz" - integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912" + integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.27.1" + +"@babel/template@^7.27.1", "@babel/template@^7.27.2", "@babel/template@^7.3.3": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b" + integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.0" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.0" debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" - integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.6" - "@babel/parser" "^7.25.6" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.6" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" -"@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" - integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.0", "@babel/types@^7.28.2", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.28.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" + integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== dependencies: - "@babel/helper-string-parser" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@colors/colors@1.5.0": version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" @@ -1281,32 +983,32 @@ resolved "https://registry.yarnpkg.com/@cucumber/ci-environment/-/ci-environment-10.0.1.tgz#c8584f1d4a619e4318cf60c01b838db096d72ccd" integrity sha512-/+ooDMPtKSmvcPMDYnMZt4LuoipfFfHaYspStI4shqw8FyKcfQAmekz6G+QKWjQQrvM+7Hkljwx58MEwPCwwzg== -"@cucumber/cucumber-expressions@17.1.0": - version "17.1.0" - resolved "https://registry.yarnpkg.com/@cucumber/cucumber-expressions/-/cucumber-expressions-17.1.0.tgz#1a428548a2c98ef3224bd484fc5666b4f7153a72" - integrity sha512-PCv/ppsPynniKPWJr5v566daCVe+pbxQpHGrIu/Ev57cCH9Rv+X0F6lio4Id3Z64TaG7btCRLUGewIgLwmrwOA== +"@cucumber/cucumber-expressions@18.0.1": + version "18.0.1" + resolved "https://registry.yarnpkg.com/@cucumber/cucumber-expressions/-/cucumber-expressions-18.0.1.tgz#0899cbda2ed5546dbaa0e40f0c754b6e3bd1bb69" + integrity sha512-NSid6bI+7UlgMywl5octojY5NXnxR9uq+JisjOrO52VbFsQM6gTWuQFE8syI10KnIBEdPzuEUSVEeZ0VFzRnZA== dependencies: regexp-match-indices "1.0.2" "@cucumber/cucumber@^11.1.1": - version "11.1.1" - resolved "https://registry.yarnpkg.com/@cucumber/cucumber/-/cucumber-11.1.1.tgz#8cff31391a6111514d9fba158c6fb3db4f9fdd41" - integrity sha512-4i2vk4R1Ffi1JXiNrVMLxLJFgZ7e0BHdoRN6QiWdz5EDPS+Qv9ld4wGZWeahBH5ncDygIrkkhtYxDhqOBXLPxQ== + version "11.3.0" + resolved "https://registry.yarnpkg.com/@cucumber/cucumber/-/cucumber-11.3.0.tgz#56f83e00d76cbc3c8d4d7cef139eaa8f37dc2254" + integrity sha512-1YGsoAzRfDyVOnRMTSZP/EcFsOBElOKa2r+5nin0DJAeK+Mp0mzjcmSllMgApGtck7Ji87wwy3kFONfHUHMn4g== dependencies: "@cucumber/ci-environment" "10.0.1" - "@cucumber/cucumber-expressions" "17.1.0" - "@cucumber/gherkin" "28.0.0" + "@cucumber/cucumber-expressions" "18.0.1" + "@cucumber/gherkin" "30.0.4" "@cucumber/gherkin-streams" "5.0.1" - "@cucumber/gherkin-utils" "9.0.0" - "@cucumber/html-formatter" "21.6.0" - "@cucumber/junit-xml-formatter" "0.6.0" + "@cucumber/gherkin-utils" "9.2.0" + "@cucumber/html-formatter" "21.10.1" + "@cucumber/junit-xml-formatter" "0.7.1" "@cucumber/message-streams" "4.0.1" - "@cucumber/messages" "24.1.0" - "@cucumber/tag-expressions" "6.1.1" + "@cucumber/messages" "27.2.0" + "@cucumber/tag-expressions" "6.1.2" assertion-error-formatter "^3.0.0" capital-case "^1.0.4" chalk "^4.1.2" - cli-table3 "0.6.3" + cli-table3 "0.6.5" commander "^10.0.0" debug "^4.3.4" error-stack-parser "^2.1.4" @@ -1319,21 +1021,19 @@ knuth-shuffle-seeded "^1.0.6" lodash.merge "^4.6.2" lodash.mergewith "^4.6.2" - luxon "3.2.1" + luxon "3.6.1" mime "^3.0.0" mkdirp "^2.1.5" mz "^2.7.0" progress "^2.0.3" - read-pkg-up "^7.0.1" - resolve-pkg "^2.0.0" - semver "7.5.3" + read-package-up "^11.0.0" + semver "7.7.1" string-argv "0.3.1" supports-color "^8.1.1" - tmp "0.2.3" - type-fest "^4.8.3" + type-fest "^4.41.0" util-arity "^1.1.0" yaml "^2.2.2" - yup "1.2.0" + yup "1.6.1" "@cucumber/gherkin-streams@5.0.1": version "5.0.1" @@ -1343,36 +1043,44 @@ commander "9.1.0" source-map-support "0.5.21" -"@cucumber/gherkin-utils@9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@cucumber/gherkin-utils/-/gherkin-utils-9.0.0.tgz#944c64c458742d8e73b750e5dde2cf56b161d674" - integrity sha512-clk4q39uj7pztZuZtyI54V8lRsCUz0Y/p8XRjIeHh7ExeEztpWkp4ca9q1FjUOPfQQ8E7OgqFbqoQQXZ1Bx7fw== +"@cucumber/gherkin-utils@9.2.0": + version "9.2.0" + resolved "https://registry.yarnpkg.com/@cucumber/gherkin-utils/-/gherkin-utils-9.2.0.tgz#42c50a6232022f5a17ca677a734daa4a15d0b6e1" + integrity sha512-3nmRbG1bUAZP3fAaUBNmqWO0z0OSkykZZotfLjyhc8KWwDSOrOmMJlBTd474lpA8EWh4JFLAX3iXgynBqBvKzw== dependencies: - "@cucumber/gherkin" "^28.0.0" - "@cucumber/messages" "^24.0.0" + "@cucumber/gherkin" "^31.0.0" + "@cucumber/messages" "^27.0.0" "@teppeis/multimaps" "3.0.0" - commander "12.0.0" + commander "13.1.0" source-map-support "^0.5.21" -"@cucumber/gherkin@28.0.0", "@cucumber/gherkin@^28.0.0": - version "28.0.0" - resolved "https://registry.yarnpkg.com/@cucumber/gherkin/-/gherkin-28.0.0.tgz#91246da622524807b21430c1692bedd319d3d4bb" - integrity sha512-Ee6zJQq0OmIUPdW0mSnsCsrWA2PZAELNDPICD2pLfs0Oz7RAPgj80UsD2UCtqyAhw2qAR62aqlktKUlai5zl/A== +"@cucumber/gherkin@30.0.4": + version "30.0.4" + resolved "https://registry.yarnpkg.com/@cucumber/gherkin/-/gherkin-30.0.4.tgz#047071b3122a9fb25e073aabdbc0132e98db4ee4" + integrity sha512-pb7lmAJqweZRADTTsgnC3F5zbTh3nwOB1M83Q9ZPbUKMb3P76PzK6cTcPTJBHWy3l7isbigIv+BkDjaca6C8/g== dependencies: - "@cucumber/messages" ">=19.1.4 <=24" + "@cucumber/messages" ">=19.1.4 <=26" -"@cucumber/html-formatter@21.6.0": - version "21.6.0" - resolved "https://registry.yarnpkg.com/@cucumber/html-formatter/-/html-formatter-21.6.0.tgz#bfd8c4db31c6c96a8520332efba2ea9838ca36f0" - integrity sha512-Qw1tdObBJrgXgXwVjKVjB3hFhFPI8WhIFb+ULy8g5lDl5AdnKDiyDXAMvAWRX+pphnRMMNdkPCt6ZXEfWvUuAA== +"@cucumber/gherkin@^31.0.0": + version "31.0.0" + resolved "https://registry.yarnpkg.com/@cucumber/gherkin/-/gherkin-31.0.0.tgz#12cff1a6e92b7d30cc5e374e91fbdd2135064aad" + integrity sha512-wlZfdPif7JpBWJdqvHk1Mkr21L5vl4EfxVUOS4JinWGf3FLRV6IKUekBv5bb5VX79fkDcfDvESzcQ8WQc07Wgw== + dependencies: + "@cucumber/messages" ">=19.1.4 <=26" -"@cucumber/junit-xml-formatter@0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@cucumber/junit-xml-formatter/-/junit-xml-formatter-0.6.0.tgz#394352c4a3a453d0130c2e6c7f179b408ee0df36" - integrity sha512-++PAuxliQhq7yr2Bn9P0fwBUo46OoKAK5f6M4PrwoHBqIsl/6pUS4mqpviuBrgZ8RD7BTrmASk4lUDJClAz/qA== +"@cucumber/html-formatter@21.10.1": + version "21.10.1" + resolved "https://registry.yarnpkg.com/@cucumber/html-formatter/-/html-formatter-21.10.1.tgz#53094f349912962b5673c83d995b53ec94f1972a" + integrity sha512-isaaNMNnBYThsvaHy7i+9kkk9V3+rhgdkt0pd6TCY6zY1CSRZQ7tG6ST9pYyRaECyfbCeF7UGH0KpNEnh6UNvQ== + +"@cucumber/junit-xml-formatter@0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@cucumber/junit-xml-formatter/-/junit-xml-formatter-0.7.1.tgz#a94cb7bc9f567bf2718605dc571712e69d4a0721" + integrity sha512-AzhX+xFE/3zfoYeqkT7DNq68wAQfBcx4Dk9qS/ocXM2v5tBv6eFQ+w8zaSfsktCjYzu4oYRH/jh4USD1CYHfaQ== dependencies: "@cucumber/query" "^13.0.2" "@teppeis/multimaps" "^3.0.0" + luxon "^3.5.0" xmlbuilder "^15.1.1" "@cucumber/message-streams@4.0.1": @@ -1380,40 +1088,50 @@ resolved "https://registry.yarnpkg.com/@cucumber/message-streams/-/message-streams-4.0.1.tgz#a5339d3504594bb2edb5732aaae94dddb24d0970" integrity sha512-Kxap9uP5jD8tHUZVjTWgzxemi/0uOsbGjd4LBOSxcJoOCRbESFwemUzilJuzNTB8pcTQUh8D5oudUyxfkJOKmA== -"@cucumber/messages@24.1.0", "@cucumber/messages@>=19.1.4 <=24", "@cucumber/messages@^24.0.0": - version "24.1.0" - resolved "https://registry.yarnpkg.com/@cucumber/messages/-/messages-24.1.0.tgz#a212c97b0548144c3ccfae021a96d6c56d3841d3" - integrity sha512-hxVHiBurORcobhVk80I9+JkaKaNXkW6YwGOEFIh/2aO+apAN+5XJgUUWjng9NwqaQrW1sCFuawLB1AuzmBaNdQ== +"@cucumber/messages@27.2.0", "@cucumber/messages@^27.0.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@cucumber/messages/-/messages-27.2.0.tgz#ee0cc006a391568fb668d47a23ac2e5bf901ff3a" + integrity sha512-f2o/HqKHgsqzFLdq6fAhfG1FNOQPdBdyMGpKwhb7hZqg0yZtx9BVqkTyuoNk83Fcvk3wjMVfouFXXHNEk4nddA== dependencies: - "@types/uuid" "9.0.8" + "@types/uuid" "10.0.0" class-transformer "0.5.1" - reflect-metadata "0.2.1" - uuid "9.0.1" + reflect-metadata "0.2.2" + uuid "11.0.5" + +"@cucumber/messages@>=19.1.4 <=26": + version "26.0.1" + resolved "https://registry.yarnpkg.com/@cucumber/messages/-/messages-26.0.1.tgz#18765481cf2580066977cbe26af111458e05c424" + integrity sha512-DIxSg+ZGariumO+Lq6bn4kOUIUET83A4umrnWmidjGFl8XxkBieUZtsmNbLYgH/gnsmP07EfxxdTr0hOchV1Sg== + dependencies: + "@types/uuid" "10.0.0" + class-transformer "0.5.1" + reflect-metadata "0.2.2" + uuid "10.0.0" "@cucumber/query@^13.0.2": - version "13.0.2" - resolved "https://registry.yarnpkg.com/@cucumber/query/-/query-13.0.2.tgz#23840579ded0b2f60ded5448c57e64a29787ee8f" - integrity sha512-ykjwL99F5ZmJ3XnIRPe/eA8LvfSTc+C6ZZXrD5QrAfhfMRomBNpZT03MNnxrJ92ge18eDbculhclrIJQiVJCJg== + version "13.6.0" + resolved "https://registry.yarnpkg.com/@cucumber/query/-/query-13.6.0.tgz#56858d6db13c0f623f0dc18bc4114a3f03dce130" + integrity sha512-tiDneuD5MoWsJ9VKPBmQok31mSX9Ybl+U4wqDoXeZgsXHDURqzM3rnpWVV3bC34y9W6vuFxrlwF/m7HdOxwqRw== dependencies: "@teppeis/multimaps" "3.0.0" - assert "^2.1.0" + lodash.sortby "^4.7.0" -"@cucumber/tag-expressions@6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@cucumber/tag-expressions/-/tag-expressions-6.1.1.tgz#36bebd6af0870e03f71b5a34436b95f3c70ef7e8" - integrity sha512-0oj5KTzf2DsR3DhL3hYeI9fP3nyKzs7TQdpl54uJelJ3W3Hlyyet2Hib+8LK7kNnqJsXENnJg9zahRYyrtvNEg== +"@cucumber/tag-expressions@6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@cucumber/tag-expressions/-/tag-expressions-6.1.2.tgz#7d566bda8e8c5b782e10d5ca24f30218cec47e09" + integrity sha512-xa3pER+ntZhGCxRXSguDTKEHTZpUUsp+RzTRNnit+vi5cqnk6abLdSLg5i3HZXU3c74nQ8afQC6IT507EN74oQ== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + version "4.7.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/eslintrc@^2.1.2", "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -1435,10 +1153,10 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== "@gar/promisify@^1.1.3": version "1.1.3" @@ -1446,32 +1164,181 @@ integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2", "@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" - resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== +"@inquirer/checkbox@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.2.0.tgz#84101e167f8ae5853c6b1f8c0aacf74c1969aef5" + integrity sha512-fdSw07FLJEU5vbpOPzXo5c6xmMGDzbZE2+niuDHX5N6mc6V0Ebso/q3xiHra4D73+PMsC8MJmcaZKuAAoaQsSA== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/figures" "^1.0.13" + "@inquirer/type" "^3.0.8" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@^5.1.14": + version "5.1.14" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.14.tgz#e6321edf51a3a5f54dc548b80ef6ba89891351ad" + integrity sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" + +"@inquirer/core@^10.1.15": + version "10.1.15" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.15.tgz#8feb69fd536786181a2b6bfb84d8674faa9d2e59" + integrity sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA== + dependencies: + "@inquirer/figures" "^1.0.13" + "@inquirer/type" "^3.0.8" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/editor@^4.2.16": + version "4.2.16" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.16.tgz#ac51ab9fd22411d6e670eb03d8db09b1b1381aac" + integrity sha512-iSzLjT4C6YKp2DU0fr8T7a97FnRRxMO6CushJnW5ktxLNM2iNeuyUuUA5255eOLPORoGYCrVnuDOEBdGkHGkpw== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/external-editor" "^1.0.0" + "@inquirer/type" "^3.0.8" + +"@inquirer/expand@^4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.17.tgz#b688f4a1a65daf2bf77a11de7734766769cce343" + integrity sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" + yoctocolors-cjs "^2.1.2" + +"@inquirer/external-editor@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.0.tgz#a4b53af494049093ebc3c5c73fa949258e013cec" + integrity sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg== + dependencies: + chardet "^2.1.0" + iconv-lite "^0.6.3" + +"@inquirer/figures@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" + integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== + +"@inquirer/input@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.2.1.tgz#c174654eb1ab34dfd42a9cf6095a7e735a4db130" + integrity sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" + +"@inquirer/number@^3.0.17": + version "3.0.17" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.17.tgz#32a66136ce35cad9f40ceb5f82a8cfac4f306517" + integrity sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" + +"@inquirer/password@^4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.17.tgz#45480c8ace688ebf071e350536ea746792b3eeba" + integrity sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@^7.8.1": + version "7.8.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.8.1.tgz#78270f2081d722b96ac5228e892b9d47a3dba2ca" + integrity sha512-LpBPeIpyCF1H3C7SK/QxJQG4iV1/SRmJdymfcul8PuwtVhD0JI1CSwqmd83VgRgt1QEsDojQYFSXJSgo81PVMw== + dependencies: + "@inquirer/checkbox" "^4.2.0" + "@inquirer/confirm" "^5.1.14" + "@inquirer/editor" "^4.2.16" + "@inquirer/expand" "^4.0.17" + "@inquirer/input" "^4.2.1" + "@inquirer/number" "^3.0.17" + "@inquirer/password" "^4.0.17" + "@inquirer/rawlist" "^4.1.5" + "@inquirer/search" "^3.1.0" + "@inquirer/select" "^4.3.1" + +"@inquirer/rawlist@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.5.tgz#e3664e3da3fba93f34ee25813faa7957aa717991" + integrity sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.1.0.tgz#22f1373938eef7b98c3c30f604aac8fbe9baf27a" + integrity sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/figures" "^1.0.13" + "@inquirer/type" "^3.0.8" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.3.1.tgz#b49e76dab47f7c729e4e1e520fedc268e5b88cdc" + integrity sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/figures" "^1.0.13" + "@inquirer/type" "^3.0.8" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.8.tgz#efc293ba0ed91e90e6267f1aacc1c70d20b8b4e8" + integrity sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw== + "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -1483,7 +1350,7 @@ "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -1492,14 +1359,14 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: "@jest/types" "^29.6.3" @@ -1511,7 +1378,7 @@ "@jest/core@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: "@jest/console" "^29.7.0" @@ -1545,7 +1412,7 @@ "@jest/environment@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: "@jest/fake-timers" "^29.7.0" @@ -1555,14 +1422,14 @@ "@jest/expect-utils@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: jest-get-type "^29.6.3" "@jest/expect@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== dependencies: expect "^29.7.0" @@ -1570,7 +1437,7 @@ "@jest/fake-timers@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: "@jest/types" "^29.6.3" @@ -1582,7 +1449,7 @@ "@jest/globals@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: "@jest/environment" "^29.7.0" @@ -1592,7 +1459,7 @@ "@jest/reporters@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" @@ -1622,14 +1489,14 @@ "@jest/schemas@^29.6.3": version "29.6.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: "@sinclair/typebox" "^0.27.8" "@jest/source-map@^29.6.3": version "29.6.3" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: "@jridgewell/trace-mapping" "^0.3.18" @@ -1638,7 +1505,7 @@ "@jest/test-result@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: "@jest/console" "^29.7.0" @@ -1648,7 +1515,7 @@ "@jest/test-sequencer@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: "@jest/test-result" "^29.7.0" @@ -1658,7 +1525,7 @@ "@jest/transform@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: "@babel/core" "^7.11.6" @@ -1679,7 +1546,7 @@ "@jest/types@^29.6.3": version "29.6.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: "@jest/schemas" "^29.6.3" @@ -1689,75 +1556,52 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.11" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" + integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.30" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz#4a76c4daeee5df09f5d3940e087442fb36ce2b99" + integrity sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" +"@kayahr/text-encoding@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@kayahr/text-encoding/-/text-encoding-2.0.1.tgz#09cfb634cefcdb580c8f9e1523a4c2d693d1ce9e" + integrity sha512-OUsJJVn85VrfNiiT6CSbHK2Jr9YS6tVsgQhly+EkcbYTT2SXeibU4nQNO2IzCRttKJt4zw4W60KtLifRRJBIng== "@lerna/child-process@7.4.2": version "7.4.2" @@ -1840,15 +1684,15 @@ yargs-parser "20.2.4" "@ljharb/through@^2.3.12": - version "2.3.12" - resolved "https://registry.npmjs.org/@ljharb/through/-/through-2.3.12.tgz" - integrity sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g== + version "2.3.14" + resolved "https://registry.yarnpkg.com/@ljharb/through/-/through-2.3.14.tgz#a5df44295f44dc23bfe106af59426dd0677760b1" + integrity sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.8" "@lukeed/csprng@^1.0.0": version "1.1.0" - resolved "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@lukeed/csprng/-/csprng-1.1.0.tgz#1e3e4bd05c1cc7a0b2ddbd8a03f39f6e4b5e6cfe" integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== "@nestjs/cli@^10.4.9": @@ -1876,19 +1720,20 @@ webpack "5.97.1" webpack-node-externals "3.0.0" -"@nestjs/common@^10.4.15": - version "10.4.15" - resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.15.tgz#27c291466d9100eb86fdbe6f7bbb4d1a6ad55f70" - integrity sha512-vaLg1ZgwhG29BuLDxPA9OAcIlgqzp9/N8iG0wGapyUNTf4IY4O6zAHgN6QalwLhFxq7nOI021vdRojR1oF3bqg== +"@nestjs/common@^10.4.20": + version "10.4.20" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.20.tgz#db021ccfcae398c1cd6c8bc808a169285978d687" + integrity sha512-hxJxZF7jcKGuUzM9EYbuES80Z/36piJbiqmPy86mk8qOn5gglFebBTvcx7PWVbRNSb4gngASYnefBj/Y2HAzpQ== dependencies: uid "2.0.2" + file-type "20.4.1" iterare "1.2.1" tslib "2.8.1" -"@nestjs/core@^10.4.15": - version "10.4.15" - resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-10.4.15.tgz#1343a3395d5c54e9b792608cb75eef39053806d5" - integrity sha512-UBejmdiYwaH6fTsz2QFBlC1cJHM+3UDeLZN+CiP9I1fRv2KlBZsmozGLbV5eS1JAVWJB4T5N5yQ0gjN8ZvcS2w== +"@nestjs/core@^10.4.20": + version "10.4.20" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-10.4.20.tgz#2740b91f60b5b3896e3bca5a189064e7bc15c2fc" + integrity sha512-kRdtyKA3+Tu70N3RQ4JgmO1E3LzAMs/eppj7SfjabC7TgqNWoS4RLhWl4BqmsNVmjj6D5jgfPVtHtgYkU3AfpQ== dependencies: uid "2.0.2" "@nuxtjs/opencollective" "0.3.2" @@ -1897,29 +1742,18 @@ path-to-regexp "3.3.0" tslib "2.8.1" -"@nestjs/platform-express@^10.4.15": - version "10.4.15" - resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-10.4.15.tgz#117fe7470c2b93e4ac07687b7fa604a17ca240c5" - integrity sha512-63ZZPkXHjoDyO7ahGOVcybZCRa7/Scp6mObQKjcX/fTEq1YJeU75ELvMsuQgc8U2opMGOBD7GVuc4DV0oeDHoA== +"@nestjs/platform-express@^10.4.20": + version "10.4.20" + resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-10.4.20.tgz#7266acbdda550f230ed7e661ee60699270fd48f4" + integrity sha512-rh97mX3rimyf4xLMLHuTOBKe6UD8LOJ14VlJ1F/PTd6C6ZK9Ak6EHuJvdaGcSFQhd3ZMBh3I6CuujKGW9pNdIg== dependencies: body-parser "1.20.3" cors "2.8.5" express "4.21.2" - multer "1.4.4-lts.1" + multer "2.0.2" tslib "2.8.1" -"@nestjs/schematics@^10.0.1": - version "10.1.0" - resolved "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.0.tgz" - integrity sha512-HQWvD3F7O0Sv3qHS2jineWxPLmBTLlyjT6VdSw2EAIXulitmV+ErxB3TCVQQORlNkl5p5cwRYWyBaOblDbNFIQ== - dependencies: - "@angular-devkit/core" "17.0.9" - "@angular-devkit/schematics" "17.0.9" - comment-json "4.2.3" - jsonc-parser "3.2.0" - pluralize "8.0.0" - -"@nestjs/schematics@^10.2.3": +"@nestjs/schematics@^10.0.1", "@nestjs/schematics@^10.2.3": version "10.2.3" resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-10.2.3.tgz#6053f43c5065b9e825cd08c4db1bf6bcbc9a6a62" integrity sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg== @@ -1932,7 +1766,7 @@ "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1940,12 +1774,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -1960,9 +1794,9 @@ semver "^7.3.5" "@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + version "3.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" + integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== dependencies: semver "^7.3.5" @@ -1981,9 +1815,9 @@ which "^3.0.0" "@npmcli/installed-package-contents@^2.0.1": - version "2.0.2" - resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz" - integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17" + integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w== dependencies: npm-bundled "^3.0.0" npm-normalize-package-bin "^3.0.0" @@ -1998,7 +1832,7 @@ "@npmcli/node-gyp@^3.0.0": version "3.0.0" - resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== "@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": @@ -2036,7 +1870,7 @@ "@nuxtjs/opencollective@0.3.2": version "0.3.2" - resolved "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz" + resolved "https://registry.yarnpkg.com/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz#620ce1044f7ac77185e825e1936115bb38e2681c" integrity sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA== dependencies: chalk "^4.1.0" @@ -2108,12 +1942,12 @@ "@octokit/auth-token@^3.0.0": version "3.0.4" - resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== "@octokit/core@^4.2.1": version "4.2.4" - resolved "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== dependencies: "@octokit/auth-token" "^3.0.0" @@ -2126,7 +1960,7 @@ "@octokit/endpoint@^7.0.0": version "7.0.6" - resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== dependencies: "@octokit/types" "^9.0.0" @@ -2135,7 +1969,7 @@ "@octokit/graphql@^5.0.0": version "5.0.6" - resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== dependencies: "@octokit/request" "^6.0.0" @@ -2144,17 +1978,17 @@ "@octokit/openapi-types@^18.0.0": version "18.1.1" - resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== "@octokit/plugin-enterprise-rest@6.0.1": version "6.0.1" - resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== "@octokit/plugin-paginate-rest@^6.1.2": version "6.1.2" - resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== dependencies: "@octokit/tsconfig" "^1.0.2" @@ -2162,19 +1996,19 @@ "@octokit/plugin-request-log@^1.0.4": version "1.0.4" - resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== "@octokit/plugin-rest-endpoint-methods@^7.1.2": version "7.2.3" - resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== dependencies: "@octokit/types" "^10.0.0" "@octokit/request-error@^3.0.0": version "3.0.3" - resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== dependencies: "@octokit/types" "^9.0.0" @@ -2183,7 +2017,7 @@ "@octokit/request@^6.0.0": version "6.2.8" - resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== dependencies: "@octokit/endpoint" "^7.0.0" @@ -2195,7 +2029,7 @@ "@octokit/rest@19.0.11": version "19.0.11" - resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== dependencies: "@octokit/core" "^4.2.1" @@ -2205,19 +2039,19 @@ "@octokit/tsconfig@^1.0.2": version "1.0.2" - resolved "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== "@octokit/types@^10.0.0": version "10.0.0" - resolved "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== dependencies: "@octokit/openapi-types" "^18.0.0" "@octokit/types@^9.0.0", "@octokit/types@^9.2.3": version "9.3.2" - resolved "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== dependencies: "@octokit/openapi-types" "^18.0.0" @@ -2232,25 +2066,13 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@pkgr/core@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz" - integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== - -"@pkgr/utils@^2.4.2": - version "2.4.2" - resolved "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz" - integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== - dependencies: - cross-spawn "^7.0.3" - fast-glob "^3.3.0" - is-glob "^4.0.3" - open "^9.1.0" - picocolors "^1.0.0" - tslib "^2.6.0" +"@pkgr/core@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" + integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== "@sigstore/bundle@^1.1.0": version "1.1.0" @@ -2283,19 +2105,19 @@ "@sinclair/typebox@^0.27.8": version "0.27.8" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" "@sinonjs/fake-timers@^10.0.2": version "10.3.0" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: "@sinonjs/commons" "^3.0.0" @@ -2305,29 +2127,43 @@ resolved "https://registry.yarnpkg.com/@teppeis/multimaps/-/multimaps-3.0.0.tgz#bb9c3f8d569f589e548586fa0bbf423010ddfdc5" integrity sha512-ID7fosbc50TbT0MK0EG12O+gAP3W3Aa/Pz4DaTtQtEvlc9Odaqi0de+xuZ7Li2GtK4HzEX7IuRWS/JmZLksR3Q== +"@tokenizer/inflate@^0.2.6": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@tokenizer/inflate/-/inflate-0.2.7.tgz#32dd9dfc9abe457c89b3d9b760fc0690c85a103b" + integrity sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg== + dependencies: + debug "^4.4.0" + fflate "^0.8.2" + token-types "^6.0.0" + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@tufjs/canonical-json@1.0.0": @@ -2345,7 +2181,7 @@ "@types/babel__core@^7.1.14": version "7.20.5" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" @@ -2355,38 +2191,38 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.4" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.4" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz" - integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== dependencies: - "@babel/types" "^7.20.7" + "@babel/types" "^7.28.2" "@types/body-parser@*": - version "1.19.5" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + version "1.19.6" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" + integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: "@types/connect" "*" "@types/node" "*" "@types/connect@*": version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" @@ -2400,37 +2236,51 @@ "@types/estree" "*" "@types/eslint@*": - version "8.56.2" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz" - integrity sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw== + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/estree@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== +"@types/estree@*", "@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@^4.17.33": - version "4.17.41" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz" - integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + version "4.19.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.17": - version "4.17.21" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== +"@types/express-serve-static-core@^5.0.0": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz#2fa94879c9d46b11a5df4c74ac75befd6b283de6" + integrity sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956" + integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^5.0.0" + "@types/serve-static" "*" + +"@types/express@^4.17.17": + version "4.17.23" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef" + integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -2439,167 +2289,169 @@ "@types/graceful-fs@^4.1.3": version "4.1.9" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/http-errors@*": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" + integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== "@types/inquirer@^9.0.7": - version "9.0.7" - resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.7.tgz" - integrity sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g== + version "9.0.9" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-9.0.9.tgz#c659dffbb8c2dab112324c7ae19b3303a972a96d" + integrity sha512-/mWx5136gts2Z2e5izdoRCo46lPp5TMs9R15GTSsgg/XnZyxDWVqoVU3R9lWnccKpqwsJLvRoxbCjoJtZB7DSw== dependencies: "@types/through" "*" rxjs "^7.2.0" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": version "3.0.3" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^29.5.13": - version "29.5.13" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.13.tgz#8bc571659f401e6a719a7bf0dbcb8b78c71a8adc" - integrity sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg== + version "29.5.14" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" + integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== dependencies: expect "^29.0.0" pretty-format "^29.0.0" "@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/mime@*": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.4.tgz" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - "@types/mime@^1": version "1.3.5" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/minimatch@^3.0.3": version "3.0.5" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/minimist@^1.2.0": version "1.2.5" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/multer@^1.4.11": - version "1.4.11" - resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.11.tgz#c70792670513b4af1159a2b60bf48cc932af55c5" - integrity sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w== + version "1.4.13" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.13.tgz#be483f909a77f13e0624cac3d001859eb12ae68b" + integrity sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw== dependencies: "@types/express" "*" "@types/node-fetch@^2.6.6": - version "2.6.9" - resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz" - integrity sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA== + version "2.6.13" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" + integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== dependencies: "@types/node" "*" - form-data "^4.0.0" + form-data "^4.0.4" -"@types/node@*", "@types/node@^20.8.7": - version "20.10.5" - resolved "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz" - integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw== +"@types/node@*": + version "24.2.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.1.tgz#83e41543f0a518e006594bb394e2cd961de56727" + integrity sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ== dependencies: - undici-types "~5.26.4" + undici-types "~7.10.0" -"@types/normalize-package-data@^2.4.0": +"@types/node@^20.8.7": + version "20.19.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.10.tgz#8bee5d6fa97221d50d767fa5707a3dd6503e8f19" + integrity sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ== + dependencies: + undici-types "~6.21.0" + +"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.3": version "2.4.4" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/qs@*": - version "6.9.11" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + version "6.14.0" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" + integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== "@types/range-parser@*": version "1.2.7" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/semver@^7.3.12", "@types/semver@^7.5.0": - version "7.5.6" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + version "7.7.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.0.tgz#64c441bdae033b378b6eef7d0c3d77c329b9378e" + integrity sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA== "@types/send@*": - version "0.17.4" - resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + version "0.17.5" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" + integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-static@*": - version "1.15.5" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + version "1.15.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" + integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== dependencies: "@types/http-errors" "*" - "@types/mime" "*" "@types/node" "*" + "@types/send" "*" "@types/stack-utils@^2.0.0": version "2.0.3" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/through@*": version "0.0.33" - resolved "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz" + resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.33.tgz#14ebf599320e1c7851e7d598149af183c6b9ea56" integrity sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ== dependencies: "@types/node" "*" -"@types/uuid@9.0.8": - version "9.0.8" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" - integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== +"@types/uuid@10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" + integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== "@types/yargs-parser@*": version "21.0.3" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^6.0.0": +"@typescript-eslint/eslint-plugin@^6.0.0", "@typescript-eslint/eslint-plugin@^6.9.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== dependencies: "@eslint-community/regexpp" "^4.5.1" @@ -2614,26 +2466,9 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/eslint-plugin@^6.9.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.15.0.tgz" - integrity sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.15.0" - "@typescript-eslint/type-utils" "6.15.0" - "@typescript-eslint/utils" "6.15.0" - "@typescript-eslint/visitor-keys" "6.15.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.0.0": +"@typescript-eslint/parser@^6.0.0", "@typescript-eslint/parser@^6.9.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== dependencies: "@typescript-eslint/scope-manager" "6.21.0" @@ -2642,54 +2477,25 @@ "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" -"@typescript-eslint/parser@^6.9.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.15.0.tgz" - integrity sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA== - dependencies: - "@typescript-eslint/scope-manager" "6.15.0" - "@typescript-eslint/types" "6.15.0" - "@typescript-eslint/typescript-estree" "6.15.0" - "@typescript-eslint/visitor-keys" "6.15.0" - debug "^4.3.4" - "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@6.15.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz" - integrity sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg== - dependencies: - "@typescript-eslint/types" "6.15.0" - "@typescript-eslint/visitor-keys" "6.15.0" - "@typescript-eslint/scope-manager@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: "@typescript-eslint/types" "6.21.0" "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/type-utils@6.15.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.15.0.tgz" - integrity sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ== - dependencies: - "@typescript-eslint/typescript-estree" "6.15.0" - "@typescript-eslint/utils" "6.15.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - "@typescript-eslint/type-utils@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== dependencies: "@typescript-eslint/typescript-estree" "6.21.0" @@ -2699,22 +2505,17 @@ "@typescript-eslint/types@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@6.15.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.15.0.tgz" - integrity sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ== - "@typescript-eslint/types@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: "@typescript-eslint/types" "5.62.0" @@ -2725,22 +2526,9 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@6.15.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz" - integrity sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew== - dependencies: - "@typescript-eslint/types" "6.15.0" - "@typescript-eslint/visitor-keys" "6.15.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - "@typescript-eslint/typescript-estree@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: "@typescript-eslint/types" "6.21.0" @@ -2752,22 +2540,9 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.15.0", "@typescript-eslint/utils@^6.0.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.15.0.tgz" - integrity sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.15.0" - "@typescript-eslint/types" "6.15.0" - "@typescript-eslint/typescript-estree" "6.15.0" - semver "^7.5.4" - -"@typescript-eslint/utils@6.21.0": +"@typescript-eslint/utils@6.21.0", "@typescript-eslint/utils@^6.0.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" @@ -2780,7 +2555,7 @@ "@typescript-eslint/utils@^5.10.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -2794,32 +2569,24 @@ "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@6.15.0": - version "6.15.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz" - integrity sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w== - dependencies: - "@typescript-eslint/types" "6.15.0" - eslint-visitor-keys "^3.4.1" - "@typescript-eslint/visitor-keys@6.21.0": version "6.21.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" @@ -2944,22 +2711,22 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== "@yarnpkg/lockfile@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== "@yarnpkg/parsers@3.0.0-rc.46": version "3.0.0-rc.46" - resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== dependencies: js-yaml "^3.10.0" @@ -2974,7 +2741,7 @@ JSONStream@^1.3.5: version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" @@ -2987,7 +2754,7 @@ abbrev@^1.0.0: accepts@~1.3.8: version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -2995,32 +2762,24 @@ accepts@~1.3.8: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: - version "8.3.1" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz" - integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== - -acorn@^8.14.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== - -acorn@^8.4.1, acorn@^8.9.0: - version "8.11.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" -acorn@^8.8.2: - version "8.11.3" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1, acorn@^8.9.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== add-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== agent-base@6, agent-base@^6.0.2: @@ -3031,15 +2790,15 @@ agent-base@6, agent-base@^6.0.2: debug "4" agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + version "4.6.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== dependencies: humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -3047,14 +2806,14 @@ aggregate-error@^3.0.0: ajv-formats@2.1.1, ajv-formats@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-keywords@^3.5.2: version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv-keywords@^5.1.0: @@ -3064,9 +2823,9 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@8.12.0, ajv@^8.0.0: +ajv@8.12.0: version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" @@ -3076,7 +2835,7 @@ ajv@8.12.0, ajv@^8.0.0: ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -3084,7 +2843,7 @@ ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.9.0: +ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -3096,12 +2855,12 @@ ajv@^8.9.0: ansi-colors@4.1.3, ansi-colors@^4.1.1: version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" @@ -3113,36 +2872,29 @@ ansi-regex@^4.1.0: ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== any-promise@^1.0.0: @@ -3152,7 +2904,7 @@ any-promise@^1.0.0: anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -3160,13 +2912,13 @@ anymatch@^3.0.3, anymatch@~3.1.2: append-field@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== "aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.1.0.tgz#75500a190313d95c64e871e7e4284c6ac219f0b1" + integrity sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew== are-we-there-yet@^3.0.0: version "3.0.1" @@ -3178,67 +2930,56 @@ are-we-there-yet@^3.0.0: arg@^4.1.0: version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-differ@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-ify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-timsort@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926" integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== arrify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== arrify@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -assert@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" - integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== - dependencies: - call-bind "^1.0.2" - is-nan "^1.3.2" - object-is "^1.1.5" - object.assign "^4.1.4" - util "^0.12.5" - assertion-error-formatter@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz#be9c8825dee6a8a6c72183d915912d9b57d5d265" @@ -3248,35 +2989,28 @@ assertion-error-formatter@^3.0.0: pad-right "^0.2.2" repeat-string "^1.6.1" -async@^3.2.3: - version "3.2.5" - resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== +async@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - axios@^1.0.0: - version "1.7.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== + version "1.11.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.11.0.tgz#c2ec219e35e414c025b2095e8b8280278478fdb6" + integrity sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA== dependencies: follow-redirects "^1.15.6" - form-data "^4.0.0" + form-data "^4.0.4" proxy-from-env "^1.1.0" babel-jest@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: "@jest/transform" "^29.7.0" @@ -3289,7 +3023,7 @@ babel-jest@^29.7.0: babel-plugin-istanbul@^6.1.1: version "6.1.1" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -3300,7 +3034,7 @@ babel-plugin-istanbul@^6.1.1: babel-plugin-jest-hoist@^29.6.3: version "29.6.3" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" @@ -3308,51 +3042,54 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== +babel-plugin-polyfill-corejs2@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" + integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/compat-data" "^7.27.7" + "@babel/helper-define-polyfill-provider" "^0.6.5" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.10.6: - version "0.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" - integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== +babel-plugin-polyfill-corejs3@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" + integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - core-js-compat "^3.38.0" + "@babel/helper-define-polyfill-provider" "^0.6.5" + core-js-compat "^3.43.0" -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== +babel-plugin-polyfill-regenerator@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" + integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.6.5" babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" babel-preset-jest@^29.6.3: version "29.6.3" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: babel-plugin-jest-hoist "^29.6.3" @@ -3360,32 +3097,27 @@ babel-preset-jest@^29.6.3: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== before-after-hook@^2.2.0: version "2.2.3" - resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -big-integer@^1.6.44: - version "1.6.52" - resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz" - integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== - binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -3410,80 +3142,53 @@ body-parser@1.20.3: type-is "~1.6.18" unpipe "1.0.0" -bplist-parser@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" - brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== - dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -browserslist@^4.23.1, browserslist@^4.23.3: - version "4.24.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" - integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A== - dependencies: - caniuse-lite "^1.0.30001663" - electron-to-chromium "^1.5.28" - node-releases "^2.0.18" - update-browserslist-db "^1.1.0" - -browserslist@^4.24.0: - version "4.24.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2" - integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== - dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.24.0, browserslist@^4.25.1: + version "4.25.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.2.tgz#90c1507143742d743544ae6e92bca3348adff667" + integrity sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA== + dependencies: + caniuse-lite "^1.0.30001733" + electron-to-chromium "^1.5.199" node-releases "^2.0.19" - update-browserslist-db "^1.1.1" + update-browserslist-db "^1.1.3" bser@2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.5.0: version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -3495,34 +3200,27 @@ builtins@^1.0.3: integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" + integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== dependencies: semver "^7.0.0" -bundle-name@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz" - integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== - dependencies: - run-applescript "^5.0.0" - -busboy@^1.0.0: +busboy@^1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== dependencies: streamsearch "^1.1.0" byte-size@8.1.1: version "8.1.1" - resolved "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== bytes@3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cacache@^16.1.0: @@ -3567,60 +3265,40 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" - integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" function-bind "^1.1.2" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.8: +call-bind@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" + es-define-property "^1.0.0" get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + set-function-length "^1.2.2" call-bound@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.2.tgz#9dbd4daf9f5f753bec3e4c8fbb8a2ecc4de6c39b" - integrity sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: - call-bind "^1.0.8" - get-intrinsic "^1.2.5" + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^6.2.2: version "6.2.2" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: camelcase "^5.3.1" @@ -3629,28 +3307,18 @@ camelcase-keys@^6.2.2: camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0: version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001565: - version "1.0.30001570" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz" - integrity sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw== - -caniuse-lite@^1.0.30001663: - version "1.0.30001664" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz#d588d75c9682d3301956b05a3749652a80677df4" - integrity sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g== - -caniuse-lite@^1.0.30001688: - version "1.0.30001688" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz#f9d3ede749f083ce0db4c13db9d828adaf2e8d0a" - integrity sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA== +caniuse-lite@^1.0.30001733: + version "1.0.30001734" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz#f97e08599e2d75664543ae4b6ef25dc2183c5cc6" + integrity sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A== capital-case@^1.0.4: version "1.0.4" @@ -3663,45 +3331,41 @@ capital-case@^1.0.4: chalk@4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + version "5.5.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.5.0.tgz#67ada1df5ca809dc84c9b819d76418ddcf128428" + integrity sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg== char-regex@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chardet@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@3.6.0: +chardet@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.0.tgz#1007f441a1ae9f9199a4a67f6e978fb0aa9aa3fe" + integrity sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA== + +chokidar@3.6.0, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -3716,40 +3380,25 @@ chokidar@3.6.0: optionalDependencies: fsevents "~2.3.2" -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - chownr@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^3.2.0, ci-info@^3.6.1: version "3.9.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + version "1.4.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== class-transformer@0.5.1: version "0.5.1" @@ -3758,35 +3407,26 @@ class-transformer@0.5.1: clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-cursor@3.1.0, cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@2.6.1: version "2.6.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== cli-spinners@^2.5.0: version "2.9.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== -cli-table3@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - cli-table3@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" @@ -3798,17 +3438,17 @@ cli-table3@0.6.5: cli-width@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cli-width@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== cliui@^7.0.2: version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -3817,7 +3457,7 @@ cliui@^7.0.2: cliui@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -3826,7 +3466,7 @@ cliui@^8.0.1: clone-deep@4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" @@ -3835,7 +3475,7 @@ clone-deep@4.0.1: clone@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== cmd-shim@6.0.1: @@ -3845,36 +3485,24 @@ cmd-shim@6.0.1: co@^4.6.0: version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-support@^1.1.3: @@ -3884,7 +3512,7 @@ color-support@^1.1.3: columnify@1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== dependencies: strip-ansi "^6.0.1" @@ -3892,19 +3520,19 @@ columnify@1.6.0: combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-12.0.0.tgz#b929db6df8546080adfd004ab215ed48cf6f2592" - integrity sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA== +commander@13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== commander@4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commander@9.1.0: @@ -3919,20 +3547,9 @@ commander@^10.0.0: commander@^2.20.0: version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -comment-json@4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz" - integrity sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw== - dependencies: - array-timsort "^1.0.3" - core-util-is "^1.0.3" - esprima "^4.0.1" - has-own-prop "^2.0.0" - repeat-string "^1.6.1" - comment-json@4.2.5: version "4.2.5" resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.2.5.tgz#482e085f759c2704b60bc6f97f55b8c01bc41e70" @@ -3946,7 +3563,7 @@ comment-json@4.2.5: compare-func@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" @@ -3954,22 +3571,12 @@ compare-func@^2.0.0: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - concat-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== dependencies: buffer-from "^1.0.0" @@ -3979,36 +3586,36 @@ concat-stream@^2.0.0: consola@^2.15.0: version "2.15.3" - resolved "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== console-control-strings@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== conventional-changelog-angular@7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== dependencies: compare-func "^2.0.0" conventional-changelog-core@5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== dependencies: add-stream "^1.0.0" @@ -4025,12 +3632,12 @@ conventional-changelog-core@5.0.1: conventional-changelog-preset-loader@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== conventional-changelog-writer@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== dependencies: conventional-commits-filter "^3.0.0" @@ -4043,7 +3650,7 @@ conventional-changelog-writer@^6.0.0: conventional-commits-filter@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== dependencies: lodash.ismatch "^4.4.0" @@ -4051,7 +3658,7 @@ conventional-commits-filter@^3.0.0: conventional-commits-parser@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== dependencies: JSONStream "^1.3.5" @@ -4061,7 +3668,7 @@ conventional-commits-parser@^4.0.0: conventional-recommended-bump@7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== dependencies: concat-stream "^2.0.0" @@ -4074,12 +3681,12 @@ conventional-recommended-bump@7.0.1: convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.7.1: @@ -4087,21 +3694,21 @@ cookie@0.7.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== -core-js-compat@^3.37.1, core-js-compat@^3.38.0: - version "3.38.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" - integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== +core-js-compat@^3.43.0: + version "3.45.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.45.0.tgz#bc0017525dcb7a42ba3241d02f6fce9bae8e5c33" + integrity sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA== dependencies: - browserslist "^4.23.3" + browserslist "^4.25.1" core-util-is@^1.0.3, core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cors@2.8.5: version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -4109,7 +3716,7 @@ cors@2.8.5: cosmiconfig@^8.2.0: version "8.3.6" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: import-fresh "^3.3.0" @@ -4119,7 +3726,7 @@ cosmiconfig@^8.2.0: create-jest@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== dependencies: "@jest/types" "^29.6.3" @@ -4132,13 +3739,13 @@ create-jest@^29.7.0: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -4146,38 +3753,31 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: dargs@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== dateformat@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debug@2.6.9: version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^4.3.3: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" decamelize-keys@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" @@ -4185,7 +3785,7 @@ decamelize-keys@^1.1.0: decamelize@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== dedent@0.7.0: @@ -4194,46 +3794,28 @@ dedent@0.7.0: integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.6.0.tgz#79d52d6389b1ffa67d2bcef59ba51847a9d503b2" + integrity sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA== deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-browser-id@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz" - integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== - dependencies: - bplist-parser "^0.2.0" - untildify "^4.0.0" - -default-browser@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz" - integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== - dependencies: - bundle-name "^3.0.0" - default-browser-id "^3.0.0" - execa "^7.1.1" - titleize "^3.0.0" - defaults@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" -define-data-property@^1.0.1, define-data-property@^1.1.4: +define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -4242,37 +3824,14 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - define-lazy-prop@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== - -define-properties@^1.1.3, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: @@ -4282,56 +3841,56 @@ delegates@^1.0.0: depd@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== deprecation@^2.0.0: version "2.3.1" - resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== destroy@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-indent@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== detect-newline@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== diff-sequences@^29.6.3: version "29.6.3" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== diff@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dot-prop@^5.1.0: version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" @@ -4342,79 +3901,69 @@ dotenv-expand@~10.0.0: integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== dotenv@^16.3.1: - version "16.3.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + version "16.6.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== dotenv@~16.3.1: version "16.3.2" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== -dunder-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.0.tgz#c2fce098b3c8f8899554905f4377b6d85dabaa80" - integrity sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A== +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: - call-bind-apply-helpers "^1.0.0" + call-bind-apply-helpers "^1.0.1" es-errors "^1.3.0" gopd "^1.2.0" duplexer@^0.1.1: version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ee-first@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.7: - version "3.1.9" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.601: - version "1.4.614" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz" - integrity sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ== - -electron-to-chromium@^1.5.28: - version "1.5.30" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.30.tgz#5b264b489cfe0c3dd71097c164d795444834e7c7" - integrity sha512-sXI35EBN4lYxzc/pIGorlymYNzDBOqkSlVRe6MkgBsW/hW1tpC/HDJ2fjG7XnjakzfLEuvdmux0Mjs6jHq4UOA== - -electron-to-chromium@^1.5.73: - version "1.5.73" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz#f32956ce40947fa3c8606726a96cd8fb5bb5f720" - integrity sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg== +electron-to-chromium@^1.5.199: + version "1.5.200" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz#adffa5db97390ce9d48987f528117a608ed0d7c9" + integrity sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w== emittery@^0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encodeurl@~2.0.0: @@ -4424,44 +3973,36 @@ encodeurl@~2.0.0: encoding@^0.1.13: version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== dependencies: once "^1.4.0" -enhanced-resolve@^5.17.1: - version "5.17.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" - integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enhanced-resolve@^5.7.0: - version "5.15.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== +enhanced-resolve@^5.17.1, enhanced-resolve@^5.7.0: + version "5.18.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44" + integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" enquirer@~2.3.6: version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@7.8.1: @@ -4471,12 +4012,12 @@ envinfo@7.8.1: err-code@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" @@ -4488,14 +4029,7 @@ error-stack-parser@^2.1.4: dependencies: stackframe "^1.3.4" -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-define-property@^1.0.1: +es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== @@ -4506,60 +4040,65 @@ es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" -escalade@^3.2.0: +escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-google@^0.14.0: version "0.14.0" - resolved "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== eslint-config-prettier@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + version "9.1.2" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz#90deb4fa0259592df774b600dbd1d2249a78ce91" + integrity sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ== eslint-plugin-deprecation@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-2.0.0.tgz#9804707a4c19f3a53615c6babc0ced3d429d69cf" integrity sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ== dependencies: "@typescript-eslint/utils" "^6.0.0" @@ -4567,43 +4106,35 @@ eslint-plugin-deprecation@^2.0.0: tsutils "^3.21.0" eslint-plugin-jest-extended@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/eslint-plugin-jest-extended/-/eslint-plugin-jest-extended-2.0.0.tgz" - integrity sha512-nMhVVsVcG/+Q6FMshql35WBxwx8xlBhxKgAG08WP3BYWfXrp28oxLpJVu9JSbMpfmfKGVrHwMYJGfPLRKlGB8w== + version "2.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest-extended/-/eslint-plugin-jest-extended-2.4.0.tgz#57d8fb2e8d3a1296b62962d3b90d7ac08382dddd" + integrity sha512-olotsH4SczpKgH/EPQZVp3jJ+YpMCsO0wNEMIx09C2/5HC0CtPrxSZ4BzPd/iZsD3bIOgO7H9e3KXVojvoMYsw== dependencies: "@typescript-eslint/utils" "^5.10.0" eslint-plugin-jest-formatting@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/eslint-plugin-jest-formatting/-/eslint-plugin-jest-formatting-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest-formatting/-/eslint-plugin-jest-formatting-3.1.0.tgz#b26dd5a40f432b642dcc880021a771bb1c93dcd2" integrity sha512-XyysraZ1JSgGbLSDxjj5HzKKh0glgWf+7CkqxbTqb7zEhW7X2WHo5SBQ8cGhnszKN+2Lj3/oevBlHNbHezoc/A== eslint-plugin-jest@^27.4.3: - version "27.6.0" - resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz" - integrity sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng== + version "27.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" + integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== dependencies: "@typescript-eslint/utils" "^5.10.0" -eslint-plugin-prettier@^5.0.0: - version "5.1.3" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz" - integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.8.6" - -eslint-plugin-prettier@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz" - integrity sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg== +eslint-plugin-prettier@^5.0.0, eslint-plugin-prettier@^5.0.1: + version "5.5.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz#9d61c4ea11de5af704d4edf108c82ccfa7f2e61c" + integrity sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg== dependencies: prettier-linter-helpers "^1.0.0" - synckit "^0.8.5" + synckit "^0.11.7" eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -4611,7 +4142,7 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: eslint-scope@^7.2.2: version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" @@ -4619,7 +4150,7 @@ eslint-scope@^7.2.2: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@8.52.0: @@ -4667,15 +4198,15 @@ eslint@8.52.0: text-table "^0.2.0" eslint@^8.42.0: - version "8.56.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -4712,7 +4243,7 @@ eslint@^8.42.0: espree@^9.6.0, espree@^9.6.1: version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" @@ -4721,56 +4252,56 @@ espree@^9.6.0, espree@^9.6.1: esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter3@^4.0.4: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.2.0: version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== execa@5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== dependencies: cross-spawn "^7.0.3" @@ -4785,7 +4316,7 @@ execa@5.0.0: execa@^5.0.0: version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -4798,29 +4329,14 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^7.1.1: - version "7.2.0" - resolved "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - exit@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expect@^29.0.0, expect@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: "@jest/expect-utils" "^29.7.0" @@ -4830,9 +4346,9 @@ expect@^29.0.0, expect@^29.7.0: jest-util "^29.7.0" exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91" + integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA== express@4.21.2: version "4.21.2" @@ -4873,7 +4389,7 @@ express@4.21.2: external-editor@^3.0.3, external-editor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -4882,84 +4398,99 @@ external-editor@^3.0.3, external-editor@^3.1.0: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.3.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== +fast-glob@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-safe-stringify@2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fast-uri@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" - integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" +fflate@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + figures@3.2.0, figures@^3.0.0, figures@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" +file-type@20.4.1: + version "20.4.1" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-20.4.1.tgz#8a58cf0922c6098af0ca5d84d5cf859c0c0f56a5" + integrity sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ== + dependencies: + "@tokenizer/inflate" "^0.2.6" + strtok3 "^10.2.0" + token-types "^6.0.0" + uint8array-extras "^1.4.0" + filelist@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -4976,16 +4507,21 @@ finalhandler@1.3.1: statuses "2.0.1" unpipe "~1.0.0" +find-up-simple@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/find-up-simple/-/find-up-simple-1.0.1.tgz#18fb90ad49e45252c4d7fca56baade04fa3fca1e" + integrity sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ== + find-up@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -4993,7 +4529,7 @@ find-up@^4.0.0, find-up@^4.1.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -5001,7 +4537,7 @@ find-up@^5.0.0: flat-cache@^3.0.4: version "3.2.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" @@ -5010,37 +4546,30 @@ flat-cache@^3.0.4: flat@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== follow-redirects@^1.15.6: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -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" + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - cross-spawn "^7.0.0" + cross-spawn "^7.0.6" signal-exit "^4.0.1" fork-ts-checker-webpack-plugin@9.0.2: version "9.0.2" - resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz#c12c590957837eb02b02916902dcf3e675fd2b1e" integrity sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg== dependencies: "@babel/code-frame" "^7.16.7" @@ -5056,33 +4585,35 @@ fork-ts-checker-webpack-plugin@9.0.2: semver "^7.3.5" tapable "^2.2.1" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== +form-data@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" + integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" mime-types "^2.1.12" forwarded@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@^10.0.0: version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -5090,9 +4621,9 @@ fs-extra@^10.0.0: universalify "^2.0.0" fs-extra@^11.1.0, fs-extra@^11.1.1: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + version "11.3.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.1.tgz#ba7a1f97a85f94c6db2e52ff69570db3671d5a74" + integrity sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -5100,36 +4631,36 @@ fs-extra@^11.1.0, fs-extra@^11.1.1: fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs-minipass@^3.0.0: version "3.0.3" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== dependencies: minipass "^7.0.3" fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.1.0.tgz#632aa15a20e71828ed56b24303363fb1414e5997" + integrity sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gauge@^4.0.3: @@ -5148,59 +4679,38 @@ gauge@^4.0.3: gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-intrinsic@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.6.tgz#43dd3dd0e7b49b82b2dfcad10dc824bf7fc265d5" - integrity sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: - call-bind-apply-helpers "^1.0.1" - dunder-proto "^1.0.0" + call-bind-apply-helpers "^1.0.2" es-define-property "^1.0.1" es-errors "^1.3.0" - es-object-atoms "^1.0.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" + get-proto "^1.0.1" gopd "^1.2.0" has-symbols "^1.1.0" hasown "^2.0.2" - math-intrinsics "^1.0.0" + math-intrinsics "^1.1.0" get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-pkg-repo@^4.2.1: version "4.2.1" - resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== dependencies: "@hutson/parse-repository-url" "^3.0.0" @@ -5210,22 +4720,30 @@ get-pkg-repo@^4.2.1: get-port@5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== -get-stream@^6.0.0, get-stream@^6.0.1: +get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== git-raw-commits@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== dependencies: dargs "^7.0.0" @@ -5234,7 +4752,7 @@ git-raw-commits@^3.0.0: git-remote-origin-url@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== dependencies: gitconfiglocal "^1.0.0" @@ -5242,7 +4760,7 @@ git-remote-origin-url@^2.0.0: git-semver-tags@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== dependencies: meow "^8.1.2" @@ -5250,7 +4768,7 @@ git-semver-tags@^5.0.0: git-up@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== dependencies: is-ssh "^1.4.0" @@ -5265,31 +4783,31 @@ git-url-parse@13.1.0: gitconfiglocal@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== dependencies: ini "^1.3.2" glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob-to-regexp@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@10.4.5: +glob@10.4.5, glob@^10.2.2, glob@^10.3.10, glob@^10.3.7: version "10.4.5" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== @@ -5313,32 +4831,9 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.2.2, glob@^10.3.7: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^10.3.10: - version "10.4.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5" - integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - glob@^7.1.3, glob@^7.1.4: version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -5361,7 +4856,7 @@ glob@^8.0.1: glob@^9.2.0: version "9.3.5" - resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== dependencies: fs.realpath "^1.0.0" @@ -5376,21 +4871,16 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.19.0: version "13.24.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" globby@11.1.0, globby@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -5400,31 +4890,24 @@ globby@11.1.0, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -gopd@^1.2.0: +gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== handlebars@^4.7.7: version "4.7.8" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" @@ -5436,7 +4919,7 @@ handlebars@^4.7.7: hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-ansi@^4.0.1: @@ -5446,28 +4929,16 @@ has-ansi@^4.0.1: dependencies: ansi-regex "^4.1.0" -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-own-prop@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" @@ -5475,22 +4946,12 @@ has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-symbols@^1.1.0: +has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -5499,16 +4960,9 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: has-unicode@2.0.1, has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -5518,7 +4972,7 @@ hasown@^2.0.2: hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^3.0.6: @@ -5530,31 +4984,38 @@ hosted-git-info@^3.0.6: hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" hosted-git-info@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" - integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== + version "6.1.3" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.3.tgz#2ee1a14a097a1236bddf8672c35b613c46c55946" + integrity sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw== dependencies: lru-cache "^7.5.1" +hosted-git-info@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== + dependencies: + lru-cache "^10.0.1" + html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== http-errors@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -5582,14 +5043,9 @@ https-proxy-agent@^5.0.0: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -5599,21 +5055,21 @@ humanize-ms@^1.2.1: iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2: +iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-walk@^5.0.1: @@ -5631,36 +5087,49 @@ ignore-walk@^6.0.0: minimatch "^9.0.0" ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: - version "5.3.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@3.1.0, import-local@^3.0.2: +import-local@3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +index-to-position@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-1.1.0.tgz#2e50bd54c8040bdd6d9b3d95ec2a8fedf86b4d44" + integrity sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg== + infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -5668,7 +5137,7 @@ infer-owner@^1.0.4: inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -5676,7 +5145,7 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@2.0.0: @@ -5686,7 +5155,7 @@ ini@2.0.0: ini@^1.3.2, ini@^1.3.8: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== init-package-json@5.0.0: @@ -5702,9 +5171,9 @@ init-package-json@5.0.0: validate-npm-package-license "^3.0.4" validate-npm-package-name "^5.0.0" -inquirer@8.2.6, inquirer@^8.2.4: +inquirer@8.2.6: version "8.2.6" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== dependencies: ansi-escapes "^4.2.1" @@ -5744,132 +5213,103 @@ inquirer@9.2.15: strip-ansi "^6.0.1" wrap-ansi "^6.2.0" -inquirer@^9.2.14: - version "9.2.14" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-9.2.14.tgz" - integrity sha512-4ByIMt677Iz5AvjyKrDpzaepIyMewNvDcvwpVVRZNmy9dLakVoVgdCHZXbK1SlVJra1db0JZ6XkJyHsanpdrdQ== +inquirer@^12.9.1: + version "12.9.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-12.9.1.tgz#224d760f59c734bae817cc6d95b17702375b7a89" + integrity sha512-G7uXAb9OiLcd+9jmA/7KKrItvFF00kKk/jb6CtG+Tm2zSPWfzzhyJwDhVCy+mBmE32o2zJnB5JnknIIv2Ft+AA== dependencies: - "@ljharb/through" "^2.3.12" + "@inquirer/core" "^10.1.15" + "@inquirer/prompts" "^7.8.1" + "@inquirer/type" "^3.0.8" ansi-escapes "^4.3.2" - chalk "^5.3.0" + mute-stream "^2.0.0" + run-async "^4.0.5" + rxjs "^7.8.2" + +inquirer@^8.2.4: + version "8.2.7" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.7.tgz#62f6b931a9b7f8735dc42db927316d8fb6f71de8" + integrity sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA== + dependencies: + "@inquirer/external-editor" "^1.0.0" + ansi-escapes "^4.2.1" + chalk "^4.1.1" cli-cursor "^3.1.0" - cli-width "^4.1.0" - external-editor "^3.1.0" - figures "^3.2.0" + cli-width "^3.0.0" + figures "^3.0.0" lodash "^4.17.21" - mute-stream "1.0.0" + mute-stream "0.0.8" ora "^5.4.1" - run-async "^3.0.0" - rxjs "^7.8.1" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wrap-ansi "^6.2.0" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" +ip-address@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.0.1.tgz#a8180b783ce7788777d796286d61bce4276818ed" + integrity sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-arguments@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" - integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 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-ci@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: ci-info "^3.2.0" -is-core-module@^2.13.0, is-core-module@^2.5.0: - version "2.13.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-core-module@^2.8.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== +is-core-module@^2.16.0, is-core-module@^2.5.0, is-core-module@^2.8.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + 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-fn@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -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.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" @@ -5880,30 +5320,22 @@ is-installed-globally@^0.4.0: is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-nan@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-inside@^3.0.2, is-path-inside@^3.0.3: @@ -5913,92 +5345,80 @@ is-path-inside@^3.0.2, is-path-inside@^3.0.3: is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + version "1.4.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.1.tgz#76de1cdbe8f92a8b905d1a172b6bc09704c20396" + integrity sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg== dependencies: protocols "^2.0.1" is-stream@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - is-text-path@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.3: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4: version "5.2.1" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" @@ -6008,19 +5428,19 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" istanbul-lib-coverage "^3.2.0" semver "^7.5.4" istanbul-lib-report@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -6029,7 +5449,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -6037,49 +5457,39 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" iterare@1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.1.tgz#139c400ff7363690e33abffa33cbba8920f00042" integrity sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q== -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jackspeak@^3.1.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" - integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.7" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + version "10.9.4" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.4.tgz#d626da108c63d5cfb00ab5c25fadc7e0084af8e6" + integrity sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA== dependencies: - async "^3.2.3" - chalk "^4.0.2" + async "^3.2.6" filelist "^1.0.4" - minimatch "^3.1.2" + picocolors "^1.1.1" jest-changed-files@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: execa "^5.0.0" @@ -6088,7 +5498,7 @@ jest-changed-files@^29.7.0: jest-circus@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== dependencies: "@jest/environment" "^29.7.0" @@ -6114,7 +5524,7 @@ jest-circus@^29.7.0: jest-cli@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: "@jest/core" "^29.7.0" @@ -6131,7 +5541,7 @@ jest-cli@^29.7.0: jest-config@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== dependencies: "@babel/core" "^7.11.6" @@ -6159,7 +5569,7 @@ jest-config@^29.7.0: "jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" @@ -6169,14 +5579,14 @@ jest-config@^29.7.0: jest-docblock@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" jest-each@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: "@jest/types" "^29.6.3" @@ -6187,7 +5597,7 @@ jest-each@^29.7.0: jest-environment-node@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== dependencies: "@jest/environment" "^29.7.0" @@ -6199,12 +5609,12 @@ jest-environment-node@^29.7.0: jest-get-type@^29.6.3: version "29.6.3" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== jest-haste-map@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: "@jest/types" "^29.6.3" @@ -6223,7 +5633,7 @@ jest-haste-map@^29.7.0: jest-leak-detector@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: jest-get-type "^29.6.3" @@ -6231,7 +5641,7 @@ jest-leak-detector@^29.7.0: jest-matcher-utils@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" @@ -6241,7 +5651,7 @@ jest-matcher-utils@^29.7.0: jest-message-util@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" @@ -6256,7 +5666,7 @@ jest-message-util@^29.7.0: jest-mock@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: "@jest/types" "^29.6.3" @@ -6265,17 +5675,17 @@ jest-mock@^29.7.0: jest-pnp-resolver@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^29.6.3: version "29.6.3" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== jest-resolve-dependencies@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: jest-regex-util "^29.6.3" @@ -6283,7 +5693,7 @@ jest-resolve-dependencies@^29.7.0: jest-resolve@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: chalk "^4.0.0" @@ -6298,7 +5708,7 @@ jest-resolve@^29.7.0: jest-runner@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: "@jest/console" "^29.7.0" @@ -6325,7 +5735,7 @@ jest-runner@^29.7.0: jest-runtime@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== dependencies: "@jest/environment" "^29.7.0" @@ -6353,7 +5763,7 @@ jest-runtime@^29.7.0: jest-snapshot@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: "@babel/core" "^7.11.6" @@ -6379,7 +5789,7 @@ jest-snapshot@^29.7.0: jest-util@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: "@jest/types" "^29.6.3" @@ -6391,7 +5801,7 @@ jest-util@^29.7.0: jest-validate@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: "@jest/types" "^29.6.3" @@ -6403,7 +5813,7 @@ jest-validate@^29.7.0: jest-watcher@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: "@jest/test-result" "^29.7.0" @@ -6417,7 +5827,7 @@ jest-watcher@^29.7.0: jest-worker@^27.4.5: version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" @@ -6426,7 +5836,7 @@ jest-worker@^27.4.5: jest-worker@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" @@ -6446,87 +5856,82 @@ jest@^29.7.0: js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" js-yaml@^3.10.0, js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-parse-even-better-errors@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz" - integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" + integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^2.2.2, json5@^2.2.3: version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonc-parser@3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonc-parser@3.2.1: @@ -6540,9 +5945,9 @@ jsonc-parser@3.3.1: integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== dependencies: universalify "^2.0.0" optionalDependencies: @@ -6550,7 +5955,7 @@ jsonfile@^6.0.1: jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== keyv@^4.5.3: @@ -6562,12 +5967,12 @@ keyv@^4.5.3: kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== knuth-shuffle-seeded@^1.0.6: @@ -6660,12 +6065,12 @@ lerna@^7.4.2: leven@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -6695,7 +6100,7 @@ libnpmpublish@7.3.0: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lines-and-columns@~2.0.3: @@ -6705,7 +6110,7 @@ lines-and-columns@~2.0.3: load-json-file@6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== dependencies: graceful-fs "^4.1.15" @@ -6715,7 +6120,7 @@ load-json-file@6.2.0: load-json-file@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: graceful-fs "^4.1.2" @@ -6725,12 +6130,12 @@ load-json-file@^4.0.0: loader-runner@^4.2.0: version "4.3.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" @@ -6738,31 +6143,31 @@ locate-path@^2.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.ismatch@^4.4.0: version "4.4.0" - resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.mergewith@^4.6.2: @@ -6770,14 +6175,19 @@ lodash.mergewith@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -6790,21 +6200,21 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lru-cache@^10.2.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== +lru-cache@^10.0.1, lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" @@ -6814,22 +6224,15 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -"lru-cache@^9.1.1 || ^10.0.0": - version "10.1.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== - -luxon@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.2.1.tgz#14f1af209188ad61212578ea7e3d518d18cee45f" - integrity sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg== +luxon@3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.6.1.tgz#d283ffc4c0076cb0db7885ec6da1c49ba97e47b0" + integrity sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ== -magic-string@0.30.5: - version "0.30.5" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz" - integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" +luxon@^3.5.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.1.tgz#9bd09aa84a56afb00c57ea78a8ec5bd16eb24ec0" + integrity sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg== magic-string@0.30.8: version "0.30.8" @@ -6840,14 +6243,14 @@ magic-string@0.30.8: make-dir@4.0.0, make-dir@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: semver "^7.5.3" make-dir@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" @@ -6855,7 +6258,7 @@ make-dir@^2.1.0: make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-fetch-happen@^10.0.3: @@ -6903,41 +6306,41 @@ make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: makeerror@1.0.12: version "1.0.12" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0: version "4.3.0" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -math-intrinsics@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.0.0.tgz#4e04bf87c85aa51e90d078dac2252b4eb5260817" - integrity sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== media-typer@0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.4.1: version "3.6.0" - resolved "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: fs-monkey "^1.0.4" meow@^8.1.2: version "8.1.2" - resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" @@ -6959,42 +6362,42 @@ merge-descriptors@1.0.3: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromatch@^4.0.4, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^3.0.0: @@ -7004,64 +6407,59 @@ mime@^3.0.0: mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@3.0.5: version "3.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== dependencies: brace-expansion "^1.1.7" -minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1: +minimatch@9.0.3: version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimatch@^8.0.2: version "8.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== +minimatch@^9.0.0, minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minimist-options@4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" @@ -7070,7 +6468,7 @@ minimist-options@4.1.0: minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: @@ -7092,9 +6490,9 @@ minipass-fetch@^2.0.3: encoding "^0.1.13" minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + version "3.0.5" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" + integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== dependencies: minipass "^7.0.3" minipass-sized "^1.0.3" @@ -7104,7 +6502,7 @@ minipass-fetch@^3.0.0: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" @@ -7119,63 +6517,58 @@ minipass-json-stream@^1.0.1: minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" minipass@^4.2.4: version "4.2.8" - resolved "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== minipass@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: - version "7.0.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -minipass@^7.1.2: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" yallist "^4.0.0" -mkdirp@^0.5.4: +mkdirp@^0.5.6: version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mkdirp@^2.1.5: @@ -7185,40 +6578,35 @@ mkdirp@^2.1.5: modify-values@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== ms@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.1.3, ms@^2.0.0, 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== -multer@1.4.4-lts.1: - version "1.4.4-lts.1" - resolved "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz" - integrity sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg== +multer@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/multer/-/multer-2.0.2.tgz#08a8aa8255865388c387aaf041426b0c87bf58dd" + integrity sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw== dependencies: append-field "^1.0.0" - busboy "^1.0.0" - concat-stream "^1.5.2" - mkdirp "^0.5.4" + busboy "^1.6.0" + concat-stream "^2.0.0" + mkdirp "^0.5.6" object-assign "^4.1.1" - type-is "^1.6.4" - xtend "^4.0.0" + type-is "^1.6.18" + xtend "^4.0.2" multimatch@5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: "@types/minimatch" "^3.0.3" @@ -7229,14 +6617,19 @@ multimatch@5.0.0: mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mute-stream@1.0.0, mute-stream@~1.0.0: +mute-stream@1.0.0, mute-stream@^1.0.0, mute-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -7248,17 +6641,22 @@ mz@^2.7.0: natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.3, negotiator@^0.6.3: +negotiator@0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +negotiator@^0.6.3: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== no-case@^3.0.4: @@ -7271,7 +6669,7 @@ no-case@^3.0.4: node-abort-controller@^3.0.1: version "3.1.1" - resolved "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== node-addon-api@^3.2.1: @@ -7281,29 +6679,29 @@ node-addon-api@^3.2.1: node-emoji@1.11.0: version "1.11.0" - resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== dependencies: lodash "^4.17.21" node-fetch@2.6.7: version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" node-fetch@2.7.0, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-gyp-build@^4.3.0: - version "4.8.2" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.2.tgz#4f802b71c1ab2ca16af830e6c1ea7dd1ad9496fa" - integrity sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw== + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== node-gyp@^9.0.0: version "9.4.1" @@ -7324,24 +6722,14 @@ node-gyp@^9.0.0: node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-machine-id@1.1.12: version "1.1.12" - resolved "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== - node-releases@^2.0.19: version "2.0.19" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" @@ -7356,7 +6744,7 @@ nopt@^6.0.0: normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -7366,7 +6754,7 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" @@ -7384,9 +6772,18 @@ normalize-package-data@^5.0.0: semver "^7.3.5" validate-npm-package-license "^3.0.4" +normalize-package-data@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" + integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== + dependencies: + hosted-git-info "^7.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-bundled@^1.1.2: @@ -7397,15 +6794,15 @@ npm-bundled@^1.1.2: npm-normalize-package-bin "^1.0.1" npm-bundled@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz" - integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.1.tgz#cca73e15560237696254b10170d8f86dad62da25" + integrity sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ== dependencies: npm-normalize-package-bin "^3.0.0" npm-install-checks@^6.0.0: version "6.3.0" - resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== dependencies: semver "^7.1.1" @@ -7417,7 +6814,7 @@ npm-normalize-package-bin@^1.0.1: npm-normalize-package-bin@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== npm-package-arg@8.1.1: @@ -7481,18 +6878,11 @@ npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0 npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" @@ -7561,96 +6951,56 @@ object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" once@^1.3.0, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - open@^8.4.0: version "8.4.2" - resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" is-wsl "^2.2.0" -open@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/open/-/open-9.1.0.tgz" - integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== - dependencies: - default-browser "^4.0.0" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - is-wsl "^2.2.0" - optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" ora@5.4.1, ora@^5.4.1: version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -7665,76 +7015,76 @@ ora@5.4.1, ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map-series@2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== p-map@4.0.0, p-map@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-pipe@3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== p-queue@6.6.2: version "6.6.2" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: eventemitter3 "^4.0.4" @@ -7742,37 +7092,37 @@ p-queue@6.6.2: p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== p-timeout@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== p-waterfall@2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== dependencies: p-reduce "^2.0.0" package-json-from-dist@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" - integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== pacote@^15.2.0: version "15.2.0" @@ -7807,14 +7157,14 @@ pad-right@^0.2.2: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" @@ -7822,7 +7172,7 @@ parse-json@^4.0.0: parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -7830,64 +7180,60 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-json@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.3.0.tgz#88a195a2157025139a2317a4f2f9252b61304ed5" + integrity sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ== + dependencies: + "@babel/code-frame" "^7.26.2" + index-to-position "^1.1.0" + type-fest "^4.39.1" + parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== + version "7.1.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.1.0.tgz#41fb513cb122831807a4c7b29c8727947a09d8c6" + integrity sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw== dependencies: protocols "^2.0.0" parse-url@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== dependencies: parse-path "^7.0.0" parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1, path-scurry@^1.6.1: - version "1.10.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-scurry@^1.11.1: +path-scurry@^1.11.1, path-scurry@^1.6.1: version "1.11.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== @@ -7907,30 +7253,20 @@ path-to-regexp@3.3.0: path-type@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" - integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== - -picomatch@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz" - integrity sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@4.0.1: version "4.0.1" @@ -7939,71 +7275,66 @@ picomatch@4.0.1: picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== pify@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" pluralize@8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" prettier@^3.0.0: - version "3.2.4" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz" - integrity sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ== + version "3.6.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393" + integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: "@jest/schemas" "^29.6.3" @@ -8017,7 +7348,7 @@ proc-log@^3.0.0: process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== progress@^2.0.3: @@ -8027,12 +7358,12 @@ progress@^2.0.3: promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" @@ -8040,18 +7371,18 @@ promise-retry@^2.0.1: prompts@^2.0.1: version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" promzard@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/promzard/-/promzard-1.0.0.tgz" - integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== + version "1.0.2" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.2.tgz#2226e7c6508b1da3471008ae17066a7c3251e660" + integrity sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ== dependencies: - read "^2.0.0" + read "^3.0.1" property-expr@^2.0.5: version "2.0.6" @@ -8059,13 +7390,13 @@ property-expr@^2.0.5: integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + version "2.0.2" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.2.tgz#822e8fcdcb3df5356538b3e91bfd890b067fd0a4" + integrity sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ== proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -8073,18 +7404,18 @@ proxy-addr@~2.0.7: proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== punycode@^2.1.0: version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== qs@6.13.0: version "6.13.0" @@ -8095,29 +7426,29 @@ qs@6.13.0: queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.2, raw-body@^2.5.2: version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -8126,13 +7457,13 @@ raw-body@2.5.2, raw-body@^2.5.2: unpipe "1.0.0" react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== read-cmd-shim@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== read-package-json-fast@^3.0.0: @@ -8153,9 +7484,18 @@ read-package-json@6.0.4, read-package-json@^6.0.0: normalize-package-data "^5.0.0" npm-normalize-package-bin "^3.0.0" +read-package-up@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/read-package-up/-/read-package-up-11.0.0.tgz#71fb879fdaac0e16891e6e666df22de24a48d5ba" + integrity sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ== + dependencies: + find-up-simple "^1.0.0" + read-pkg "^9.0.0" + type-fest "^4.6.0" + read-pkg-up@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== dependencies: find-up "^2.0.0" @@ -8163,7 +7503,7 @@ read-pkg-up@^3.0.0: read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" @@ -8172,7 +7512,7 @@ read-pkg-up@^7.0.1: read-pkg@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== dependencies: load-json-file "^4.0.0" @@ -8181,7 +7521,7 @@ read-pkg@^3.0.0: read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -8189,16 +7529,43 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +read-pkg@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" + integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== + dependencies: + "@types/normalize-package-data" "^2.4.3" + normalize-package-data "^6.0.0" + parse-json "^8.0.0" + type-fest "^4.6.0" + unicorn-magic "^0.1.0" + read@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/read/-/read-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== dependencies: mute-stream "~1.0.0" -readable-stream@^2.2.2, readable-stream@~2.3.6: +read@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" + integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== + dependencies: + mute-stream "^1.0.0" + +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -8209,64 +7576,43 @@ readable-stream@^2.2.2, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" redent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" strip-indent "^3.0.0" -reflect-metadata@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.1.tgz#8d5513c0f5ef2b4b9c3865287f3c0940c1f67f74" - integrity sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw== +reflect-metadata@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== reflect-metadata@^0.1.13: version "0.1.14" - resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.14.tgz#24cf721fe60677146bb77eeb0e1f9dece3d65859" integrity sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A== -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - regexp-match-indices@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz#cf20054a6f7d5b3e116a701a7b00f82889d10da6" @@ -8279,81 +7625,79 @@ regexp-tree@^0.1.11: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: - "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: - jsesc "~0.5.0" + jsesc "~3.0.2" repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@5.0.0, resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg/-/resolve-pkg-2.0.0.tgz#ac06991418a7623edc119084edc98b0e6bf05a41" - integrity sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ== - dependencies: - resolve-from "^5.0.0" - resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== +resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.10: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -8361,84 +7705,89 @@ restore-cursor@^3.1.0: retry@^0.12.0: version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rimraf@^4.4.1: version "4.4.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== dependencies: glob "^9.2.0" rimraf@^5.0.5: - version "5.0.5" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz" - integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + version "5.0.10" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" + integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== dependencies: glob "^10.3.7" -run-applescript@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz" - integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== - dependencies: - execa "^5.0.0" - run-async@^2.4.0: version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-async@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== +run-async@^4.0.5: + version "4.0.6" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-4.0.6.tgz#d53b86acb71f42650fe23de2b3c1b6b6b34b9294" + integrity sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ== + run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" -rxjs@7.8.1, rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: +rxjs@7.8.1: version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" +rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1, rxjs@^7.8.2: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" @@ -8446,9 +7795,9 @@ schema-utils@^3.1.1, schema-utils@^3.2.0: ajv-keywords "^3.5.2" schema-utils@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.0.tgz#3b669f04f71ff2dfb5aba7ce2d5a9d79b35622c0" - integrity sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g== + version "4.3.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" + integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" @@ -8462,27 +7811,30 @@ seed-random@~2.2.0: "semver@2 || 3 || 4 || 5", semver@^5.6.0: version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@7.5.3: version "7.5.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" +semver@7.7.1: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + semver@^6.3.0, semver@^6.3.1: version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== send@0.19.0: version "0.19.0" @@ -8522,20 +7874,10 @@ serve-static@1.16.2: set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -set-function-length@^1.2.1, set-function-length@^1.2.2: +set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -8549,46 +7891,76 @@ set-function-length@^1.2.1, set-function-length@^1.2.2: setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: - call-bind "^1.0.7" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== sigstore@^1.3.0, sigstore@^1.4.0: @@ -8604,17 +7976,17 @@ sigstore@^1.3.0, sigstore@^1.4.0: sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@3.0.0, slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socks-proxy-agent@^7.0.0: @@ -8627,23 +7999,23 @@ socks-proxy-agent@^7.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== dependencies: - ip-address "^9.0.5" + ip-address "^10.0.1" smart-buffer "^4.2.0" sort-keys@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== dependencies: is-plain-obj "^1.0.0" source-map-support@0.5.13: version "0.5.13" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" @@ -8651,7 +8023,7 @@ source-map-support@0.5.13: source-map-support@0.5.21, source-map-support@^0.5.21, source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -8659,72 +8031,60 @@ source-map-support@0.5.21, source-map-support@^0.5.21, source-map-support@~0.5.2 source-map@0.7.4: version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spdx-correct@^3.0.0: version "3.2.0" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.22" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef" + integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ== split2@^3.2.2: version "3.2.2" - resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" split@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^10.0.0: - version "10.0.5" - resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== - dependencies: - minipass "^7.0.3" - -ssri@^10.0.1: +ssri@^10.0.0, ssri@^10.0.1: version "10.0.6" resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== @@ -8740,7 +8100,7 @@ ssri@^9.0.0, ssri@^9.0.1: stack-utils@^2.0.3: version "2.0.6" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" @@ -8752,12 +8112,12 @@ stackframe@^1.3.4: statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== streamsearch@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== string-argv@0.3.1: @@ -8767,7 +8127,7 @@ string-argv@0.3.1: string-length@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" @@ -8775,7 +8135,7 @@ string-length@^4.0.1: "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -8784,7 +8144,7 @@ string-length@^4.0.1: "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -8793,7 +8153,7 @@ string-length@^4.0.1: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -8802,90 +8162,85 @@ string-width@^5.0.1, string-width@^5.1.2: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== dependencies: duplexer "^0.1.1" minimist "^1.2.0" through "^2.3.4" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== +strtok3@^10.2.0: + version "10.3.4" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-10.3.4.tgz#793ebd0d59df276a085586134b73a406e60be9c1" + integrity sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg== dependencies: - has-flag "^3.0.0" + "@tokenizer/token" "^0.3.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" @@ -8899,38 +8254,29 @@ supports-color@^8.0.0, supports-color@^8.1.1: supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== symbol-observable@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== -synckit@^0.8.5: - version "0.8.6" - resolved "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz" - integrity sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA== +synckit@^0.11.7: + version "0.11.11" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0" + integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw== dependencies: - "@pkgr/utils" "^2.4.2" - tslib "^2.6.2" - -synckit@^0.8.6: - version "0.8.8" - resolved "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz" - integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== - dependencies: - "@pkgr/core" "^0.1.0" - tslib "^2.6.2" + "@pkgr/core" "^0.2.9" tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" + integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== tar-stream@~2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -8951,19 +8297,7 @@ tar@6.1.11: mkdirp "^1.0.3" yallist "^4.0.0" -tar@^6.1.11: - version "6.2.0" - resolved "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tar@^6.1.2: +tar@^6.1.11, tar@^6.1.2: version "6.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== @@ -8977,13 +8311,13 @@ tar@^6.1.2: temp-dir@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== terser-webpack-plugin@^5.3.10: - version "5.3.11" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz#93c21f44ca86634257cac176f884f942b7ba3832" - integrity sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ== + version "5.3.14" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" + integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" @@ -8992,18 +8326,18 @@ terser-webpack-plugin@^5.3.10: terser "^5.31.1" terser@^5.31.1: - version "5.37.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.37.0.tgz#38aa66d1cfc43d0638fab54e43ff8a4f72a21ba3" - integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA== + version "5.43.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.43.1.tgz#88387f4f9794ff1a29e7ad61fb2932e25b4fdb6d" + integrity sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg== dependencies: "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" + acorn "^8.14.0" commander "^2.20.0" source-map-support "~0.5.20" test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -9012,12 +8346,12 @@ test-exclude@^6.0.0: text-extensions@^1.0.0: version "1.9.0" - resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thenify-all@^1.0.0: @@ -9036,7 +8370,7 @@ thenify-all@^1.0.0: through2@^2.0.0: version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" @@ -9044,7 +8378,7 @@ through2@^2.0.0: through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tiny-case@^1.0.3: @@ -9052,52 +8386,44 @@ tiny-case@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== -titleize@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz" - integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== - -tmp@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - tmp@^0.0.33: version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== tmpl@1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +token-types@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-6.1.0.tgz#4a220f7bb2af522ebb095de7542bb9dde3033031" + integrity sha512-IwovPojr3nD6KBpwSdWq7zL4D9xDLMSqZm/mFweaFFXiS7mtD1qea2WKcth6lyErwZZjsavZk4AnwPJzT9/wVA== + dependencies: + "@kayahr/text-encoding" "^2.0.1" + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" @@ -9105,27 +8431,27 @@ toposort@^2.0.2: tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== tree-kill@1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== trim-newlines@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== ts-node@^10.9.1: version "10.9.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -9154,36 +8480,26 @@ tsconfig-paths-webpack-plugin@4.2.0: tsconfig-paths@4.2.0, tsconfig-paths@^4.1.2: version "4.2.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== dependencies: json5 "^2.2.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.8.1: +tslib@2.8.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tslib@^1.8.1: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6.0, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" @@ -9199,44 +8515,44 @@ tuf-js@^1.1.7: type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-detect@4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.18.0: version "0.18.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-fest@^2.19.0: @@ -9244,14 +8560,14 @@ type-fest@^2.19.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== -type-fest@^4.8.3: - version "4.20.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.20.1.tgz#d97bb1e923bf524e5b4b43421d586760fb2ee8be" - integrity sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg== +type-fest@^4.39.1, type-fest@^4.41.0, type-fest@^4.6.0: + version "4.41.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== -type-is@^1.6.4, type-is@~1.6.18: +type-is@^1.6.18, type-is@~1.6.18: version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -9259,7 +8575,7 @@ type-is@^1.6.4, type-is@~1.6.18: typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@5.7.2: @@ -9268,50 +8584,65 @@ typescript@5.7.2: integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== "typescript@>=3 < 6", typescript@^5.2.2: - version "5.3.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + version "5.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" + integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== uid@2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/uid/-/uid-2.0.2.tgz#4b5782abf0f2feeefc00fa88006b2b3b7af3e3b9" integrity sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g== dependencies: "@lukeed/csprng" "^1.0.0" -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +uint8array-extras@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/uint8array-extras/-/uint8array-extras-1.4.1.tgz#6d6e88363a414577c133aca1e63b2a6c5524be21" + integrity sha512-+NWHrac9dvilNgme+gP4YrBSumsaMZP0fNBtXXFIf33RLLKEcBUKaQZ7ULUbS0sBfcjxIZ4V96OTRkCbM7hxpw== + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +undici-types@~7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" + integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + unique-filename@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" @@ -9321,7 +8652,7 @@ unique-filename@^2.0.0: unique-filename@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== dependencies: unique-slug "^4.0.0" @@ -9335,51 +8666,38 @@ unique-slug@^3.0.0: unique-slug@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== dependencies: imurmurhash "^0.1.4" universal-user-agent@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== universalify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - upath@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -update-browserslist-db@^1.1.0, update-browserslist-db@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" - integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: escalade "^3.2.0" - picocolors "^1.1.0" + picocolors "^1.1.1" upper-case-first@^2.0.2: version "2.0.2" @@ -9390,7 +8708,7 @@ upper-case-first@^2.0.2: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -9402,33 +8720,32 @@ util-arity@^1.1.0: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.5: - 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" - utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@9.0.1, uuid@^9.0.0: +uuid@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== + +uuid@11.0.5: + version "11.0.5" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.0.5.tgz#07b46bdfa6310c92c3fb3953a8720f170427fc62" + integrity sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA== + +uuid@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@2.3.0: @@ -9437,9 +8754,9 @@ v8-compile-cache@2.3.0: integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" @@ -9447,15 +8764,15 @@ v8-to-istanbul@^9.0.1: validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: +validate-npm-package-name@5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== dependencies: builtins "^5.0.0" @@ -9467,47 +8784,52 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +validate-npm-package-name@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" + integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== + vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== walker@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" watchpack@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" - integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== + version "2.4.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" + integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webpack-node-externals@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + version "3.3.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack@5.97.1: version "5.97.1" @@ -9540,26 +8862,15 @@ webpack@5.97.1: whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-typed-array@^1.1.14, which-typed-array@^1.1.2: - version "1.1.16" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.16.tgz#db4db429c4706feca2f01677a144278e4a8c216b" - integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" @@ -9578,14 +8889,19 @@ wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -9594,7 +8910,7 @@ wordwrap@^1.0.0: wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -9603,7 +8919,7 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -9612,7 +8928,7 @@ wrap-ansi@^7.0.0: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -9621,7 +8937,7 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@5.0.1: @@ -9634,7 +8950,7 @@ write-file-atomic@5.0.1: write-file-atomic@^2.4.2: version "2.4.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== dependencies: graceful-fs "^4.1.11" @@ -9643,7 +8959,7 @@ write-file-atomic@^2.4.2: write-file-atomic@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" @@ -9651,7 +8967,7 @@ write-file-atomic@^4.0.2: write-json-file@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== dependencies: detect-indent "^5.0.0" @@ -9663,7 +8979,7 @@ write-json-file@^3.2.0: write-pkg@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== dependencies: sort-keys "^2.0.0" @@ -9675,30 +8991,30 @@ xmlbuilder@^15.1.1: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== -xtend@^4.0.0, xtend@~4.0.1: +xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.2.2: - version "2.4.5" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e" - integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== yargs-parser@20.2.4: version "20.2.4" @@ -9707,17 +9023,17 @@ yargs-parser@20.2.4: yargs-parser@21.1.1, yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@16.2.0, yargs@^16.2.0: version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -9730,7 +9046,7 @@ yargs@16.2.0, yargs@^16.2.0: yargs@^17.3.1, yargs@^17.6.2: version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -9743,18 +9059,23 @@ yargs@^17.3.1, yargs@^17.6.2: yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yup@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/yup/-/yup-1.2.0.tgz#9e51af0c63bdfc9be0fdc6c10aa0710899d8aff6" - integrity sha512-PPqYKSAXjpRCgLgLKVGPA33v5c/WgEx3wi6NFjIiegz90zSwyMpvTFp/uGcVnnbx6to28pgnzp/q8ih3QRjLMQ== +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== + +yup@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.6.1.tgz#8defcff9daaf9feac178029c0e13b616563ada4b" + integrity sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA== dependencies: property-expr "^2.0.5" tiny-case "^1.0.3"