From 960c73662970253c849f8e98bdddc6589f353e99 Mon Sep 17 00:00:00 2001 From: Antoine SEIN <142824551+asein-sinch@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:07:25 +0200 Subject: [PATCH 1/6] DEVEXP-556: Add snippets for Numbers API --- snippets/numbers/available-regions/list.js | 15 ++ .../numbers/callback-configuration/get.js | 10 + .../numbers/callback-configuration/update.js | 19 ++ snippets/numbers/check-availability.js | 25 +++ snippets/numbers/get.js | 17 ++ snippets/numbers/list.js | 30 +++ snippets/numbers/release.js | 17 ++ snippets/numbers/rent-any.js | 40 ++++ snippets/numbers/rent.js | 25 +++ .../numbers/search-for-available-numbers.js | 17 ++ snippets/numbers/update.js | 29 +++ snippets/package-lock.json | 188 ++++++++++++++++++ snippets/package.json | 10 + 13 files changed, 442 insertions(+) create mode 100644 snippets/numbers/available-regions/list.js create mode 100644 snippets/numbers/callback-configuration/get.js create mode 100644 snippets/numbers/callback-configuration/update.js create mode 100644 snippets/numbers/check-availability.js create mode 100644 snippets/numbers/get.js create mode 100644 snippets/numbers/list.js create mode 100644 snippets/numbers/release.js create mode 100644 snippets/numbers/rent-any.js create mode 100644 snippets/numbers/rent.js create mode 100644 snippets/numbers/search-for-available-numbers.js create mode 100644 snippets/numbers/update.js create mode 100644 snippets/package-lock.json create mode 100644 snippets/package.json diff --git a/snippets/numbers/available-regions/list.js b/snippets/numbers/available-regions/list.js new file mode 100644 index 0000000..6bf9329 --- /dev/null +++ b/snippets/numbers/available-regions/list.js @@ -0,0 +1,15 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + /** @type {Numbers.ListAvailableRegionsRequestData} */ + const requestData = { + types: ['LOCAL', 'MOBILE'], + }; + + const response = await numbersService.availableRegions.list(requestData); + + console.log(`Available regions:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/numbers/callback-configuration/get.js b/snippets/numbers/callback-configuration/get.js new file mode 100644 index 0000000..fc03424 --- /dev/null +++ b/snippets/numbers/callback-configuration/get.js @@ -0,0 +1,10 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + const response = await numbersService.callbacks.get({}); + + console.log(`Callback configuration:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/numbers/callback-configuration/update.js b/snippets/numbers/callback-configuration/update.js new file mode 100644 index 0000000..8b9c918 --- /dev/null +++ b/snippets/numbers/callback-configuration/update.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + const hmacSecret = 'New_HMAC_secret'; + + /** @type {Numbers.UpdateCallbackConfigurationRequestData} */ + const requestData = { + updateCallbackConfigurationRequestBody: { + hmacSecret, + }, + }; + + const response = await numbersService.callbacks.update(requestData); + + console.log(`Updated callback configuration:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/numbers/check-availability.js b/snippets/numbers/check-availability.js new file mode 100644 index 0000000..93a1bc4 --- /dev/null +++ b/snippets/numbers/check-availability.js @@ -0,0 +1,25 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + const phoneNumber = 'a_phone_number'; + + /** @type {Numbers.GetAvailableNumberRequestData} */ + const requestData = { + phoneNumber, + }; + + let response; + try { + response = await numbersService.availableNumber.checkAvailability(requestData); + } catch (error) { + console.error(`ERROR: the phone number ${requestData.phoneNumber} is not available`); + } + + if (response) { + console.log(`The phone number is available:\n${JSON.stringify(response, null, 2)}`); + } + +}; diff --git a/snippets/numbers/get.js b/snippets/numbers/get.js new file mode 100644 index 0000000..9dd6da3 --- /dev/null +++ b/snippets/numbers/get.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + const phoneNumber = 'YOUR_rented_phoneNumber'; + + /** @type {Numbers.GetActiveNumberRequestData} */ + const requestData = { + phoneNumber, + }; + + const response = await numbersService.activeNumber.get(requestData); + + console.log(`Rented number details:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/numbers/list.js b/snippets/numbers/list.js new file mode 100644 index 0000000..d6a7fa6 --- /dev/null +++ b/snippets/numbers/list.js @@ -0,0 +1,30 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + /** @type Numbers.ListActiveNumbersRequestData */ + const requestData = { + regionCode: 'US', + type: 'LOCAL', + }; + + // Method 1: Fetch the data page by page manually + /** @type {Numbers.ActiveNumber[]} */ + const activeNumbersList = []; + let response = await numbersService.activeNumber.list(requestData); + + do { + activeNumbersList.push(...response.data); + response = response.hasNextPage ? await response.nextPage() : null; + } while (response); + console.log(`Full list of numbers printed at once (length = ${activeNumbersList.length}):\n${JSON.stringify(activeNumbersList, null, 2)}`); + + // Method 2: Use the iterator and fetch data from more pages automatically + console.log('List of numbers printed one by one:'); + for await (const rentedNumber of numbersService.activeNumber.list(requestData)) { + console.log(JSON.stringify(rentedNumber, null, 2)); + } + +}; diff --git a/snippets/numbers/release.js b/snippets/numbers/release.js new file mode 100644 index 0000000..935db91 --- /dev/null +++ b/snippets/numbers/release.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + const phoneNumber = 'YOUR_phone_number_to_be_released'; + + /** @type {Numbers.ReleaseNumberRequestData} */ + const requestData = { + phoneNumber, + }; + + const response = await numbersService.activeNumber.release(requestData); + + console.log(`Released number:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/numbers/rent-any.js b/snippets/numbers/rent-any.js new file mode 100644 index 0000000..3ef7ebd --- /dev/null +++ b/snippets/numbers/rent-any.js @@ -0,0 +1,40 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + const servicePlanId = 'YOUR_service_plan_id'; + const appId = 'YOUR_app_id'; + const callbackUrl = 'YOUR_callback_url'; + + /** @type {Numbers.RentAnyNumberRequestSmsConfiguration} */ + const smsConfiguration = { + servicePlanId, + }; + + /** @type {Numbers.RentAnyNumberRequestVoiceConfiguration} */ + const voiceConfiguration = { + appId, + }; + + /** @type {Numbers.RentAnyNumberRequestData} */ + const requestData = { + rentAnyNumberRequestBody: { + regionCode: 'US', + type: 'LOCAL', + numberPattern: { + pattern: '+1781', + searchPattern: 'START', + }, + smsConfiguration, + voiceConfiguration, + callbackUrl, + }, + }; + + const response = await numbersService.availableNumber.rentAny(requestData); + + console.log(`Rented number:\n${JSON.stringify(response, null, 2)}`); + +}; diff --git a/snippets/numbers/rent.js b/snippets/numbers/rent.js new file mode 100644 index 0000000..ef6eaf1 --- /dev/null +++ b/snippets/numbers/rent.js @@ -0,0 +1,25 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + // Available numbers list can be retrieved by using list() function from available service, see: + // https://developers.sinch.com/docs/numbers/getting-started/node-sdk/searchavailable/ + const phoneNumber = 'available_phone_number_to_be_rented'; + const servicePlanId = 'YOUR_service_plan_id'; + + /** @type {Numbers.RentNumberRequestData} */ + const requestData = { + phoneNumber, + rentNumberRequestBody: { + smsConfiguration: { + servicePlanId, + }, + }, + }; + + const response = await numbersService.availableNumber.rent(requestData); + + console.log(`Rented number:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/numbers/search-for-available-numbers.js b/snippets/numbers/search-for-available-numbers.js new file mode 100644 index 0000000..53bccc0 --- /dev/null +++ b/snippets/numbers/search-for-available-numbers.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + /** @type {Numbers.ListAvailableNumbersRequestData} */ + const requestData = { + regionCode: 'US', + type: 'LOCAL', + capabilities: ['SMS', 'VOICE'], + }; + + const response = await numbersService.availableNumber.list(requestData); + + console.log(`Available numbers to rent:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/numbers/update.js b/snippets/numbers/update.js new file mode 100644 index 0000000..5bbc842 --- /dev/null +++ b/snippets/numbers/update.js @@ -0,0 +1,29 @@ +// eslint-disable-next-line no-unused-vars +import { Numbers, NumbersService } from '@sinch/sdk-core'; + +/** @param {NumbersService} numbersService */ +export const execute = async (numbersService) => { + + const phoneNumber = 'YOUR_phone_number_to_be_updated'; + const appId = 'YOUR_app_id'; + const displayName = 'Updated from Sinch Node.js SDK'; + + /** @type {Numbers.VoiceConfiguration} */ + const voiceConfiguration= { + appId, + type: 'RTC', + }; + + /** @type {Numbers.UpdateActiveNumberRequestData} */ + const requestData = { + phoneNumber, + updateActiveNumberRequestBody: { + displayName, + voiceConfiguration, + }, + }; + + const response = await numbersService.activeNumber.update(requestData); + + console.log(`Updated number:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/package-lock.json b/snippets/package-lock.json new file mode 100644 index 0000000..6899799 --- /dev/null +++ b/snippets/package-lock.json @@ -0,0 +1,188 @@ +{ + "name": "@sinch/code-snippets", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@sinch/code-snippets", + "version": "0.0.0", + "dependencies": { + "@sinch/sdk-core": "^1.1.0" + } + }, + "node_modules/@sinch/conversation": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sinch/conversation/-/conversation-1.1.0.tgz", + "integrity": "sha512-8KxUnzO+a8fPmhSmpRX9zGfgF3Hvgg4ZQNF9CNVDVRckcE7p+mWENdWts7GXWSEKMONZIOXwYnosAeENMsZVow==", + "dependencies": { + "@sinch/sdk-client": "^1.1.0" + } + }, + "node_modules/@sinch/elastic-sip-trunking": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sinch/elastic-sip-trunking/-/elastic-sip-trunking-1.1.0.tgz", + "integrity": "sha512-1E635dxPFnCfS1e01WGSY2xcLGUsAngcghcsodFFMTXxmAL+2cxhFdmrodmBdNmCVpfPLkMSIdQC/t+1p+awNA==", + "dependencies": { + "@sinch/sdk-client": "^1.0.0" + } + }, + "node_modules/@sinch/fax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sinch/fax/-/fax-1.1.0.tgz", + "integrity": "sha512-89NS1zMg07QAjj6Fr93moVjkfZSkVwYwegZfZ2LEo7SEuFXp9CahL5UoHXzipTNbtCxcouGUgiJkN0fxJBN/VQ==", + "dependencies": { + "@sinch/sdk-client": "^1.1.0" + } + }, + "node_modules/@sinch/numbers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sinch/numbers/-/numbers-1.1.0.tgz", + "integrity": "sha512-uEtTDTPabY7f2CU1X/rpuBqWbDutqcHA34vaaJ1HbGWhdK406YfUKxBha60/kTAO5df+eDjVxg2SYiVNRpJNLw==", + "dependencies": { + "@sinch/sdk-client": "^1.1.0" + } + }, + "node_modules/@sinch/sdk-client": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sinch/sdk-client/-/sdk-client-1.1.0.tgz", + "integrity": "sha512-YiF8LpZ8RdWFdjyA1mlySyuNfVQPA1EV8gSecrvBUpwO8LyFhvbZF1OsMfaqVJiUr4mA/UArbbO6qSzwA2XgCQ==", + "dependencies": { + "form-data": "^4.0.0", + "node-fetch": "2.7.0" + } + }, + "node_modules/@sinch/sdk-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sinch/sdk-core/-/sdk-core-1.1.0.tgz", + "integrity": "sha512-kqZ0n0ycClYPPSk5ugy9FFmq/j/qVXmhC8rgUBu2JWTjsOTsRVe9dSnUuQYaxj6V8sEjySUALtLiJBU3neeq8A==", + "dependencies": { + "@sinch/conversation": "^1.1.0", + "@sinch/elastic-sip-trunking": "^1.1.0", + "@sinch/fax": "^1.1.0", + "@sinch/numbers": "^1.1.0", + "@sinch/sms": "^1.1.0", + "@sinch/verification": "^1.1.0", + "@sinch/voice": "^1.1.0" + } + }, + "node_modules/@sinch/sms": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sinch/sms/-/sms-1.1.0.tgz", + "integrity": "sha512-6QXpLujzcl5jTvYFmB+UebVWYGXEHaRBsmE1vG7GAwIAOrCxdpusvSWitHeigCUz9CxrzdjC+3JmlS7q7rbONA==", + "dependencies": { + "@sinch/sdk-client": "^1.1.0" + } + }, + "node_modules/@sinch/verification": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sinch/verification/-/verification-1.1.0.tgz", + "integrity": "sha512-UcXf4dsrG0+qATCJIiCEyHwnyLknEtYSK1UKV40EGPkYNn4kVwxLRDglKOIq9txBQZ5MgpbFDTqedbf4AcREZQ==", + "dependencies": { + "@sinch/sdk-client": "^1.1.0" + } + }, + "node_modules/@sinch/voice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sinch/voice/-/voice-1.1.0.tgz", + "integrity": "sha512-znOVSxBHRoI7J8zZGcFUrqDHR8hyOifh+IOR1FUnel4c1hS5s9HsHfmcnd4HmUca1P/ln0c19+KxMhNFBVLTAw==", + "dependencies": { + "@sinch/sdk-client": "^1.1.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } +} diff --git a/snippets/package.json b/snippets/package.json new file mode 100644 index 0000000..cb703ba --- /dev/null +++ b/snippets/package.json @@ -0,0 +1,10 @@ +{ + "name": "@sinch/code-snippets", + "version": "1.0.0", + "description": "Code snippets related to the Sinch Node.js SDK usage", + "author": "Sinch", + "type": "module", + "dependencies": { + "@sinch/sdk-core": "^1.1.0" + } +} From 104f676217716a14fe9bde81a5d6d602359a6c5a Mon Sep 17 00:00:00 2001 From: Antoine SEIN <142824551+asein-sinch@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:12:43 +0200 Subject: [PATCH 2/6] DEVEXP-557: Add snippets for SMS API --- .github/ci.yml | 3 + .gitignore | 1 + eslint.config.mjs | 3 +- package-lock.json | 5211 ++++++++++++++--- package.json | 7 +- snippets/package-lock.json | 4 +- snippets/sms/batches/cancel.js | 17 + snippets/sms/batches/delivery-feedback.js | 23 + snippets/sms/batches/dry-run.js | 26 + snippets/sms/batches/get.js | 17 + snippets/sms/batches/list-auto.js | 23 + snippets/sms/batches/list.js | 30 + snippets/sms/batches/replace.js | 29 + snippets/sms/batches/send-binary-message.js | 27 + snippets/sms/batches/send-media-message.js | 31 + snippets/sms/batches/send-text-message.js | 31 + snippets/sms/batches/update.js | 24 + .../sms/delivery-reports/get-by-batch-id.js | 17 + .../sms/delivery-reports/get-for-number.js | 19 + snippets/sms/delivery-reports/list-auto.js | 22 + snippets/sms/delivery-reports/list.js | 29 + snippets/sms/groups/create.js | 27 + snippets/sms/groups/delete.js | 17 + snippets/sms/groups/get.js | 17 + snippets/sms/groups/list-auto.js | 20 + snippets/sms/groups/list-members.js | 17 + snippets/sms/groups/list.js | 27 + snippets/sms/groups/replace.js | 25 + snippets/sms/groups/update.js | 29 + snippets/sms/inbounds/get.js | 17 + snippets/sms/inbounds/list-auto.js | 24 + snippets/sms/inbounds/list.js | 31 + snippets/sms/send.js | 24 + snippets/tsconfig.json | 18 + 34 files changed, 5051 insertions(+), 836 deletions(-) create mode 100644 snippets/sms/batches/cancel.js create mode 100644 snippets/sms/batches/delivery-feedback.js create mode 100644 snippets/sms/batches/dry-run.js create mode 100644 snippets/sms/batches/get.js create mode 100644 snippets/sms/batches/list-auto.js create mode 100644 snippets/sms/batches/list.js create mode 100644 snippets/sms/batches/replace.js create mode 100644 snippets/sms/batches/send-binary-message.js create mode 100644 snippets/sms/batches/send-media-message.js create mode 100644 snippets/sms/batches/send-text-message.js create mode 100644 snippets/sms/batches/update.js create mode 100644 snippets/sms/delivery-reports/get-by-batch-id.js create mode 100644 snippets/sms/delivery-reports/get-for-number.js create mode 100644 snippets/sms/delivery-reports/list-auto.js create mode 100644 snippets/sms/delivery-reports/list.js create mode 100644 snippets/sms/groups/create.js create mode 100644 snippets/sms/groups/delete.js create mode 100644 snippets/sms/groups/get.js create mode 100644 snippets/sms/groups/list-auto.js create mode 100644 snippets/sms/groups/list-members.js create mode 100644 snippets/sms/groups/list.js create mode 100644 snippets/sms/groups/replace.js create mode 100644 snippets/sms/groups/update.js create mode 100644 snippets/sms/inbounds/get.js create mode 100644 snippets/sms/inbounds/list-auto.js create mode 100644 snippets/sms/inbounds/list.js create mode 100644 snippets/sms/send.js create mode 100644 snippets/tsconfig.json diff --git a/.github/ci.yml b/.github/ci.yml index 9f039b4..c63c17a 100644 --- a/.github/ci.yml +++ b/.github/ci.yml @@ -18,5 +18,8 @@ jobs: - name: Install dependencies run: npm install + - name: Run TypeScript compiler + run: tsc + - name: Lint and format check run: npm run lint diff --git a/.gitignore b/.gitignore index 7a1537b..669da5a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea node_modules +**/tsconfig.tsbuildinfo diff --git a/eslint.config.mjs b/eslint.config.mjs index db0bcab..17fa817 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -32,8 +32,6 @@ export default [...compat.extends('eslint:recommended', 'google', 'prettier'), { }, rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-var-requires': 'off', semi: 'warn', 'comma-dangle': 'warn', quotes: ['warn', 'single'], @@ -58,5 +56,6 @@ export default [...compat.extends('eslint:recommended', 'google', 'prettier'), { }], 'new-cap': 'off', + 'no-unused-vars': 'off' }, }]; diff --git a/package-lock.json b/package-lock.json index 8f66e56..9700e24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,840 +7,2913 @@ "": { "name": "sinch-sdk-node-snippets", "version": "1.0.0", - "license": "ISC", + "license": "Apache-2.0", "devDependencies": { "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.10.0", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "@typescript-eslint/parser": "^8.5.0", "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-deprecation": "^3.0.0", + "eslint-plugin-jsdoc": "^50.2.3", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.2.1", - "globals": "^15.9.0" + "globals": "^15.9.0", + "jest": "^29.5.0", + "typescript": "^5.6.2" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "dev": true, - "peer": true, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@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", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@eslint/eslintrc/node_modules/espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, "dependencies": { - "acorn": "^8.12.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, + "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" + }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@eslint/js": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", - "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, - "peer": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { - "node": ">=10.10.0" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, - "peer": true, "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, - "peer": true + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "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==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, - "funding": { - "url": "https://opencollective.com/unts" + "engines": { + "node": ">=4" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=0.8.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=4" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "has-flag": "^3.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.6" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "bin": { + "parser": "bin/babel-parser.js" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^8.56.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "peer": true + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=0.4.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/helper-plugin-utils": "^7.10.4" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "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", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "dependencies": { - "fill-range": "^7.1.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, - "peer": true, "dependencies": { - "color-name": "~1.1.4" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=6.9.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dev": true, - "peer": true + "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" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, - "peer": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.48.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.48.0.tgz", + "integrity": "sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==", "dev": true, "dependencies": { - "ms": "^2.1.3" + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.1.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=16" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "peer": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, - "peer": true, "dependencies": { - "esutils": "^2.0.2" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=6.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/escape-string-regexp": { + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, - "peer": true, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", "dev": true, - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=18" }, - "peerDependencies": { - "eslint": ">=5.16.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "node_modules/@eslint/js": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", + "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/eslint-plugin-deprecation": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-3.0.0.tgz", - "integrity": "sha512-JuVLdNg/uf0Adjg2tpTyYoYaMbwQNn/c78P1HcccokvhtRphgnRjZDKmhlxbxYptppex03zO76f97DD/yQHv7A==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "peer": true, "dependencies": { - "@typescript-eslint/utils": "^7.0.0", - "ts-api-utils": "^1.3.0", - "tslib": "^2.3.1" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, - "peerDependencies": { - "eslint": "^8.0.0", - "typescript": "^4.2.4 || ^5.0.0" + "engines": { + "node": ">=10.10.0" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, + "peer": true, "engines": { - "node": ">=8.10.0" + "node": ">=12.22" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "peer": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" + "node": ">=8" } }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "peer": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "p-locate": "^4.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/eslint/node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/eslint/node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, - "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, - "peer": true, "dependencies": { - "type-fest": "^0.20.2" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz", + "integrity": "sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/type-utils": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.5.0.tgz", + "integrity": "sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz", + "integrity": "sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "peer": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^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.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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "peer": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.22", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.22.tgz", + "integrity": "sha512-tKYm5YHPU1djz0O+CGJ+oJIvimtsCcwR2Z9w7Skh08lUdyzXY5djods3q+z2JkWdb7tCcmM//eVavSRAiaPRNg==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-google": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-deprecation": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-3.0.0.tgz", + "integrity": "sha512-JuVLdNg/uf0Adjg2tpTyYoYaMbwQNn/c78P1HcccokvhtRphgnRjZDKmhlxbxYptppex03zO76f97DD/yQHv7A==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^7.0.0", + "ts-api-utils": "^1.3.0", + "tslib": "^2.3.1" + }, + "peerDependencies": { + "eslint": "^8.0.0", + "typescript": "^4.2.4 || ^5.0.0" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "50.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.2.3.tgz", + "integrity": "sha512-aNh/dz3wSkyo53y2KWDCrA8fDuXDMtMVflcbesd8AFPgcF8ugOv9mJxC7qKB95R96nzCB91iEwU7MMznh/7okQ==", + "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.48.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.3.6", + "escape-string-regexp": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.6.0", + "parse-imports": "^2.1.1", + "semver": "^7.6.3", + "spdx-expression-parse": "^4.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -848,416 +2921,1232 @@ "dev": true, "peer": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "peer": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "dev": true, + "engines": { + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, - "peer": true, "dependencies": { - "estraverse": "^5.1.0" + "@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" }, "engines": { - "node": ">=0.10" + "node": ">=10" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "peer": true, "dependencies": { - "estraverse": "^5.2.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4.0" + "node": ">=10" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "peer": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, "engines": { - "node": ">=4.0" + "node": ">=10" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "peer": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "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" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=8.6.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "peer": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "reusify": "^1.0.4" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, - "peer": true, "dependencies": { - "flat-cache": "^3.0.4" + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, - "peer": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, - "peer": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, - "peer": true + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, - "peer": true + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, - "peer": true, "dependencies": { - "is-glob": "^4.0.3" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/globals": { - "version": "15.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", - "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, - "engines": { - "node": ">=18" + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "peer": true + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "peer": true, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "function-bind": "^1.1.2" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, "engines": { - "node": ">= 4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, - "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">=0.8.19" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, - "peer": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "peer": true + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "hasown": "^2.0.2" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "peer": true + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", @@ -1271,6 +4160,27 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -1278,6 +4188,12 @@ "dev": true, "peer": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1291,6 +4207,18 @@ "dev": true, "peer": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -1301,6 +4229,24 @@ "json-buffer": "3.0.1" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1315,6 +4261,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -1338,6 +4290,45 @@ "dev": true, "peer": true }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1360,6 +4351,15 @@ "node": ">=8.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1382,19 +4382,65 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "peer": true + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "peer": true, "dependencies": { "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -1418,7 +4464,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "peer": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -1445,6 +4490,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -1457,12 +4511,42 @@ "node": ">=6" } }, + "node_modules/parse-imports": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz", + "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==", + "dev": true, + "dependencies": { + "es-module-lexer": "^1.5.3", + "slashes": "^3.0.12" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -1472,7 +4556,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -1482,36 +4565,114 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "peer": true, "engines": { "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { "node": ">=8" } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=8.6" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/prelude-ls": { @@ -1552,6 +4713,45 @@ "node": ">=6.0.0" } }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -1561,6 +4761,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -1581,6 +4797,12 @@ } ] }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -1593,6 +4815,15 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -1610,6 +4841,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -1619,6 +4871,15 @@ "node": ">=4" } }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -1686,7 +4947,6 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "peer": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -1699,11 +4959,22 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "peer": true, "engines": { "node": ">=8" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -1713,12 +4984,112 @@ "node": ">=8" } }, + "node_modules/slashes": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", + "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1726,6 +5097,24 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -1743,7 +5132,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -1779,6 +5167,20 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -1786,6 +5188,21 @@ "dev": true, "peer": true }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1829,6 +5246,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -1847,7 +5273,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1856,6 +5281,42 @@ "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -1865,12 +5326,34 @@ "punycode": "^2.1.0" } }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -1891,19 +5374,89 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "peer": true + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "peer": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 20cf727..cac36c4 100644 --- a/package.json +++ b/package.json @@ -8,13 +8,14 @@ "lint": "npx eslint ." }, "devDependencies": { - "globals": "^15.9.0", - "@eslint/js": "^9.10.0", "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.10.0", "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-deprecation": "^3.0.0", + "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-node": "^11.1.0" + "globals": "^15.9.0", + "typescript": "^5.6.2" } } diff --git a/snippets/package-lock.json b/snippets/package-lock.json index 6899799..735f6b4 100644 --- a/snippets/package-lock.json +++ b/snippets/package-lock.json @@ -1,12 +1,12 @@ { "name": "@sinch/code-snippets", - "version": "0.0.0", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sinch/code-snippets", - "version": "0.0.0", + "version": "1.0.0", "dependencies": { "@sinch/sdk-core": "^1.1.0" } diff --git a/snippets/sms/batches/cancel.js b/snippets/sms/batches/cancel.js new file mode 100644 index 0000000..ffab300 --- /dev/null +++ b/snippets/sms/batches/cancel.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const batchId = 'the_batch_id_to_cancel'; + + /** @type {Sms.CancelBatchMessageRequestData} */ + const requestData= { + batch_id: batchId, + }; + + const response = await smsService.batches.cancel(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/batches/delivery-feedback.js b/snippets/sms/batches/delivery-feedback.js new file mode 100644 index 0000000..b0fdcf1 --- /dev/null +++ b/snippets/sms/batches/delivery-feedback.js @@ -0,0 +1,23 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const batchId = 'the_batch_id'; + const recipientPhoneNumber = 'YOUR_recipient_phone_number'; + + /** @type {Sms.DeliveryFeedbackRequestData} */ + const requestData= { + batch_id: batchId, + deliveryFeedbackRequestBody: { + recipients: [ + recipientPhoneNumber, + ], + }, + }; + + await smsService.batches.sendDeliveryFeedback(requestData); + + console.log('The delivery feedback has been sent'); +}; diff --git a/snippets/sms/batches/dry-run.js b/snippets/sms/batches/dry-run.js new file mode 100644 index 0000000..9a1da3b --- /dev/null +++ b/snippets/sms/batches/dry-run.js @@ -0,0 +1,26 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const from = 'YOUR_sinch_phone_number'; + const recipient = 'YOUR_recipient_phone_number'; + const body = 'This is a test SMS message using the Sinch Node.js SDK.'; + + /** @type {Sms.DryRunRequestData} */ + const requestData= { + dryRunRequestBody: { + type: 'mt_text', + from, + to: [ + recipient, + ], + body, + }, + }; + + const response = await smsService.batches.dryRun(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/batches/get.js b/snippets/sms/batches/get.js new file mode 100644 index 0000000..d631412 --- /dev/null +++ b/snippets/sms/batches/get.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const batchId = 'the_batch_id'; + + /** @type {Sms.GetBatchMessageRequestData} */ + const requestData= { + batch_id: batchId, + }; + + const response = await smsService.batches.get(requestData); + + console.log(`Batch details:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/batches/list-auto.js b/snippets/sms/batches/list-auto.js new file mode 100644 index 0000000..cf45540 --- /dev/null +++ b/snippets/sms/batches/list-auto.js @@ -0,0 +1,23 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const oneWeekAgo = new Date(); + oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); + oneWeekAgo.setHours(0, 0, 0, 0); + + /** @type {Sms.ListBatchesRequestData} */ + const requestData= { + start_date: oneWeekAgo, + page_size: 2, + }; + + console.log('List of batches printed one by one:'); + // Use the iterator and fetch data from all the pages automatically + for await (const batch of smsService.batches.list(requestData)) { + console.log(JSON.stringify(batch, null, 2)); + } + +}; diff --git a/snippets/sms/batches/list.js b/snippets/sms/batches/list.js new file mode 100644 index 0000000..6282803 --- /dev/null +++ b/snippets/sms/batches/list.js @@ -0,0 +1,30 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const oneWeekAgo = new Date(); + oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); + oneWeekAgo.setHours(0, 0, 0, 0); + + /** @type {Sms.ListBatchesRequestData} */ + const requestData= { + start_date: oneWeekAgo, + page_size: 2, + }; + + /** @type {Sms.SendSMSResponse[]} */ + const batchesList = []; + // Fetch a page of Batches + let response = await smsService.batches.list(requestData); + // Fetch the data page by page manually + while (response.hasNextPage) { + batchesList.push(...response.data); + response = await response.nextPage(); + } + batchesList.push(...response.data); + + console.log(`Full list of batches printed at once (length = ${batchesList.length}):\n${JSON.stringify(batchesList, null, 2)}`); + +}; diff --git a/snippets/sms/batches/replace.js b/snippets/sms/batches/replace.js new file mode 100644 index 0000000..9b801a0 --- /dev/null +++ b/snippets/sms/batches/replace.js @@ -0,0 +1,29 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService, textToHex } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const from = 'YOUR_sinch_phone_number'; + const recipient = 'YOUR_recipient_phone_number'; + const batchId = 'the_batch_id_scheduled_in_the_future'; + + /** @type {Sms.ReplaceBatchMessageRequestData} */ + const requestData= { + batch_id: batchId, + replaceBatchMessageRequestBody: { + type: 'mt_binary', + from, + to: [ + recipient, + ], + udh: textToHex('UserDataHeader'), + body: btoa('This is a replaced message'), + client_reference: 'Sinch Node.js SDK snippet', + }, + }; + + const response = await smsService.batches.replace(requestData); + + console.log(`Replaced batch:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/batches/send-binary-message.js b/snippets/sms/batches/send-binary-message.js new file mode 100644 index 0000000..2cffc9a --- /dev/null +++ b/snippets/sms/batches/send-binary-message.js @@ -0,0 +1,27 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService, textToHex } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const from = 'YOUR_sinch_phone_number'; + const recipient = 'YOUR_recipient_phone_number'; + + /** @type {Sms.SendBinarySMSRequestData} */ + const requestData= { + sendSMSRequestBody: { + type: 'mt_binary', + from, + to: [ + recipient, + ], + body: 'SGVsbG8sIHRoaXMgaXMgYSBTTVMgZnJvbSBTaW5jaA==', + udh: textToHex('UserDataHeader'), + delivery_report: 'full', + }, + }; + + const response = await smsService.batches.sendBinaryMessage(requestData); + + console.log(`Response for binary batch:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/batches/send-media-message.js b/snippets/sms/batches/send-media-message.js new file mode 100644 index 0000000..3b3a69c --- /dev/null +++ b/snippets/sms/batches/send-media-message.js @@ -0,0 +1,31 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const from = 'YOUR_sinch_phone_number'; + const recipient = 'YOUR_recipient_phone_number'; + + /** @type {Sms.SendMediaSMSRequestData} */ + const requestData= { + sendSMSRequestBody: { + type: 'mt_media', + from, + to: [ + recipient, + ], + body: { + url: 'https://media.body.url', + message: 'Text message coming along with the media file', + }, + delivery_report: 'full', + strict_validation: true, + }, + }; + + const response = await smsService.batches.sendMediaMessage(requestData); + + console.log(`Response for MMS batch:\n${JSON.stringify(response, null, 2)}`); +}; + diff --git a/snippets/sms/batches/send-text-message.js b/snippets/sms/batches/send-text-message.js new file mode 100644 index 0000000..c1dfbd0 --- /dev/null +++ b/snippets/sms/batches/send-text-message.js @@ -0,0 +1,31 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const from = 'YOUR_sinch_phone_number'; + const recipient = 'YOUR_recipient_phone_number'; + + /** @type {Sms.SendTextSMSRequestData} */ + const requestData= { + sendSMSRequestBody: { + type: 'mt_text', + from, + to: [ + recipient, + ], + body: 'Hi ${name}!', + parameters: { + name: { + [recipient]: 'John', + default: 'there', + }, + }, + }, + }; + + const response = await smsService.batches.sendTextMessage(requestData); + + console.log(`Response for SMS batch:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/batches/update.js b/snippets/sms/batches/update.js new file mode 100644 index 0000000..403a2d7 --- /dev/null +++ b/snippets/sms/batches/update.js @@ -0,0 +1,24 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const batchId = 'the_batch_id_scheduled_in_the_future'; + const from = 'YOUR_sinch_phone_number'; + + /** @type {Sms.UpdateBatchMessageRequestData} */ + const requestData= { + batch_id: batchId, + updateBatchMessageRequestBody: { + type: 'mt_text', + from, + body: 'Hi ${name}! This is an updated message', + delivery_report: 'per_recipient', + }, + }; + + const response = await smsService.batches.update(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/delivery-reports/get-by-batch-id.js b/snippets/sms/delivery-reports/get-by-batch-id.js new file mode 100644 index 0000000..24c1dcc --- /dev/null +++ b/snippets/sms/delivery-reports/get-by-batch-id.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const batchId = 'the_batch_id'; + + /** @type {Sms.GetDeliveryReportByBatchIdRequestData} */ + const requestData= { + batch_id: batchId, + }; + + const response = await smsService.deliveryReports.get(requestData); + + console.log(`Delivery report:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/delivery-reports/get-for-number.js b/snippets/sms/delivery-reports/get-for-number.js new file mode 100644 index 0000000..5c1281d --- /dev/null +++ b/snippets/sms/delivery-reports/get-for-number.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const batchId = 'the_batch_id'; + const recipient = 'YOUR_recipient_phone_number'; + + /** @type {Sms.GetDeliveryReportByPhoneNumberRequestData} */ + const requestData= { + batch_id: batchId, + recipient_msisdn: recipient, + }; + + const response = await smsService.deliveryReports.getForNumber(requestData); + + console.log(`Recipient delivery report:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/delivery-reports/list-auto.js b/snippets/sms/delivery-reports/list-auto.js new file mode 100644 index 0000000..b622ca4 --- /dev/null +++ b/snippets/sms/delivery-reports/list-auto.js @@ -0,0 +1,22 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const oneWeekAgo = new Date(); + oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); + oneWeekAgo.setHours(0, 0, 0, 0); + + /** @type {Sms.ListDeliveryReportsRequestData} */ + const requestData= { + start_date: oneWeekAgo, + }; + + console.log('List of delivery reports printed one by one:'); + // Use the iterator and fetch data from all the pages automatically + for await (const deliveryReport of smsService.deliveryReports.list(requestData)) { + console.log(JSON.stringify(deliveryReport, null, 2)); + } + +}; diff --git a/snippets/sms/delivery-reports/list.js b/snippets/sms/delivery-reports/list.js new file mode 100644 index 0000000..c4cc2e3 --- /dev/null +++ b/snippets/sms/delivery-reports/list.js @@ -0,0 +1,29 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const oneWeekAgo = new Date(); + oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); + oneWeekAgo.setHours(0, 0, 0, 0); + + /** @type {Sms.ListDeliveryReportsRequestData} */ + const requestData= { + start_date: oneWeekAgo, + }; + + /** @type {Sms.RecipientDeliveryReport[]} */ + const deliveryReportsList = []; + // Fetch a page of Delivery Reports + let response = await smsService.deliveryReports.list(requestData); + // Fetch the data page by page manually + while (response.hasNextPage) { + deliveryReportsList.push(...response.data); + response = await response.nextPage(); + } + deliveryReportsList.push(...response.data); + + console.log(`Full list of delivery reports printed at once (length = ${deliveryReportsList.length}):\n${JSON.stringify(deliveryReportsList, null, 2)}`); + +}; diff --git a/snippets/sms/groups/create.js b/snippets/sms/groups/create.js new file mode 100644 index 0000000..6f5b23c --- /dev/null +++ b/snippets/sms/groups/create.js @@ -0,0 +1,27 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const name = 'YOUR_group_name'; + const member1 = 'YOUR_recipient_1_phone_number'; + const member2 = 'YOUR_recipient_2_phone_number'; + const member3 = 'YOUR_recipient_3_phone_number'; + + /** @type {Sms.CreateGroupRequestData} */ + const requestData= { + createGroupRequestBody: { + name, + members: [ + member1, + member2, + member3, + ], + }, + }; + + const response = await smsService.groups.create(requestData); + + console.log(`Created group:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/groups/delete.js b/snippets/sms/groups/delete.js new file mode 100644 index 0000000..d91cf90 --- /dev/null +++ b/snippets/sms/groups/delete.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const groupId = 'YOUR_group_id'; + + /** @type {Sms.DeleteGroupRequestData} */ + const requestData= { + group_id: groupId, + }; + + await smsService.groups.delete(requestData); + + console.log('The group has been deleted.'); +}; diff --git a/snippets/sms/groups/get.js b/snippets/sms/groups/get.js new file mode 100644 index 0000000..61fbeeb --- /dev/null +++ b/snippets/sms/groups/get.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const groupId = 'YOUR_group_id'; + + /** @type {Sms.GetGroupRequestData} */ + const requestData= { + group_id: groupId, + }; + + const response = await smsService.groups.get(requestData); + + console.log(`Group details:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/groups/list-auto.js b/snippets/sms/groups/list-auto.js new file mode 100644 index 0000000..2cdbfcb --- /dev/null +++ b/snippets/sms/groups/list-auto.js @@ -0,0 +1,20 @@ +// @ts-check + +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + /** @type {Sms.ListGroupsRequestData} */ + const requestData= { + page_size: 2, + }; + + console.log('List of groups printed one by one:'); + // Use the iterator and fetch data from all the pages automatically + for await (const group of smsService.groups.list(requestData)) { + console.log(JSON.stringify(group, null, 2)); + } + +}; diff --git a/snippets/sms/groups/list-members.js b/snippets/sms/groups/list-members.js new file mode 100644 index 0000000..52be06e --- /dev/null +++ b/snippets/sms/groups/list-members.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const groupId = 'YOUR_group_id'; + + /** @type {Sms.ListMembersRequestData} */ + const requestData= { + group_id: groupId, + }; + + const response = await smsService.groups.listMembers(requestData); + + console.log(`List of phone numbers in the group:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/groups/list.js b/snippets/sms/groups/list.js new file mode 100644 index 0000000..3d2016a --- /dev/null +++ b/snippets/sms/groups/list.js @@ -0,0 +1,27 @@ +// @ts-check + +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + /** @type {Sms.ListGroupsRequestData} */ + const requestData= { + page_size: 2, + }; + + /** @type {Sms.GroupResponse[]} */ + const groupsList = []; + // Fetch a page of Groups + let response = await smsService.groups.list(requestData); + // Fetch the data page by page manually + while (response.hasNextPage) { + groupsList.push(...response.data); + response = await response.nextPage(); + } + groupsList.push(...response.data); + + console.log(`Full list of groups printed at once (length = ${groupsList.length}):\n${JSON.stringify(groupsList, null, 2)}`); + +}; diff --git a/snippets/sms/groups/replace.js b/snippets/sms/groups/replace.js new file mode 100644 index 0000000..b6be605 --- /dev/null +++ b/snippets/sms/groups/replace.js @@ -0,0 +1,25 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const groupId = 'YOUR_group_id'; + const member1 = 'YOUR_recipient_1_phone_number'; + const member2 = 'YOUR_recipient_2_phone_number'; + + /** @type {Sms.ReplaceGroupRequestData} */ + const requestData= { + group_id: groupId, + replaceGroupRequestBody: { + members: [ + member1, + member2, + ], + }, + }; + + const response = await smsService.groups.replace(requestData); + + console.log(`Replaced group:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/groups/update.js b/snippets/sms/groups/update.js new file mode 100644 index 0000000..6ee64aa --- /dev/null +++ b/snippets/sms/groups/update.js @@ -0,0 +1,29 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const groupId = 'YOUR_group_id'; + const name= 'YOUR_updated_group_name'; + const member1 = 'YOUR_recipient_1_phone_number'; + const member2 = 'YOUR_recipient_2_phone_number'; + + /** @type {Sms.UpdateGroupRequestData} */ + const requestData= { + group_id: groupId, + updateGroupRequestBody: { + name, + add: [ + member1, + ], + remove: [ + member2, + ], + }, + }; + + const response = await smsService.groups.update(requestData); + + console.log(`Updated group:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/inbounds/get.js b/snippets/sms/inbounds/get.js new file mode 100644 index 0000000..472b7d1 --- /dev/null +++ b/snippets/sms/inbounds/get.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const inboundId = 'the_inbound_id'; + + /** @type {Sms.GetInboundMessageRequestData} */ + const requestData= { + inbound_id: inboundId, + }; + + const response = await smsService.inbounds.get(requestData); + + console.log(`Inbound message:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/sms/inbounds/list-auto.js b/snippets/sms/inbounds/list-auto.js new file mode 100644 index 0000000..56acb6e --- /dev/null +++ b/snippets/sms/inbounds/list-auto.js @@ -0,0 +1,24 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const oneWeekAgo = new Date(); + oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); + oneWeekAgo.setHours(0, 0, 0, 0); + const recipient = 'YOUR_recipient_phone_number'; + + /** @type {Sms.ListInboundMessagesRequestData} */ + const requestData= { + start_date: oneWeekAgo, + to: recipient, + }; + + console.log('List of inbound messages printed one by one:'); + // Use the iterator and fetch data from all the pages automatically + for await (const inboundMessage of smsService.inbounds.list(requestData)) { + console.log(JSON.stringify(inboundMessage, null, 2)); + } + +}; diff --git a/snippets/sms/inbounds/list.js b/snippets/sms/inbounds/list.js new file mode 100644 index 0000000..18fdf65 --- /dev/null +++ b/snippets/sms/inbounds/list.js @@ -0,0 +1,31 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const oneWeekAgo = new Date(); + oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); + oneWeekAgo.setHours(0, 0, 0, 0); + const recipient = 'YOUR_recipient_phone_number'; + + /** @type {Sms.ListInboundMessagesRequestData} */ + const requestData= { + start_date: oneWeekAgo, + to: recipient, + }; + + /** @type {Sms.InboundMessageResponse[]} */ + const inboundMessagesList = []; + // Fetch a page of Inbound Messages + let response = await smsService.inbounds.list(requestData); + // Fetch the data page by page manually + while (response.hasNextPage) { + inboundMessagesList.push(...response.data); + response = await response.nextPage(); + } + inboundMessagesList.push(...response.data); + + console.log(`Full list of inbound messages printed at once (length = ${inboundMessagesList.length}):\n${JSON.stringify(inboundMessagesList, null, 2)}`); + +}; diff --git a/snippets/sms/send.js b/snippets/sms/send.js new file mode 100644 index 0000000..ba2ee12 --- /dev/null +++ b/snippets/sms/send.js @@ -0,0 +1,24 @@ +// eslint-disable-next-line no-unused-vars +import { Sms, SmsService } from '@sinch/sdk-core'; + +/** @param {SmsService} smsService */ +export const execute = async (smsService) => { + + const from = 'YOUR_sinch_phone_number'; + const recipient = 'YOUR_recipient_phone_number'; + const body = 'This is a test SMS message using the Sinch Node.js SDK.'; + + /** @type {Sms.SendSMSRequestData} */ + const requestData= { + sendSMSRequestBody: { + type: 'mt_text', + from, + to: [recipient], + body, + }, + }; + + const response = await smsService.batches.send(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/tsconfig.json b/snippets/tsconfig.json new file mode 100644 index 0000000..2526b07 --- /dev/null +++ b/snippets/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "strict": true, + "moduleResolution": "node", + "pretty": true, + "baseUrl": ".", + "noEmit": true, + "skipLibCheck": true + }, + "include": [ + "**/*.js" + ], + "exclude": [ + "node_modules" + ] +} From 1591a886fcc8ee66f8851c4a20934cdff9708876 Mon Sep 17 00:00:00 2001 From: Antoine SEIN <142824551+asein-sinch@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:16:49 +0200 Subject: [PATCH 3/6] DEVEXP-558: Add snippets for Verification API --- .../report-flashcall-verification-by-id.js | 19 ++++++++++++++++ ...port-flashcall-verification-by-identity.js | 19 ++++++++++++++++ .../report-phonecall-verification-by-id.js | 19 ++++++++++++++++ ...port-phonecall-verification-by-identity.js | 19 ++++++++++++++++ .../report-sms-verification-by-id.js | 19 ++++++++++++++++ .../report-sms-verification-by-identity.js | 19 ++++++++++++++++ .../start-data-verification.js | 19 ++++++++++++++++ .../start-flashcall-verification.js | 19 ++++++++++++++++ .../start-phonecall-verification.js | 20 +++++++++++++++++ .../start-sms-verification.js | 22 +++++++++++++++++++ .../verification-status/verification-by-id.js | 17 ++++++++++++++ .../verification-by-identity.js | 18 +++++++++++++++ .../verification-by-reference.js | 17 ++++++++++++++ 13 files changed, 246 insertions(+) create mode 100644 snippets/verification/report-verification/report-flashcall-verification-by-id.js create mode 100644 snippets/verification/report-verification/report-flashcall-verification-by-identity.js create mode 100644 snippets/verification/report-verification/report-phonecall-verification-by-id.js create mode 100644 snippets/verification/report-verification/report-phonecall-verification-by-identity.js create mode 100644 snippets/verification/report-verification/report-sms-verification-by-id.js create mode 100644 snippets/verification/report-verification/report-sms-verification-by-identity.js create mode 100644 snippets/verification/start-verification/start-data-verification.js create mode 100644 snippets/verification/start-verification/start-flashcall-verification.js create mode 100644 snippets/verification/start-verification/start-phonecall-verification.js create mode 100644 snippets/verification/start-verification/start-sms-verification.js create mode 100644 snippets/verification/verification-status/verification-by-id.js create mode 100644 snippets/verification/verification-status/verification-by-identity.js create mode 100644 snippets/verification/verification-status/verification-by-reference.js diff --git a/snippets/verification/report-verification/report-flashcall-verification-by-id.js b/snippets/verification/report-verification/report-flashcall-verification-by-id.js new file mode 100644 index 0000000..ec96b09 --- /dev/null +++ b/snippets/verification/report-verification/report-flashcall-verification-by-id.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const verificationID = 'the_verification_ID'; + const verificationCLI = 'the_phone_number_calling_for_verification'; + + /** @type {Verification.ReportFlashCallVerificationByIdRequestData} */ + const requestData = Verification.reportVerificationByIdHelper.buildFlashCallRequest( + verificationID, + verificationCLI, + ); + + const response = await verificationService.verifications.reportFlashCallById(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/report-verification/report-flashcall-verification-by-identity.js b/snippets/verification/report-verification/report-flashcall-verification-by-identity.js new file mode 100644 index 0000000..f827e72 --- /dev/null +++ b/snippets/verification/report-verification/report-flashcall-verification-by-identity.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const phoneNumber = 'the_phone_number_to_verify'; + const verificationCLI = 'the_phone_number_calling_for_verification'; + + /** @type {Verification.ReportFlashCallVerificationByIdentityRequestData} */ + const requestData = Verification.reportVerificationByIdentityHelper.buildFlashCallRequest( + phoneNumber, + verificationCLI, + ); + + const response = await verificationService.verifications.reportFlashCallByIdentity(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/report-verification/report-phonecall-verification-by-id.js b/snippets/verification/report-verification/report-phonecall-verification-by-id.js new file mode 100644 index 0000000..93425a9 --- /dev/null +++ b/snippets/verification/report-verification/report-phonecall-verification-by-id.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const verificationID = 'the_verification_ID'; + const verificationCode = 'the_verification_code_received_by_phone_call'; + + /** @type {Verification.ReportCalloutVerificationByIdRequestData} */ + const requestData = Verification.reportVerificationByIdHelper.buildCalloutRequest( + verificationID, + verificationCode, + ); + + const response = await verificationService.verifications.reportCalloutById(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/report-verification/report-phonecall-verification-by-identity.js b/snippets/verification/report-verification/report-phonecall-verification-by-identity.js new file mode 100644 index 0000000..aa79d10 --- /dev/null +++ b/snippets/verification/report-verification/report-phonecall-verification-by-identity.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const phoneNumber = 'the_phone_number_to_verify'; + const verificationCode = 'the_verification_code_received_by_phone_call'; + + /** @type {Verification.ReportCalloutVerificationByIdentityRequestData} */ + const requestData = Verification.reportVerificationByIdentityHelper.buildCalloutRequest( + phoneNumber, + verificationCode, + ); + + const response = await verificationService.verifications.reportCalloutByIdentity(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/report-verification/report-sms-verification-by-id.js b/snippets/verification/report-verification/report-sms-verification-by-id.js new file mode 100644 index 0000000..729b20b --- /dev/null +++ b/snippets/verification/report-verification/report-sms-verification-by-id.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const verificationID = 'the_verification_ID'; + const verificationCode = 'the_verification_code_received_by_SMS'; + + /** @type {Verification.ReportSmsVerificationByIdRequestData} */ + const requestData = Verification.reportVerificationByIdHelper.buildSmsRequest( + verificationID, + verificationCode, + ); + + const response = await verificationService.verifications.reportSmsById(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/report-verification/report-sms-verification-by-identity.js b/snippets/verification/report-verification/report-sms-verification-by-identity.js new file mode 100644 index 0000000..9da1b56 --- /dev/null +++ b/snippets/verification/report-verification/report-sms-verification-by-identity.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const phoneNumber = 'the_phone_number_to_verify'; + const verificationCode = 'the_verification_code_received_by_SMS'; + + /** @type {Verification.ReportSmsVerificationByIdentityRequestData} */ + const requestData = Verification.reportVerificationByIdentityHelper.buildSmsRequest( + phoneNumber, + verificationCode, + ); + + const response = await verificationService.verifications.reportSmsByIdentity(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/start-verification/start-data-verification.js b/snippets/verification/start-verification/start-data-verification.js new file mode 100644 index 0000000..c3863d7 --- /dev/null +++ b/snippets/verification/start-verification/start-data-verification.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const phoneNumber = 'the_phone_number_to_verify'; + const reference = 'the_verification_reference'; + + /** @type {Verification.StartSeamlessVerificationRequestData} */ + const requestData = Verification.startVerificationHelper.buildSeamlessRequest( + phoneNumber, + reference, + ); + + const response = await verificationService.verifications.startSeamless(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/start-verification/start-flashcall-verification.js b/snippets/verification/start-verification/start-flashcall-verification.js new file mode 100644 index 0000000..e927126 --- /dev/null +++ b/snippets/verification/start-verification/start-flashcall-verification.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const phoneNumber = 'the_phone_number_to_verify'; + const reference = 'the_verification_reference'; + + /** @type {Verification.StartFlashCallVerificationRequestData} */ + const requestData = Verification.startVerificationHelper.buildFlashCallRequest( + phoneNumber, + reference, + ); + + const response = await verificationService.verifications.startFlashCall(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/start-verification/start-phonecall-verification.js b/snippets/verification/start-verification/start-phonecall-verification.js new file mode 100644 index 0000000..2dd9637 --- /dev/null +++ b/snippets/verification/start-verification/start-phonecall-verification.js @@ -0,0 +1,20 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const phoneNumber = 'the_phone_number_to_verify'; + const reference = 'the_verification_reference'; + + /** @type {Verification.StartCalloutVerificationRequestData} */ + const requestData = Verification.startVerificationHelper.buildCalloutRequest( + phoneNumber, + reference, + 'fr-FR', + ); + + const response = await verificationService.verifications.startCallout(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/start-verification/start-sms-verification.js b/snippets/verification/start-verification/start-sms-verification.js new file mode 100644 index 0000000..f71b554 --- /dev/null +++ b/snippets/verification/start-verification/start-sms-verification.js @@ -0,0 +1,22 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const phoneNumber = 'the_phone_number_to_verify'; + const reference = 'the_verification_reference'; + + /** @type {Verification.StartSmsVerificationRequestData} */ + const requestData = Verification.startVerificationHelper.buildSmsRequest( + phoneNumber, + reference, + { + codeType: 'Alphanumeric', + }, + ); + + const response = await verificationService.verifications.startSms(requestData); + + console.log(`Response:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/verification-status/verification-by-id.js b/snippets/verification/verification-status/verification-by-id.js new file mode 100644 index 0000000..b30c214 --- /dev/null +++ b/snippets/verification/verification-status/verification-by-id.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const verificationID = 'the_verification_ID'; + + /** @type {Verification.VerificationStatusByIdRequestData} */ + const requestData = { + id: verificationID, + }; + + const response = await verificationService.verificationStatus.getById(requestData); + + console.log(`Verification status:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/verification-status/verification-by-identity.js b/snippets/verification/verification-status/verification-by-identity.js new file mode 100644 index 0000000..75f0cf8 --- /dev/null +++ b/snippets/verification/verification-status/verification-by-identity.js @@ -0,0 +1,18 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const phoneNumber = 'the_phone_number_to_verify'; + + /** @type {Verification.VerificationStatusByIdentityRequestData} */ + const requestData = { + method: 'sms', + endpoint: phoneNumber, + }; + + const response = await verificationService.verificationStatus.getByIdentity(requestData); + + console.log(`Verification status:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/verification/verification-status/verification-by-reference.js b/snippets/verification/verification-status/verification-by-reference.js new file mode 100644 index 0000000..ebb30e5 --- /dev/null +++ b/snippets/verification/verification-status/verification-by-reference.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Verification, VerificationService } from '@sinch/sdk-core'; + +/** @param {VerificationService} verificationService */ +export const execute = async (verificationService) => { + + const verificationReference = 'the_verification_reference'; + + /** @type {Verification.VerificationStatusByReferenceRequestData} */ + const requestData = { + reference: verificationReference, + }; + + const response = await verificationService.verificationStatus.getByReference(requestData); + + console.log(`Verification status:\n${JSON.stringify(response, null, 2)}`); +}; From c57348d525fc629c40509840aa411be548409d36 Mon Sep 17 00:00:00 2001 From: Antoine SEIN <142824551+asein-sinch@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:21:50 +0200 Subject: [PATCH 4/6] DEVEXP-559: Add snippets for Voice API --- eslint.config.mjs | 3 +- snippets/voice/applications/assign-numbers.js | 24 +++++++ .../voice/applications/get-callback-urls.js | 17 +++++ snippets/voice/applications/list-numbers.js | 13 ++++ snippets/voice/applications/query-number.js | 17 +++++ .../voice/applications/unassign-number.js | 22 +++++++ .../applications/update-callback-urls.js | 23 +++++++ snippets/voice/callouts/conference.js | 29 ++++++++ snippets/voice/callouts/custom.js | 66 +++++++++++++++++++ snippets/voice/callouts/tts.js | 29 ++++++++ snippets/voice/calls/get.js | 17 +++++ snippets/voice/calls/manage-with-call-leg.js | 30 +++++++++ snippets/voice/calls/update.js | 36 ++++++++++ snippets/voice/conferences/get.js | 17 +++++ snippets/voice/conferences/kick-all.js | 17 +++++ .../voice/conferences/kick-participant.js | 19 ++++++ .../voice/conferences/manage-participant.js | 23 +++++++ 17 files changed, 400 insertions(+), 2 deletions(-) create mode 100644 snippets/voice/applications/assign-numbers.js create mode 100644 snippets/voice/applications/get-callback-urls.js create mode 100644 snippets/voice/applications/list-numbers.js create mode 100644 snippets/voice/applications/query-number.js create mode 100644 snippets/voice/applications/unassign-number.js create mode 100644 snippets/voice/applications/update-callback-urls.js create mode 100644 snippets/voice/callouts/conference.js create mode 100644 snippets/voice/callouts/custom.js create mode 100644 snippets/voice/callouts/tts.js create mode 100644 snippets/voice/calls/get.js create mode 100644 snippets/voice/calls/manage-with-call-leg.js create mode 100644 snippets/voice/calls/update.js create mode 100644 snippets/voice/conferences/get.js create mode 100644 snippets/voice/conferences/kick-all.js create mode 100644 snippets/voice/conferences/kick-participant.js create mode 100644 snippets/voice/conferences/manage-participant.js diff --git a/eslint.config.mjs b/eslint.config.mjs index 17fa817..14dd77d 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -55,7 +55,6 @@ export default [...compat.extends('eslint:recommended', 'google', 'prettier'), { ignorePattern: '^import.+|test', }], - 'new-cap': 'off', - 'no-unused-vars': 'off' + 'new-cap': 'off' }, }]; diff --git a/snippets/voice/applications/assign-numbers.js b/snippets/voice/applications/assign-numbers.js new file mode 100644 index 0000000..9d83a51 --- /dev/null +++ b/snippets/voice/applications/assign-numbers.js @@ -0,0 +1,24 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const phoneNumber = 'YOUR_Sinch_phone_number_with_voice_capability'; + const applicationKey = 'YOUR_Voice_application_key_from_the_dashboard'; + + /** @type {Voice.AssignNumbersRequestData} */ + const requestData = { + assignNumbersRequestBody: { + numbers: [ + phoneNumber, + ], + applicationkey: applicationKey, + capability: 'voice', + }, + }; + + await voiceService.applications.assignNumbers(requestData); + + console.log('The phone numbers have been assigned to the application successfully.'); +}; diff --git a/snippets/voice/applications/get-callback-urls.js b/snippets/voice/applications/get-callback-urls.js new file mode 100644 index 0000000..1284fd1 --- /dev/null +++ b/snippets/voice/applications/get-callback-urls.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const applicationKey = 'YOUR_Voice_application_key_from_the_dashboard'; + + /** @type {Voice.GetCallbackURLsRequestData} */ + const requestData = { + applicationkey: applicationKey, + }; + + const response = await voiceService.applications.getCallbackURLs(requestData); + + console.log(`Callback URLs:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/voice/applications/list-numbers.js b/snippets/voice/applications/list-numbers.js new file mode 100644 index 0000000..cf62023 --- /dev/null +++ b/snippets/voice/applications/list-numbers.js @@ -0,0 +1,13 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + /** @type {Voice.GetNumbersRequestData} */ + const requestData = {}; + + const response = await voiceService.applications.listNumbers(requestData); + + console.log(`Numbers list:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/voice/applications/query-number.js b/snippets/voice/applications/query-number.js new file mode 100644 index 0000000..ceff50e --- /dev/null +++ b/snippets/voice/applications/query-number.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const phoneNumber = 'the_phone_number'; + + /** @type {Voice.QueryNumberRequestData} */ + const requestData = { + number: phoneNumber, + }; + + const response = await voiceService.applications.queryNumber(requestData); + + console.log(`Phone number information:\n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/voice/applications/unassign-number.js b/snippets/voice/applications/unassign-number.js new file mode 100644 index 0000000..def66ff --- /dev/null +++ b/snippets/voice/applications/unassign-number.js @@ -0,0 +1,22 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const phoneNumber = 'YOUR_Sinch_phone_number_with_voice_capability'; + const applicationKey = 'YOUR_Voice_application_key_from_the_dashboard'; + + /** @type {Voice.UnassignNumberRequestData} */ + const requestData = { + unassignNumbersRequestBody: { + number: phoneNumber, + applicationkey: applicationKey, + capability: 'voice', + }, + }; + + await voiceService.applications.unassignNumber(requestData); + + console.log('The phone numbers have been unassigned from the application successfully.'); +}; diff --git a/snippets/voice/applications/update-callback-urls.js b/snippets/voice/applications/update-callback-urls.js new file mode 100644 index 0000000..55c5b25 --- /dev/null +++ b/snippets/voice/applications/update-callback-urls.js @@ -0,0 +1,23 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const applicationKey = 'YOUR_Voice_application_key_from_the_dashboard'; + + /** @type {Voice.UpdateCallbackURLsRequestData} */ + const requestData = { + applicationkey: applicationKey, + updateCallbacksRequestBody: { + url: { + primary: 'https://new-primary-callback-url.com', + fallback: 'https://new-fallback-callback-url.com', + }, + }, + }; + + await voiceService.applications.updateCallbackURLs(requestData); + + console.log('The callback URLs have been successfully updated.'); +}; diff --git a/snippets/voice/callouts/conference.js b/snippets/voice/callouts/conference.js new file mode 100644 index 0000000..0034f87 --- /dev/null +++ b/snippets/voice/callouts/conference.js @@ -0,0 +1,29 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const conferenceId = 'YOUR_conference_ID'; + const recipientPhoneNumber = 'the_phone_number_to_call'; + const callingNumber = 'the_calling_number'; + + /** @type {Voice.ConferenceCalloutRequestData} */ + const requestData = { + conferenceCalloutRequestBody: { + method: 'conferenceCallout', + conferenceCallout: { + conferenceId, + destination: { + type: 'number', + endpoint: recipientPhoneNumber, + }, + cli: callingNumber, + }, + }, + }; + + const response = await voiceService.callouts.conference(requestData); + + console.log(`Callout response: \n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/voice/callouts/custom.js b/snippets/voice/callouts/custom.js new file mode 100644 index 0000000..9f330ee --- /dev/null +++ b/snippets/voice/callouts/custom.js @@ -0,0 +1,66 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const recipientPhoneNumber = 'the_phone_number_to_call'; + const callingNumber = 'the_calling_number'; + const callbackUrl= 'the_PIE_callback_URL'; + + /** @type {Voice.CustomCalloutRequestData} */ + const requestData = { + customCalloutRequestBody: { + method: 'customCallout', + customCallout: { + destination: { + type: 'number', + endpoint: recipientPhoneNumber, + }, + cli: callingNumber, + ice: Voice.customCalloutHelper.formatIceResponse( + Voice.iceActionHelper.connectPstn({ + number: recipientPhoneNumber, + cli: callingNumber, + }), + Voice.iceInstructionHelper.say('Welcome to Sinch', 'en-US/male'), + ), + ace: Voice.customCalloutHelper.formatAceResponse( + Voice.aceActionHelper.runMenu({ + locale: 'Kimberly', + enableVoice: true, + barge: true, + menus: [ + { + id: 'main', + mainPrompt: '#tts[Welcome to the main menu. Press 1 to confirm order or 2 to cancel.', + repeatPrompt: '#tts[We didn\'t get your input, please try again.]', + timeoutMills: 5000, + options: [ + { + dtmf: '1', + action: 'menu(confirm)', + }, + { + dtmf: '2', + action: 'return(cancel)', + }, + ], + }, + { + id: 'confirm', + mainPrompt: '#tts[Thank you for confirming your order. Enter your 4-digit PIN.]', + maxDigits: 4, + }, + ], + }), + ), + pie: callbackUrl, + }, + }, + }; + + const response = await voiceService.callouts.custom(requestData); + + console.log(`Callout response: \n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/voice/callouts/tts.js b/snippets/voice/callouts/tts.js new file mode 100644 index 0000000..56a7b82 --- /dev/null +++ b/snippets/voice/callouts/tts.js @@ -0,0 +1,29 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const recipientPhoneNumber = 'the_phone_number_to_call'; + const callingNumber = 'the_calling_number'; + + /** @type {Voice.TtsCalloutRequestData} */ + const requestData = { + ttsCalloutRequestBody: { + method: 'ttsCallout', + ttsCallout: { + destination: { + type: 'number', + endpoint: recipientPhoneNumber, + }, + cli: callingNumber, + locale: 'en-US/male', + text: 'Hello, this is a call from Sinch.', + }, + }, + }; + + const response = await voiceService.callouts.tts(requestData); + + console.log(`Callout response: \n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/voice/calls/get.js b/snippets/voice/calls/get.js new file mode 100644 index 0000000..4cb2eee --- /dev/null +++ b/snippets/voice/calls/get.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const callId = 'the_call_ID'; + + /** @type {Voice.GetCallResultRequestData} */ + const requestData = { + callId, + }; + + const response = await voiceService.calls.get(requestData); + + console.log(`Call information: \n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/voice/calls/manage-with-call-leg.js b/snippets/voice/calls/manage-with-call-leg.js new file mode 100644 index 0000000..a65613e --- /dev/null +++ b/snippets/voice/calls/manage-with-call-leg.js @@ -0,0 +1,30 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const callId = 'the_call_ID'; + + /** @type {Voice.ManageWithCallLegRequestData} */ + const requestData = { + callId, + callLeg: 'callee', + manageWithCallLegRequestBody: { + action: { + name: 'hangup', + }, + instructions: [ + { + name: 'say', + locale: 'Matthew', + text: 'Hello, the call is over, hanging up now. Goodbye.', + }, + ], + }, + }; + + await voiceService.calls.manageWithCallLeg(requestData); + + console.log('Call managed with a call leg successfully.'); +}; diff --git a/snippets/voice/calls/update.js b/snippets/voice/calls/update.js new file mode 100644 index 0000000..e154697 --- /dev/null +++ b/snippets/voice/calls/update.js @@ -0,0 +1,36 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const callId = 'the_call_ID'; + + /** @type {Voice.UpdateCallRequestData} */ + const requestData = { + callId, + updateCallRequestBody: { + instructions: [ + { + name: 'startRecording', + options: { + destinationUrl: 's3://sinch-storage/voice-recordings/my-recording.mp3', + credentials: '(AwsAccessKey):(AwsSecretKey):(AwsRegion)', + notificationEvents: true, + transcriptionOptions: { + enabled: true, + locale: 'en-US', + }, + }, + }, + ], + action: { + name: 'hangup', + }, + }, + }; + + await voiceService.calls.update(requestData); + + console.log('Call updated successfully.'); +}; diff --git a/snippets/voice/conferences/get.js b/snippets/voice/conferences/get.js new file mode 100644 index 0000000..d620921 --- /dev/null +++ b/snippets/voice/conferences/get.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const conferenceId = 'the_conference_ID'; + + /** @type {Voice.GetConferenceInfoRequestData} */ + const requestData = { + conferenceId, + }; + + const response = await voiceService.conferences.get(requestData); + + console.log(`Conference information: \n${JSON.stringify(response, null, 2)}`); +}; diff --git a/snippets/voice/conferences/kick-all.js b/snippets/voice/conferences/kick-all.js new file mode 100644 index 0000000..6fbb359 --- /dev/null +++ b/snippets/voice/conferences/kick-all.js @@ -0,0 +1,17 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const conferenceId = 'the_conference_ID'; + + /** @type {Voice.KickAllRequestData} */ + const requestData = { + conferenceId, + }; + + await voiceService.conferences.kickAll(requestData); + + console.log('All the participants have been successfully kicked from the conference'); +}; diff --git a/snippets/voice/conferences/kick-participant.js b/snippets/voice/conferences/kick-participant.js new file mode 100644 index 0000000..fd5eccd --- /dev/null +++ b/snippets/voice/conferences/kick-participant.js @@ -0,0 +1,19 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const conferenceId = 'the_conference_ID'; + const callId = 'the_call_ID_identifying_a_participant'; + + /** @type {Voice.KickParticipantRequestData} */ + const requestData = { + conferenceId, + callId, + }; + + await voiceService.conferences.kickParticipant(requestData); + + console.log('The participant has been successfully kicked from the conference'); +}; diff --git a/snippets/voice/conferences/manage-participant.js b/snippets/voice/conferences/manage-participant.js new file mode 100644 index 0000000..9975e23 --- /dev/null +++ b/snippets/voice/conferences/manage-participant.js @@ -0,0 +1,23 @@ +// eslint-disable-next-line no-unused-vars +import { Voice, VoiceService } from '@sinch/sdk-core'; + +/** @param {VoiceService} voiceService */ +export const execute = async (voiceService) => { + + const conferenceId = 'the_conference_ID'; + const callId = 'the_call_ID_identifying_a_participant'; + + /** @type {Voice.ManageParticipantRequestData} */ + const requestData = { + conferenceId, + callId, + manageParticipantRequestBody: { + command: 'mute', + moh: 'music1', + }, + }; + + await voiceService.conferences.manageParticipant(requestData); + + console.log('The participant has been managed successfully.'); +}; From 73ad5dd0e65235c778558163a711b9f9330d9c8a Mon Sep 17 00:00:00 2001 From: Antoine SEIN <142824551+asein-sinch@users.noreply.github.com> Date: Mon, 23 Sep 2024 15:26:05 +0200 Subject: [PATCH 5/6] Remove duplicated files --- snippets/numbers/available-regions/list.js | 15 ------- .../available-regions/{ => list}/snippet.js | 0 .../numbers/callback-configuration/get.js | 10 ----- .../numbers/callback-configuration/update.js | 19 --------- snippets/numbers/check-availability.js | 25 ------------ snippets/numbers/get.js | 17 -------- snippets/numbers/list.js | 30 -------------- snippets/numbers/release.js | 17 -------- snippets/numbers/rent-any.js | 40 ------------------- snippets/numbers/rent.js | 25 ------------ .../numbers/search-for-available-numbers.js | 17 -------- snippets/numbers/update.js | 29 -------------- snippets/sms/batches/cancel.js | 17 -------- snippets/sms/batches/delivery-feedback.js | 23 ----------- snippets/sms/batches/dry-run.js | 26 ------------ snippets/sms/batches/get.js | 17 -------- snippets/sms/batches/list-auto.js | 23 ----------- snippets/sms/batches/list.js | 30 -------------- snippets/sms/batches/replace.js | 29 -------------- snippets/sms/batches/send-binary-message.js | 27 ------------- snippets/sms/batches/send-media-message.js | 31 -------------- snippets/sms/batches/send-text-message.js | 31 -------------- snippets/sms/batches/update.js | 24 ----------- .../sms/delivery-reports/get-by-batch-id.js | 17 -------- .../sms/delivery-reports/get-for-number.js | 19 --------- snippets/sms/delivery-reports/list-auto.js | 22 ---------- snippets/sms/delivery-reports/list.js | 29 -------------- snippets/sms/groups/create.js | 27 ------------- snippets/sms/groups/delete.js | 17 -------- snippets/sms/groups/get.js | 17 -------- snippets/sms/groups/list-auto.js | 20 ---------- snippets/sms/groups/list-members.js | 17 -------- snippets/sms/groups/list.js | 27 ------------- snippets/sms/groups/replace.js | 25 ------------ snippets/sms/groups/update.js | 29 -------------- snippets/sms/inbounds/get.js | 17 -------- snippets/sms/inbounds/list-auto.js | 24 ----------- snippets/sms/inbounds/list.js | 31 -------------- snippets/sms/send.js | 24 ----------- .../report-flashcall-verification-by-id.js | 19 --------- ...port-flashcall-verification-by-identity.js | 19 --------- .../report-phonecall-verification-by-id.js | 19 --------- ...port-phonecall-verification-by-identity.js | 19 --------- .../report-sms-verification-by-id.js | 19 --------- .../report-sms-verification-by-identity.js | 19 --------- .../start-data-verification.js | 19 --------- .../start-flashcall-verification.js | 19 --------- .../start-phonecall-verification.js | 20 ---------- .../start-sms-verification.js | 22 ---------- .../verification-status/verification-by-id.js | 17 -------- .../verification-by-identity.js | 18 --------- .../verification-by-reference.js | 17 -------- 52 files changed, 1130 deletions(-) delete mode 100644 snippets/numbers/available-regions/list.js rename snippets/numbers/available-regions/{ => list}/snippet.js (100%) delete mode 100644 snippets/numbers/callback-configuration/get.js delete mode 100644 snippets/numbers/callback-configuration/update.js delete mode 100644 snippets/numbers/check-availability.js delete mode 100644 snippets/numbers/get.js delete mode 100644 snippets/numbers/list.js delete mode 100644 snippets/numbers/release.js delete mode 100644 snippets/numbers/rent-any.js delete mode 100644 snippets/numbers/rent.js delete mode 100644 snippets/numbers/search-for-available-numbers.js delete mode 100644 snippets/numbers/update.js delete mode 100644 snippets/sms/batches/cancel.js delete mode 100644 snippets/sms/batches/delivery-feedback.js delete mode 100644 snippets/sms/batches/dry-run.js delete mode 100644 snippets/sms/batches/get.js delete mode 100644 snippets/sms/batches/list-auto.js delete mode 100644 snippets/sms/batches/list.js delete mode 100644 snippets/sms/batches/replace.js delete mode 100644 snippets/sms/batches/send-binary-message.js delete mode 100644 snippets/sms/batches/send-media-message.js delete mode 100644 snippets/sms/batches/send-text-message.js delete mode 100644 snippets/sms/batches/update.js delete mode 100644 snippets/sms/delivery-reports/get-by-batch-id.js delete mode 100644 snippets/sms/delivery-reports/get-for-number.js delete mode 100644 snippets/sms/delivery-reports/list-auto.js delete mode 100644 snippets/sms/delivery-reports/list.js delete mode 100644 snippets/sms/groups/create.js delete mode 100644 snippets/sms/groups/delete.js delete mode 100644 snippets/sms/groups/get.js delete mode 100644 snippets/sms/groups/list-auto.js delete mode 100644 snippets/sms/groups/list-members.js delete mode 100644 snippets/sms/groups/list.js delete mode 100644 snippets/sms/groups/replace.js delete mode 100644 snippets/sms/groups/update.js delete mode 100644 snippets/sms/inbounds/get.js delete mode 100644 snippets/sms/inbounds/list-auto.js delete mode 100644 snippets/sms/inbounds/list.js delete mode 100644 snippets/sms/send.js delete mode 100644 snippets/verification/report-verification/report-flashcall-verification-by-id.js delete mode 100644 snippets/verification/report-verification/report-flashcall-verification-by-identity.js delete mode 100644 snippets/verification/report-verification/report-phonecall-verification-by-id.js delete mode 100644 snippets/verification/report-verification/report-phonecall-verification-by-identity.js delete mode 100644 snippets/verification/report-verification/report-sms-verification-by-id.js delete mode 100644 snippets/verification/report-verification/report-sms-verification-by-identity.js delete mode 100644 snippets/verification/start-verification/start-data-verification.js delete mode 100644 snippets/verification/start-verification/start-flashcall-verification.js delete mode 100644 snippets/verification/start-verification/start-phonecall-verification.js delete mode 100644 snippets/verification/start-verification/start-sms-verification.js delete mode 100644 snippets/verification/verification-status/verification-by-id.js delete mode 100644 snippets/verification/verification-status/verification-by-identity.js delete mode 100644 snippets/verification/verification-status/verification-by-reference.js diff --git a/snippets/numbers/available-regions/list.js b/snippets/numbers/available-regions/list.js deleted file mode 100644 index 6bf9329..0000000 --- a/snippets/numbers/available-regions/list.js +++ /dev/null @@ -1,15 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - /** @type {Numbers.ListAvailableRegionsRequestData} */ - const requestData = { - types: ['LOCAL', 'MOBILE'], - }; - - const response = await numbersService.availableRegions.list(requestData); - - console.log(`Available regions:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/numbers/available-regions/snippet.js b/snippets/numbers/available-regions/list/snippet.js similarity index 100% rename from snippets/numbers/available-regions/snippet.js rename to snippets/numbers/available-regions/list/snippet.js diff --git a/snippets/numbers/callback-configuration/get.js b/snippets/numbers/callback-configuration/get.js deleted file mode 100644 index fc03424..0000000 --- a/snippets/numbers/callback-configuration/get.js +++ /dev/null @@ -1,10 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - const response = await numbersService.callbacks.get({}); - - console.log(`Callback configuration:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/numbers/callback-configuration/update.js b/snippets/numbers/callback-configuration/update.js deleted file mode 100644 index 8b9c918..0000000 --- a/snippets/numbers/callback-configuration/update.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - const hmacSecret = 'New_HMAC_secret'; - - /** @type {Numbers.UpdateCallbackConfigurationRequestData} */ - const requestData = { - updateCallbackConfigurationRequestBody: { - hmacSecret, - }, - }; - - const response = await numbersService.callbacks.update(requestData); - - console.log(`Updated callback configuration:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/numbers/check-availability.js b/snippets/numbers/check-availability.js deleted file mode 100644 index 93a1bc4..0000000 --- a/snippets/numbers/check-availability.js +++ /dev/null @@ -1,25 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - const phoneNumber = 'a_phone_number'; - - /** @type {Numbers.GetAvailableNumberRequestData} */ - const requestData = { - phoneNumber, - }; - - let response; - try { - response = await numbersService.availableNumber.checkAvailability(requestData); - } catch (error) { - console.error(`ERROR: the phone number ${requestData.phoneNumber} is not available`); - } - - if (response) { - console.log(`The phone number is available:\n${JSON.stringify(response, null, 2)}`); - } - -}; diff --git a/snippets/numbers/get.js b/snippets/numbers/get.js deleted file mode 100644 index 9dd6da3..0000000 --- a/snippets/numbers/get.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - const phoneNumber = 'YOUR_rented_phoneNumber'; - - /** @type {Numbers.GetActiveNumberRequestData} */ - const requestData = { - phoneNumber, - }; - - const response = await numbersService.activeNumber.get(requestData); - - console.log(`Rented number details:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/numbers/list.js b/snippets/numbers/list.js deleted file mode 100644 index d6a7fa6..0000000 --- a/snippets/numbers/list.js +++ /dev/null @@ -1,30 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - /** @type Numbers.ListActiveNumbersRequestData */ - const requestData = { - regionCode: 'US', - type: 'LOCAL', - }; - - // Method 1: Fetch the data page by page manually - /** @type {Numbers.ActiveNumber[]} */ - const activeNumbersList = []; - let response = await numbersService.activeNumber.list(requestData); - - do { - activeNumbersList.push(...response.data); - response = response.hasNextPage ? await response.nextPage() : null; - } while (response); - console.log(`Full list of numbers printed at once (length = ${activeNumbersList.length}):\n${JSON.stringify(activeNumbersList, null, 2)}`); - - // Method 2: Use the iterator and fetch data from more pages automatically - console.log('List of numbers printed one by one:'); - for await (const rentedNumber of numbersService.activeNumber.list(requestData)) { - console.log(JSON.stringify(rentedNumber, null, 2)); - } - -}; diff --git a/snippets/numbers/release.js b/snippets/numbers/release.js deleted file mode 100644 index 935db91..0000000 --- a/snippets/numbers/release.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - const phoneNumber = 'YOUR_phone_number_to_be_released'; - - /** @type {Numbers.ReleaseNumberRequestData} */ - const requestData = { - phoneNumber, - }; - - const response = await numbersService.activeNumber.release(requestData); - - console.log(`Released number:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/numbers/rent-any.js b/snippets/numbers/rent-any.js deleted file mode 100644 index 3ef7ebd..0000000 --- a/snippets/numbers/rent-any.js +++ /dev/null @@ -1,40 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - const servicePlanId = 'YOUR_service_plan_id'; - const appId = 'YOUR_app_id'; - const callbackUrl = 'YOUR_callback_url'; - - /** @type {Numbers.RentAnyNumberRequestSmsConfiguration} */ - const smsConfiguration = { - servicePlanId, - }; - - /** @type {Numbers.RentAnyNumberRequestVoiceConfiguration} */ - const voiceConfiguration = { - appId, - }; - - /** @type {Numbers.RentAnyNumberRequestData} */ - const requestData = { - rentAnyNumberRequestBody: { - regionCode: 'US', - type: 'LOCAL', - numberPattern: { - pattern: '+1781', - searchPattern: 'START', - }, - smsConfiguration, - voiceConfiguration, - callbackUrl, - }, - }; - - const response = await numbersService.availableNumber.rentAny(requestData); - - console.log(`Rented number:\n${JSON.stringify(response, null, 2)}`); - -}; diff --git a/snippets/numbers/rent.js b/snippets/numbers/rent.js deleted file mode 100644 index ef6eaf1..0000000 --- a/snippets/numbers/rent.js +++ /dev/null @@ -1,25 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - // Available numbers list can be retrieved by using list() function from available service, see: - // https://developers.sinch.com/docs/numbers/getting-started/node-sdk/searchavailable/ - const phoneNumber = 'available_phone_number_to_be_rented'; - const servicePlanId = 'YOUR_service_plan_id'; - - /** @type {Numbers.RentNumberRequestData} */ - const requestData = { - phoneNumber, - rentNumberRequestBody: { - smsConfiguration: { - servicePlanId, - }, - }, - }; - - const response = await numbersService.availableNumber.rent(requestData); - - console.log(`Rented number:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/numbers/search-for-available-numbers.js b/snippets/numbers/search-for-available-numbers.js deleted file mode 100644 index 53bccc0..0000000 --- a/snippets/numbers/search-for-available-numbers.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - /** @type {Numbers.ListAvailableNumbersRequestData} */ - const requestData = { - regionCode: 'US', - type: 'LOCAL', - capabilities: ['SMS', 'VOICE'], - }; - - const response = await numbersService.availableNumber.list(requestData); - - console.log(`Available numbers to rent:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/numbers/update.js b/snippets/numbers/update.js deleted file mode 100644 index 5bbc842..0000000 --- a/snippets/numbers/update.js +++ /dev/null @@ -1,29 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Numbers, NumbersService } from '@sinch/sdk-core'; - -/** @param {NumbersService} numbersService */ -export const execute = async (numbersService) => { - - const phoneNumber = 'YOUR_phone_number_to_be_updated'; - const appId = 'YOUR_app_id'; - const displayName = 'Updated from Sinch Node.js SDK'; - - /** @type {Numbers.VoiceConfiguration} */ - const voiceConfiguration= { - appId, - type: 'RTC', - }; - - /** @type {Numbers.UpdateActiveNumberRequestData} */ - const requestData = { - phoneNumber, - updateActiveNumberRequestBody: { - displayName, - voiceConfiguration, - }, - }; - - const response = await numbersService.activeNumber.update(requestData); - - console.log(`Updated number:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/batches/cancel.js b/snippets/sms/batches/cancel.js deleted file mode 100644 index ffab300..0000000 --- a/snippets/sms/batches/cancel.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const batchId = 'the_batch_id_to_cancel'; - - /** @type {Sms.CancelBatchMessageRequestData} */ - const requestData= { - batch_id: batchId, - }; - - const response = await smsService.batches.cancel(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/batches/delivery-feedback.js b/snippets/sms/batches/delivery-feedback.js deleted file mode 100644 index b0fdcf1..0000000 --- a/snippets/sms/batches/delivery-feedback.js +++ /dev/null @@ -1,23 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const batchId = 'the_batch_id'; - const recipientPhoneNumber = 'YOUR_recipient_phone_number'; - - /** @type {Sms.DeliveryFeedbackRequestData} */ - const requestData= { - batch_id: batchId, - deliveryFeedbackRequestBody: { - recipients: [ - recipientPhoneNumber, - ], - }, - }; - - await smsService.batches.sendDeliveryFeedback(requestData); - - console.log('The delivery feedback has been sent'); -}; diff --git a/snippets/sms/batches/dry-run.js b/snippets/sms/batches/dry-run.js deleted file mode 100644 index 9a1da3b..0000000 --- a/snippets/sms/batches/dry-run.js +++ /dev/null @@ -1,26 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const from = 'YOUR_sinch_phone_number'; - const recipient = 'YOUR_recipient_phone_number'; - const body = 'This is a test SMS message using the Sinch Node.js SDK.'; - - /** @type {Sms.DryRunRequestData} */ - const requestData= { - dryRunRequestBody: { - type: 'mt_text', - from, - to: [ - recipient, - ], - body, - }, - }; - - const response = await smsService.batches.dryRun(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/batches/get.js b/snippets/sms/batches/get.js deleted file mode 100644 index d631412..0000000 --- a/snippets/sms/batches/get.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const batchId = 'the_batch_id'; - - /** @type {Sms.GetBatchMessageRequestData} */ - const requestData= { - batch_id: batchId, - }; - - const response = await smsService.batches.get(requestData); - - console.log(`Batch details:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/batches/list-auto.js b/snippets/sms/batches/list-auto.js deleted file mode 100644 index cf45540..0000000 --- a/snippets/sms/batches/list-auto.js +++ /dev/null @@ -1,23 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const oneWeekAgo = new Date(); - oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); - oneWeekAgo.setHours(0, 0, 0, 0); - - /** @type {Sms.ListBatchesRequestData} */ - const requestData= { - start_date: oneWeekAgo, - page_size: 2, - }; - - console.log('List of batches printed one by one:'); - // Use the iterator and fetch data from all the pages automatically - for await (const batch of smsService.batches.list(requestData)) { - console.log(JSON.stringify(batch, null, 2)); - } - -}; diff --git a/snippets/sms/batches/list.js b/snippets/sms/batches/list.js deleted file mode 100644 index 6282803..0000000 --- a/snippets/sms/batches/list.js +++ /dev/null @@ -1,30 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const oneWeekAgo = new Date(); - oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); - oneWeekAgo.setHours(0, 0, 0, 0); - - /** @type {Sms.ListBatchesRequestData} */ - const requestData= { - start_date: oneWeekAgo, - page_size: 2, - }; - - /** @type {Sms.SendSMSResponse[]} */ - const batchesList = []; - // Fetch a page of Batches - let response = await smsService.batches.list(requestData); - // Fetch the data page by page manually - while (response.hasNextPage) { - batchesList.push(...response.data); - response = await response.nextPage(); - } - batchesList.push(...response.data); - - console.log(`Full list of batches printed at once (length = ${batchesList.length}):\n${JSON.stringify(batchesList, null, 2)}`); - -}; diff --git a/snippets/sms/batches/replace.js b/snippets/sms/batches/replace.js deleted file mode 100644 index 9b801a0..0000000 --- a/snippets/sms/batches/replace.js +++ /dev/null @@ -1,29 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService, textToHex } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const from = 'YOUR_sinch_phone_number'; - const recipient = 'YOUR_recipient_phone_number'; - const batchId = 'the_batch_id_scheduled_in_the_future'; - - /** @type {Sms.ReplaceBatchMessageRequestData} */ - const requestData= { - batch_id: batchId, - replaceBatchMessageRequestBody: { - type: 'mt_binary', - from, - to: [ - recipient, - ], - udh: textToHex('UserDataHeader'), - body: btoa('This is a replaced message'), - client_reference: 'Sinch Node.js SDK snippet', - }, - }; - - const response = await smsService.batches.replace(requestData); - - console.log(`Replaced batch:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/batches/send-binary-message.js b/snippets/sms/batches/send-binary-message.js deleted file mode 100644 index 2cffc9a..0000000 --- a/snippets/sms/batches/send-binary-message.js +++ /dev/null @@ -1,27 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService, textToHex } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const from = 'YOUR_sinch_phone_number'; - const recipient = 'YOUR_recipient_phone_number'; - - /** @type {Sms.SendBinarySMSRequestData} */ - const requestData= { - sendSMSRequestBody: { - type: 'mt_binary', - from, - to: [ - recipient, - ], - body: 'SGVsbG8sIHRoaXMgaXMgYSBTTVMgZnJvbSBTaW5jaA==', - udh: textToHex('UserDataHeader'), - delivery_report: 'full', - }, - }; - - const response = await smsService.batches.sendBinaryMessage(requestData); - - console.log(`Response for binary batch:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/batches/send-media-message.js b/snippets/sms/batches/send-media-message.js deleted file mode 100644 index 3b3a69c..0000000 --- a/snippets/sms/batches/send-media-message.js +++ /dev/null @@ -1,31 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const from = 'YOUR_sinch_phone_number'; - const recipient = 'YOUR_recipient_phone_number'; - - /** @type {Sms.SendMediaSMSRequestData} */ - const requestData= { - sendSMSRequestBody: { - type: 'mt_media', - from, - to: [ - recipient, - ], - body: { - url: 'https://media.body.url', - message: 'Text message coming along with the media file', - }, - delivery_report: 'full', - strict_validation: true, - }, - }; - - const response = await smsService.batches.sendMediaMessage(requestData); - - console.log(`Response for MMS batch:\n${JSON.stringify(response, null, 2)}`); -}; - diff --git a/snippets/sms/batches/send-text-message.js b/snippets/sms/batches/send-text-message.js deleted file mode 100644 index c1dfbd0..0000000 --- a/snippets/sms/batches/send-text-message.js +++ /dev/null @@ -1,31 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const from = 'YOUR_sinch_phone_number'; - const recipient = 'YOUR_recipient_phone_number'; - - /** @type {Sms.SendTextSMSRequestData} */ - const requestData= { - sendSMSRequestBody: { - type: 'mt_text', - from, - to: [ - recipient, - ], - body: 'Hi ${name}!', - parameters: { - name: { - [recipient]: 'John', - default: 'there', - }, - }, - }, - }; - - const response = await smsService.batches.sendTextMessage(requestData); - - console.log(`Response for SMS batch:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/batches/update.js b/snippets/sms/batches/update.js deleted file mode 100644 index 403a2d7..0000000 --- a/snippets/sms/batches/update.js +++ /dev/null @@ -1,24 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const batchId = 'the_batch_id_scheduled_in_the_future'; - const from = 'YOUR_sinch_phone_number'; - - /** @type {Sms.UpdateBatchMessageRequestData} */ - const requestData= { - batch_id: batchId, - updateBatchMessageRequestBody: { - type: 'mt_text', - from, - body: 'Hi ${name}! This is an updated message', - delivery_report: 'per_recipient', - }, - }; - - const response = await smsService.batches.update(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/delivery-reports/get-by-batch-id.js b/snippets/sms/delivery-reports/get-by-batch-id.js deleted file mode 100644 index 24c1dcc..0000000 --- a/snippets/sms/delivery-reports/get-by-batch-id.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const batchId = 'the_batch_id'; - - /** @type {Sms.GetDeliveryReportByBatchIdRequestData} */ - const requestData= { - batch_id: batchId, - }; - - const response = await smsService.deliveryReports.get(requestData); - - console.log(`Delivery report:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/delivery-reports/get-for-number.js b/snippets/sms/delivery-reports/get-for-number.js deleted file mode 100644 index 5c1281d..0000000 --- a/snippets/sms/delivery-reports/get-for-number.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const batchId = 'the_batch_id'; - const recipient = 'YOUR_recipient_phone_number'; - - /** @type {Sms.GetDeliveryReportByPhoneNumberRequestData} */ - const requestData= { - batch_id: batchId, - recipient_msisdn: recipient, - }; - - const response = await smsService.deliveryReports.getForNumber(requestData); - - console.log(`Recipient delivery report:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/delivery-reports/list-auto.js b/snippets/sms/delivery-reports/list-auto.js deleted file mode 100644 index b622ca4..0000000 --- a/snippets/sms/delivery-reports/list-auto.js +++ /dev/null @@ -1,22 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const oneWeekAgo = new Date(); - oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); - oneWeekAgo.setHours(0, 0, 0, 0); - - /** @type {Sms.ListDeliveryReportsRequestData} */ - const requestData= { - start_date: oneWeekAgo, - }; - - console.log('List of delivery reports printed one by one:'); - // Use the iterator and fetch data from all the pages automatically - for await (const deliveryReport of smsService.deliveryReports.list(requestData)) { - console.log(JSON.stringify(deliveryReport, null, 2)); - } - -}; diff --git a/snippets/sms/delivery-reports/list.js b/snippets/sms/delivery-reports/list.js deleted file mode 100644 index c4cc2e3..0000000 --- a/snippets/sms/delivery-reports/list.js +++ /dev/null @@ -1,29 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const oneWeekAgo = new Date(); - oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); - oneWeekAgo.setHours(0, 0, 0, 0); - - /** @type {Sms.ListDeliveryReportsRequestData} */ - const requestData= { - start_date: oneWeekAgo, - }; - - /** @type {Sms.RecipientDeliveryReport[]} */ - const deliveryReportsList = []; - // Fetch a page of Delivery Reports - let response = await smsService.deliveryReports.list(requestData); - // Fetch the data page by page manually - while (response.hasNextPage) { - deliveryReportsList.push(...response.data); - response = await response.nextPage(); - } - deliveryReportsList.push(...response.data); - - console.log(`Full list of delivery reports printed at once (length = ${deliveryReportsList.length}):\n${JSON.stringify(deliveryReportsList, null, 2)}`); - -}; diff --git a/snippets/sms/groups/create.js b/snippets/sms/groups/create.js deleted file mode 100644 index 6f5b23c..0000000 --- a/snippets/sms/groups/create.js +++ /dev/null @@ -1,27 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const name = 'YOUR_group_name'; - const member1 = 'YOUR_recipient_1_phone_number'; - const member2 = 'YOUR_recipient_2_phone_number'; - const member3 = 'YOUR_recipient_3_phone_number'; - - /** @type {Sms.CreateGroupRequestData} */ - const requestData= { - createGroupRequestBody: { - name, - members: [ - member1, - member2, - member3, - ], - }, - }; - - const response = await smsService.groups.create(requestData); - - console.log(`Created group:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/groups/delete.js b/snippets/sms/groups/delete.js deleted file mode 100644 index d91cf90..0000000 --- a/snippets/sms/groups/delete.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const groupId = 'YOUR_group_id'; - - /** @type {Sms.DeleteGroupRequestData} */ - const requestData= { - group_id: groupId, - }; - - await smsService.groups.delete(requestData); - - console.log('The group has been deleted.'); -}; diff --git a/snippets/sms/groups/get.js b/snippets/sms/groups/get.js deleted file mode 100644 index 61fbeeb..0000000 --- a/snippets/sms/groups/get.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const groupId = 'YOUR_group_id'; - - /** @type {Sms.GetGroupRequestData} */ - const requestData= { - group_id: groupId, - }; - - const response = await smsService.groups.get(requestData); - - console.log(`Group details:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/groups/list-auto.js b/snippets/sms/groups/list-auto.js deleted file mode 100644 index 2cdbfcb..0000000 --- a/snippets/sms/groups/list-auto.js +++ /dev/null @@ -1,20 +0,0 @@ -// @ts-check - -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - /** @type {Sms.ListGroupsRequestData} */ - const requestData= { - page_size: 2, - }; - - console.log('List of groups printed one by one:'); - // Use the iterator and fetch data from all the pages automatically - for await (const group of smsService.groups.list(requestData)) { - console.log(JSON.stringify(group, null, 2)); - } - -}; diff --git a/snippets/sms/groups/list-members.js b/snippets/sms/groups/list-members.js deleted file mode 100644 index 52be06e..0000000 --- a/snippets/sms/groups/list-members.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const groupId = 'YOUR_group_id'; - - /** @type {Sms.ListMembersRequestData} */ - const requestData= { - group_id: groupId, - }; - - const response = await smsService.groups.listMembers(requestData); - - console.log(`List of phone numbers in the group:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/groups/list.js b/snippets/sms/groups/list.js deleted file mode 100644 index 3d2016a..0000000 --- a/snippets/sms/groups/list.js +++ /dev/null @@ -1,27 +0,0 @@ -// @ts-check - -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - /** @type {Sms.ListGroupsRequestData} */ - const requestData= { - page_size: 2, - }; - - /** @type {Sms.GroupResponse[]} */ - const groupsList = []; - // Fetch a page of Groups - let response = await smsService.groups.list(requestData); - // Fetch the data page by page manually - while (response.hasNextPage) { - groupsList.push(...response.data); - response = await response.nextPage(); - } - groupsList.push(...response.data); - - console.log(`Full list of groups printed at once (length = ${groupsList.length}):\n${JSON.stringify(groupsList, null, 2)}`); - -}; diff --git a/snippets/sms/groups/replace.js b/snippets/sms/groups/replace.js deleted file mode 100644 index b6be605..0000000 --- a/snippets/sms/groups/replace.js +++ /dev/null @@ -1,25 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const groupId = 'YOUR_group_id'; - const member1 = 'YOUR_recipient_1_phone_number'; - const member2 = 'YOUR_recipient_2_phone_number'; - - /** @type {Sms.ReplaceGroupRequestData} */ - const requestData= { - group_id: groupId, - replaceGroupRequestBody: { - members: [ - member1, - member2, - ], - }, - }; - - const response = await smsService.groups.replace(requestData); - - console.log(`Replaced group:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/groups/update.js b/snippets/sms/groups/update.js deleted file mode 100644 index 6ee64aa..0000000 --- a/snippets/sms/groups/update.js +++ /dev/null @@ -1,29 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const groupId = 'YOUR_group_id'; - const name= 'YOUR_updated_group_name'; - const member1 = 'YOUR_recipient_1_phone_number'; - const member2 = 'YOUR_recipient_2_phone_number'; - - /** @type {Sms.UpdateGroupRequestData} */ - const requestData= { - group_id: groupId, - updateGroupRequestBody: { - name, - add: [ - member1, - ], - remove: [ - member2, - ], - }, - }; - - const response = await smsService.groups.update(requestData); - - console.log(`Updated group:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/inbounds/get.js b/snippets/sms/inbounds/get.js deleted file mode 100644 index 472b7d1..0000000 --- a/snippets/sms/inbounds/get.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const inboundId = 'the_inbound_id'; - - /** @type {Sms.GetInboundMessageRequestData} */ - const requestData= { - inbound_id: inboundId, - }; - - const response = await smsService.inbounds.get(requestData); - - console.log(`Inbound message:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/sms/inbounds/list-auto.js b/snippets/sms/inbounds/list-auto.js deleted file mode 100644 index 56acb6e..0000000 --- a/snippets/sms/inbounds/list-auto.js +++ /dev/null @@ -1,24 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const oneWeekAgo = new Date(); - oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); - oneWeekAgo.setHours(0, 0, 0, 0); - const recipient = 'YOUR_recipient_phone_number'; - - /** @type {Sms.ListInboundMessagesRequestData} */ - const requestData= { - start_date: oneWeekAgo, - to: recipient, - }; - - console.log('List of inbound messages printed one by one:'); - // Use the iterator and fetch data from all the pages automatically - for await (const inboundMessage of smsService.inbounds.list(requestData)) { - console.log(JSON.stringify(inboundMessage, null, 2)); - } - -}; diff --git a/snippets/sms/inbounds/list.js b/snippets/sms/inbounds/list.js deleted file mode 100644 index 18fdf65..0000000 --- a/snippets/sms/inbounds/list.js +++ /dev/null @@ -1,31 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const oneWeekAgo = new Date(); - oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); - oneWeekAgo.setHours(0, 0, 0, 0); - const recipient = 'YOUR_recipient_phone_number'; - - /** @type {Sms.ListInboundMessagesRequestData} */ - const requestData= { - start_date: oneWeekAgo, - to: recipient, - }; - - /** @type {Sms.InboundMessageResponse[]} */ - const inboundMessagesList = []; - // Fetch a page of Inbound Messages - let response = await smsService.inbounds.list(requestData); - // Fetch the data page by page manually - while (response.hasNextPage) { - inboundMessagesList.push(...response.data); - response = await response.nextPage(); - } - inboundMessagesList.push(...response.data); - - console.log(`Full list of inbound messages printed at once (length = ${inboundMessagesList.length}):\n${JSON.stringify(inboundMessagesList, null, 2)}`); - -}; diff --git a/snippets/sms/send.js b/snippets/sms/send.js deleted file mode 100644 index ba2ee12..0000000 --- a/snippets/sms/send.js +++ /dev/null @@ -1,24 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Sms, SmsService } from '@sinch/sdk-core'; - -/** @param {SmsService} smsService */ -export const execute = async (smsService) => { - - const from = 'YOUR_sinch_phone_number'; - const recipient = 'YOUR_recipient_phone_number'; - const body = 'This is a test SMS message using the Sinch Node.js SDK.'; - - /** @type {Sms.SendSMSRequestData} */ - const requestData= { - sendSMSRequestBody: { - type: 'mt_text', - from, - to: [recipient], - body, - }, - }; - - const response = await smsService.batches.send(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/report-verification/report-flashcall-verification-by-id.js b/snippets/verification/report-verification/report-flashcall-verification-by-id.js deleted file mode 100644 index ec96b09..0000000 --- a/snippets/verification/report-verification/report-flashcall-verification-by-id.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const verificationID = 'the_verification_ID'; - const verificationCLI = 'the_phone_number_calling_for_verification'; - - /** @type {Verification.ReportFlashCallVerificationByIdRequestData} */ - const requestData = Verification.reportVerificationByIdHelper.buildFlashCallRequest( - verificationID, - verificationCLI, - ); - - const response = await verificationService.verifications.reportFlashCallById(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/report-verification/report-flashcall-verification-by-identity.js b/snippets/verification/report-verification/report-flashcall-verification-by-identity.js deleted file mode 100644 index f827e72..0000000 --- a/snippets/verification/report-verification/report-flashcall-verification-by-identity.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const phoneNumber = 'the_phone_number_to_verify'; - const verificationCLI = 'the_phone_number_calling_for_verification'; - - /** @type {Verification.ReportFlashCallVerificationByIdentityRequestData} */ - const requestData = Verification.reportVerificationByIdentityHelper.buildFlashCallRequest( - phoneNumber, - verificationCLI, - ); - - const response = await verificationService.verifications.reportFlashCallByIdentity(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/report-verification/report-phonecall-verification-by-id.js b/snippets/verification/report-verification/report-phonecall-verification-by-id.js deleted file mode 100644 index 93425a9..0000000 --- a/snippets/verification/report-verification/report-phonecall-verification-by-id.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const verificationID = 'the_verification_ID'; - const verificationCode = 'the_verification_code_received_by_phone_call'; - - /** @type {Verification.ReportCalloutVerificationByIdRequestData} */ - const requestData = Verification.reportVerificationByIdHelper.buildCalloutRequest( - verificationID, - verificationCode, - ); - - const response = await verificationService.verifications.reportCalloutById(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/report-verification/report-phonecall-verification-by-identity.js b/snippets/verification/report-verification/report-phonecall-verification-by-identity.js deleted file mode 100644 index aa79d10..0000000 --- a/snippets/verification/report-verification/report-phonecall-verification-by-identity.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const phoneNumber = 'the_phone_number_to_verify'; - const verificationCode = 'the_verification_code_received_by_phone_call'; - - /** @type {Verification.ReportCalloutVerificationByIdentityRequestData} */ - const requestData = Verification.reportVerificationByIdentityHelper.buildCalloutRequest( - phoneNumber, - verificationCode, - ); - - const response = await verificationService.verifications.reportCalloutByIdentity(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/report-verification/report-sms-verification-by-id.js b/snippets/verification/report-verification/report-sms-verification-by-id.js deleted file mode 100644 index 729b20b..0000000 --- a/snippets/verification/report-verification/report-sms-verification-by-id.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const verificationID = 'the_verification_ID'; - const verificationCode = 'the_verification_code_received_by_SMS'; - - /** @type {Verification.ReportSmsVerificationByIdRequestData} */ - const requestData = Verification.reportVerificationByIdHelper.buildSmsRequest( - verificationID, - verificationCode, - ); - - const response = await verificationService.verifications.reportSmsById(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/report-verification/report-sms-verification-by-identity.js b/snippets/verification/report-verification/report-sms-verification-by-identity.js deleted file mode 100644 index 9da1b56..0000000 --- a/snippets/verification/report-verification/report-sms-verification-by-identity.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const phoneNumber = 'the_phone_number_to_verify'; - const verificationCode = 'the_verification_code_received_by_SMS'; - - /** @type {Verification.ReportSmsVerificationByIdentityRequestData} */ - const requestData = Verification.reportVerificationByIdentityHelper.buildSmsRequest( - phoneNumber, - verificationCode, - ); - - const response = await verificationService.verifications.reportSmsByIdentity(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/start-verification/start-data-verification.js b/snippets/verification/start-verification/start-data-verification.js deleted file mode 100644 index c3863d7..0000000 --- a/snippets/verification/start-verification/start-data-verification.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const phoneNumber = 'the_phone_number_to_verify'; - const reference = 'the_verification_reference'; - - /** @type {Verification.StartSeamlessVerificationRequestData} */ - const requestData = Verification.startVerificationHelper.buildSeamlessRequest( - phoneNumber, - reference, - ); - - const response = await verificationService.verifications.startSeamless(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/start-verification/start-flashcall-verification.js b/snippets/verification/start-verification/start-flashcall-verification.js deleted file mode 100644 index e927126..0000000 --- a/snippets/verification/start-verification/start-flashcall-verification.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const phoneNumber = 'the_phone_number_to_verify'; - const reference = 'the_verification_reference'; - - /** @type {Verification.StartFlashCallVerificationRequestData} */ - const requestData = Verification.startVerificationHelper.buildFlashCallRequest( - phoneNumber, - reference, - ); - - const response = await verificationService.verifications.startFlashCall(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/start-verification/start-phonecall-verification.js b/snippets/verification/start-verification/start-phonecall-verification.js deleted file mode 100644 index 2dd9637..0000000 --- a/snippets/verification/start-verification/start-phonecall-verification.js +++ /dev/null @@ -1,20 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const phoneNumber = 'the_phone_number_to_verify'; - const reference = 'the_verification_reference'; - - /** @type {Verification.StartCalloutVerificationRequestData} */ - const requestData = Verification.startVerificationHelper.buildCalloutRequest( - phoneNumber, - reference, - 'fr-FR', - ); - - const response = await verificationService.verifications.startCallout(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/start-verification/start-sms-verification.js b/snippets/verification/start-verification/start-sms-verification.js deleted file mode 100644 index f71b554..0000000 --- a/snippets/verification/start-verification/start-sms-verification.js +++ /dev/null @@ -1,22 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const phoneNumber = 'the_phone_number_to_verify'; - const reference = 'the_verification_reference'; - - /** @type {Verification.StartSmsVerificationRequestData} */ - const requestData = Verification.startVerificationHelper.buildSmsRequest( - phoneNumber, - reference, - { - codeType: 'Alphanumeric', - }, - ); - - const response = await verificationService.verifications.startSms(requestData); - - console.log(`Response:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/verification-status/verification-by-id.js b/snippets/verification/verification-status/verification-by-id.js deleted file mode 100644 index b30c214..0000000 --- a/snippets/verification/verification-status/verification-by-id.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const verificationID = 'the_verification_ID'; - - /** @type {Verification.VerificationStatusByIdRequestData} */ - const requestData = { - id: verificationID, - }; - - const response = await verificationService.verificationStatus.getById(requestData); - - console.log(`Verification status:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/verification-status/verification-by-identity.js b/snippets/verification/verification-status/verification-by-identity.js deleted file mode 100644 index 75f0cf8..0000000 --- a/snippets/verification/verification-status/verification-by-identity.js +++ /dev/null @@ -1,18 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const phoneNumber = 'the_phone_number_to_verify'; - - /** @type {Verification.VerificationStatusByIdentityRequestData} */ - const requestData = { - method: 'sms', - endpoint: phoneNumber, - }; - - const response = await verificationService.verificationStatus.getByIdentity(requestData); - - console.log(`Verification status:\n${JSON.stringify(response, null, 2)}`); -}; diff --git a/snippets/verification/verification-status/verification-by-reference.js b/snippets/verification/verification-status/verification-by-reference.js deleted file mode 100644 index ebb30e5..0000000 --- a/snippets/verification/verification-status/verification-by-reference.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line no-unused-vars -import { Verification, VerificationService } from '@sinch/sdk-core'; - -/** @param {VerificationService} verificationService */ -export const execute = async (verificationService) => { - - const verificationReference = 'the_verification_reference'; - - /** @type {Verification.VerificationStatusByReferenceRequestData} */ - const requestData = { - reference: verificationReference, - }; - - const response = await verificationService.verificationStatus.getByReference(requestData); - - console.log(`Verification status:\n${JSON.stringify(response, null, 2)}`); -}; From e2d9abff8b1e7517f68f837d7a74e68b22216c99 Mon Sep 17 00:00:00 2001 From: Antoine SEIN <142824551+asein-sinch@users.noreply.github.com> Date: Mon, 23 Sep 2024 15:31:32 +0200 Subject: [PATCH 6/6] Rename snippet files --- .../applications/{assign-numbers.js => assign-numbers/snippet.js} | 0 .../{get-callback-urls.js => get-callback-urls/snippet.js} | 0 .../applications/{list-numbers.js => list-numbers/snippet.js} | 0 .../applications/{query-number.js => query-number/snippet.js} | 0 .../{unassign-number.js => unassign-number/snippet.js} | 0 .../{update-callback-urls.js => update-callback-urls/snippet.js} | 0 snippets/voice/callouts/{conference.js => conference/snippet.js} | 0 snippets/voice/callouts/{custom.js => custom/snippet.js} | 0 snippets/voice/callouts/{tts.js => tts/snippet.js} | 0 snippets/voice/calls/{get.js => get/snippet.js} | 0 .../{manage-with-call-leg.js => manage-with-call-leg/snippet.js} | 0 snippets/voice/calls/{update.js => update/snippet.js} | 0 snippets/voice/conferences/{get.js => get/snippet.js} | 0 snippets/voice/conferences/{kick-all.js => kick-all/snippet.js} | 0 .../{kick-participant.js => kick-participant/snippet.js} | 0 .../{manage-participant.js => manage-participant/snippet.js} | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename snippets/voice/applications/{assign-numbers.js => assign-numbers/snippet.js} (100%) rename snippets/voice/applications/{get-callback-urls.js => get-callback-urls/snippet.js} (100%) rename snippets/voice/applications/{list-numbers.js => list-numbers/snippet.js} (100%) rename snippets/voice/applications/{query-number.js => query-number/snippet.js} (100%) rename snippets/voice/applications/{unassign-number.js => unassign-number/snippet.js} (100%) rename snippets/voice/applications/{update-callback-urls.js => update-callback-urls/snippet.js} (100%) rename snippets/voice/callouts/{conference.js => conference/snippet.js} (100%) rename snippets/voice/callouts/{custom.js => custom/snippet.js} (100%) rename snippets/voice/callouts/{tts.js => tts/snippet.js} (100%) rename snippets/voice/calls/{get.js => get/snippet.js} (100%) rename snippets/voice/calls/{manage-with-call-leg.js => manage-with-call-leg/snippet.js} (100%) rename snippets/voice/calls/{update.js => update/snippet.js} (100%) rename snippets/voice/conferences/{get.js => get/snippet.js} (100%) rename snippets/voice/conferences/{kick-all.js => kick-all/snippet.js} (100%) rename snippets/voice/conferences/{kick-participant.js => kick-participant/snippet.js} (100%) rename snippets/voice/conferences/{manage-participant.js => manage-participant/snippet.js} (100%) diff --git a/snippets/voice/applications/assign-numbers.js b/snippets/voice/applications/assign-numbers/snippet.js similarity index 100% rename from snippets/voice/applications/assign-numbers.js rename to snippets/voice/applications/assign-numbers/snippet.js diff --git a/snippets/voice/applications/get-callback-urls.js b/snippets/voice/applications/get-callback-urls/snippet.js similarity index 100% rename from snippets/voice/applications/get-callback-urls.js rename to snippets/voice/applications/get-callback-urls/snippet.js diff --git a/snippets/voice/applications/list-numbers.js b/snippets/voice/applications/list-numbers/snippet.js similarity index 100% rename from snippets/voice/applications/list-numbers.js rename to snippets/voice/applications/list-numbers/snippet.js diff --git a/snippets/voice/applications/query-number.js b/snippets/voice/applications/query-number/snippet.js similarity index 100% rename from snippets/voice/applications/query-number.js rename to snippets/voice/applications/query-number/snippet.js diff --git a/snippets/voice/applications/unassign-number.js b/snippets/voice/applications/unassign-number/snippet.js similarity index 100% rename from snippets/voice/applications/unassign-number.js rename to snippets/voice/applications/unassign-number/snippet.js diff --git a/snippets/voice/applications/update-callback-urls.js b/snippets/voice/applications/update-callback-urls/snippet.js similarity index 100% rename from snippets/voice/applications/update-callback-urls.js rename to snippets/voice/applications/update-callback-urls/snippet.js diff --git a/snippets/voice/callouts/conference.js b/snippets/voice/callouts/conference/snippet.js similarity index 100% rename from snippets/voice/callouts/conference.js rename to snippets/voice/callouts/conference/snippet.js diff --git a/snippets/voice/callouts/custom.js b/snippets/voice/callouts/custom/snippet.js similarity index 100% rename from snippets/voice/callouts/custom.js rename to snippets/voice/callouts/custom/snippet.js diff --git a/snippets/voice/callouts/tts.js b/snippets/voice/callouts/tts/snippet.js similarity index 100% rename from snippets/voice/callouts/tts.js rename to snippets/voice/callouts/tts/snippet.js diff --git a/snippets/voice/calls/get.js b/snippets/voice/calls/get/snippet.js similarity index 100% rename from snippets/voice/calls/get.js rename to snippets/voice/calls/get/snippet.js diff --git a/snippets/voice/calls/manage-with-call-leg.js b/snippets/voice/calls/manage-with-call-leg/snippet.js similarity index 100% rename from snippets/voice/calls/manage-with-call-leg.js rename to snippets/voice/calls/manage-with-call-leg/snippet.js diff --git a/snippets/voice/calls/update.js b/snippets/voice/calls/update/snippet.js similarity index 100% rename from snippets/voice/calls/update.js rename to snippets/voice/calls/update/snippet.js diff --git a/snippets/voice/conferences/get.js b/snippets/voice/conferences/get/snippet.js similarity index 100% rename from snippets/voice/conferences/get.js rename to snippets/voice/conferences/get/snippet.js diff --git a/snippets/voice/conferences/kick-all.js b/snippets/voice/conferences/kick-all/snippet.js similarity index 100% rename from snippets/voice/conferences/kick-all.js rename to snippets/voice/conferences/kick-all/snippet.js diff --git a/snippets/voice/conferences/kick-participant.js b/snippets/voice/conferences/kick-participant/snippet.js similarity index 100% rename from snippets/voice/conferences/kick-participant.js rename to snippets/voice/conferences/kick-participant/snippet.js diff --git a/snippets/voice/conferences/manage-participant.js b/snippets/voice/conferences/manage-participant/snippet.js similarity index 100% rename from snippets/voice/conferences/manage-participant.js rename to snippets/voice/conferences/manage-participant/snippet.js