From 36c74ce4a5566d41d23af12359a6e3b98b07d17c Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Tue, 11 Jun 2024 15:59:52 +0530 Subject: [PATCH 01/11] feat: add better error typings --- .../src/helpers/channel-provider.ts | 52 +++++++++++++----- .../src/helpers/response-handler.ts | 53 +++++++++++++++---- libs/iota-browser/src/validators/error.ts | 24 +++++++++ libs/iota-browser/src/validators/events.ts | 9 +++- 4 files changed, 114 insertions(+), 24 deletions(-) create mode 100644 libs/iota-browser/src/validators/error.ts diff --git a/libs/iota-browser/src/helpers/channel-provider.ts b/libs/iota-browser/src/helpers/channel-provider.ts index c9d8030b9..ae5e45c72 100644 --- a/libs/iota-browser/src/helpers/channel-provider.ts +++ b/libs/iota-browser/src/helpers/channel-provider.ts @@ -5,9 +5,20 @@ import { iot, mqtt5 } from 'aws-iot-device-sdk-v2/dist/browser' import * as jose from 'jose' import { v4 as uuidv4 } from 'uuid' import { + ErrorEventSchema, + ErrorEvent, + EventTypes, PrepareRequestEvent, + SignedRequestEvent, SignedRequestEventSchema, + SignedRequestJWT, + SignedRequestJWTSchema, } from '../validators/events' +import { + getErrorMessage, + getUnexpectedErrorMessage, + ErrorCode, +} from 'src/validators/error' const DEFAULT_IOT_ENDPOINT = 'a3sq1vuw0cw9an-ats.iot.ap-southeast-1.amazonaws.com' @@ -178,27 +189,44 @@ export class ChannelProvider { ) try { const event = JSON.parse(raw_data) - if ( - event.eventType === 'signedRequest' && - correlationId === event.correlationId - ) { - // TODO handle Zod errors gracefully - const signedRequest = SignedRequestEventSchema.parse(event) - const claims = jose.decodeJwt(signedRequest.data.jwt) - // TODO Zod validate JWT - if (!claims.client_id && typeof claims.client_id === 'string') { - reject(new Error('Unexpected request claims received')) + if (correlationId !== event.correlationId) { + return + } + if (event.eventType === EventTypes.SignedRequest) { + let signedRequest: SignedRequestEvent, + signedRequestJWT: SignedRequestJWT + try { + signedRequest = SignedRequestEventSchema.parse(event) + } catch (e) { + throw Error( + getUnexpectedErrorMessage(ErrorCode.SIGNED_REQUEST_EVENT), + ) + } + try { + const claims = jose.decodeJwt(signedRequest.data.jwt) + signedRequestJWT = SignedRequestJWTSchema.parse(claims) + } catch (e) { + throw Error( + getUnexpectedErrorMessage(ErrorCode.SIGNED_REQUEST_JWT), + ) } - const client_id = claims.client_id as string const request: IotaChannelRequest = { correlationId: signedRequest.correlationId, payload: { request: signedRequest.data.jwt, - client_id, + client_id: signedRequestJWT.client_id, }, } resolve(request) + } else if (event.eventType === EventTypes.Error) { + let errorEvent: ErrorEvent + try { + errorEvent = ErrorEventSchema.parse(event) + } catch (e) { + throw Error(getUnexpectedErrorMessage(ErrorCode.ERROR_EVENT)) + } + throw Error(getErrorMessage(errorEvent)) } } catch (error) { reject(error) diff --git a/libs/iota-browser/src/helpers/response-handler.ts b/libs/iota-browser/src/helpers/response-handler.ts index d89b441ec..39956877c 100644 --- a/libs/iota-browser/src/helpers/response-handler.ts +++ b/libs/iota-browser/src/helpers/response-handler.ts @@ -1,11 +1,20 @@ import { toUtf8 } from '@aws-sdk/util-utf8-browser' import { mqtt5 } from 'aws-iot-device-sdk-v2/dist/browser' import { + ErrorEventSchema, + EventTypes, + ErrorEvent, ResponseCallbackEventSchema, VerifiablePresentation, VerifiablePresentationSchema, + ResponseCallbackEvent, } from '../validators/events' import { ChannelProvider } from './channel-provider' +import { + ErrorCode, + getErrorMessage, + getUnexpectedErrorMessage, +} from 'src/validators/error' export type IotaResponse = { correlationId: string @@ -39,16 +48,32 @@ export class ResponseHandler { try { const event = JSON.parse(raw_data) - if ( - event.eventType === 'response-callback' && - event.correlationId === correlationId - ) { - // TODO handle Zod errors gracefully - const responseCallback = - ResponseCallbackEventSchema.parse(event) - const vpToken = VerifiablePresentationSchema.parse( - JSON.parse(responseCallback.vpToken), - ) + if (correlationId !== event.correlationId) { + return + } + if (event.eventType === EventTypes.ResponseCallback) { + let responseCallback: ResponseCallbackEvent, + vpToken: VerifiablePresentation + try { + responseCallback = ResponseCallbackEventSchema.parse(event) + } catch (e) { + throw Error( + getUnexpectedErrorMessage( + ErrorCode.RESPONSE_CALLBACK_EVENT, + ), + ) + } + try { + vpToken = VerifiablePresentationSchema.parse( + JSON.parse(responseCallback.vpToken), + ) + } catch (e) { + throw Error( + getUnexpectedErrorMessage( + ErrorCode.VERIFIABLE_PRESENTATION_SCHEMA, + ), + ) + } const response: IotaResponse = { correlationId: responseCallback.correlationId, vpToken, @@ -57,6 +82,14 @@ export class ResponseHandler { responseCallback.presentationSubmission, } resolve(response) + } else if (event.eventType === EventTypes.Error) { + let errorEvent: ErrorEvent + try { + errorEvent = ErrorEventSchema.parse(event) + } catch (e) { + throw Error(getUnexpectedErrorMessage(ErrorCode.ERROR_EVENT)) + } + throw Error(getErrorMessage(errorEvent)) } } catch (error) { reject(error) diff --git a/libs/iota-browser/src/validators/error.ts b/libs/iota-browser/src/validators/error.ts new file mode 100644 index 000000000..81daa384e --- /dev/null +++ b/libs/iota-browser/src/validators/error.ts @@ -0,0 +1,24 @@ +import { ErrorEvent } from '../validators/events' + +export enum ErrorCode { + 'SIGNED_REQUEST_EVENT' = 'SignedRequestEvent', + 'SIGNED_REQUEST_JWT' = 'SignedRequestJWT', + 'RESPONSE_CALLBACK_EVENT' = 'ResponseCallbackEvent', + 'VERIFIABLE_PRESENTATION_SCHEMA' = 'VerifiablePresentationSchema', + 'ERROR_EVENT' = 'ErrorEvent', +} + +function getIssue(errorEvent: ErrorEvent) { + return errorEvent.error.details![0].issue && + errorEvent.error.details![0].issue.length > 0 + ? errorEvent.error.details![0].issue + : errorEvent.error.message +} + +export function getUnexpectedErrorMessage(code: ErrorCode) { + return `Unexpected error occured. Error Code: ${code} ` +} + +export function getErrorMessage(errorEvent: ErrorEvent): string { + return `Something went wrong. ${getIssue(errorEvent)}. Error Code ${errorEvent.error.httpStatusCode}` +} diff --git a/libs/iota-browser/src/validators/events.ts b/libs/iota-browser/src/validators/events.ts index 8a3b71c77..33ebff6cc 100644 --- a/libs/iota-browser/src/validators/events.ts +++ b/libs/iota-browser/src/validators/events.ts @@ -1,6 +1,6 @@ import { z } from 'zod' -const EventTypes = { +export const EventTypes = { PrepareRequest: 'prepareRequest', SignedRequest: 'signedRequest', ResponseCallback: 'response-callback', @@ -28,6 +28,11 @@ export const SignedRequestEventSchema = BaseEvent.extend({ }) export type SignedRequestEvent = z.infer +export const SignedRequestJWTSchema = z.object({ + client_id: z.string(), +}) +export type SignedRequestJWT = z.infer + // TODO full VP schema export const VerifiablePresentationSchema = z.object({ verifiableCredential: z.array(z.object({ credentialSubject: z.any() })), @@ -50,7 +55,7 @@ const ErrorDetailItem = z.object({ value: z.string().optional(), location: z.enum(ERROR_LOCATION).optional(), }) -const ErrorEventSchema = BaseEvent.extend({ +export const ErrorEventSchema = BaseEvent.extend({ eventType: z.literal(EventTypes.Error), error: z.object({ message: z.string(), From 20241483d9015f762008b2c37ee886c736614a6e Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Tue, 11 Jun 2024 16:03:19 +0530 Subject: [PATCH 02/11] fix: update package.lock --- package-lock.json | 254 ++++++++++++---------------------------------- 1 file changed, 67 insertions(+), 187 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d6ac75ce..cd5e7f420 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ }, "clients/typescript/credential-issuance-client": { "name": "@affinidi-tdk/credential-issuance-client", - "version": "1.0.0", + "version": "1.6.0", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -78,7 +78,7 @@ }, "clients/typescript/credential-verification-client": { "name": "@affinidi-tdk/credential-verification-client", - "version": "1.0.0", + "version": "1.6.0", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -114,7 +114,7 @@ }, "clients/typescript/iam-client": { "name": "@affinidi-tdk/iam-client", - "version": "1.0.0", + "version": "1.6.0", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -186,7 +186,7 @@ }, "clients/typescript/login-configuration-client": { "name": "@affinidi-tdk/login-configuration-client", - "version": "1.0.0", + "version": "1.8.0", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -222,7 +222,7 @@ }, "clients/typescript/wallets-client": { "name": "@affinidi-tdk/wallets-client", - "version": "1.0.0", + "version": "1.5.0", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -260,7 +260,6 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -282,14 +281,8 @@ "link": true }, "node_modules/@affinidi-tdk/iota-client": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@affinidi-tdk/iota-client/-/iota-client-1.1.0.tgz", - "integrity": "sha512-TSr/9UIq4o6n5wV1Zt/K7mwEPx8rw+ZnH3MogHGSpKmahzPulyC681YMBLvDbMw+JrEaG3M5ClNtav2oI8PwRQ==", - "dependencies": { - "axios": "^1.6.0", - "axios-retry": "^4.1.0", - "url": "^0.11.3" - } + "resolved": "clients/typescript/iota-client", + "link": true }, "node_modules/@affinidi-tdk/iota-utils": { "resolved": "packages/iota-utils", @@ -3769,7 +3762,6 @@ "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": { "eslint-visitor-keys": "^3.3.0" }, @@ -3784,7 +3776,6 @@ "version": "4.10.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -3793,7 +3784,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -3816,7 +3806,6 @@ "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", @@ -3832,7 +3821,6 @@ "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" @@ -3842,7 +3830,6 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -3856,14 +3843,12 @@ "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3875,7 +3860,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -3887,7 +3871,6 @@ "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, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -3896,7 +3879,6 @@ "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -3910,7 +3892,6 @@ "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" @@ -3920,7 +3901,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3932,7 +3912,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, "engines": { "node": ">=12.22" }, @@ -3944,8 +3923,7 @@ "node_modules/@humanwhocodes/object-schema": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -4401,7 +4379,6 @@ "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" @@ -4414,7 +4391,6 @@ "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" } @@ -4423,7 +4399,6 @@ "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" @@ -6800,7 +6775,6 @@ "version": "9.0.6", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz", "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -6815,7 +6789,6 @@ "version": "20.12.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", - "dev": true, "dependencies": { "undici-types": "~5.26.4" } @@ -6835,8 +6808,7 @@ "node_modules/@types/qs": { "version": "6.9.14", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", - "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", - "dev": true + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==" }, "node_modules/@types/semver": { "version": "7.5.8", @@ -6853,8 +6825,7 @@ "node_modules/@types/uuid": { "version": "9.0.8", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" }, "node_modules/@types/yargs": { "version": "17.0.32", @@ -7064,8 +7035,7 @@ "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 + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", @@ -7133,7 +7103,6 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -7145,7 +7114,6 @@ "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" } @@ -7237,7 +7205,6 @@ "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" } @@ -7246,7 +7213,6 @@ "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" }, @@ -7285,8 +7251,7 @@ "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 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/argv-formatter": { "version": "1.0.0", @@ -7304,7 +7269,6 @@ "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" } @@ -7567,8 +7531,7 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -7622,7 +7585,6 @@ "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" } @@ -7631,7 +7593,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -7749,7 +7710,6 @@ "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" } @@ -7826,7 +7786,6 @@ "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" @@ -7999,7 +7958,6 @@ "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" }, @@ -8010,8 +7968,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colorette": { "version": "2.0.20", @@ -8074,8 +8031,7 @@ "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 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/config-chain": { "version": "1.1.13", @@ -8324,7 +8280,6 @@ "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", @@ -8390,7 +8345,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -8461,8 +8415,7 @@ "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 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deep-map": { "version": "2.0.0", @@ -8646,7 +8599,6 @@ "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" }, @@ -8658,7 +8610,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -9057,7 +9008,6 @@ "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" }, @@ -9069,7 +9019,6 @@ "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -9166,7 +9115,6 @@ "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, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -9182,7 +9130,6 @@ "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" }, @@ -9194,7 +9141,6 @@ "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", @@ -9210,7 +9156,6 @@ "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" @@ -9220,7 +9165,6 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -9234,14 +9178,12 @@ "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9253,7 +9195,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -9280,7 +9221,6 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -9310,7 +9250,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -9322,7 +9261,6 @@ "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, "dependencies": { "estraverse": "^5.2.0" }, @@ -9334,7 +9272,6 @@ "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" } @@ -9343,7 +9280,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9424,8 +9360,7 @@ "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 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -9464,14 +9399,12 @@ "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 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "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 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-xml-parser": { "version": "4.2.5", @@ -9498,7 +9431,6 @@ "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" } @@ -9540,7 +9472,6 @@ "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, "dependencies": { "flat-cache": "^3.0.4" }, @@ -9573,7 +9504,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -9585,7 +9515,6 @@ "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, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -9625,7 +9554,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -9638,8 +9566,7 @@ "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 + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -9736,8 +9663,7 @@ "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 + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", @@ -9923,7 +9849,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9943,7 +9868,6 @@ "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, "dependencies": { "is-glob": "^4.0.3" }, @@ -9955,7 +9879,6 @@ "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" @@ -9965,7 +9888,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10010,7 +9932,6 @@ "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", @@ -10030,7 +9951,6 @@ "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", @@ -10046,7 +9966,6 @@ "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" }, @@ -10074,8 +9993,7 @@ "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "node_modules/handlebars": { "version": "4.7.8", @@ -10117,7 +10035,6 @@ "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" } @@ -10300,7 +10217,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, "engines": { "node": ">= 4" } @@ -10309,7 +10225,6 @@ "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" @@ -10325,7 +10240,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -10375,7 +10289,6 @@ "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" } @@ -10393,7 +10306,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -10402,8 +10314,7 @@ "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 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", @@ -10473,7 +10384,6 @@ "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" } @@ -10500,7 +10410,6 @@ "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" }, @@ -10521,7 +10430,6 @@ "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" } @@ -10548,7 +10456,6 @@ "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, "engines": { "node": ">=8" } @@ -10639,8 +10546,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/issue-parser": { "version": "6.0.0", @@ -11415,7 +11321,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -11859,8 +11764,7 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", @@ -11883,8 +11787,7 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -12009,7 +11912,6 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "dependencies": { "json-buffer": "3.0.1" } @@ -12045,7 +11947,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -12104,7 +12005,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -12202,8 +12102,7 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/lodash.mergewith": { "version": "4.6.2", @@ -12447,7 +12346,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -12456,7 +12354,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -12578,8 +12475,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/neo-async": { "version": "2.6.2", @@ -15379,7 +15275,6 @@ "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, "dependencies": { "wrappy": "1" } @@ -15429,7 +15324,6 @@ "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -15510,7 +15404,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -15525,7 +15418,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -15595,7 +15487,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -15631,7 +15522,6 @@ "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, "engines": { "node": ">=8" } @@ -15640,7 +15530,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -15649,7 +15538,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -15689,7 +15577,6 @@ "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" } @@ -15704,7 +15591,6 @@ "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" }, @@ -15878,7 +15764,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -15979,7 +15864,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "engines": { "node": ">=6" } @@ -16028,7 +15912,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -16431,7 +16314,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -16447,7 +16329,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -16462,7 +16343,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -17001,7 +16881,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -17013,7 +16892,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -17171,7 +17049,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } @@ -17463,7 +17340,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -17505,7 +17381,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -17539,7 +17414,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -17692,8 +17566,7 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/through": { "version": "2.3.8", @@ -17738,7 +17611,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -17777,7 +17649,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, "engines": { "node": ">=16" }, @@ -17909,7 +17780,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -17942,7 +17812,6 @@ "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17967,8 +17836,7 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -18083,7 +17951,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -18203,7 +18070,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -18246,8 +18112,7 @@ "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 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -18344,7 +18209,6 @@ "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, "engines": { "node": ">=10" }, @@ -18354,8 +18218,11 @@ }, "packages/auth-provider": { "name": "@affinidi-tdk/auth-provider", - "version": "1.2.0", + "version": "1.3.1", "bundleDependencies": [ + "@types/jsonwebtoken", + "@types/qs", + "@types/uuid", "axios", "jsonwebtoken", "qs", @@ -18363,15 +18230,15 @@ ], "license": "Apache-2.0", "dependencies": { + "@types/jsonwebtoken": "^9.0.3", + "@types/qs": "^6.9.8", + "@types/uuid": "^9.0.8", "axios": "^1.5.1", "jsonwebtoken": "^9.0.2", "qs": "^6.11.2", "uuid": "^9.0.1" }, "devDependencies": { - "@types/jsonwebtoken": "^9.0.3", - "@types/qs": "^6.9.8", - "@types/uuid": "^9.0.8", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", "eslint": "^8.57.0", @@ -18575,19 +18442,21 @@ }, "packages/iota-utils": { "name": "@affinidi-tdk/iota-utils", - "version": "0.1.2", + "version": "0.1.3", "bundleDependencies": [ "@affinidi-tdk/iota-client", - "@aws-sdk/client-cognito-identity" + "@aws-sdk/client-cognito-identity", + "@typescript-eslint/eslint-plugin", + "@typescript-eslint/parser" ], "license": "Apache-2.0", "dependencies": { "@affinidi-tdk/iota-client": "^1.1.0", - "@aws-sdk/client-cognito-identity": "^3.590.0" + "@aws-sdk/client-cognito-identity": "^3.590.0", + "@typescript-eslint/eslint-plugin": "^7.4.0", + "@typescript-eslint/parser": "^7.4.0" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.4.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", @@ -18596,6 +18465,17 @@ "typescript": "^5.2.2" } }, + "packages/iota-utils/node_modules/@affinidi-tdk/iota-client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@affinidi-tdk/iota-client/-/iota-client-1.2.0.tgz", + "integrity": "sha512-0zGRpJKSWejEz8KztGz/ZaAV+P1zSqpb5qMHvnSqOpiC4Y7LIH3ZxsU9qZTMjSLNkMZ+DfmRclr46XDa8wK74Q==", + "inBundle": true, + "dependencies": { + "axios": "^1.6.0", + "axios-retry": "^4.1.0", + "url": "^0.11.3" + } + }, "packages/iota-utils/node_modules/@aws-sdk/client-cognito-identity": { "version": "3.590.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.590.0.tgz", @@ -19665,7 +19545,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.11.0.tgz", "integrity": "sha512-P+qEahbgeHW4JQ/87FuItjBj8O3MYv5gELDzr8QaQ7fsll1gSMTYb6j87MYyxwf3DtD7uGFB9ShwgmCJB5KmaQ==", - "dev": true, + "inBundle": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.11.0", @@ -19698,7 +19578,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.11.0.tgz", "integrity": "sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==", - "dev": true, + "inBundle": true, "dependencies": { "@typescript-eslint/scope-manager": "7.11.0", "@typescript-eslint/types": "7.11.0", @@ -19726,7 +19606,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.11.0.tgz", "integrity": "sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==", - "dev": true, + "inBundle": true, "dependencies": { "@typescript-eslint/types": "7.11.0", "@typescript-eslint/visitor-keys": "7.11.0" @@ -19743,7 +19623,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.11.0.tgz", "integrity": "sha512-WmppUEgYy+y1NTseNMJ6mCFxt03/7jTOy08bcg7bxJJdsM4nuhnchyBbE8vryveaJUf62noH7LodPSo5Z0WUCg==", - "dev": true, + "inBundle": true, "dependencies": { "@typescript-eslint/typescript-estree": "7.11.0", "@typescript-eslint/utils": "7.11.0", @@ -19770,7 +19650,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.11.0.tgz", "integrity": "sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==", - "dev": true, + "inBundle": true, "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -19783,7 +19663,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.11.0.tgz", "integrity": "sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==", - "dev": true, + "inBundle": true, "dependencies": { "@typescript-eslint/types": "7.11.0", "@typescript-eslint/visitor-keys": "7.11.0", @@ -19811,7 +19691,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.11.0.tgz", "integrity": "sha512-xlAWwPleNRHwF37AhrZurOxA1wyXowW4PqVXZVUNCLjB48CqdPJoJWkrpH2nij9Q3Lb7rtWindtoXwxjxlKKCA==", - "dev": true, + "inBundle": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.11.0", @@ -19833,7 +19713,7 @@ "version": "7.11.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.11.0.tgz", "integrity": "sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==", - "dev": true, + "inBundle": true, "dependencies": { "@typescript-eslint/types": "7.11.0", "eslint-visitor-keys": "^3.4.3" @@ -19850,7 +19730,7 @@ "version": "9.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, + "inBundle": true, "dependencies": { "brace-expansion": "^2.0.1" }, From fe7644c7c7400645e301ec7780c230d293c3a2aa Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Tue, 11 Jun 2024 17:20:32 +0530 Subject: [PATCH 03/11] feat: refactor --- .../src/helpers/channel-provider.ts | 82 ++++++++---------- .../src/helpers/response-handler.ts | 85 ++++++++----------- libs/iota-browser/src/validators/error.ts | 12 ++- 3 files changed, 85 insertions(+), 94 deletions(-) diff --git a/libs/iota-browser/src/helpers/channel-provider.ts b/libs/iota-browser/src/helpers/channel-provider.ts index ae5e45c72..104906458 100644 --- a/libs/iota-browser/src/helpers/channel-provider.ts +++ b/libs/iota-browser/src/helpers/channel-provider.ts @@ -5,8 +5,6 @@ import { iot, mqtt5 } from 'aws-iot-device-sdk-v2/dist/browser' import * as jose from 'jose' import { v4 as uuidv4 } from 'uuid' import { - ErrorEventSchema, - ErrorEvent, EventTypes, PrepareRequestEvent, SignedRequestEvent, @@ -15,9 +13,9 @@ import { SignedRequestJWTSchema, } from '../validators/events' import { - getErrorMessage, getUnexpectedErrorMessage, ErrorCode, + getError, } from 'src/validators/error' const DEFAULT_IOT_ENDPOINT = @@ -158,6 +156,29 @@ export class ChannelProvider { await client.subscribe(packet) } + private getRequest(event: SignedRequestEvent) { + let signedRequest: SignedRequestEvent, signedRequestJWT: SignedRequestJWT + try { + signedRequest = SignedRequestEventSchema.parse(event) + } catch (e) { + throw Error(getUnexpectedErrorMessage(ErrorCode.SIGNED_REQUEST_EVENT)) + } + try { + const claims = jose.decodeJwt(signedRequest.data.jwt) + signedRequestJWT = SignedRequestJWTSchema.parse(claims) + } catch (e) { + throw Error(getUnexpectedErrorMessage(ErrorCode.SIGNED_REQUEST_JWT)) + } + const request: IotaChannelRequest = { + correlationId: signedRequest.correlationId, + payload: { + request: signedRequest.data.jwt, + client_id: signedRequestJWT.client_id, + }, + } + return request + } + async prepareRequest( params: PrepareRequestParams, ): Promise { @@ -187,49 +208,20 @@ export class ChannelProvider { const raw_data = toUtf8( messageReceivedEvent.message.payload as Buffer, ) + let event try { - const event = JSON.parse(raw_data) - if (correlationId !== event.correlationId) { - return - } - if (event.eventType === EventTypes.SignedRequest) { - let signedRequest: SignedRequestEvent, - signedRequestJWT: SignedRequestJWT - try { - signedRequest = SignedRequestEventSchema.parse(event) - } catch (e) { - throw Error( - getUnexpectedErrorMessage(ErrorCode.SIGNED_REQUEST_EVENT), - ) - } - try { - const claims = jose.decodeJwt(signedRequest.data.jwt) - signedRequestJWT = SignedRequestJWTSchema.parse(claims) - } catch (e) { - throw Error( - getUnexpectedErrorMessage(ErrorCode.SIGNED_REQUEST_JWT), - ) - } - const request: IotaChannelRequest = { - correlationId: signedRequest.correlationId, - payload: { - request: signedRequest.data.jwt, - client_id: signedRequestJWT.client_id, - }, - } - - resolve(request) - } else if (event.eventType === EventTypes.Error) { - let errorEvent: ErrorEvent - try { - errorEvent = ErrorEventSchema.parse(event) - } catch (e) { - throw Error(getUnexpectedErrorMessage(ErrorCode.ERROR_EVENT)) - } - throw Error(getErrorMessage(errorEvent)) - } - } catch (error) { - reject(error) + event = JSON.parse(raw_data) + } catch (e) { + reject(e) + } + if (correlationId !== event.correlationId) { + return + } + if (event.eventType === EventTypes.SignedRequest) { + const request = this.getRequest(event) + resolve(request) + } else if (event.eventType === EventTypes.Error) { + getError(event) } } }, diff --git a/libs/iota-browser/src/helpers/response-handler.ts b/libs/iota-browser/src/helpers/response-handler.ts index 39956877c..a1997da3b 100644 --- a/libs/iota-browser/src/helpers/response-handler.ts +++ b/libs/iota-browser/src/helpers/response-handler.ts @@ -1,9 +1,7 @@ import { toUtf8 } from '@aws-sdk/util-utf8-browser' import { mqtt5 } from 'aws-iot-device-sdk-v2/dist/browser' import { - ErrorEventSchema, EventTypes, - ErrorEvent, ResponseCallbackEventSchema, VerifiablePresentation, VerifiablePresentationSchema, @@ -12,7 +10,7 @@ import { import { ChannelProvider } from './channel-provider' import { ErrorCode, - getErrorMessage, + getError, getUnexpectedErrorMessage, } from 'src/validators/error' @@ -35,6 +33,31 @@ export class ResponseHandler { this.channelProvider = channelProvider } + private getResponseHandler(event: ResponseCallbackEvent) { + let responseCallback: ResponseCallbackEvent, vpToken: VerifiablePresentation + try { + responseCallback = ResponseCallbackEventSchema.parse(event) + } catch (e) { + throw Error(getUnexpectedErrorMessage(ErrorCode.RESPONSE_CALLBACK_EVENT)) + } + try { + vpToken = VerifiablePresentationSchema.parse( + JSON.parse(responseCallback.vpToken), + ) + } catch (e) { + throw Error( + getUnexpectedErrorMessage(ErrorCode.VERIFIABLE_PRESENTATION_SCHEMA), + ) + } + const response: IotaResponse = { + correlationId: responseCallback.correlationId, + vpToken, + // TODO parse presentation submission, same as vpToken + presentationSubmission: responseCallback.presentationSubmission, + } + return response + } + async getResponse(correlationId: string): Promise { const client = this.channelProvider.getClient() return new Promise((resolve, reject) => { @@ -45,55 +68,21 @@ export class ResponseHandler { const raw_data = toUtf8( messageReceivedEvent.message.payload as Buffer, ) - + let event try { - const event = JSON.parse(raw_data) - if (correlationId !== event.correlationId) { - return - } - if (event.eventType === EventTypes.ResponseCallback) { - let responseCallback: ResponseCallbackEvent, - vpToken: VerifiablePresentation - try { - responseCallback = ResponseCallbackEventSchema.parse(event) - } catch (e) { - throw Error( - getUnexpectedErrorMessage( - ErrorCode.RESPONSE_CALLBACK_EVENT, - ), - ) - } - try { - vpToken = VerifiablePresentationSchema.parse( - JSON.parse(responseCallback.vpToken), - ) - } catch (e) { - throw Error( - getUnexpectedErrorMessage( - ErrorCode.VERIFIABLE_PRESENTATION_SCHEMA, - ), - ) - } - const response: IotaResponse = { - correlationId: responseCallback.correlationId, - vpToken, - // TODO parse presentation submission, same as vpToken - presentationSubmission: - responseCallback.presentationSubmission, - } - resolve(response) - } else if (event.eventType === EventTypes.Error) { - let errorEvent: ErrorEvent - try { - errorEvent = ErrorEventSchema.parse(event) - } catch (e) { - throw Error(getUnexpectedErrorMessage(ErrorCode.ERROR_EVENT)) - } - throw Error(getErrorMessage(errorEvent)) - } + event = JSON.parse(raw_data) } catch (error) { reject(error) } + if (correlationId !== event.correlationId) { + return + } + if (event.eventType === EventTypes.ResponseCallback) { + const response = this.getResponseHandler(event) + resolve(response) + } else if (event.eventType === EventTypes.Error) { + getError(event) + } } }, ) diff --git a/libs/iota-browser/src/validators/error.ts b/libs/iota-browser/src/validators/error.ts index 81daa384e..0d7505741 100644 --- a/libs/iota-browser/src/validators/error.ts +++ b/libs/iota-browser/src/validators/error.ts @@ -1,4 +1,4 @@ -import { ErrorEvent } from '../validators/events' +import { ErrorEvent, ErrorEventSchema } from '../validators/events' export enum ErrorCode { 'SIGNED_REQUEST_EVENT' = 'SignedRequestEvent', @@ -22,3 +22,13 @@ export function getUnexpectedErrorMessage(code: ErrorCode) { export function getErrorMessage(errorEvent: ErrorEvent): string { return `Something went wrong. ${getIssue(errorEvent)}. Error Code ${errorEvent.error.httpStatusCode}` } + +export function getError(event: ErrorEvent) { + let errorEvent: ErrorEvent + try { + errorEvent = ErrorEventSchema.parse(event) + } catch (e) { + throw Error(getUnexpectedErrorMessage(ErrorCode.ERROR_EVENT)) + } + throw Error(getErrorMessage(errorEvent)) +} From 1f914b31fe7da13d6316bf54d172e4cb44b003fc Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Wed, 12 Jun 2024 20:38:10 +0530 Subject: [PATCH 04/11] feat: update version --- libs/iota-browser/package-lock.json | 17 ++++++++++------- libs/iota-browser/package.json | 2 +- .../src/helpers/channel-provider.ts | 2 +- .../src/helpers/response-handler.ts | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/libs/iota-browser/package-lock.json b/libs/iota-browser/package-lock.json index 597ec9aad..1acd45caf 100644 --- a/libs/iota-browser/package-lock.json +++ b/libs/iota-browser/package-lock.json @@ -1,12 +1,12 @@ { "name": "@affinidi-tdk/iota-browser", - "version": "0.2.6", + "version": "0.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@affinidi-tdk/iota-browser", - "version": "0.2.6", + "version": "0.2.8", "license": "Apache-2.0", "dependencies": { "@affinidi-tdk/iota-client": "^1.1.0", @@ -33,19 +33,22 @@ } }, "../../packages/iota-utils": { - "version": "0.1.2", + "name": "@affinidi-tdk/iota-utils", + "version": "0.1.3", "bundleDependencies": [ "@affinidi-tdk/iota-client", - "@aws-sdk/client-cognito-identity" + "@aws-sdk/client-cognito-identity", + "@typescript-eslint/eslint-plugin", + "@typescript-eslint/parser" ], "license": "Apache-2.0", "dependencies": { "@affinidi-tdk/iota-client": "^1.1.0", - "@aws-sdk/client-cognito-identity": "^3.590.0" + "@aws-sdk/client-cognito-identity": "^3.590.0", + "@typescript-eslint/eslint-plugin": "^7.4.0", + "@typescript-eslint/parser": "^7.4.0" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.4.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", diff --git a/libs/iota-browser/package.json b/libs/iota-browser/package.json index 1f1c75ecd..3e6a4b659 100644 --- a/libs/iota-browser/package.json +++ b/libs/iota-browser/package.json @@ -1,6 +1,6 @@ { "name": "@affinidi-tdk/iota-browser", - "version": "0.2.7", + "version": "0.2.8", "description": "Browser module to fetch data through Affinidi Iota Framework", "author": "Affinidi", "repository": { diff --git a/libs/iota-browser/src/helpers/channel-provider.ts b/libs/iota-browser/src/helpers/channel-provider.ts index 104906458..ccfbdfd59 100644 --- a/libs/iota-browser/src/helpers/channel-provider.ts +++ b/libs/iota-browser/src/helpers/channel-provider.ts @@ -16,7 +16,7 @@ import { getUnexpectedErrorMessage, ErrorCode, getError, -} from 'src/validators/error' +} from '../validators/error' const DEFAULT_IOT_ENDPOINT = 'a3sq1vuw0cw9an-ats.iot.ap-southeast-1.amazonaws.com' diff --git a/libs/iota-browser/src/helpers/response-handler.ts b/libs/iota-browser/src/helpers/response-handler.ts index a1997da3b..383cc80a3 100644 --- a/libs/iota-browser/src/helpers/response-handler.ts +++ b/libs/iota-browser/src/helpers/response-handler.ts @@ -12,7 +12,7 @@ import { ErrorCode, getError, getUnexpectedErrorMessage, -} from 'src/validators/error' +} from '../validators/error' export type IotaResponse = { correlationId: string From 885122f34c43511e64cf046c77fc525d6791cc85 Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Thu, 13 Jun 2024 11:33:11 +0530 Subject: [PATCH 05/11] fix: add try/catch and resolve --- .../src/helpers/channel-provider.ts | 21 +++++++------ .../src/helpers/response-handler.ts | 21 +++++++------ libs/iota-browser/src/session.ts | 30 ++++++++++++------- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/libs/iota-browser/src/helpers/channel-provider.ts b/libs/iota-browser/src/helpers/channel-provider.ts index ccfbdfd59..268dbd9a9 100644 --- a/libs/iota-browser/src/helpers/channel-provider.ts +++ b/libs/iota-browser/src/helpers/channel-provider.ts @@ -208,21 +208,20 @@ export class ChannelProvider { const raw_data = toUtf8( messageReceivedEvent.message.payload as Buffer, ) - let event try { - event = JSON.parse(raw_data) + const event = JSON.parse(raw_data) + if (correlationId !== event.correlationId) { + return + } + if (event.eventType === EventTypes.SignedRequest) { + const request = this.getRequest(event) + resolve(request) + } else if (event.eventType === EventTypes.Error) { + getError(event) + } } catch (e) { reject(e) } - if (correlationId !== event.correlationId) { - return - } - if (event.eventType === EventTypes.SignedRequest) { - const request = this.getRequest(event) - resolve(request) - } else if (event.eventType === EventTypes.Error) { - getError(event) - } } }, ) diff --git a/libs/iota-browser/src/helpers/response-handler.ts b/libs/iota-browser/src/helpers/response-handler.ts index 383cc80a3..a094e4144 100644 --- a/libs/iota-browser/src/helpers/response-handler.ts +++ b/libs/iota-browser/src/helpers/response-handler.ts @@ -68,21 +68,20 @@ export class ResponseHandler { const raw_data = toUtf8( messageReceivedEvent.message.payload as Buffer, ) - let event try { - event = JSON.parse(raw_data) + const event = JSON.parse(raw_data) + if (correlationId !== event.correlationId) { + return + } + if (event.eventType === EventTypes.ResponseCallback) { + const response = this.getResponseHandler(event) + resolve(response) + } else if (event.eventType === EventTypes.Error) { + getError(event) + } } catch (error) { reject(error) } - if (correlationId !== event.correlationId) { - return - } - if (event.eventType === EventTypes.ResponseCallback) { - const response = this.getResponseHandler(event) - resolve(response) - } else if (event.eventType === EventTypes.Error) { - getError(event) - } } }, ) diff --git a/libs/iota-browser/src/session.ts b/libs/iota-browser/src/session.ts index ed6004982..987fc7187 100644 --- a/libs/iota-browser/src/session.ts +++ b/libs/iota-browser/src/session.ts @@ -41,14 +41,18 @@ export class Session { } async prepareRequest(params: PrepareRequestParams): Promise { - this.isChannelProviderInitialized() - const iotaRequest = await this.channelProvider.prepareRequest(params) - const request = new IotaRequest({ - session: this, - correlationId: iotaRequest.correlationId, - payload: iotaRequest.payload, - }) - return request + try { + this.isChannelProviderInitialized() + const iotaRequest = await this.channelProvider.prepareRequest(params) + const request = new IotaRequest({ + session: this, + correlationId: iotaRequest.correlationId, + payload: iotaRequest.payload, + }) + return request + } catch (e) { + throw (e) + } } prepareRequestWithCallback( @@ -61,9 +65,13 @@ export class Session { } async getResponse(correlationId: string): Promise { - this.isChannelProviderInitialized() - const responseHandler = new ResponseHandler(this.channelProvider) - return responseHandler.getResponse(correlationId) + try { + this.isChannelProviderInitialized() + const responseHandler = new ResponseHandler(this.channelProvider) + return responseHandler.getResponse(correlationId) + } catch (e) { + throw (e) + } } getResponseWithCallback( From 6ccd1f7a534d5f7a9ad5104f9de21bb5f0b6dfa6 Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Thu, 13 Jun 2024 11:51:22 +0530 Subject: [PATCH 06/11] fix: error schema --- libs/iota-browser/src/validators/error.ts | 6 +++--- libs/iota-browser/src/validators/events.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/iota-browser/src/validators/error.ts b/libs/iota-browser/src/validators/error.ts index 0d7505741..35fd611ae 100644 --- a/libs/iota-browser/src/validators/error.ts +++ b/libs/iota-browser/src/validators/error.ts @@ -9,9 +9,9 @@ export enum ErrorCode { } function getIssue(errorEvent: ErrorEvent) { - return errorEvent.error.details![0].issue && - errorEvent.error.details![0].issue.length > 0 - ? errorEvent.error.details![0].issue + return errorEvent.error.details![0].issues && + errorEvent.error.details![0].issues.length > 0 + ? errorEvent.error.details![0].issues : errorEvent.error.message } diff --git a/libs/iota-browser/src/validators/events.ts b/libs/iota-browser/src/validators/events.ts index 33ebff6cc..e60215476 100644 --- a/libs/iota-browser/src/validators/events.ts +++ b/libs/iota-browser/src/validators/events.ts @@ -50,7 +50,7 @@ export type ResponseCallbackEvent = z.infer const ERROR_LOCATION = ['body', 'path', 'query'] as const const ErrorDetailItem = z.object({ - issue: z.string(), + issues: z.string(), field: z.string().optional(), value: z.string().optional(), location: z.enum(ERROR_LOCATION).optional(), From 9cdd2d046a75ddaac1c28388e10716bc63dc2b55 Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Thu, 13 Jun 2024 12:20:16 +0530 Subject: [PATCH 07/11] fix: remove useless try/catch --- libs/iota-browser/src/session.ts | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/libs/iota-browser/src/session.ts b/libs/iota-browser/src/session.ts index 987fc7187..ed6004982 100644 --- a/libs/iota-browser/src/session.ts +++ b/libs/iota-browser/src/session.ts @@ -41,18 +41,14 @@ export class Session { } async prepareRequest(params: PrepareRequestParams): Promise { - try { - this.isChannelProviderInitialized() - const iotaRequest = await this.channelProvider.prepareRequest(params) - const request = new IotaRequest({ - session: this, - correlationId: iotaRequest.correlationId, - payload: iotaRequest.payload, - }) - return request - } catch (e) { - throw (e) - } + this.isChannelProviderInitialized() + const iotaRequest = await this.channelProvider.prepareRequest(params) + const request = new IotaRequest({ + session: this, + correlationId: iotaRequest.correlationId, + payload: iotaRequest.payload, + }) + return request } prepareRequestWithCallback( @@ -65,13 +61,9 @@ export class Session { } async getResponse(correlationId: string): Promise { - try { - this.isChannelProviderInitialized() - const responseHandler = new ResponseHandler(this.channelProvider) - return responseHandler.getResponse(correlationId) - } catch (e) { - throw (e) - } + this.isChannelProviderInitialized() + const responseHandler = new ResponseHandler(this.channelProvider) + return responseHandler.getResponse(correlationId) } getResponseWithCallback( From 2adca668bfebb2a1a9d344aff02d362477390e14 Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Tue, 18 Jun 2024 10:47:59 +0530 Subject: [PATCH 08/11] fix: add endline after package lock --- libs/iota-browser/package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/iota-browser/package-lock.json b/libs/iota-browser/package-lock.json index 2b90e4fe8..f7fc26577 100644 --- a/libs/iota-browser/package-lock.json +++ b/libs/iota-browser/package-lock.json @@ -4374,4 +4374,4 @@ } } } -} \ No newline at end of file +} From e5ad00f7cc53668f9c4a035a59c47c57f82cb079 Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Tue, 18 Jun 2024 10:48:29 +0530 Subject: [PATCH 09/11] fix: add endline after package lock --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 3ef70e0b2..97bdd751e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21637,4 +21637,4 @@ } } } -} \ No newline at end of file +} From e5fbddf31b77c9f7e3509b7228b2744e5629817a Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Tue, 18 Jun 2024 11:00:19 +0530 Subject: [PATCH 10/11] feat: rename error methods --- libs/iota-browser/src/helpers/channel-provider.ts | 4 ++-- libs/iota-browser/src/helpers/response-handler.ts | 4 ++-- libs/iota-browser/src/validators/error.ts | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libs/iota-browser/src/helpers/channel-provider.ts b/libs/iota-browser/src/helpers/channel-provider.ts index 5af0ae8d7..dcc028e81 100644 --- a/libs/iota-browser/src/helpers/channel-provider.ts +++ b/libs/iota-browser/src/helpers/channel-provider.ts @@ -15,7 +15,7 @@ import { import { getUnexpectedErrorMessage, ErrorCode, - getError, + throwEventParsingError, } from '../validators/error' const DEFAULT_IOT_ENDPOINT = @@ -217,7 +217,7 @@ export class ChannelProvider { const request = this.getRequest(event) resolve(request) } else if (event.eventType === EventTypes.Error) { - getError(event) + throwEventParsingError(event) } } catch (e) { reject(e) diff --git a/libs/iota-browser/src/helpers/response-handler.ts b/libs/iota-browser/src/helpers/response-handler.ts index a094e4144..9c6b99b4d 100644 --- a/libs/iota-browser/src/helpers/response-handler.ts +++ b/libs/iota-browser/src/helpers/response-handler.ts @@ -10,7 +10,7 @@ import { import { ChannelProvider } from './channel-provider' import { ErrorCode, - getError, + throwEventParsingError, getUnexpectedErrorMessage, } from '../validators/error' @@ -77,7 +77,7 @@ export class ResponseHandler { const response = this.getResponseHandler(event) resolve(response) } else if (event.eventType === EventTypes.Error) { - getError(event) + throwEventParsingError(event) } } catch (error) { reject(error) diff --git a/libs/iota-browser/src/validators/error.ts b/libs/iota-browser/src/validators/error.ts index 35fd611ae..6955034dd 100644 --- a/libs/iota-browser/src/validators/error.ts +++ b/libs/iota-browser/src/validators/error.ts @@ -19,16 +19,16 @@ export function getUnexpectedErrorMessage(code: ErrorCode) { return `Unexpected error occured. Error Code: ${code} ` } -export function getErrorMessage(errorEvent: ErrorEvent): string { +export function formatEventError(errorEvent: ErrorEvent): string { return `Something went wrong. ${getIssue(errorEvent)}. Error Code ${errorEvent.error.httpStatusCode}` } -export function getError(event: ErrorEvent) { +export function throwEventParsingError(event: ErrorEvent): never { let errorEvent: ErrorEvent try { errorEvent = ErrorEventSchema.parse(event) } catch (e) { throw Error(getUnexpectedErrorMessage(ErrorCode.ERROR_EVENT)) } - throw Error(getErrorMessage(errorEvent)) + throw Error(formatEventError(errorEvent)) } From 65924e780458ae14e37009eab8f22b51ab906f44 Mon Sep 17 00:00:00 2001 From: Pulkit Batra Date: Tue, 18 Jun 2024 11:01:51 +0530 Subject: [PATCH 11/11] feat: update version of package --- libs/iota-browser/package-lock.json | 4 ++-- libs/iota-browser/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/iota-browser/package-lock.json b/libs/iota-browser/package-lock.json index f7fc26577..9bfe1523c 100644 --- a/libs/iota-browser/package-lock.json +++ b/libs/iota-browser/package-lock.json @@ -1,12 +1,12 @@ { "name": "@affinidi-tdk/iota-browser", - "version": "0.2.8", + "version": "0.2.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@affinidi-tdk/iota-browser", - "version": "0.2.8", + "version": "0.2.9", "license": "Apache-2.0", "dependencies": { "@affinidi-tdk/iota-client": "^1.1.0", diff --git a/libs/iota-browser/package.json b/libs/iota-browser/package.json index 3e6a4b659..14088114e 100644 --- a/libs/iota-browser/package.json +++ b/libs/iota-browser/package.json @@ -1,6 +1,6 @@ { "name": "@affinidi-tdk/iota-browser", - "version": "0.2.8", + "version": "0.2.9", "description": "Browser module to fetch data through Affinidi Iota Framework", "author": "Affinidi", "repository": {