From bdf3d39dfa48ef9b1b82e56316d54dee60a68b4c Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 20 Aug 2025 14:20:25 +0200 Subject: [PATCH 01/75] feat: add openid4vc controller --- .../consumption/ConsumptionControllerName.ts | 3 +- packages/consumption/src/modules/index.ts | 1 + .../modules/openid4vc/OpenId4VcController.ts | 31 +++++++++++++++++++ .../src/modules/openid4vc/index.ts | 1 + 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 packages/consumption/src/modules/openid4vc/OpenId4VcController.ts create mode 100644 packages/consumption/src/modules/openid4vc/index.ts diff --git a/packages/consumption/src/consumption/ConsumptionControllerName.ts b/packages/consumption/src/consumption/ConsumptionControllerName.ts index c33064c0c..599a3298c 100644 --- a/packages/consumption/src/consumption/ConsumptionControllerName.ts +++ b/packages/consumption/src/consumption/ConsumptionControllerName.ts @@ -4,5 +4,6 @@ export enum ConsumptionControllerName { RequestsController = "RequestsController", SettingsController = "SettingsController", NotificationsController = "NotificationsController", - IdentityMetadataController = "IdentityMetadataController" + IdentityMetadataController = "IdentityMetadataController", + OpenId4VcController = "OpenId4VcController" } diff --git a/packages/consumption/src/modules/index.ts b/packages/consumption/src/modules/index.ts index 9d6a3d993..f87b84b52 100644 --- a/packages/consumption/src/modules/index.ts +++ b/packages/consumption/src/modules/index.ts @@ -3,5 +3,6 @@ export * from "./common"; export * from "./drafts"; export * from "./identityMetadata"; export * from "./notifications"; +export * from "./openid4vc"; export * from "./requests"; export * from "./settings"; diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts new file mode 100644 index 000000000..dde18229a --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -0,0 +1,31 @@ +import { IdentityAttribute } from "@nmshd/content"; +import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; +import { ConsumptionController } from "../../consumption/ConsumptionController"; +import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; + +export class OpenId4VcController extends ConsumptionBaseController { + public constructor(parent: ConsumptionController) { + super(ConsumptionControllerName.OpenId4VcController, parent); + } + + public async processCredentialOffer(credentialOffer: string): Promise { + // This is a dummy implementation for the sake of example. + // In a real implementation, you would process the credential offer here. + + // TODO: insert holder code here + + // currently we are simply creating a dummy IdentityAttribute + await this.parent.attributes.createRepositoryAttribute({ + content: IdentityAttribute.from({ + value: { value: credentialOffer }, + owner: this.parent.accountController.identity.address + }) + }); + + return { + status: "success", + message: "Credential offer processed successfully", + data: credentialOffer + }; + } +} diff --git a/packages/consumption/src/modules/openid4vc/index.ts b/packages/consumption/src/modules/openid4vc/index.ts new file mode 100644 index 000000000..9eaad665e --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/index.ts @@ -0,0 +1 @@ +export * from "./OpenId4VcController"; From 4e4ecc390ecd98d8ce1b139cf375a3433b7e39df Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 20 Aug 2025 14:21:06 +0200 Subject: [PATCH 02/75] feat: add openid4vc facade --- .../extensibility/facades/consumption/OpenId4VcHolderFacade.ts | 3 +++ .../runtime/src/extensibility/facades/consumption/index.ts | 1 + 2 files changed, 4 insertions(+) create mode 100644 packages/runtime/src/extensibility/facades/consumption/OpenId4VcHolderFacade.ts diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcHolderFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcHolderFacade.ts new file mode 100644 index 000000000..14a23b8ee --- /dev/null +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcHolderFacade.ts @@ -0,0 +1,3 @@ +export class OpenId4VcHolderFacade { + public constructor() {} +} diff --git a/packages/runtime/src/extensibility/facades/consumption/index.ts b/packages/runtime/src/extensibility/facades/consumption/index.ts index 393475997..5341a1cb9 100644 --- a/packages/runtime/src/extensibility/facades/consumption/index.ts +++ b/packages/runtime/src/extensibility/facades/consumption/index.ts @@ -3,5 +3,6 @@ export * from "./DraftsFacade"; export * from "./IdentityMetadataFacade"; export * from "./IncomingRequestsFacade"; export * from "./NotificationsFacade"; +export * from "./OpenId4VcHolderFacade"; export * from "./OutgoingRequestsFacade"; export * from "./SettingsFacade"; From 1f739136677b5cf2c3ab6010f2d1718405857949 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 20 Aug 2025 14:21:37 +0200 Subject: [PATCH 03/75] feat: add ReolveCredentialOffer UseCase --- .../runtime/src/useCases/consumption/index.ts | 1 + .../openid4vc/ResolveCredentialOffer.ts | 29 +++++++++++++++++++ .../useCases/consumption/openid4vc/index.ts | 1 + 3 files changed, 31 insertions(+) create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/index.ts diff --git a/packages/runtime/src/useCases/consumption/index.ts b/packages/runtime/src/useCases/consumption/index.ts index 9989c2439..7beee07e7 100644 --- a/packages/runtime/src/useCases/consumption/index.ts +++ b/packages/runtime/src/useCases/consumption/index.ts @@ -2,5 +2,6 @@ export * from "./attributes"; export * from "./drafts"; export * from "./identityMetadata"; export * from "./notifications"; +export * from "./openid4vc"; export * from "./requests"; export * from "./settings"; diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts new file mode 100644 index 000000000..0bf9d6321 --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts @@ -0,0 +1,29 @@ +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface ResolveCredentialOfferRequest { + credentialOfferUrl: string; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("ResolveCredentialOfferRequest")); + } +} + +export class ResolveCredentialOfferUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override executeInternal(request: ResolveCredentialOfferRequest): Promise> { + return this.openId4VcContoller.processCredentialOffer(request.credentialOfferUrl).then(() => { + return Result.ok(undefined); + }); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/index.ts b/packages/runtime/src/useCases/consumption/openid4vc/index.ts new file mode 100644 index 000000000..c23a310f7 --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/index.ts @@ -0,0 +1 @@ +export * from "./ResolveCredentialOffer"; From 1fad70ad19dff90bfbe073d58758f26a5e7748dc Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 20 Aug 2025 14:22:01 +0200 Subject: [PATCH 04/75] feat: add dummy resolve credential offer datatype --- packages/runtime-types/src/consumption/CredentialOfferDTO.ts | 3 +++ packages/runtime-types/src/consumption/index.ts | 1 + 2 files changed, 4 insertions(+) create mode 100644 packages/runtime-types/src/consumption/CredentialOfferDTO.ts diff --git a/packages/runtime-types/src/consumption/CredentialOfferDTO.ts b/packages/runtime-types/src/consumption/CredentialOfferDTO.ts new file mode 100644 index 000000000..560c72847 --- /dev/null +++ b/packages/runtime-types/src/consumption/CredentialOfferDTO.ts @@ -0,0 +1,3 @@ +export interface CredentialOfferDTO { + url: string; +} diff --git a/packages/runtime-types/src/consumption/index.ts b/packages/runtime-types/src/consumption/index.ts index b6c609a8d..5e0415a49 100644 --- a/packages/runtime-types/src/consumption/index.ts +++ b/packages/runtime-types/src/consumption/index.ts @@ -1,4 +1,5 @@ export * from "./AttributeTagCollectionDTO"; +export * from "./CredentialOfferDTO"; export * from "./DraftDTO"; export * from "./IdentityMetadataDTO"; export * from "./LocalAttributeDTO"; From cffd31f9ec7672a82b4e52260775a8210680d1ed Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 20 Aug 2025 15:04:16 +0200 Subject: [PATCH 05/75] chore: rename facade --- .../facades/consumption/OpenId4VcFacade.ts | 11 +++++++++++ .../facades/consumption/OpenId4VcHolderFacade.ts | 3 --- 2 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts delete mode 100644 packages/runtime/src/extensibility/facades/consumption/OpenId4VcHolderFacade.ts diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts new file mode 100644 index 000000000..b05fd841e --- /dev/null +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -0,0 +1,11 @@ +import { ApplicationError, Result } from "@js-soft/ts-utils"; +import { Inject } from "@nmshd/typescript-ioc"; +import { ResolveCredentialOfferRequest, ResolveCredentialOfferUseCase } from "../../../useCases"; + +export class OpenId4VcFacade { + public constructor(@Inject private readonly resolveCredentialOfferUseCase: ResolveCredentialOfferUseCase) {} + + public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { + return await this.resolveCredentialOfferUseCase.execute(request); + } +} diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcHolderFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcHolderFacade.ts deleted file mode 100644 index 14a23b8ee..000000000 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcHolderFacade.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class OpenId4VcHolderFacade { - public constructor() {} -} From 3ecc6a4db3f486529af0aa1a1a1cae0133b1d7e3 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 20 Aug 2025 15:04:30 +0200 Subject: [PATCH 06/75] chore: install credo library --- package-lock.json | 3957 ++++++++++++++++++++++++++++++++++++++++----- package.json | 6 + 2 files changed, 3550 insertions(+), 413 deletions(-) diff --git a/package-lock.json b/package-lock.json index 075a0c906..b22cd5d5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,12 @@ "packages/runtime", "packages/app-runtime" ], + "dependencies": { + "@credo-ts/askar": "v0.6.0-alpha-20250704130724", + "@credo-ts/core": "v0.6.0-alpha-20250704130724", + "@credo-ts/node": "v0.6.0-alpha-20250704130724", + "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724" + }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.3", "@js-soft/license-check": "^1.0.9", @@ -33,9 +39,42 @@ "typescript": "^5.9.2" } }, + "node_modules/@2060.io/ffi-napi": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@2060.io/ffi-napi/-/ffi-napi-4.0.9.tgz", + "integrity": "sha512-JfVREbtkJhMXSUpya3JCzDumdjeZDCKv4PemiWK+pts5CYgdoMidxeySVlFeF5pHqbBpox4I0Be7sDwAq4N0VQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@2060.io/ref-napi": "^3.0.6", + "debug": "^4.1.1", + "get-uv-event-loop-napi-h": "^1.0.5", + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.1", + "ref-struct-di": "^1.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@2060.io/ref-napi": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@2060.io/ref-napi/-/ref-napi-3.0.6.tgz", + "integrity": "sha512-8VAIXLdKL85E85jRYpPcZqATBL6fGnC/XjBGNeSgRSMJtrAMSmfRksqIq5AmuZkA2eeJXMWCiN6UQOUdozcymg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "get-symbol-from-current-process-h": "^1.0.2", + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.1" + }, + "engines": { + "node": ">= 18.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -45,11 +84,139 @@ "node": ">=6.0.0" } }, + "node_modules/@animo-id/mdoc": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@animo-id/mdoc/-/mdoc-0.5.2.tgz", + "integrity": "sha512-EQVsNOOeXFfBaEHkiKoh24jbSEQ1MORB/kUu0rnNrAEETpY5GK/H9iWevYFdmNDIqQTIEJlkU7S+sIj3pe66eA==", + "license": "Apache-2.0", + "dependencies": { + "compare-versions": "^6.1.1" + } + }, + "node_modules/@animo-id/pex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@animo-id/pex/-/pex-6.1.1.tgz", + "integrity": "sha512-my3g9Divea1sseZRzgD2tnrv0ett9fTlyoZp1x9nSjyRwtai/BBnFQigknMFscJuG6vnwYNcaj6TFQprw+v5xw==", + "license": "Apache-2.0", + "dependencies": { + "@animo-id/mdoc": "^0.5.2", + "@astronautlabs/jsonpath": "^1.1.2", + "@sd-jwt/decode": "^0.7.2", + "@sd-jwt/present": "^0.7.2", + "@sd-jwt/types": "^0.7.2", + "@sphereon/pex-models": "^2.3.2", + "@sphereon/ssi-types": "0.33.0", + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "jwt-decode": "^3.1.2", + "nanoid": "^3.3.7", + "uint8arrays": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@animo-id/pex/node_modules/@sd-jwt/decode": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.7.2.tgz", + "integrity": "sha512-dan2LSvK63SKwb62031G4r7TE4TaiI0EK1KbPXqS+LCXNkNDUHqhtYp9uOpj+grXceCsMtMa2f8VnUfsjmwHHg==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.7.2", + "@sd-jwt/utils": "0.7.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@animo-id/pex/node_modules/@sd-jwt/present": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.7.2.tgz", + "integrity": "sha512-mQV85u2+mLLy2VZ9Wx2zpaB6yTDnbhCfWkP7eeCrzJQHBKAAHko8GrylEFmLKewFIcajS/r4lT/zHOsCkp5pZw==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/decode": "0.7.2", + "@sd-jwt/types": "0.7.2", + "@sd-jwt/utils": "0.7.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@animo-id/pex/node_modules/@sd-jwt/types": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.7.2.tgz", + "integrity": "sha512-1NRKowiW0ZiB9SGLApLPBH4Xk8gDQJ+nA9NdZ+uy6MmJKLEwjuJxO7yTvRIv/jX/0/Ebh339S7Kq4RD2AiFuRg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@animo-id/pex/node_modules/@sd-jwt/utils": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.7.2.tgz", + "integrity": "sha512-aMPY7uHRMgyI5PlDvEiIc+eBFGC1EM8OCQRiEjJ8HGN0pajWMYj0qwSw7pS90A49/DsYU1a5Zpvb7nyjgGH0Yg==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.7.2", + "js-base64": "^3.7.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@animo-id/pex/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@animo-id/pex/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@animo-id/pex/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@astronautlabs/jsonpath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@astronautlabs/jsonpath/-/jsonpath-1.1.2.tgz", + "integrity": "sha512-FqL/muoreH7iltYC1EB5Tvox5E8NSOOPGkgns4G+qxRKl6k5dxEVljUjB5NcKESzkqwnUqWjSZkL61XGYOuV+A==", + "license": "MIT", + "dependencies": { + "static-eval": "2.0.2" + } + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -61,10 +228,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", - "dev": true, + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -74,7 +240,6 @@ "version": "7.27.4", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", - "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -103,23 +268,21 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", - "dev": true, + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -130,7 +293,6 @@ "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", @@ -147,17 +309,24 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -171,7 +340,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -189,7 +357,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -199,7 +366,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -209,7 +375,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -219,7 +384,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -229,7 +393,6 @@ "version": "7.27.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", - "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -240,13 +403,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", - "dev": true, + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.2" }, "bin": { "parser": "bin/babel-parser.js" @@ -255,11 +417,28 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -272,7 +451,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -285,7 +464,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -298,7 +477,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -310,11 +489,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -330,7 +521,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -343,7 +534,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -356,7 +547,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -372,7 +563,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -385,7 +576,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -398,7 +589,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -411,7 +602,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -424,7 +615,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -437,7 +628,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -450,7 +641,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -466,7 +657,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -482,9 +673,25 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "dev": true, + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "license": "MIT", "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { @@ -498,7 +705,6 @@ "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -510,39 +716,27 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", - "dev": true, + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/types": "^7.28.2", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "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, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", - "dev": true, + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -566,6 +760,143 @@ "dev": true, "license": "MIT" }, + "node_modules/@credo-ts/askar": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/askar/-/askar-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-AgeiLbW3wdV5PWUnMFEIRJ1Xrrom+pTNdxNkk4j774f0yAswi2jBYrVpzSr8UmspdSiVIjbxZe/q/WUAn6NQ/Q==", + "license": "Apache-2.0", + "dependencies": { + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "rxjs": "^7.8.2", + "tsyringe": "^4.10.0" + }, + "peerDependencies": { + "@openwallet-foundation/askar-shared": "^0.3.2" + } + }, + "node_modules/@credo-ts/core": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-vqNYnQa6Kn8g2Ay5rGxm6zqMqepV4jdSHLpAgXQJ1zvaBIVZ4zU7zjxccILhruCFlvlUreKtSqcEI8SAMUigUQ==", + "license": "Apache-2.0", + "dependencies": { + "@animo-id/mdoc": "^0.5.2", + "@animo-id/pex": "^6.1.0", + "@astronautlabs/jsonpath": "^1.1.2", + "@digitalcredentials/jsonld": "^6.0.0", + "@digitalcredentials/jsonld-signatures": "^9.4.0", + "@digitalcredentials/vc": "^6.0.1", + "@multiformats/base-x": "^4.0.1", + "@noble/curves": "^1.9.2", + "@noble/hashes": "^1.8.0", + "@peculiar/asn1-ecc": "^2.3.15", + "@peculiar/asn1-rsa": "^2.3.15", + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "@peculiar/x509": "^1.12.1", + "@sd-jwt/core": "^0.10.0", + "@sd-jwt/decode": "^0.10.0", + "@sd-jwt/jwt-status-list": "^0.10.0", + "@sd-jwt/present": "^0.10.0", + "@sd-jwt/sd-jwt-vc": "^0.10.0", + "@sd-jwt/types": "^0.10.0", + "@sd-jwt/utils": "^0.10.0", + "@sphereon/pex-models": "^2.3.2", + "@sphereon/ssi-types": "0.33.0", + "@stablelib/ed25519": "^1.0.3", + "@types/ws": "^8.18.1", + "borc": "^3.0.0", + "buffer": "^6.0.3", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "dcql": "^0.3.0", + "did-resolver": "^4.1.0", + "ec-compression": "0.0.1-alpha.12", + "lru_map": "^0.4.1", + "make-error": "^1.3.6", + "object-inspect": "^1.13.4", + "reflect-metadata": "^0.2.2", + "rxjs": "^7.8.2", + "tsyringe": "^4.10.0", + "uuid": "^11.1.0", + "varint": "^6.0.0", + "web-did-resolver": "^2.0.21", + "webcrypto-core": "^1.8.1", + "zod": "^3.25.56" + } + }, + "node_modules/@credo-ts/core/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@credo-ts/didcomm": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/didcomm/-/didcomm-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-rbXdMOSH7heE58I8fFZTSvO8l/o5dKnywjrrwC4vsZFTf0Jvt23biuhjMV05VJcxvAwLvTX9e6+AKYSFX1UONA==", + "license": "Apache-2.0", + "dependencies": { + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "luxon": "^3.5.0", + "query-string": "^7.0.1", + "rxjs": "^7.8.2" + } + }, + "node_modules/@credo-ts/node": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/node/-/node-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-yKwItgLoN27a2wkM87EfT7zcw/QEH2l7IZuXHU6GKmSzacsnqRP9sA0/FqZZehGIzq3OwYU6p+QK1UHKkIZPGg==", + "license": "Apache-2.0", + "dependencies": { + "@2060.io/ffi-napi": "^4.0.9", + "@2060.io/ref-napi": "^3.0.6", + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "@credo-ts/didcomm": "0.6.0-alpha-20250704130724", + "@types/express": "^4.17.23", + "express": "^4.21.2", + "rxjs": "^7.8.2", + "ws": "^8.18.2" + } + }, + "node_modules/@credo-ts/openid4vc": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-+9BwT0tbo1B4++DcVXBEcoNAmkI5LNpacDDnUYdVumlSYYmmdE1WAAxCvM052ipBFke82w4kPOyo5YSZvZ7IFA==", + "license": "Apache-2.0", + "dependencies": { + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", + "@openid4vc/openid4vci": "0.3.0-alpha-20250602121005", + "@openid4vc/openid4vp": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "class-transformer": "0.5.1", + "rxjs": "^7.8.2", + "zod": "^3.25.56" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "dev": true, @@ -598,34 +929,440 @@ "node": ">=18" } }, - "node_modules/@emnapi/core": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", - "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", - "dev": true, - "license": "MIT", - "optional": true, + "node_modules/@digitalbazaar/bitstring": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/bitstring/-/bitstring-3.1.0.tgz", + "integrity": "sha512-Cii+Sl++qaexOvv3vchhgZFfSmtHPNIPzGegaq4ffPnflVXFu+V2qrJ17aL2+gfLxrlC/zazZFuAltyKTPq7eg==", + "license": "BSD-3-Clause", "dependencies": { - "@emnapi/wasi-threads": "1.0.4", - "tslib": "^2.4.0" + "base64url-universal": "^2.0.0", + "pako": "^2.0.4" + }, + "engines": { + "node": ">=16" } }, - "node_modules/@emnapi/runtime": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", - "dev": true, - "license": "MIT", - "optional": true, + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", + "license": "BSD-3-Clause", "dependencies": { - "tslib": "^2.4.0" + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" + }, + "engines": { + "node": ">=14.0" } }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", - "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", - "dev": true, + "node_modules/@digitalbazaar/http-client/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@digitalbazaar/http-client/node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/@digitalbazaar/http-client/node_modules/ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/@digitalbazaar/http-client/node_modules/ky-universal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } + } + }, + "node_modules/@digitalbazaar/http-client/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/@digitalbazaar/http-client/node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/@digitalbazaar/security-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", + "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", + "license": "BSD-3-Clause" + }, + "node_modules/@digitalbazaar/vc": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc/-/vc-5.0.0.tgz", + "integrity": "sha512-XmLM7Ag5W+XidGnFuxFIyUFSMnHnWEMJlHei602GG94+WzFJ6Ik8txzPQL8T18egSoiTsd1VekymbIlSimhuaQ==", + "license": "BSD-3-Clause", + "dependencies": { + "credentials-context": "^2.0.0", + "jsonld": "^8.0.0", + "jsonld-signatures": "^11.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalbazaar/vc-status-list": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list/-/vc-status-list-7.1.0.tgz", + "integrity": "sha512-p5uxKJlX13N8TcTuv9qFDeej+6bndU+Rh1Cez2MT+bXQE6Jpn5t336FBSHmcECB4yUfZQpkmV/LOcYU4lW8Ojw==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/bitstring": "^3.0.0", + "@digitalbazaar/vc": "^5.0.0", + "@digitalbazaar/vc-status-list-context": "^3.0.1", + "credentials-context": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@digitalbazaar/vc-status-list-context": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list-context/-/vc-status-list-context-3.1.1.tgz", + "integrity": "sha512-cMVtd+EV+4KN2kUG4/vsV74JVsGE6dcpod6zRoFB/AJA2W/sZbJqR44KL3G6P262+GcAECNhtnSsKsTnQ6y8+w==", + "license": "BSD-3-Clause" + }, + "node_modules/@digitalcredentials/base58-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/base58-universal/-/base58-universal-1.0.1.tgz", + "integrity": "sha512-1xKdJnfITMvrF/sCgwBx2C4p7qcNAARyIvrAOZGqIHmBaT/hAenpC8bf44qVY+UIMuCYP23kqpIfJQebQDThDQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/base64url-universal": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@digitalcredentials/base64url-universal/-/base64url-universal-2.0.6.tgz", + "integrity": "sha512-QJyK6xS8BYNnkKLhEAgQc6Tb9DMe+GkHnBAWJKITCxVRXJAFLhJnr+FsJnCThS3x2Y0UiiDAXoWjwMqtUrp4Kg==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalcredentials/bitstring": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/bitstring/-/bitstring-2.0.1.tgz", + "integrity": "sha512-9priXvsEJGI4LYHPwLqf5jv9HtQGlG0MgeuY8Q4NHN+xWz5rYMylh1TYTVThKa3XI6xF2pR2oEfKZD21eWXveQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalcredentials/base64url-universal": "^2.0.2", + "pako": "^2.0.4" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalcredentials/ed25519-signature-2020": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-signature-2020/-/ed25519-signature-2020-3.0.2.tgz", + "integrity": "sha512-R8IrR21Dh+75CYriQov3nVHKaOVusbxfk9gyi6eCAwLHKn6fllUt+2LQfuUrL7Ts/sGIJqQcev7YvkX9GvyYRA==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalcredentials/base58-universal": "^1.0.1", + "@digitalcredentials/ed25519-verification-key-2020": "^3.1.1", + "@digitalcredentials/jsonld-signatures": "^9.3.1", + "ed25519-signature-2018-context": "^1.1.0", + "ed25519-signature-2020-context": "^1.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalcredentials/ed25519-verification-key-2020": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.2.tgz", + "integrity": "sha512-ZfxNFZlA379MZpf+gV2tUYyiZ15eGVgjtCQLWlyu3frWxsumUgv++o0OJlMnrDsWGwzFMRrsXcosd5+752rLOA==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalcredentials/base58-universal": "^1.0.1", + "@stablelib/ed25519": "^1.0.1", + "base64url-universal": "^1.1.0", + "crypto-ld": "^6.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalcredentials/ed25519-verification-key-2020/node_modules/base64url-universal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", + "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/@digitalcredentials/http-client": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz", + "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==", + "license": "BSD-3-Clause", + "dependencies": { + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@digitalcredentials/jsonld": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-6.0.0.tgz", + "integrity": "sha512-5tTakj0/GsqAJi8beQFVMQ97wUJZnuxViW9xRuAATL6eOBIefGBwHkVryAgEq2I4J/xKgb/nEyw1ZXX0G8wQJQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalcredentials/http-client": "^1.0.0", + "@digitalcredentials/rdf-canonize": "^1.0.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/jsonld-signatures": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.4.0.tgz", + "integrity": "sha512-DnR+HDTm7qpcDd0wcD1w6GdlAwfHjQSgu+ahion8REkCkkMRywF+CLunU7t8AZpFB2Gr/+N8naUtiEBNje1Oew==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/security-context": "^1.0.0", + "@digitalcredentials/jsonld": "^6.0.0", + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8", + "serialize-error": "^8.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@digitalcredentials/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@digitalcredentials/jsonld/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@digitalcredentials/open-badges-context": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/open-badges-context/-/open-badges-context-2.1.0.tgz", + "integrity": "sha512-VK7X5u6OoBFxkyIFplNqUPVbo+8vFSAEoam8tSozpj05KPfcGw41Tp5p9fqMnY38oPfwtZR2yDNSctj/slrE0A==", + "license": "MIT" + }, + "node_modules/@digitalcredentials/rdf-canonize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz", + "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==", + "license": "BSD-3-Clause", + "dependencies": { + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/vc": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-6.0.1.tgz", + "integrity": "sha512-TZgLoi00Jc9uv3b6jStH+G8+bCqpHIqFw9DYODz+fVjNh197ksvcYqSndUDHa2oi0HCcK+soI8j4ba3Sa4Pl4w==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/vc-status-list": "^7.0.0", + "@digitalcredentials/ed25519-signature-2020": "^3.0.2", + "@digitalcredentials/jsonld": "^6.0.0", + "@digitalcredentials/jsonld-signatures": "^9.3.2", + "@digitalcredentials/open-badges-context": "^2.1.0", + "@digitalcredentials/vc-status-list": "^5.0.2", + "credentials-context": "^2.0.0", + "fix-esm": "^1.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/vc-status-list": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc-status-list/-/vc-status-list-5.0.2.tgz", + "integrity": "sha512-PI0N7SM0tXpaNLelbCNsMAi34AjOeuhUzMSYTkHdeqRPX7oT2F3ukyOssgr4koEqDxw9shHtxHu3fSJzrzcPMQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/vc-status-list-context": "^3.0.1", + "@digitalcredentials/bitstring": "^2.0.1", + "@digitalcredentials/vc": "^4.1.1", + "credentials-context": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/jsonld": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.2.tgz", + "integrity": "sha512-hz7YR3kv6+8UUdgMyTGl1o8NjVKKwnMry/Rh/rWeAvwL+NqgoUHorWzI3rM+PW+MPFyDC0ieXStClt9n9D9SGA==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalcredentials/http-client": "^1.0.0", + "@digitalcredentials/rdf-canonize": "^1.0.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/vc": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-4.2.0.tgz", + "integrity": "sha512-8Rxpn77JghJN7noBQdcMuzm/tB8vhDwPoFepr3oGd5w+CyJxOk2RnBlgIGlAAGA+mALFWECPv1rANfXno+hdjA==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalcredentials/jsonld": "^5.2.1", + "@digitalcredentials/jsonld-signatures": "^9.3.1", + "credentials-context": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/vc-status-list/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@digitalcredentials/vc-status-list/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@emnapi/core": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", + "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", + "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -808,6 +1545,15 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/@grpc/grpc-js": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.2.tgz", @@ -909,7 +1655,7 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -925,7 +1671,7 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=12" @@ -936,7 +1682,7 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=12" @@ -947,12 +1693,12 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -968,7 +1714,7 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -982,7 +1728,7 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -1000,7 +1746,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.4" @@ -1013,7 +1758,7 @@ "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, + "devOptional": true, "license": "ISC", "dependencies": { "camelcase": "^5.3.1", @@ -1030,7 +1775,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -1040,7 +1785,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -1054,7 +1799,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -1068,7 +1813,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -1081,7 +1826,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -1097,7 +1842,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -1110,7 +1855,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -1120,12 +1865,12 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -1495,29 +2240,17 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "dev": true, + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1525,18 +2258,33 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "dev": true, + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@js-joda/core": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.3.tgz", + "integrity": "sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==", + "license": "BSD-3-Clause" + }, + "node_modules/@js-joda/timezone": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@js-joda/timezone/-/timezone-2.3.0.tgz", + "integrity": "sha512-DHXdNs0SydSqC5f0oRJPpTcNfnpRojgBqMCFupQFv6WgeZAjU3DBx+A7JtaGPP3dHrP2Odi2N8Vf+uAm/8ynCQ==", + "license": "BSD-3-Clause", + "peerDependencies": { + "@js-joda/core": ">=1.11.0" + } + }, "node_modules/@js-sdsl/ordered-map": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", @@ -1677,6 +2425,12 @@ "sparse-bitfield": "^3.0.3" } }, + "node_modules/@multiformats/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", + "license": "MIT" + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", @@ -1742,9 +2496,36 @@ "reflect-metadata": "^0.2.2" } }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -1756,7 +2537,7 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 8" @@ -1764,7 +2545,7 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -2024,6 +2805,335 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/@openid4vc/oauth2": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-BRY43zVD8fNEfQlOzYdaGxIUM9GcBubiJcqXpDCzGB+hc7g8LToAuNaAeNe0ZJmeN5Fn+iaL9tnmlz6Lq6A+Dw==", + "license": "Apache-2.0", + "dependencies": { + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "zod": "^3.24.2" + } + }, + "node_modules/@openid4vc/openid4vci": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-7F4E6qigwhqHXIg5pRPQ8O79mVzIsHA+M5UzUwy86btLQIalJOBJK9Td6BX4H9TROeXWoPM/cWsw1s0WZsrIeA==", + "license": "Apache-2.0", + "dependencies": { + "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "zod": "^3.24.2" + } + }, + "node_modules/@openid4vc/openid4vp": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-n45JxZFTJyOlJFjW/y4bXxDYwDfm4F61RCt+qy8lDPp+DtCnw9pFGHndk6IZtP4t33/e88ntKvV2lUgIrJLLpw==", + "license": "Apache-2.0", + "dependencies": { + "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "zod": "^3.24.2" + } + }, + "node_modules/@openid4vc/utils": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-68lU8pqqGrqIjhb+/y+UjYFgbzluljIhTAEan5LyW0IKOMO0slFHfEzjn85Cv8bN1En/SuNT+U/McX/krlSSwg==", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^6.0.3", + "zod": "^3.24.2" + } + }, + "node_modules/@openid4vc/utils/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@openwallet-foundation/askar-shared": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-shared/-/askar-shared-0.3.2.tgz", + "integrity": "sha512-WQSHM5+5Vy1QMUpUTj0DpwFKYdciNcksWsft/iD6Ff+AdDERKo5Mjv/4JSIZIzXUEyq7kqqNbejl4a3TDGeU3A==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "buffer": "^6.0.3", + "tar": "^7.4.3" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "peer": true, + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.4.0.tgz", + "integrity": "sha512-TJvw5Tna/txvzzwnKUlCFd6zIz4R7qysHCaU6M2oe/MUT6EkvJDOzGGNY0hdjJYpuuHoqanQbIqEBhSLSWe1Tg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-x509-attr": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.4.0.tgz", + "integrity": "sha512-9yQz0hQ9ynGr/I1X1v64QQGfRMbviHXyqY07cy69UzXa8s4ayCKx/TncU6lDWcTKs7P/X/AEcuJcG7Xbw0cl1A==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.4.0.tgz", + "integrity": "sha512-fJiYUBCJBDkjh347zZe5H81BdJ0+OGIg0X9z06v8xXUoql3MFeENUX0JsjCaVaU9A0L85PefLPGYkIoGpTnXLQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.4.0.tgz", + "integrity": "sha512-fhpeoJ6T4nCLWT5tt3Un+BbyM1lLFnGXcRC2Ioe5ra2I0yptdjw05j20rV8BlUVzPIvUYpatq6joMQKe3ibh0w==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.4.0", + "@peculiar/asn1-pkcs8": "^2.4.0", + "@peculiar/asn1-rsa": "^2.4.0", + "@peculiar/asn1-schema": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.4.0.tgz", + "integrity": "sha512-4r2LtsAM0HWXLxetGTYKyBumky7W6C1EuiOctqhl7zFK5MHjiZ+9WOeaoeTPR1g3OEoeG7KEWIkaUOyRH4ojTw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.4.0.tgz", + "integrity": "sha512-D7paqEVpu9wuWuClMN+vR5cqJWJITNPaMoa9R+FmkJ8ywF9UaS2JFI0RYclKILNoLdLg1N4eUCoJvM+ubsIIZQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.4.0", + "@peculiar/asn1-pfx": "^2.4.0", + "@peculiar/asn1-pkcs8": "^2.4.0", + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-x509-attr": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.4.0.tgz", + "integrity": "sha512-6PP75voaEnOSlWR9sD25iCQyLgFZHXbmxvUfnnDcfL6Zh5h2iHW38+bve4LfH7a60x7fkhZZNmiYqAlAff9Img==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.4.0.tgz", + "integrity": "sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ==", + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.4.0.tgz", + "integrity": "sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.4.0.tgz", + "integrity": "sha512-Tr5Zi+wcE2sfR0gKRvsPwXoA1U8CuDnwiFbxCS+5Z1Nck9zlHj86+4/EZhwucjKXwPEHk1ekhqb3iwISY/+E/w==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", + "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.13.0.tgz", + "integrity": "sha512-r9BOb1GZ3gx58Pog7u9x70spnHlCQPFm7u/ZNlFv+uBsU7kTDY9QkUD+l+X0awopDuCK1fkH3nEIZeMDSG/jlw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.3.15", + "@peculiar/asn1-csr": "^2.3.15", + "@peculiar/asn1-ecc": "^2.3.15", + "@peculiar/asn1-pkcs9": "^2.3.15", + "@peculiar/asn1-rsa": "^2.3.15", + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "dev": true, @@ -2120,6 +3230,122 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@sd-jwt/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/core/-/core-0.10.0.tgz", + "integrity": "sha512-EuFsIHP76fwNi97dGcz2jdEenHL/AkDGcqrEA00k82Uw0HP/hvbAfB+yyPxYrd3dVaxe5PWSKvDkgDK6kKk+6Q==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/decode": "0.10.0", + "@sd-jwt/present": "0.10.0", + "@sd-jwt/types": "0.10.0", + "@sd-jwt/utils": "0.10.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/decode": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.10.0.tgz", + "integrity": "sha512-djNWMWpF1kUVh1fM/lRrmoQtTaJy8J0mS0bu96XPL5Jea5ov4klxOtSvuYmPFFcqLpxyrLOIwcbqmVQ20Mdzpg==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.10.0", + "@sd-jwt/utils": "0.10.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/jwt-status-list": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/jwt-status-list/-/jwt-status-list-0.10.0.tgz", + "integrity": "sha512-TVLLQ7qjZKKEXODXUAxoWvJmnH3bSNXsttp0hxVP/qv42Rk7OFKIjepkzy6lh+RQRWw3NK/rHiz95/Fz1m4xBQ==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.10.0", + "base64url": "^3.0.1", + "pako": "^2.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/present": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.10.0.tgz", + "integrity": "sha512-ITkyXAfdPOnfWlPgGkHpN1JxaOCC/A8Oid0CUY25AsGuwkSCw9rd+B0nwG5KBwmf1RaOG75FkvwmSCHXBlHgUg==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/decode": "0.10.0", + "@sd-jwt/types": "0.10.0", + "@sd-jwt/utils": "0.10.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/sd-jwt-vc": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.10.0.tgz", + "integrity": "sha512-418TX436dBK7FnwsLJXUXnTQByZQOonCuJ4vKyrOJ27mZXxkiFiLSaUojqoFerSw5u29nwrcRRJzd1NLdLWqkQ==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/core": "0.10.0", + "@sd-jwt/jwt-status-list": "0.10.0", + "@sd-jwt/utils": "0.10.0", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/sd-jwt-vc/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@sd-jwt/sd-jwt-vc/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@sd-jwt/types": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.10.0.tgz", + "integrity": "sha512-/UOSel/n16qi5xt/hiX3ob4y/ke+yLn+iuVZDfYUvxKTOs/g0VXRo2/RQ5Fp5Coa8SxSms0uW9kb5pv2YdY8yw==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/utils": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.10.0.tgz", + "integrity": "sha512-4ozPvrer45NCuMtVDnsDtQMxp9cI6AgaFKE/B11TBmpxER8eXjGD2xTfSpRtJokUTIQmY267jQJNVwNnC/8DOw==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.10.0", + "js-base64": "^3.7.6" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@sigstore/bundle": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", @@ -2192,41 +3418,196 @@ "dev": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.38", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.38.tgz", + "integrity": "sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "devOptional": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@sovpro/delimited-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz", + "integrity": "sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sphereon/kmp-mdoc-core": { + "version": "0.2.0-SNAPSHOT.26", + "resolved": "https://registry.npmjs.org/@sphereon/kmp-mdoc-core/-/kmp-mdoc-core-0.2.0-SNAPSHOT.26.tgz", + "integrity": "sha512-QXJ6R8ENiZV2rPMbn06cw5JKwqUYN1kzVRbYfONqE1PEXx1noQ4md7uxr2zSczi0ubKkNcbyYDNtIMTZIhGzmQ==", + "dependencies": { + "@js-joda/core": "5.6.3", + "@js-joda/timezone": "2.3.0", + "format-util": "^1.0.5" + } + }, + "node_modules/@sphereon/pex-models": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.3.2.tgz", + "integrity": "sha512-foFxfLkRwcn/MOp/eht46Q7wsvpQGlO7aowowIIb5Tz9u97kYZ2kz6K2h2ODxWuv5CRA7Q0MY8XUBGE2lfOhOQ==", + "license": "Apache-2.0" + }, + "node_modules/@sphereon/ssi-types": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.33.0.tgz", + "integrity": "sha512-OQnWLKZQU6lHlMw3JS5308q5Kctv1eT/NNQthGNXETarsgJFiD711pWMOJvi0p5kLpU8N1e7/okaH3mXsVAW0A==", + "license": "Apache-2.0", + "dependencies": { + "@noble/hashes": "1.6.1", + "@sd-jwt/decode": "^0.9.2", + "@sphereon/kmp-mdoc-core": "0.2.0-SNAPSHOT.26", + "debug": "^4.3.5", + "events": "^3.3.0", + "jwt-decode": "^4.0.0", + "uint8arrays": "3.1.1" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/decode": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.9.2.tgz", + "integrity": "sha512-jHY7hqk7EMkp6E2cB13QmXvRZN7njvAveVh+zKKy0kxpAM7DmcR4TqcDA4mc5y4lP8zWFUgbk7oGLCx2wiBq+w==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.9.2", + "@sd-jwt/utils": "0.9.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/types": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.9.2.tgz", + "integrity": "sha512-eV/MY80ekeTrqaohzPpkrgwPki6Igx69D6RniduV1Ehv6o/zaJQ2F0hY/RqBAkJhQtBQoOzouwKYHme40k1Dlw==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/utils": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.9.2.tgz", + "integrity": "sha512-GpTD0isav2f+JyMyzeyf6wV3nYcD5e3oL+sVVr/61Y3oaIBGMWLtGGGhBRMCimSnd8kbb0P9jLxvp7ioASk6vw==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.9.2", + "js-base64": "^3.7.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "license": "MIT", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/ed25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", + "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "license": "MIT", + "dependencies": { + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" } }, - "node_modules/@sinclair/typebox": { - "version": "0.34.38", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.38.tgz", - "integrity": "sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==", - "dev": true, + "node_modules/@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==", "license": "MIT" }, - "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, - "license": "BSD-3-Clause", + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==", + "license": "MIT" + }, + "node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", "dependencies": { - "type-detect": "4.0.8" + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^3.0.1" + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" } }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==", + "license": "MIT" + }, "node_modules/@ts-graphviz/adapter": { "version": "2.0.5", "dev": true, @@ -2368,7 +3749,7 @@ "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", @@ -2382,7 +3763,7 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" @@ -2392,7 +3773,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", @@ -2403,12 +3784,31 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/docker-modem": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", @@ -2439,14 +3839,44 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/express": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -2454,7 +3884,7 @@ }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" @@ -2499,11 +3929,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "24.3.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~7.10.0" @@ -2513,9 +3948,35 @@ "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true, "license": "MIT" }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@types/ssh2": { "version": "1.15.5", "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", @@ -2553,7 +4014,7 @@ }, "node_modules/@types/stack-utils": { "version": "2.0.3", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@types/uuid": { @@ -2561,6 +4022,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/validator": { + "version": "13.15.2", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz", + "integrity": "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==", + "license": "MIT" + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "dev": true, @@ -2574,9 +4041,18 @@ "@types/webidl-conversions": "*" } }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.33", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -2584,7 +4060,7 @@ }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -2878,6 +4354,29 @@ "dev": true, "license": "ISC" }, + "node_modules/@unimodules/core": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.2.0.tgz", + "integrity": "sha512-Nu+bAd/xG4B2xyYMrmV3LnDr8czUQgV1XhoL3sOOMwGydDJtfpWNodGhPhEMyKq2CXo4X7DDIo8qG6W2fk6XAQ==", + "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "license": "MIT", + "optional": true, + "dependencies": { + "expo-modules-core": "~0.4.0" + } + }, + "node_modules/@unimodules/react-native-adapter": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.5.0.tgz", + "integrity": "sha512-F2J6gVw9a57DTVTQQunp64fqD4HVBkltOpUz1L5lEccNbQlZEA7SjnqKJzXakI7uPhhN76/n+SGb7ihzHw2swQ==", + "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "license": "MIT", + "optional": true, + "dependencies": { + "expo-modules-autolinking": "^0.3.2", + "expo-modules-core": "~0.4.0" + } + }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", @@ -3205,7 +4704,6 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "dev": true, "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" @@ -3214,11 +4712,33 @@ "node": ">=6.5" } }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3306,7 +4826,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -3322,7 +4842,7 @@ "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, + "devOptional": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -3333,7 +4853,7 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -3341,7 +4861,7 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3355,12 +4875,12 @@ }, "node_modules/any-promise": { "version": "1.3.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -3513,7 +5033,7 @@ "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, + "devOptional": true, "license": "Python-2.0" }, "node_modules/array-find-index": { @@ -3524,6 +5044,12 @@ "node": ">=0.10.0" } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, "node_modules/array-union": { "version": "2.1.0", "dev": true, @@ -3534,7 +5060,13 @@ }, "node_modules/asap": { "version": "2.0.6", - "dev": true, + "devOptional": true, + "license": "MIT" + }, + "node_modules/asmcrypto.js": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", + "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==", "license": "MIT" }, "node_modules/asn1": { @@ -3545,6 +5077,20 @@ "safer-buffer": "~2.1.0" } }, + "node_modules/asn1js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", + "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/ast-module-types": { "version": "6.0.0", "dev": true, @@ -3567,6 +5113,16 @@ "version": "0.4.0", "license": "MIT" }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/axios": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", @@ -3583,6 +5139,24 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/b64-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", + "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", + "license": "MIT", + "dependencies": { + "base-64": "^0.1.0" + } + }, + "node_modules/b64u-lite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", + "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", + "license": "MIT", + "dependencies": { + "b64-lite": "^1.4.0" + } + }, "node_modules/babel-jest": { "version": "30.0.5", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.5.tgz", @@ -3641,7 +5215,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -3683,7 +5257,7 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/bare-events": { @@ -3763,9 +5337,171 @@ } } }, - "node_modules/base64-js": { - "version": "1.5.1", - "dev": true, + "node_modules/base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/base64url-universal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-2.0.0.tgz", + "integrity": "sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/borc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/borc/-/borc-3.0.0.tgz", + "integrity": "sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0", + "buffer": "^6.0.3", + "commander": "^2.15.0", + "ieee754": "^1.1.13", + "iso-url": "^1.1.5", + "json-text-sequence": "~0.3.0", + "readable-stream": "^3.6.0" + }, + "bin": { + "cbor2comment": "bin/cbor2comment.js", + "cbor2diag": "bin/cbor2diag.js", + "cbor2json": "bin/cbor2json.js", + "json2cbor": "bin/json2cbor.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/borc/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -3780,38 +5516,30 @@ "url": "https://feross.org/support" } ], - "license": "MIT" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, + "node_modules/borc/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -3821,10 +5549,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", - "dev": true, + "version": "4.25.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", + "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", "funding": [ { "type": "opencollective", @@ -3841,8 +5568,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001718", - "electron-to-chromium": "^1.5.160", + "caniuse-lite": "^1.0.30001735", + "electron-to-chromium": "^1.5.204", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -3866,7 +5593,7 @@ }, "node_modules/bser": { "version": "2.1.1", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" @@ -3884,7 +5611,7 @@ }, "node_modules/buffer": { "version": "5.7.1", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -3917,7 +5644,7 @@ "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, + "devOptional": true, "license": "MIT" }, "node_modules/buildcheck": { @@ -3936,6 +5663,15 @@ "node": ">=0.10.0" } }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", @@ -4079,17 +5815,16 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001724", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001724.tgz", - "integrity": "sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==", - "dev": true, + "version": "1.0.30001735", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz", + "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==", "funding": [ { "type": "opencollective", @@ -4106,9 +5841,15 @@ ], "license": "CC-BY-4.0" }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0" + }, "node_modules/chalk": { "version": "4.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -4164,6 +5905,23 @@ "dev": true, "license": "MIT" }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" + }, + "node_modules/class-validator": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", + "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", + "license": "MIT", + "dependencies": { + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.10.53", + "validator": "^13.9.0" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "dev": true, @@ -4177,7 +5935,7 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -4188,7 +5946,7 @@ }, "node_modules/cliui": { "version": "8.0.1", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -4199,25 +5957,9 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "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/clone": { "version": "1.0.4", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -4243,7 +5985,7 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4254,7 +5996,7 @@ }, "node_modules/color-name": { "version": "1.1.4", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -4269,7 +6011,7 @@ }, "node_modules/commander": { "version": "7.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 10" @@ -4280,6 +6022,12 @@ "dev": true, "license": "MIT" }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "license": "MIT" + }, "node_modules/compress-commons": { "version": "6.0.2", "dev": true, @@ -4335,12 +6083,47 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", - "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, "node_modules/core-util-is": { @@ -4435,11 +6218,68 @@ "dev": true, "license": "MIT" }, + "node_modules/credentials-context": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz", + "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-fetch/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==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/cross-fetch/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==", + "license": "BSD-2-Clause" + }, + "node_modules/cross-fetch/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==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -4450,6 +6290,24 @@ "node": ">= 8" } }, + "node_modules/crypto-ld": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-6.0.0.tgz", + "integrity": "sha512-XWL1LslqggNoaCI/m3I7HcvaSt9b2tYzdrXO+jHLUj9G1BvRfvV7ZTFDVY5nifYuIGAPdAGu7unPxLRustw3VA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/date-format": { "version": "4.0.14", "dev": true, @@ -4458,6 +6316,15 @@ "node": ">=4.0" } }, + "node_modules/dcql": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dcql/-/dcql-0.3.0.tgz", + "integrity": "sha512-Q/yEf1itIpAYpLbGJsdGMj5Q2Ug0/NMYmyYiJWlKjk7LQOkDJ5Qh6ebLbiZBQ7gsvNBGWiOhtL306j5WdXcOcA==", + "license": "MIT", + "dependencies": { + "valibot": "1.0.0-beta.8" + } + }, "node_modules/debug": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", @@ -4483,6 +6350,15 @@ "node": "*" } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, "node_modules/dedent": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", @@ -4500,7 +6376,7 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4.0.0" @@ -4510,14 +6386,13 @@ "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, "license": "MIT" }, "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, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4525,7 +6400,7 @@ }, "node_modules/defaults": { "version": "1.0.4", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "clone": "^1.0.2" @@ -4541,6 +6416,15 @@ "node": ">=0.4.0" } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/dependency-tree": { "version": "11.0.1", "dev": true, @@ -4566,6 +6450,16 @@ "node": ">=18" } }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -4763,6 +6657,12 @@ "wrappy": "1" } }, + "node_modules/did-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", + "license": "Apache-2.0" + }, "node_modules/diff": { "version": "4.0.2", "dev": true, @@ -4895,14 +6795,36 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, + "devOptional": true, + "license": "MIT" + }, + "node_modules/ec-compression": { + "version": "0.0.1-alpha.12", + "resolved": "https://registry.npmjs.org/ec-compression/-/ec-compression-0.0.1-alpha.12.tgz", + "integrity": "sha512-rfsgHPnS/q8SiiJyaJ5w+qpkLtvtvEFOXoh40VmjH+Xs1pjzCCKwhd9Un3BQV+1+Qg0es5VQnzwZVJ7fjzfN+A==" + }, + "node_modules/ed25519-signature-2018-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", + "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", + "license": "BSD-3-Clause" + }, + "node_modules/ed25519-signature-2020-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", + "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==", + "license": "BSD-3-Clause" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.171", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.171.tgz", - "integrity": "sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==", - "dev": true, + "version": "1.5.207", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz", + "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==", "license": "ISC" }, "node_modules/emittery": { @@ -4920,14 +6842,22 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -5001,7 +6931,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -5046,17 +6976,22 @@ }, "node_modules/escalade": { "version": "3.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, "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, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -5323,7 +7258,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -5374,15 +7308,22 @@ }, "node_modules/esutils": { "version": "2.0.3", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5394,7 +7335,6 @@ }, "node_modules/events": { "version": "3.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -5451,35 +7391,199 @@ "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8.0" + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.5.tgz", + "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.0.5", + "@jest/get-type": "30.0.1", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/expo-modules-autolinking": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.3.4.tgz", + "integrity": "sha512-Mu3CIMqEAI8aNM18U/l+7CCi+afU8dERrKjDDEx/Hu7XX3v3FcnnP+NuWDLY/e9/ETzwTJaqoRoBuzhawsuLWw==", + "license": "MIT", + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "~5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/expo-modules-autolinking/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expo-modules-autolinking/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/expo-modules-autolinking/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/expo-modules-core": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.4.10.tgz", + "integrity": "sha512-uCZA3QzF0syRaHwYY99iaNhnye4vSQGsJ/y6IAiesXdbeVahWibX4G1KoKNPUyNsKXIM4tqA+4yByUSvJe4AAw==", + "license": "MIT", + "optional": true, + "dependencies": { + "compare-versions": "^3.4.0", + "invariant": "^2.2.4" } }, - "node_modules/expect": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.5.tgz", - "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==", - "dev": true, + "node_modules/expo-modules-core/node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "license": "MIT", + "optional": true + }, + "node_modules/expo-random": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-14.0.1.tgz", + "integrity": "sha512-gX2mtR9o+WelX21YizXUCD/y+a4ZL+RDthDmFkHxaYbdzjSYTn8u/igoje/l3WEO+/RYspmqUFa8w/ckNbt6Vg==", + "deprecated": "This package is now deprecated in favor of expo-crypto, which provides the same functionality. To migrate, replace all imports from expo-random with imports from expo-crypto.", "license": "MIT", + "optional": true, "dependencies": { - "@jest/expect-utils": "30.0.5", - "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "base64-js": "^1.3.0" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "peerDependencies": { + "expo": "*" } }, "node_modules/exponential-backoff": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "dev": true, + "devOptional": true, "license": "Apache-2.0" }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "license": "MIT" @@ -5491,7 +7595,7 @@ }, "node_modules/fast-glob": { "version": "3.3.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5506,7 +7610,7 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -5521,23 +7625,28 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "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, "license": "MIT" }, + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "license": "Apache-2.0" + }, "node_modules/fast-uri": { "version": "3.0.3", "license": "BSD-3-Clause" }, "node_modules/fastq": { "version": "1.17.1", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -5545,12 +7654,26 @@ }, "node_modules/fb-watchman": { "version": "2.0.2", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, + "node_modules/fetch-blob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", + "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", + "license": "MIT", + "engines": { + "node": "^10.17.0 || >=12.3.0" + }, + "peerDependenciesMeta": { + "domexception": { + "optional": true + } + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -5598,7 +7721,7 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -5607,11 +7730,53 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "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, + "devOptional": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -5624,6 +7789,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/fix-esm": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-esm/-/fix-esm-1.0.1.tgz", + "integrity": "sha512-EZtb7wPXZS54GaGxaWxMlhd1DUDCnAg5srlYdu/1ZVeW+7wwR3Tp59nu52dXByFs3MBRq+SByx1wDOJpRvLEXw==", + "license": "WTFPL OR CC0-1.0", + "dependencies": { + "@babel/core": "^7.14.6", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5" + } + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -5663,7 +7839,7 @@ }, "node_modules/foreground-child": { "version": "3.3.0", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -5678,7 +7854,7 @@ }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", - "dev": true, + "devOptional": true, "license": "ISC", "engines": { "node": ">=14" @@ -5703,6 +7879,65 @@ "node": ">= 6" } }, + "node_modules/format-util": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", + "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==", + "license": "MIT" + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/formdata-polyfill/node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -5738,14 +7973,13 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, + "devOptional": true, "license": "ISC" }, "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, "license": "MIT", "optional": true, @@ -5765,7 +7999,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -5785,7 +8018,7 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "dev": true, + "devOptional": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -5822,7 +8055,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.0.0" @@ -5865,9 +8098,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-from-current-process-h": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz", + "integrity": "sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==", + "license": "MIT" + }, + "node_modules/get-uv-event-loop-napi-h": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz", + "integrity": "sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==", + "license": "MIT", + "dependencies": { + "get-symbol-from-current-process-h": "^1.0.1" + } + }, "node_modules/glob": { "version": "7.2.3", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -5901,7 +8149,7 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5909,7 +8157,7 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -5976,7 +8224,7 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/graphemer": { @@ -6010,7 +8258,7 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -6083,6 +8331,22 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -6122,7 +8386,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -6134,7 +8397,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "dev": true, "funding": [ { "type": "github", @@ -6153,7 +8415,7 @@ }, "node_modules/ignore": { "version": "5.3.2", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 4" @@ -6211,7 +8473,7 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -6219,7 +8481,7 @@ }, "node_modules/inflight": { "version": "1.0.6", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -6228,7 +8490,6 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, "license": "ISC" }, "node_modules/ini": { @@ -6241,6 +8502,16 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "optional": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/ip-address": { "version": "9.0.5", "dev": true, @@ -6253,16 +8524,27 @@ "node": ">= 12" } }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "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, + "devOptional": true, "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.15.1", - "dev": true, + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "devOptional": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -6276,7 +8558,7 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6284,7 +8566,7 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -6302,7 +8584,7 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -6321,7 +8603,7 @@ }, "node_modules/is-number": { "version": "7.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -6388,12 +8670,42 @@ }, "node_modules/isexe": { "version": "2.0.0", - "dev": true, + "devOptional": true, "license": "ISC" }, + "node_modules/iso-url": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", + "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/isomorphic-webcrypto": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", + "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", + "license": "MIT", + "dependencies": { + "@peculiar/webcrypto": "^1.0.22", + "asmcrypto.js": "^0.22.0", + "b64-lite": "^1.3.1", + "b64u-lite": "^1.0.1", + "msrcrypto": "^1.5.6", + "str2buf": "^1.3.0", + "webcrypto-shim": "^0.1.4" + }, + "optionalDependencies": { + "@unimodules/core": "*", + "@unimodules/react-native-adapter": "*", + "expo-random": "*", + "react-native-securerandom": "^0.1.1" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" @@ -6462,7 +8774,7 @@ }, "node_modules/jackspeak": { "version": "3.4.3", - "dev": true, + "devOptional": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -7114,16 +9426,21 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/js-base64": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "license": "BSD-3-Clause" + }, "node_modules/js-tokens": { "version": "4.0.0", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -7141,7 +9458,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -7185,9 +9501,20 @@ "version": "5.0.1", "license": "ISC" }, + "node_modules/json-text-sequence": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.3.0.tgz", + "integrity": "sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA==", + "license": "MIT", + "dependencies": { + "@sovpro/delimited-stream": "^1.1.0" + }, + "engines": { + "node": ">=10.18.0" + } + }, "node_modules/json5": { "version": "2.2.3", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -7204,6 +9531,66 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jsonld-signatures": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz", + "integrity": "sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/security-context": "^1.0.0", + "jsonld": "^8.0.0", + "rdf-canonize": "^4.0.1", + "serialize-error": "^8.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsonld-signatures/node_modules/rdf-canonize": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", + "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonld/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -7214,6 +9601,12 @@ ], "license": "MIT" }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", + "license": "MIT" + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -7224,6 +9617,43 @@ "json-buffer": "3.0.1" } }, + "node_modules/ky": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", + "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/ky-universal": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", + "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "3.0.0-beta.9" + }, + "engines": { + "node": ">=10.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.17.0", + "web-streams-polyfill": ">=2.0.0" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } + } + }, "node_modules/lazystream": { "version": "1.0.1", "dev": true, @@ -7266,7 +9696,7 @@ "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, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -7286,6 +9716,12 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.12.12", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.12.tgz", + "integrity": "sha512-aWVR6xXYYRvnK0v/uIwkf5Lthq9Jpn0N8TISW/oDTWlYB2sOimuiLn9Q26aUw4KxkJoiT8ACdiw44Y8VwKFIfQ==", + "license": "MIT" + }, "node_modules/libsodium-sumo": { "version": "0.7.15", "license": "ISC" @@ -7401,14 +9837,14 @@ "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, + "devOptional": true, "license": "MIT" }, "node_modules/locate-path": { "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, + "devOptional": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -7484,11 +9920,29 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru_map": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", + "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", + "license": "MIT" + }, "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, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -7566,7 +10020,6 @@ }, "node_modules/make-error": { "version": "1.3.6", - "dev": true, "license": "ISC" }, "node_modules/make-fetch-happen": { @@ -7594,7 +10047,7 @@ }, "node_modules/makeerror": { "version": "1.0.12", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" @@ -7607,27 +10060,54 @@ "node": ">= 0.4" } }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/memory-pager": { "version": "1.5.0", "dev": true, "license": "MIT" }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 8" } }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.8", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -7637,6 +10117,18 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "license": "MIT", @@ -7664,7 +10156,7 @@ }, "node_modules/minimatch": { "version": "9.0.5", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -7678,7 +10170,7 @@ }, "node_modules/minimist": { "version": "1.2.8", - "dev": true, + "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7686,7 +10178,6 @@ }, "node_modules/minipass": { "version": "7.1.2", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -7826,7 +10317,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -7953,6 +10443,18 @@ "version": "2.1.3", "license": "MIT" }, + "node_modules/msrcrypto": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", + "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==", + "license": "Apache-2.0" + }, + "node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, "node_modules/nan": { "version": "2.22.0", "dev": true, @@ -7961,7 +10463,6 @@ }, "node_modules/nanoid": { "version": "3.3.8", - "dev": true, "funding": [ { "type": "github", @@ -8014,6 +10515,49 @@ "dev": true, "license": "MIT" }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.0.0-beta.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", + "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^2.1.1" + }, + "engines": { + "node": "^10.17 || >=12.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/node-gyp": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", @@ -8039,6 +10583,17 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-gyp/node_modules/abbrev": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", @@ -8147,14 +10702,13 @@ }, "node_modules/node-int64": { "version": "0.4.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, "license": "MIT" }, "node_modules/node-source-walk": { @@ -8182,7 +10736,7 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8318,7 +10872,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.3", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8327,9 +10883,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -8416,7 +10984,7 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -8432,7 +11000,7 @@ "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, + "devOptional": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -8461,7 +11029,7 @@ "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, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -8469,7 +11037,7 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "dev": true, + "devOptional": true, "license": "BlueOak-1.0.0" }, "node_modules/pacote": { @@ -8504,6 +11072,12 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8551,9 +11125,18 @@ "node": ">=6" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-exists": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -8561,7 +11144,7 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8569,7 +11152,7 @@ }, "node_modules/path-key": { "version": "3.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -8577,12 +11160,12 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", - "dev": true, + "devOptional": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -8597,9 +11180,15 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", - "dev": true, + "devOptional": true, "license": "ISC" }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, "node_modules/path-type": { "version": "4.0.0", "dev": true, @@ -8610,12 +11199,11 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -8628,7 +11216,7 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 6" @@ -8713,7 +11301,7 @@ }, "node_modules/postcss": { "version": "8.4.49", - "dev": true, + "devOptional": true, "funding": [ { "type": "opencollective", @@ -8956,6 +11544,19 @@ "node": ">=12.0.0" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "license": "MIT" @@ -8973,7 +11574,7 @@ }, "node_modules/punycode": { "version": "2.3.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -8996,6 +11597,24 @@ ], "license": "MIT" }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/qs": { "version": "6.14.0", "license": "BSD-3-Clause", @@ -9009,9 +11628,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -9038,9 +11675,45 @@ "dev": true, "license": "MIT" }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rc": { "version": "1.2.8", - "dev": true, + "devOptional": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", @@ -9054,22 +11727,47 @@ }, "node_modules/rc/node_modules/ini": { "version": "1.3.8", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/react-is": { "version": "18.3.1", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/react-native-securerandom": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", + "integrity": "sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw==", + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "*" + }, + "peerDependencies": { + "react-native": "*" + } + }, "node_modules/read-installed": { "version": "4.0.3", "dev": true, @@ -9141,7 +11839,6 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -9182,13 +11879,31 @@ "once": "^1.3.0" } }, + "node_modules/ref-struct-di": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz", + "integrity": "sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g==", + "license": "MIT", + "dependencies": { + "debug": "^3.1.0" + } + }, + "node_modules/ref-struct-di/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/reflect-metadata": { "version": "0.2.2", "license": "Apache-2.0" }, "node_modules/require-directory": { "version": "2.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9227,7 +11942,7 @@ }, "node_modules/resolve": { "version": "1.22.8", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -9304,7 +12019,7 @@ }, "node_modules/reusify": { "version": "1.0.4", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -9318,7 +12033,7 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -9338,9 +12053,17 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -9367,7 +12090,6 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, "license": "MIT" }, "node_modules/sass-lookup": { @@ -9384,30 +12106,120 @@ "node": ">=18" } }, - "node_modules/sass-lookup/node_modules/commander": { - "version": "12.1.0", - "dev": true, + "node_modules/sass-lookup/node_modules/commander": { + "version": "12.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "devOptional": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, "node_modules/shebang-command": { "version": "2.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -9418,7 +12230,7 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -9490,7 +12302,7 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/sigstore": { @@ -9513,7 +12325,7 @@ }, "node_modules/slash": { "version": "3.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -9566,7 +12378,7 @@ }, "node_modules/source-map": { "version": "0.6.1", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -9574,7 +12386,7 @@ }, "node_modules/source-map-js": { "version": "1.2.1", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -9659,6 +12471,15 @@ "dev": true, "license": "ISC" }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "dev": true, @@ -9713,7 +12534,7 @@ }, "node_modules/stack-utils": { "version": "2.0.6", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" @@ -9724,12 +12545,117 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "license": "MIT", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/str2buf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz", + "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==", + "license": "MIT" + }, "node_modules/stream-to-array": { "version": "2.3.0", "dev": true, @@ -9764,9 +12690,17 @@ "bare-events": "^2.2.0" } }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -9788,7 +12722,7 @@ }, "node_modules/string-width": { "version": "4.2.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -9802,7 +12736,7 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -9828,7 +12762,7 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -9840,7 +12774,7 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -9904,7 +12838,7 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -9915,7 +12849,7 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -10078,7 +13012,7 @@ "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, + "devOptional": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", @@ -10093,7 +13027,7 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -10104,7 +13038,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -10202,12 +13136,12 @@ }, "node_modules/tmpl": { "version": "1.0.5", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -10216,6 +13150,15 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tr46": { "version": "5.0.0", "dev": true, @@ -10533,7 +13476,24 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, + "license": "0BSD" + }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "license": "0BSD" }, "node_modules/tuf-js": { @@ -10573,17 +13533,42 @@ "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, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/type-fest": { + "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==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typescript": { "version": "5.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -10642,6 +13627,15 @@ "node": ">=0.8.0" } }, + "node_modules/uint8arrays": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", + "dependencies": { + "multiformats": "^9.4.2" + } + }, "node_modules/undici": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/undici/-/undici-7.13.0.tgz", @@ -10656,7 +13650,6 @@ "version": "7.10.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", - "dev": true, "license": "MIT" }, "node_modules/unique-filename": { @@ -10693,6 +13686,15 @@ "node": ">= 4.0.0" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -10732,7 +13734,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -10771,7 +13772,6 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/util-extend": { @@ -10779,6 +13779,15 @@ "dev": true, "license": "MIT" }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "11.1.0", "funding": [ @@ -10810,6 +13819,20 @@ "node": ">=10.12.0" } }, + "node_modules/valibot": { + "version": "1.0.0-beta.8", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.0.0-beta.8.tgz", + "integrity": "sha512-OPAwJZtowb0j91b+bd77+ny7D1VVzsCzD7Jl9waLUlMprTsfI9Y3HHbW3hAQD7wKDKHsmGEesuiYWaYvcZL2wg==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "dev": true, @@ -10829,6 +13852,30 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/validator": { + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/walkdir": { "version": "0.4.1", "dev": true, @@ -10839,7 +13886,7 @@ }, "node_modules/walker": { "version": "1.0.8", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" @@ -10847,12 +13894,50 @@ }, "node_modules/wcwidth": { "version": "1.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, + "node_modules/web-did-resolver": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.30.tgz", + "integrity": "sha512-lsv0T+y/zD1bEVkcNfcppk4hQXBlqqoXfYcRG4183Yv53FkY29HNPGErwkNI/AG+lxxsUIR77JqS6pn9uHw/Vw==", + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "^4.1.0", + "did-resolver": "^4.1.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webcrypto-core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", + "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.13", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.7.0" + } + }, + "node_modules/webcrypto-shim": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz", + "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==", + "license": "MIT" + }, "node_modules/webidl-conversions": { "version": "7.0.0", "dev": true, @@ -10875,7 +13960,7 @@ }, "node_modules/which": { "version": "2.0.2", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -10891,7 +13976,6 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10904,10 +13988,28 @@ "dev": true, "license": "MIT" }, + "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==", + "devOptional": true, + "license": "MIT", + "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/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -10923,7 +14025,7 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -10953,9 +14055,30 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/y18n": { "version": "5.0.8", - "dev": true, + "devOptional": true, "license": "ISC", "engines": { "node": ">=10" @@ -10965,7 +14088,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, "license": "ISC" }, "node_modules/yaml": { @@ -10981,7 +14103,7 @@ }, "node_modules/yargs": { "version": "17.7.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -10998,7 +14120,7 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "dev": true, + "devOptional": true, "license": "ISC", "engines": { "node": ">=12" @@ -11014,7 +14136,7 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -11074,6 +14196,15 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "packages/app-runtime": { "name": "@nmshd/app-runtime", "license": "MIT", diff --git a/package.json b/package.json index 9366f9bf2..b0e174b63 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,12 @@ "teardown:backbone": "docker compose -p runtime-test-backbone -f .dev/compose.backbone.yml down -v", "test:teardown": "docker compose -f .dev/compose.yml down -fsv" }, + "dependencies": { + "@credo-ts/askar": "v0.6.0-alpha-20250704130724", + "@credo-ts/core": "v0.6.0-alpha-20250704130724", + "@credo-ts/node": "v0.6.0-alpha-20250704130724", + "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724" + }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.3", "@js-soft/license-check": "^1.0.9", From ca57c0eab24b9ac8dc36cbefdb07be94211298e0 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 20 Aug 2025 15:04:59 +0200 Subject: [PATCH 07/75] feat: add first simple test --- .../modules/openid4vc/OpenId4VcController.ts | 2 ++ .../src/extensibility/ConsumptionServices.ts | 14 ++++++++++++-- .../facades/consumption/index.ts | 2 +- .../test/consumption/openid4vc.test.ts | 19 +++++++++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 packages/runtime/test/consumption/openid4vc.test.ts diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index dde18229a..f6444c798 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -12,6 +12,8 @@ export class OpenId4VcController extends ConsumptionBaseController { // This is a dummy implementation for the sake of example. // In a real implementation, you would process the credential offer here. + this.log.info("Processing credential offer:", credentialOffer); + // TODO: insert holder code here // currently we are simply creating a dummy IdentityAttribute diff --git a/packages/runtime/src/extensibility/ConsumptionServices.ts b/packages/runtime/src/extensibility/ConsumptionServices.ts index 1f0e439e8..e3330e09e 100644 --- a/packages/runtime/src/extensibility/ConsumptionServices.ts +++ b/packages/runtime/src/extensibility/ConsumptionServices.ts @@ -1,5 +1,14 @@ import { Inject } from "@nmshd/typescript-ioc"; -import { AttributesFacade, DraftsFacade, IdentityMetadataFacade, IncomingRequestsFacade, NotificationsFacade, OutgoingRequestsFacade, SettingsFacade } from "./facades/consumption"; +import { + AttributesFacade, + DraftsFacade, + IdentityMetadataFacade, + IncomingRequestsFacade, + NotificationsFacade, + OpenId4VcFacade, + OutgoingRequestsFacade, + SettingsFacade +} from "./facades/consumption"; export class ConsumptionServices { public constructor( @@ -9,6 +18,7 @@ export class ConsumptionServices { @Inject public readonly incomingRequests: IncomingRequestsFacade, @Inject public readonly outgoingRequests: OutgoingRequestsFacade, @Inject public readonly notifications: NotificationsFacade, - @Inject public readonly identityMetadata: IdentityMetadataFacade + @Inject public readonly identityMetadata: IdentityMetadataFacade, + @Inject public readonly openId4Vc: OpenId4VcFacade ) {} } diff --git a/packages/runtime/src/extensibility/facades/consumption/index.ts b/packages/runtime/src/extensibility/facades/consumption/index.ts index 5341a1cb9..b0f7ce168 100644 --- a/packages/runtime/src/extensibility/facades/consumption/index.ts +++ b/packages/runtime/src/extensibility/facades/consumption/index.ts @@ -3,6 +3,6 @@ export * from "./DraftsFacade"; export * from "./IdentityMetadataFacade"; export * from "./IncomingRequestsFacade"; export * from "./NotificationsFacade"; -export * from "./OpenId4VcHolderFacade"; +export * from "./OpenId4VcFacade"; export * from "./OutgoingRequestsFacade"; export * from "./SettingsFacade"; diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts new file mode 100644 index 000000000..5164950ab --- /dev/null +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -0,0 +1,19 @@ +import { ConsumptionServices } from "../../src"; +import { RuntimeServiceProvider } from "../lib"; + +const runtimeServiceProvider = new RuntimeServiceProvider(); +let consumptionServices: ConsumptionServices; + +beforeAll(async () => { + const runtimeServices = await runtimeServiceProvider.launch(1); + consumptionServices = runtimeServices[0].consumption; +}, 30000); + +afterAll(async () => await runtimeServiceProvider.stop()); + +describe("OpenID4VC", () => { + test("should process a given credential offer", async () => { + const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ credentialOfferUrl: "https://example.com/credential-offer" }); + expect(result).toBeDefined(); + }, 10000); +}); From 39a1ddbb9409fc5cbc495d0cf28a2d35a77f87df Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 20 Aug 2025 16:33:50 +0200 Subject: [PATCH 08/75] feat: first working version --- package-lock.json | 172 +++++++++++++- package.json | 3 +- .../modules/openid4vc/OpenId4VcController.ts | 16 +- .../src/modules/openid4vc/local/BaseAgent.ts | 68 ++++++ .../src/modules/openid4vc/local/Holder.ts | 222 ++++++++++++++++++ packages/runtime/package.json | 2 +- .../runtime/src/useCases/common/Schemas.ts | 19 ++ .../test/consumption/openid4vc.test.ts | 8 +- 8 files changed, 494 insertions(+), 16 deletions(-) create mode 100644 packages/consumption/src/modules/openid4vc/local/BaseAgent.ts create mode 100644 packages/consumption/src/modules/openid4vc/local/Holder.ts diff --git a/package-lock.json b/package-lock.json index b22cd5d5c..bfa372f5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,8 @@ "@credo-ts/askar": "v0.6.0-alpha-20250704130724", "@credo-ts/core": "v0.6.0-alpha-20250704130724", "@credo-ts/node": "v0.6.0-alpha-20250704130724", - "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724" + "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", + "@openwallet-foundation/askar-nodejs": "^0.3.2" }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.3", @@ -2871,12 +2872,28 @@ "ieee754": "^1.2.1" } }, + "node_modules/@openwallet-foundation/askar-nodejs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-nodejs/-/askar-nodejs-0.3.2.tgz", + "integrity": "sha512-kHZaPl32azKzqT/+ksRqGXNs9lxTrhbuWVuILS1HNGXA+A5vSINRA8WwDHk2KGZ9WP7jhszbPx804cfRKrrBPA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@2060.io/ffi-napi": "^4.0.9", + "@2060.io/ref-napi": "^3.0.6", + "@openwallet-foundation/askar-shared": "0.3.2", + "ref-array-di": "^1.2.2", + "ref-struct-di": "^1.1.1" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/@openwallet-foundation/askar-shared": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-shared/-/askar-shared-0.3.2.tgz", "integrity": "sha512-WQSHM5+5Vy1QMUpUTj0DpwFKYdciNcksWsft/iD6Ff+AdDERKo5Mjv/4JSIZIzXUEyq7kqqNbejl4a3TDGeU3A==", "license": "Apache-2.0", - "peer": true, "dependencies": { "buffer": "^6.0.3", "tar": "^7.4.3" @@ -2901,7 +2918,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -2912,7 +2928,6 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "license": "BlueOak-1.0.0", - "peer": true, "engines": { "node": ">=18" } @@ -2922,7 +2937,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "license": "MIT", - "peer": true, "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -2938,7 +2952,6 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "license": "ISC", - "peer": true, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -2956,7 +2969,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "license": "BlueOak-1.0.0", - "peer": true, "engines": { "node": ">=18" } @@ -5050,6 +5062,34 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "node_modules/array-index": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", + "integrity": "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "es6-symbol": "^3.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/array-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/array-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/array-union": { "version": "2.1.0", "dev": true, @@ -6299,6 +6339,19 @@ "node": ">=8.3.0" } }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/data-uri-to-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", @@ -6974,6 +7027,46 @@ "node": ">= 0.4" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/escalade": { "version": "3.2.0", "license": "MIT", @@ -7225,6 +7318,21 @@ "node": "*" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -7322,6 +7430,16 @@ "node": ">= 0.6" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "license": "MIT", @@ -7584,6 +7702,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "license": "MIT" @@ -10515,6 +10642,12 @@ "dev": true, "license": "MIT" }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -11879,6 +12012,25 @@ "once": "^1.3.0" } }, + "node_modules/ref-array-di": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ref-array-di/-/ref-array-di-1.2.2.tgz", + "integrity": "sha512-jhCmhqWa7kvCVrWhR/d7RemkppqPUdxEil1CtTtm7FkZV8LcHHCK3Or9GinUiFP5WY3k0djUkMvhBhx49Jb2iA==", + "license": "MIT", + "dependencies": { + "array-index": "^1.0.0", + "debug": "^3.1.0" + } + }, + "node_modules/ref-array-di/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/ref-struct-di": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz", @@ -13516,6 +13668,12 @@ "dev": true, "license": "Unlicense" }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index b0e174b63..f3cf18840 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,8 @@ "@credo-ts/askar": "v0.6.0-alpha-20250704130724", "@credo-ts/core": "v0.6.0-alpha-20250704130724", "@credo-ts/node": "v0.6.0-alpha-20250704130724", - "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724" + "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", + "@openwallet-foundation/askar-nodejs": "^0.3.2" }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.3", diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index f6444c798..12dcb4aee 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,7 +1,7 @@ -import { IdentityAttribute } from "@nmshd/content"; import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; +import { Holder } from "./local/Holder"; export class OpenId4VcController extends ConsumptionBaseController { public constructor(parent: ConsumptionController) { @@ -12,17 +12,23 @@ export class OpenId4VcController extends ConsumptionBaseController { // This is a dummy implementation for the sake of example. // In a real implementation, you would process the credential offer here. - this.log.info("Processing credential offer:", credentialOffer); + this._log.error("Processing credential offer:", credentialOffer); - // TODO: insert holder code here + const holder = new Holder(3000, "OpenId4VcHolder"); + const res = await holder.resolveCredentialOffer(credentialOffer); + this._log.error("Resolved credential offer:", res); + const credential = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); + this._log.error("Fetched credentials:", credential); + + // TODO: ask britta // currently we are simply creating a dummy IdentityAttribute - await this.parent.attributes.createRepositoryAttribute({ + /* await this._parent.attributes.createRepositoryAttribute({ content: IdentityAttribute.from({ value: { value: credentialOffer }, owner: this.parent.accountController.identity.address }) - }); + }); */ return { status: "success", diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts new file mode 100644 index 000000000..98b36e2f6 --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -0,0 +1,68 @@ +import { transformPrivateKeyToPrivateJwk } from "@credo-ts/askar"; +import { Agent, Buffer, ConsoleLogger, DidKey, LogLevel, type InitConfig, type KeyDidCreateOptions, type ModulesMap, type VerificationMethod } from "@credo-ts/core"; +import { agentDependencies } from "@credo-ts/node"; + +export class BaseAgent { + public port: number; + public name: string; + public config: InitConfig; + public agent: Agent; + public did!: string; + public didKey!: DidKey; + public kid!: string; + public verificationMethod!: VerificationMethod; + + public constructor({ port, name, modules }: { port: number; name: string; modules: AgentModules }) { + this.name = name; + this.port = port; + + const config = { + label: name, + allowInsecureHttpUrls: true, + logger: new ConsoleLogger(LogLevel.off) + } satisfies InitConfig; + + this.config = config; + + this.agent = new Agent({ + config, + dependencies: agentDependencies, + modules + }); + } + + public async initializeAgent(secretPrivateKey: string): Promise { + await this.agent.initialize(); + + const { privateJwk } = transformPrivateKeyToPrivateJwk({ + type: { + crv: "Ed25519", + kty: "OKP" + }, + privateKey: Buffer.from(secretPrivateKey) + }); + + const { keyId } = await this.agent.kms.importKey({ + privateJwk + }); + + const didCreateResult = await this.agent.dids.create({ + method: "key", + options: { + keyId + } + }); + + this.did = didCreateResult.didState.did!; + this.didKey = DidKey.fromDid(this.did); + this.kid = `${this.did}#${this.didKey.publicJwk.fingerprint}`; + + const verificationMethod = didCreateResult.didState.didDocument?.dereferenceKey(this.kid, ["authentication"]); + if (!verificationMethod) throw new Error("No verification method found"); + this.verificationMethod = verificationMethod; + } + + public async shutdown(): Promise { + await this.agent.shutdown(); + } +} diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts new file mode 100644 index 000000000..89d43b1e2 --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -0,0 +1,222 @@ +import { AskarModule, AskarModuleConfigStoreOptions } from "@credo-ts/askar"; +import { DidJwk, DidKey, JwkDidCreateOptions, KeyDidCreateOptions, Kms, Mdoc, W3cJsonLdVerifiableCredential, W3cJwtVerifiableCredential, X509Module } from "@credo-ts/core"; +import { + OpenId4VcHolderModule, + OpenId4VciAuthorizationFlow, + authorizationCodeGrantIdentifier, + preAuthorizedCodeGrantIdentifier, + type OpenId4VciMetadata, + type OpenId4VciResolvedCredentialOffer, + type OpenId4VpResolvedAuthorizationRequest +} from "@credo-ts/openid4vc"; +import { askar } from "@openwallet-foundation/askar-nodejs"; +import { BaseAgent } from "./BaseAgent"; + +function getOpenIdHolderModules(askarStorageConfig: AskarModuleConfigStoreOptions) { + return { + askar: new AskarModule({ askar, store: askarStorageConfig }), + openId4VcHolder: new OpenId4VcHolderModule(), + x509: new X509Module({ + getTrustedCertificatesForVerification: (_agentContext, { certificateChain }) => { + // console.log(greenText(`dyncamically trusting certificate ${certificateChain[0].getIssuerNameField("C")} for verification of ${verification.type}`, true)); + + return [certificateChain[0].toString("pem")]; + } + }) + } as const; +} + +export class Holder extends BaseAgent> { + public client = { + clientId: "wallet", + redirectUri: "http://localhost:3000/redirect" + }; + + public constructor(port: number, name: string) { + super({ + port, + name, + modules: getOpenIdHolderModules({ + id: name, + key: name + }) + }); + } + + public static async build(): Promise { + const holder = new Holder(3000, `OpenId4VcHolder ${Math.random().toString()}`); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + + return holder; + } + + public async resolveCredentialOffer(credentialOffer: string): Promise { + return await this.agent.modules.openId4VcHolder.resolveCredentialOffer(credentialOffer); + } + + public async resolveIssuerMetadata(credentialIssuer: string): Promise { + return await this.agent.modules.openId4VcHolder.resolveIssuerMetadata(credentialIssuer); + } + + public async initiateAuthorization(resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, credentialsToRequest: string[]): Promise { + const grants = resolvedCredentialOffer.credentialOfferPayload.grants; + // TODO: extend iniateAuthorization in oid4vci lib? Or not? + if (grants?.[preAuthorizedCodeGrantIdentifier]) { + return { + authorizationFlow: "PreAuthorized", + preAuthorizedCode: grants[preAuthorizedCodeGrantIdentifier]["pre-authorized_code"] + } as const; + } + if (resolvedCredentialOffer.credentialOfferPayload.grants?.[authorizationCodeGrantIdentifier]) { + const resolvedAuthorizationRequest = await this.agent.modules.openId4VcHolder.resolveOpenId4VciAuthorizationRequest(resolvedCredentialOffer, { + clientId: this.client.clientId, + redirectUri: this.client.redirectUri, + scope: Object.entries(resolvedCredentialOffer.offeredCredentialConfigurations) + .map(([id, value]) => (credentialsToRequest.includes(id) ? value.scope : undefined)) + .filter((v): v is string => Boolean(v)) + }); + + if (resolvedAuthorizationRequest.authorizationFlow === OpenId4VciAuthorizationFlow.PresentationDuringIssuance) { + return { + ...resolvedAuthorizationRequest, + authorizationFlow: `${OpenId4VciAuthorizationFlow.PresentationDuringIssuance}` + } as const; + } + return { + ...resolvedAuthorizationRequest, + authorizationFlow: `${OpenId4VciAuthorizationFlow.Oauth2Redirect}` + } as const; + } + + throw new Error("Unsupported grant type"); + } + + public async requestAndStoreCredentials( + resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, + options: { + clientId?: string; + codeVerifier?: string; + credentialsToRequest: string[]; + code?: string; + redirectUri?: string; + txCode?: string; + } + ): Promise { + const tokenResponse = await this.agent.modules.openId4VcHolder.requestToken( + options.code && options.clientId + ? { + resolvedCredentialOffer, + clientId: options.clientId, + codeVerifier: options.codeVerifier, + code: options.code, + redirectUri: options.redirectUri + } + : { + resolvedCredentialOffer, + txCode: options.txCode + } + ); + + const credentialResponse = await this.agent.modules.openId4VcHolder.requestCredentials({ + resolvedCredentialOffer, + clientId: options.clientId, + credentialConfigurationIds: options.credentialsToRequest, + credentialBindingResolver: async ({ supportedDidMethods, supportsAllDidMethods, proofTypes }) => { + const key = await this.agent.kms.createKeyForSignatureAlgorithm({ + algorithm: proofTypes.jwt?.supportedSignatureAlgorithms[0] ?? "EdDSA" + }); + const publicJwk = Kms.PublicJwk.fromPublicJwk(key.publicJwk); + + if (supportsAllDidMethods || supportedDidMethods?.includes("did:key")) { + await this.agent.dids.create({ + method: "key", + options: { + keyId: key.keyId + } + }); + const didKey = new DidKey(publicJwk); + + return { + method: "did", + didUrls: [`${didKey.did}#${didKey.publicJwk.fingerprint}`] + }; + } + if (supportedDidMethods?.includes("did:jwk")) { + const didJwk = DidJwk.fromPublicJwk(publicJwk); + await this.agent.dids.create({ + method: "jwk", + options: { + keyId: key.keyId + } + }); + + return { + method: "did", + didUrls: [`${didJwk.did}#0`] + }; + } + + // We fall back on jwk binding + return { + method: "jwk", + keys: [publicJwk] + }; + }, + ...tokenResponse + }); + + const storedCredentials = await Promise.all( + credentialResponse.credentials.map((response) => { + // TODO: handle batch issuance + const credential = response.credentials[0]; + if (credential instanceof W3cJwtVerifiableCredential || credential instanceof W3cJsonLdVerifiableCredential) { + return this.agent.w3cCredentials.storeCredential({ credential }); + } + if (credential instanceof Mdoc) { + return this.agent.mdoc.store(credential); + } + return this.agent.sdJwtVc.store(credential.compact); + }) + ); + + return storedCredentials; + } + + public async resolveProofRequest(proofRequest: string): Promise { + const resolvedProofRequest = await this.agent.modules.openId4VcHolder.resolveOpenId4VpAuthorizationRequest(proofRequest); + + return resolvedProofRequest; + } + + public async acceptPresentationRequest(resolvedPresentationRequest: OpenId4VpResolvedAuthorizationRequest): Promise { + if (!resolvedPresentationRequest.presentationExchange && !resolvedPresentationRequest.dcql) { + throw new Error("Missing presentation exchange or dcql on resolved authorization request"); + } + + const submissionResult = await this.agent.modules.openId4VcHolder.acceptOpenId4VpAuthorizationRequest({ + authorizationRequestPayload: resolvedPresentationRequest.authorizationRequestPayload, + presentationExchange: resolvedPresentationRequest.presentationExchange + ? { + credentials: this.agent.modules.openId4VcHolder.selectCredentialsForPresentationExchangeRequest( + resolvedPresentationRequest.presentationExchange.credentialsForRequest + ) + } + : undefined, + dcql: resolvedPresentationRequest.dcql + ? { + credentials: this.agent.modules.openId4VcHolder.selectCredentialsForDcqlRequest(resolvedPresentationRequest.dcql.queryResult) + } + : undefined + }); + return submissionResult.serverResponse; + } + + public async exit(): Promise { + await this.shutdown(); + process.exit(0); + } + + public async restart(): Promise { + await this.shutdown(); + } +} diff --git a/packages/runtime/package.json b/packages/runtime/package.json index c978e3e6c..2423011fb 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -25,7 +25,7 @@ "test:ci:lokijs": "USE_LOKIJS=true jest -i --coverage", "test:ci:mongodb": "jest -i --coverage", "test:local:ferretdb": "npm run test:local:start:ferretdb && CONNECTION_STRING='mongodb://root:example@localhost:27022' jest", - "test:local:lokijs": "USE_LOKIJS=true jest", + "test:local:lokijs": "USE_LOKIJS=true jest -- openid4vc.test.ts", "test:local:mongodb": "npm run test:local:start:mongodb && CONNECTION_STRING='mongodb://root:example@localhost:27021' jest", "test:local:start:ferretdb": "docker compose -f ../../.dev/compose.yml up -d runtime-ferret", "test:local:start:mongodb": "docker compose -f ../../.dev/compose.yml up -d runtime-mongo", diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index ab60a2ba6..499204204 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -19284,6 +19284,25 @@ export const SentNotificationRequest: any = { } } +export const ResolveCredentialOfferRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/ResolveCredentialOfferRequest", + "definitions": { + "ResolveCredentialOfferRequest": { + "type": "object", + "properties": { + "credentialOfferUrl": { + "type": "string" + } + }, + "required": [ + "credentialOfferUrl" + ], + "additionalProperties": false + } + } +} + export const CreateSettingRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/CreateSettingRequest", diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 5164950ab..c1fe4dd66 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -13,7 +13,11 @@ afterAll(async () => await runtimeServiceProvider.stop()); describe("OpenID4VC", () => { test("should process a given credential offer", async () => { - const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ credentialOfferUrl: "https://example.com/credential-offer" }); - expect(result).toBeDefined(); + const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ + credentialOfferUrl: + "openid-credential-offer://?credential_offer_uri=https%3A%2F%2Fopenid4vc-service.is.enmeshed.eu%2Foid4vci%2Fissuer123%2Foffers%2F989f2291-1957-4c71-ac5c-88db744916d7" + }); + // @ts-expect-error + expect(result._isSuccess).toBe(true); }, 10000); }); From 3e5dc7be2b382af9d02733c1741fd855128c391c Mon Sep 17 00:00:00 2001 From: Timo Notheisen Date: Thu, 21 Aug 2025 09:50:39 +0200 Subject: [PATCH 09/75] feat: add attribute value type VerifiableCredential --- .../src/attributes/AttributeValueTypes.ts | 8 +++ .../attributes/types/VerifiableCredential.ts | 68 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 packages/content/src/attributes/types/VerifiableCredential.ts diff --git a/packages/content/src/attributes/AttributeValueTypes.ts b/packages/content/src/attributes/AttributeValueTypes.ts index e8c63c020..70da2f8f1 100644 --- a/packages/content/src/attributes/AttributeValueTypes.ts +++ b/packages/content/src/attributes/AttributeValueTypes.ts @@ -165,6 +165,7 @@ import { ZipCode, ZipCodeJSON } from "./types"; +import { IVerifiableCredential, VerifiableCredential, VerifiableCredentialJSON } from "./types/VerifiableCredential"; // ################################################ Editable IdentityAttribute Value Types ################################################################### @@ -250,6 +251,7 @@ export module AttributeValues { FaxNumber, IdentityFileReference, SchematizedXML, + VerifiableCredential, JobTitle, Nationality, PersonName, @@ -274,6 +276,7 @@ export module AttributeValues { "FaxNumber", "IdentityFileReference", "SchematizedXML", + "VerifiableCredential", "JobTitle", "Nationality", "PersonName", @@ -308,6 +311,7 @@ export module AttributeValues { | HouseNumberJSON | MiddleNameJSON | SchematizedXMLJSON + | VerifiableCredentialJSON | StateJSON // | StatementJSON | StreetJSON @@ -332,6 +336,7 @@ export module AttributeValues { | IHouseNumber | IMiddleName | ISchematizedXML + | IVerifiableCredential | IState // | IStatement | IStreet @@ -356,6 +361,7 @@ export module AttributeValues { | HouseNumber | MiddleName | SchematizedXML + | VerifiableCredential | State // | Statement | Street @@ -380,6 +386,7 @@ export module AttributeValues { HouseNumber, MiddleName, SchematizedXML, + VerifiableCredential, State, // Statement, Street, @@ -405,6 +412,7 @@ export module AttributeValues { "HouseNumber", "MiddleName", "SchematizedXML", + "VerifiableCredential", "State", // "Statement", "Street", diff --git a/packages/content/src/attributes/types/VerifiableCredential.ts b/packages/content/src/attributes/types/VerifiableCredential.ts new file mode 100644 index 000000000..37d39ae34 --- /dev/null +++ b/packages/content/src/attributes/types/VerifiableCredential.ts @@ -0,0 +1,68 @@ +import { serialize, type, validate } from "@js-soft/ts-serval"; +import { AbstractAttributeValue, AbstractAttributeValueJSON, IAbstractAttributeValue } from "../AbstractAttributeValue"; +import { RenderHints, RenderHintsEditType, RenderHintsTechnicalType, ValueHints } from "../hints"; +import { PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH, PROPRIETARY_ATTRIBUTE_MAX_TITLE_LENGTH } from "./proprietary/ProprietaryAttributeValue"; + +export interface VerifiableCredentialJSON extends AbstractAttributeValueJSON { + "@type": "VerifiableCredential"; + title: string; + description?: string; + value: unknown; +} + +export interface IVerifiableCredential extends IAbstractAttributeValue { + title: string; + description?: string; + value: unknown; +} + +@type("VerifiableCredential") +export class VerifiableCredential extends AbstractAttributeValue { + @serialize() + @validate({ max: PROPRIETARY_ATTRIBUTE_MAX_TITLE_LENGTH }) + public title: string; + + @serialize() + @validate({ nullable: true, max: PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH }) + public description?: string; + + @serialize({ any: true }) + @validate({ customValidator: validateValue }) + public value: unknown; + + public static get valueHints(): ValueHints { + return ValueHints.from({}); + } + + public static get renderHints(): RenderHints { + return RenderHints.from({ + editType: RenderHintsEditType.TextArea, + technicalType: RenderHintsTechnicalType.Unknown + }); + } + + public static from(value: IVerifiableCredential | Omit): VerifiableCredential { + return this.fromAny(value); + } + + public override toJSON(verbose?: boolean | undefined, serializeAsString?: boolean | undefined): VerifiableCredentialJSON { + return super.toJSON(verbose, serializeAsString) as VerifiableCredentialJSON; + } +} + +function validateValue(value: any) { + try { + const string = JSON.stringify(value); + if (string.length > 4096) { + return "stringified value must not be longer than 4096 characters"; + } + } catch (e) { + if (e instanceof SyntaxError) { + return "must be a valid JSON object"; + } + + return "could not validate value"; + } + + return undefined; +} From 67ad8a5dc8c3b5606e36a33e692ff1db7ae41b2c Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Thu, 21 Aug 2025 10:26:25 +0200 Subject: [PATCH 10/75] WIP --- package-lock.json | 23537 ++++++++++------ package.json | 7 - packages/consumption/package.json | 7 +- .../modules/openid4vc/OpenId4VcController.ts | 19 +- 4 files changed, 15502 insertions(+), 8068 deletions(-) diff --git a/package-lock.json b/package-lock.json index bfa372f5b..1a2dfc6e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,13 +15,6 @@ "packages/runtime", "packages/app-runtime" ], - "dependencies": { - "@credo-ts/askar": "v0.6.0-alpha-20250704130724", - "@credo-ts/core": "v0.6.0-alpha-20250704130724", - "@credo-ts/node": "v0.6.0-alpha-20250704130724", - "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", - "@openwallet-foundation/askar-nodejs": "^0.3.2" - }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.3", "@js-soft/license-check": "^1.0.9", @@ -40,6 +33,22 @@ "typescript": "^5.9.2" } }, + "node_modules/@0no-co/graphql.web": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.2.0.tgz", + "integrity": "sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==", + "license": "MIT", + "optional": true, + "peer": true, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "graphql": { + "optional": true + } + } + }, "node_modules/@2060.io/ffi-napi": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@2060.io/ffi-napi/-/ffi-napi-4.0.9.tgz", @@ -76,6 +85,8 @@ }, "node_modules/@ampproject/remapping": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -238,21 +249,21 @@ } }, "node_modules/@babel/core": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", + "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.4", - "@babel/parser": "^7.27.4", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.4", - "@babel/types": "^7.27.3", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -269,6 +280,8 @@ }, "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==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -290,6 +303,20 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", @@ -315,6 +342,88 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -324,6 +433,21 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", @@ -338,14 +462,14 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -354,6 +478,20 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", @@ -363,6 +501,59 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -390,19 +581,137 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helpers": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", + "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, + "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==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "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==", + "license": "MIT", + "optional": true, + "peer": 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==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "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==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", @@ -418,6 +727,42 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", + "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz", + "integrity": "sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", @@ -490,16 +835,81 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.27.1.tgz", + "integrity": "sha512-eBC/3KSekshx19+N40MzjWqJd7KTEdOoLesAfa4IDFI8eRz5a47i5Oszus6zG/cwIXN63YhgLOMSSNJx49sENg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", + "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-attributes": { @@ -686,13 +1096,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { @@ -702,8087 +1113,13518 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", - "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.3", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2", - "debug": "^4.3.1" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", + "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", - "dev": true, - "license": "Apache-2.0" - }, - "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, - "license": "MIT" - }, - "node_modules/@credo-ts/askar": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/askar/-/askar-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-AgeiLbW3wdV5PWUnMFEIRJ1Xrrom+pTNdxNkk4j774f0yAswi2jBYrVpzSr8UmspdSiVIjbxZe/q/WUAn6NQ/Q==", - "license": "Apache-2.0", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "rxjs": "^7.8.2", - "tsyringe": "^4.10.0" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@openwallet-foundation/askar-shared": "^0.3.2" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@credo-ts/core": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-vqNYnQa6Kn8g2Ay5rGxm6zqMqepV4jdSHLpAgXQJ1zvaBIVZ4zU7zjxccILhruCFlvlUreKtSqcEI8SAMUigUQ==", - "license": "Apache-2.0", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.3.tgz", + "integrity": "sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@animo-id/mdoc": "^0.5.2", - "@animo-id/pex": "^6.1.0", - "@astronautlabs/jsonpath": "^1.1.2", - "@digitalcredentials/jsonld": "^6.0.0", - "@digitalcredentials/jsonld-signatures": "^9.4.0", - "@digitalcredentials/vc": "^6.0.1", - "@multiformats/base-x": "^4.0.1", - "@noble/curves": "^1.9.2", - "@noble/hashes": "^1.8.0", - "@peculiar/asn1-ecc": "^2.3.15", - "@peculiar/asn1-rsa": "^2.3.15", - "@peculiar/asn1-schema": "^2.3.15", - "@peculiar/asn1-x509": "^2.3.15", - "@peculiar/x509": "^1.12.1", - "@sd-jwt/core": "^0.10.0", - "@sd-jwt/decode": "^0.10.0", - "@sd-jwt/jwt-status-list": "^0.10.0", - "@sd-jwt/present": "^0.10.0", - "@sd-jwt/sd-jwt-vc": "^0.10.0", - "@sd-jwt/types": "^0.10.0", - "@sd-jwt/utils": "^0.10.0", - "@sphereon/pex-models": "^2.3.2", - "@sphereon/ssi-types": "0.33.0", - "@stablelib/ed25519": "^1.0.3", - "@types/ws": "^8.18.1", - "borc": "^3.0.0", - "buffer": "^6.0.3", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "dcql": "^0.3.0", - "did-resolver": "^4.1.0", - "ec-compression": "0.0.1-alpha.12", - "lru_map": "^0.4.1", - "make-error": "^1.3.6", - "object-inspect": "^1.13.4", - "reflect-metadata": "^0.2.2", - "rxjs": "^7.8.2", - "tsyringe": "^4.10.0", - "uuid": "^11.1.0", - "varint": "^6.0.0", - "web-did-resolver": "^2.0.21", - "webcrypto-core": "^1.8.1", - "zod": "^3.25.56" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@credo-ts/core/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@credo-ts/didcomm": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/didcomm/-/didcomm-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-rbXdMOSH7heE58I8fFZTSvO8l/o5dKnywjrrwC4vsZFTf0Jvt23biuhjMV05VJcxvAwLvTX9e6+AKYSFX1UONA==", - "license": "Apache-2.0", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "luxon": "^3.5.0", - "query-string": "^7.0.1", - "rxjs": "^7.8.2" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@credo-ts/node": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/node/-/node-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-yKwItgLoN27a2wkM87EfT7zcw/QEH2l7IZuXHU6GKmSzacsnqRP9sA0/FqZZehGIzq3OwYU6p+QK1UHKkIZPGg==", - "license": "Apache-2.0", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@2060.io/ffi-napi": "^4.0.9", - "@2060.io/ref-napi": "^3.0.6", - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "@credo-ts/didcomm": "0.6.0-alpha-20250704130724", - "@types/express": "^4.17.23", - "express": "^4.21.2", - "rxjs": "^7.8.2", - "ws": "^8.18.2" - } + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@credo-ts/openid4vc": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-+9BwT0tbo1B4++DcVXBEcoNAmkI5LNpacDDnUYdVumlSYYmmdE1WAAxCvM052ipBFke82w4kPOyo5YSZvZ7IFA==", - "license": "Apache-2.0", + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", + "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", - "@openid4vc/openid4vci": "0.3.0-alpha-20250602121005", - "@openid4vc/openid4vp": "0.3.0-alpha-20250602121005", - "@openid4vc/utils": "0.3.0-alpha-20250602121005", - "class-transformer": "0.5.1", - "rxjs": "^7.8.2", - "zod": "^3.25.56" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-flow": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@dependents/detective-less": { - "version": "5.0.0", - "dev": true, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/bitstring": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/bitstring/-/bitstring-3.1.0.tgz", - "integrity": "sha512-Cii+Sl++qaexOvv3vchhgZFfSmtHPNIPzGegaq4ffPnflVXFu+V2qrJ17aL2+gfLxrlC/zazZFuAltyKTPq7eg==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "base64url-universal": "^2.0.0", - "pako": "^2.0.4" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=16" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", - "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "license": "MIT", "dependencies": { - "ky": "^0.33.3", - "ky-universal": "^0.11.0", - "undici": "^5.21.2" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=14.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": "^12.20 || >= 14.13" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/ky": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=14.16" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/ky-universal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", - "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", + "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "^3.2.10" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + "node": ">=6.9.0" }, "peerDependencies": { - "ky": ">=0.31.4", - "web-streams-polyfill": ">=3.2.1" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@fastify/busboy": "^2.0.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { - "node": ">=14.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/security-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", - "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", - "license": "BSD-3-Clause" - }, - "node_modules/@digitalbazaar/vc": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/vc/-/vc-5.0.0.tgz", - "integrity": "sha512-XmLM7Ag5W+XidGnFuxFIyUFSMnHnWEMJlHei602GG94+WzFJ6Ik8txzPQL8T18egSoiTsd1VekymbIlSimhuaQ==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "credentials-context": "^2.0.0", - "jsonld": "^8.0.0", - "jsonld-signatures": "^11.0.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/vc-status-list": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list/-/vc-status-list-7.1.0.tgz", - "integrity": "sha512-p5uxKJlX13N8TcTuv9qFDeej+6bndU+Rh1Cez2MT+bXQE6Jpn5t336FBSHmcECB4yUfZQpkmV/LOcYU4lW8Ojw==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalbazaar/bitstring": "^3.0.0", - "@digitalbazaar/vc": "^5.0.0", - "@digitalbazaar/vc-status-list-context": "^3.0.1", - "credentials-context": "^2.0.0" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=16" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/vc-status-list-context": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list-context/-/vc-status-list-context-3.1.1.tgz", - "integrity": "sha512-cMVtd+EV+4KN2kUG4/vsV74JVsGE6dcpod6zRoFB/AJA2W/sZbJqR44KL3G6P262+GcAECNhtnSsKsTnQ6y8+w==", - "license": "BSD-3-Clause" - }, - "node_modules/@digitalcredentials/base58-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@digitalcredentials/base58-universal/-/base58-universal-1.0.1.tgz", - "integrity": "sha512-1xKdJnfITMvrF/sCgwBx2C4p7qcNAARyIvrAOZGqIHmBaT/hAenpC8bf44qVY+UIMuCYP23kqpIfJQebQDThDQ==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/base64url-universal": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@digitalcredentials/base64url-universal/-/base64url-universal-2.0.6.tgz", - "integrity": "sha512-QJyK6xS8BYNnkKLhEAgQc6Tb9DMe+GkHnBAWJKITCxVRXJAFLhJnr+FsJnCThS3x2Y0UiiDAXoWjwMqtUrp4Kg==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "base64url": "^3.0.1" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/bitstring": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@digitalcredentials/bitstring/-/bitstring-2.0.1.tgz", - "integrity": "sha512-9priXvsEJGI4LYHPwLqf5jv9HtQGlG0MgeuY8Q4NHN+xWz5rYMylh1TYTVThKa3XI6xF2pR2oEfKZD21eWXveQ==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalcredentials/base64url-universal": "^2.0.2", - "pako": "^2.0.4" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/ed25519-signature-2020": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-signature-2020/-/ed25519-signature-2020-3.0.2.tgz", - "integrity": "sha512-R8IrR21Dh+75CYriQov3nVHKaOVusbxfk9gyi6eCAwLHKn6fllUt+2LQfuUrL7Ts/sGIJqQcev7YvkX9GvyYRA==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalcredentials/base58-universal": "^1.0.1", - "@digitalcredentials/ed25519-verification-key-2020": "^3.1.1", - "@digitalcredentials/jsonld-signatures": "^9.3.1", - "ed25519-signature-2018-context": "^1.1.0", - "ed25519-signature-2020-context": "^1.0.1" + "@babel/plugin-transform-react-jsx": "^7.27.1" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/ed25519-verification-key-2020": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.2.tgz", - "integrity": "sha512-ZfxNFZlA379MZpf+gV2tUYyiZ15eGVgjtCQLWlyu3frWxsumUgv++o0OJlMnrDsWGwzFMRrsXcosd5+752rLOA==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalcredentials/base58-universal": "^1.0.1", - "@stablelib/ed25519": "^1.0.1", - "base64url-universal": "^1.1.0", - "crypto-ld": "^6.0.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/ed25519-verification-key-2020/node_modules/base64url-universal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", - "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "base64url": "^3.0.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=8.3.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/http-client": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz", - "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "ky": "^0.25.1", - "ky-universal": "^0.8.2" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/jsonld": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-6.0.0.tgz", - "integrity": "sha512-5tTakj0/GsqAJi8beQFVMQ97wUJZnuxViW9xRuAATL6eOBIefGBwHkVryAgEq2I4J/xKgb/nEyw1ZXX0G8wQJQ==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.3.tgz", + "integrity": "sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalcredentials/http-client": "^1.0.0", - "@digitalcredentials/rdf-canonize": "^1.0.0", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/jsonld-signatures": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.4.0.tgz", - "integrity": "sha512-DnR+HDTm7qpcDd0wcD1w6GdlAwfHjQSgu+ahion8REkCkkMRywF+CLunU7t8AZpFB2Gr/+N8naUtiEBNje1Oew==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", + "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalbazaar/security-context": "^1.0.0", - "@digitalcredentials/jsonld": "^6.0.0", - "fast-text-encoding": "^1.0.3", - "isomorphic-webcrypto": "^2.3.8", - "serialize-error": "^8.0.1" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/jsonld/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "yallist": "^4.0.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/jsonld/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/@digitalcredentials/open-badges-context": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/open-badges-context/-/open-badges-context-2.1.0.tgz", - "integrity": "sha512-VK7X5u6OoBFxkyIFplNqUPVbo+8vFSAEoam8tSozpj05KPfcGw41Tp5p9fqMnY38oPfwtZR2yDNSctj/slrE0A==", - "license": "MIT" - }, - "node_modules/@digitalcredentials/rdf-canonize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz", - "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "fast-text-encoding": "^1.0.3", - "isomorphic-webcrypto": "^2.3.8" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/vc": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-6.0.1.tgz", - "integrity": "sha512-TZgLoi00Jc9uv3b6jStH+G8+bCqpHIqFw9DYODz+fVjNh197ksvcYqSndUDHa2oi0HCcK+soI8j4ba3Sa4Pl4w==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalbazaar/vc-status-list": "^7.0.0", - "@digitalcredentials/ed25519-signature-2020": "^3.0.2", - "@digitalcredentials/jsonld": "^6.0.0", - "@digitalcredentials/jsonld-signatures": "^9.3.2", - "@digitalcredentials/open-badges-context": "^2.1.0", - "@digitalcredentials/vc-status-list": "^5.0.2", - "credentials-context": "^2.0.0", - "fix-esm": "^1.0.1" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/vc-status-list": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/vc-status-list/-/vc-status-list-5.0.2.tgz", - "integrity": "sha512-PI0N7SM0tXpaNLelbCNsMAi34AjOeuhUzMSYTkHdeqRPX7oT2F3ukyOssgr4koEqDxw9shHtxHu3fSJzrzcPMQ==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalbazaar/vc-status-list-context": "^3.0.1", - "@digitalcredentials/bitstring": "^2.0.1", - "@digitalcredentials/vc": "^4.1.1", - "credentials-context": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/jsonld": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.2.tgz", - "integrity": "sha512-hz7YR3kv6+8UUdgMyTGl1o8NjVKKwnMry/Rh/rWeAvwL+NqgoUHorWzI3rM+PW+MPFyDC0ieXStClt9n9D9SGA==", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalcredentials/http-client": "^1.0.0", - "@digitalcredentials/rdf-canonize": "^1.0.0", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/vc": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-4.2.0.tgz", - "integrity": "sha512-8Rxpn77JghJN7noBQdcMuzm/tB8vhDwPoFepr3oGd5w+CyJxOk2RnBlgIGlAAGA+mALFWECPv1rANfXno+hdjA==", - "license": "BSD-3-Clause", + "node_modules/@babel/preset-react": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@digitalcredentials/jsonld": "^5.2.1", - "@digitalcredentials/jsonld-signatures": "^9.3.1", - "credentials-context": "^2.0.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "node": ">=6.9.0" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/@emnapi/core": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", - "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.0.4", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", - "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", - "dev": true, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, + "node_modules/@babel/runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, + "node_modules/@babel/traverse": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" }, "engines": { - "node": "*" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" } }, - "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/traverse--for-generate-function-map": { + "name": "@babel/traverse", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/json-schema": "^7.0.15" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "license": "MIT", "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" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6.9.0" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "license": "Apache-2.0" }, - "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==", + "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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "license": "MIT" }, - "node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node_modules/@credo-ts/askar": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/askar/-/askar-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-AgeiLbW3wdV5PWUnMFEIRJ1Xrrom+pTNdxNkk4j774f0yAswi2jBYrVpzSr8UmspdSiVIjbxZe/q/WUAn6NQ/Q==", + "license": "Apache-2.0", + "dependencies": { + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "rxjs": "^7.8.2", + "tsyringe": "^4.10.0" }, - "funding": { - "url": "https://eslint.org/donate" + "peerDependencies": { + "@openwallet-foundation/askar-shared": "^0.3.2" } }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", - "dev": true, + "node_modules/@credo-ts/core": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-vqNYnQa6Kn8g2Ay5rGxm6zqMqepV4jdSHLpAgXQJ1zvaBIVZ4zU7zjxccILhruCFlvlUreKtSqcEI8SAMUigUQ==", "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@animo-id/mdoc": "^0.5.2", + "@animo-id/pex": "^6.1.0", + "@astronautlabs/jsonpath": "^1.1.2", + "@digitalcredentials/jsonld": "^6.0.0", + "@digitalcredentials/jsonld-signatures": "^9.4.0", + "@digitalcredentials/vc": "^6.0.1", + "@multiformats/base-x": "^4.0.1", + "@noble/curves": "^1.9.2", + "@noble/hashes": "^1.8.0", + "@peculiar/asn1-ecc": "^2.3.15", + "@peculiar/asn1-rsa": "^2.3.15", + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "@peculiar/x509": "^1.12.1", + "@sd-jwt/core": "^0.10.0", + "@sd-jwt/decode": "^0.10.0", + "@sd-jwt/jwt-status-list": "^0.10.0", + "@sd-jwt/present": "^0.10.0", + "@sd-jwt/sd-jwt-vc": "^0.10.0", + "@sd-jwt/types": "^0.10.0", + "@sd-jwt/utils": "^0.10.0", + "@sphereon/pex-models": "^2.3.2", + "@sphereon/ssi-types": "0.33.0", + "@stablelib/ed25519": "^1.0.3", + "@types/ws": "^8.18.1", + "borc": "^3.0.0", + "buffer": "^6.0.3", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "dcql": "^0.3.0", + "did-resolver": "^4.1.0", + "ec-compression": "0.0.1-alpha.12", + "lru_map": "^0.4.1", + "make-error": "^1.3.6", + "object-inspect": "^1.13.4", + "reflect-metadata": "^0.2.2", + "rxjs": "^7.8.2", + "tsyringe": "^4.10.0", + "uuid": "^11.1.0", + "varint": "^6.0.0", + "web-did-resolver": "^2.0.21", + "webcrypto-core": "^1.8.1", + "zod": "^3.25.56" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "node_modules/@credo-ts/core/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "engines": { - "node": ">=14" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@grpc/grpc-js": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.2.tgz", - "integrity": "sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==", - "dev": true, + "node_modules/@credo-ts/didcomm": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/didcomm/-/didcomm-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-rbXdMOSH7heE58I8fFZTSvO8l/o5dKnywjrrwC4vsZFTf0Jvt23biuhjMV05VJcxvAwLvTX9e6+AKYSFX1UONA==", "license": "Apache-2.0", "dependencies": { - "@grpc/proto-loader": "^0.7.13", - "@js-sdsl/ordered-map": "^4.4.2" - }, - "engines": { - "node": ">=12.10.0" + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "luxon": "^3.5.0", + "query-string": "^7.0.1", + "rxjs": "^7.8.2" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", - "dev": true, + "node_modules/@credo-ts/node": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/node/-/node-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-yKwItgLoN27a2wkM87EfT7zcw/QEH2l7IZuXHU6GKmSzacsnqRP9sA0/FqZZehGIzq3OwYU6p+QK1UHKkIZPGg==", "license": "Apache-2.0", "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" + "@2060.io/ffi-napi": "^4.0.9", + "@2060.io/ref-napi": "^3.0.6", + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "@credo-ts/didcomm": "0.6.0-alpha-20250704130724", + "@types/express": "^4.17.23", + "express": "^4.21.2", + "rxjs": "^7.8.2", + "ws": "^8.18.2" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, + "node_modules/@credo-ts/openid4vc": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-+9BwT0tbo1B4++DcVXBEcoNAmkI5LNpacDDnUYdVumlSYYmmdE1WAAxCvM052ipBFke82w4kPOyo5YSZvZ7IFA==", "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" + "dependencies": { + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", + "@openid4vc/openid4vci": "0.3.0-alpha-20250602121005", + "@openid4vc/openid4vp": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "class-transformer": "0.5.1", + "rxjs": "^7.8.2", + "zod": "^3.25.56" } }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=18.18.0" + "node": ">=12" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "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/@dependents/detective-less": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz", + "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "license": "MIT", + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "devOptional": true, - "license": "ISC", + "node_modules/@digitalbazaar/bitstring": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/bitstring/-/bitstring-3.1.0.tgz", + "integrity": "sha512-Cii+Sl++qaexOvv3vchhgZFfSmtHPNIPzGegaq4ffPnflVXFu+V2qrJ17aL2+gfLxrlC/zazZFuAltyKTPq7eg==", + "license": "BSD-3-Clause", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "base64url-universal": "^2.0.0", + "pako": "^2.0.4" }, "engines": { - "node": ">=12" + "node": ">=16" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", + "license": "BSD-3-Clause", + "dependencies": { + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=14.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "devOptional": true, + "node_modules/@digitalbazaar/http-client/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 12" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "devOptional": true, + "node_modules/@digitalbazaar/http-client/node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": ">=12" + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/@digitalbazaar/http-client/node_modules/ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "license": "MIT", + "engines": { + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "devOptional": true, + "node_modules/@digitalbazaar/http-client/node_modules/ky-universal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" }, "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "devOptional": true, + "node_modules/@digitalbazaar/http-client/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "license": "ISC", + "node_modules/@digitalbazaar/http-client/node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "license": "MIT", "dependencies": { - "minipass": "^7.0.4" + "@fastify/busboy": "^2.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0" } }, - "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==", - "devOptional": true, - "license": "ISC", + "node_modules/@digitalbazaar/security-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", + "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", + "license": "BSD-3-Clause" + }, + "node_modules/@digitalbazaar/vc": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc/-/vc-5.0.0.tgz", + "integrity": "sha512-XmLM7Ag5W+XidGnFuxFIyUFSMnHnWEMJlHei602GG94+WzFJ6Ik8txzPQL8T18egSoiTsd1VekymbIlSimhuaQ==", + "license": "BSD-3-Clause", "dependencies": { - "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" + "credentials-context": "^2.0.0", + "jsonld": "^8.0.0", + "jsonld-signatures": "^11.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "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==", - "devOptional": true, - "license": "MIT", + "node_modules/@digitalbazaar/vc-status-list": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list/-/vc-status-list-7.1.0.tgz", + "integrity": "sha512-p5uxKJlX13N8TcTuv9qFDeej+6bndU+Rh1Cez2MT+bXQE6Jpn5t336FBSHmcECB4yUfZQpkmV/LOcYU4lW8Ojw==", + "license": "BSD-3-Clause", "dependencies": { - "sprintf-js": "~1.0.2" + "@digitalbazaar/bitstring": "^3.0.0", + "@digitalbazaar/vc": "^5.0.0", + "@digitalbazaar/vc-status-list-context": "^3.0.1", + "credentials-context": "^2.0.0" + }, + "engines": { + "node": ">=16" } }, - "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==", - "devOptional": true, - "license": "MIT", + "node_modules/@digitalbazaar/vc-status-list-context": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list-context/-/vc-status-list-context-3.1.1.tgz", + "integrity": "sha512-cMVtd+EV+4KN2kUG4/vsV74JVsGE6dcpod6zRoFB/AJA2W/sZbJqR44KL3G6P262+GcAECNhtnSsKsTnQ6y8+w==", + "license": "BSD-3-Clause" + }, + "node_modules/@digitalcredentials/base58-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/base58-universal/-/base58-universal-1.0.1.tgz", + "integrity": "sha512-1xKdJnfITMvrF/sCgwBx2C4p7qcNAARyIvrAOZGqIHmBaT/hAenpC8bf44qVY+UIMuCYP23kqpIfJQebQDThDQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/base64url-universal": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@digitalcredentials/base64url-universal/-/base64url-universal-2.0.6.tgz", + "integrity": "sha512-QJyK6xS8BYNnkKLhEAgQc6Tb9DMe+GkHnBAWJKITCxVRXJAFLhJnr+FsJnCThS3x2Y0UiiDAXoWjwMqtUrp4Kg==", + "license": "BSD-3-Clause", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "base64url": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "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==", - "devOptional": true, - "license": "MIT", + "node_modules/@digitalcredentials/bitstring": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/bitstring/-/bitstring-2.0.1.tgz", + "integrity": "sha512-9priXvsEJGI4LYHPwLqf5jv9HtQGlG0MgeuY8Q4NHN+xWz5rYMylh1TYTVThKa3XI6xF2pR2oEfKZD21eWXveQ==", + "license": "BSD-3-Clause", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@digitalcredentials/base64url-universal": "^2.0.2", + "pako": "^2.0.4" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=14" } }, - "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==", - "devOptional": true, - "license": "MIT", + "node_modules/@digitalcredentials/ed25519-signature-2020": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-signature-2020/-/ed25519-signature-2020-3.0.2.tgz", + "integrity": "sha512-R8IrR21Dh+75CYriQov3nVHKaOVusbxfk9gyi6eCAwLHKn6fllUt+2LQfuUrL7Ts/sGIJqQcev7YvkX9GvyYRA==", + "license": "BSD-3-Clause", "dependencies": { - "p-locate": "^4.1.0" + "@digitalcredentials/base58-universal": "^1.0.1", + "@digitalcredentials/ed25519-verification-key-2020": "^3.1.1", + "@digitalcredentials/jsonld-signatures": "^9.3.1", + "ed25519-signature-2018-context": "^1.1.0", + "ed25519-signature-2020-context": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "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==", - "devOptional": true, - "license": "MIT", + "node_modules/@digitalcredentials/ed25519-verification-key-2020": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.2.tgz", + "integrity": "sha512-ZfxNFZlA379MZpf+gV2tUYyiZ15eGVgjtCQLWlyu3frWxsumUgv++o0OJlMnrDsWGwzFMRrsXcosd5+752rLOA==", + "license": "BSD-3-Clause", "dependencies": { - "p-try": "^2.0.0" + "@digitalcredentials/base58-universal": "^1.0.1", + "@stablelib/ed25519": "^1.0.1", + "base64url-universal": "^1.1.0", + "crypto-ld": "^6.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "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==", - "devOptional": true, - "license": "MIT", + "node_modules/@digitalcredentials/ed25519-verification-key-2020/node_modules/base64url-universal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", + "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", + "license": "BSD-3-Clause", "dependencies": { - "p-limit": "^2.2.0" + "base64url": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.3.0" } }, - "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==", - "devOptional": true, - "license": "MIT", + "node_modules/@digitalcredentials/http-client": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz", + "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==", + "license": "BSD-3-Clause", + "dependencies": { + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + }, "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "devOptional": true, - "license": "BSD-3-Clause" - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "devOptional": true, - "license": "MIT", + "node_modules/@digitalcredentials/jsonld": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-6.0.0.tgz", + "integrity": "sha512-5tTakj0/GsqAJi8beQFVMQ97wUJZnuxViW9xRuAATL6eOBIefGBwHkVryAgEq2I4J/xKgb/nEyw1ZXX0G8wQJQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalcredentials/http-client": "^1.0.0", + "@digitalcredentials/rdf-canonize": "^1.0.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@jest/console": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.5.tgz", - "integrity": "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA==", - "dev": true, - "license": "MIT", + "node_modules/@digitalcredentials/jsonld-signatures": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.4.0.tgz", + "integrity": "sha512-DnR+HDTm7qpcDd0wcD1w6GdlAwfHjQSgu+ahion8REkCkkMRywF+CLunU7t8AZpFB2Gr/+N8naUtiEBNje1Oew==", + "license": "BSD-3-Clause", "dependencies": { - "@jest/types": "30.0.5", - "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.0.5", - "jest-util": "30.0.5", - "slash": "^3.0.0" + "@digitalbazaar/security-context": "^1.0.0", + "@digitalcredentials/jsonld": "^6.0.0", + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8", + "serialize-error": "^8.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" } }, - "node_modules/@jest/core": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.5.tgz", - "integrity": "sha512-fKD0OulvRsXF1hmaFgHhVJzczWzA1RXMMo9LTPuFXo9q/alDbME3JIyWYqovWsUBWSoBcsHaGPSLF9rz4l9Qeg==", - "dev": true, - "license": "MIT", + "node_modules/@digitalcredentials/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "dependencies": { - "@jest/console": "30.0.5", - "@jest/pattern": "30.0.1", - "@jest/reporters": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-changed-files": "30.0.5", - "jest-config": "30.0.5", - "jest-haste-map": "30.0.5", - "jest-message-util": "30.0.5", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-resolve-dependencies": "30.0.5", - "jest-runner": "30.0.5", - "jest-runtime": "30.0.5", - "jest-snapshot": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "jest-watcher": "30.0.5", - "micromatch": "^4.0.8", - "pretty-format": "30.0.5", - "slash": "^3.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=10" } }, - "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } + "node_modules/@digitalcredentials/jsonld/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" }, - "node_modules/@jest/environment": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.5.tgz", - "integrity": "sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==", - "dev": true, - "license": "MIT", + "node_modules/@digitalcredentials/open-badges-context": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/open-badges-context/-/open-badges-context-2.1.0.tgz", + "integrity": "sha512-VK7X5u6OoBFxkyIFplNqUPVbo+8vFSAEoam8tSozpj05KPfcGw41Tp5p9fqMnY38oPfwtZR2yDNSctj/slrE0A==", + "license": "MIT" + }, + "node_modules/@digitalcredentials/rdf-canonize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz", + "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==", + "license": "BSD-3-Clause", "dependencies": { - "@jest/fake-timers": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "jest-mock": "30.0.5" + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" } }, - "node_modules/@jest/expect": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.5.tgz", - "integrity": "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA==", - "dev": true, - "license": "MIT", + "node_modules/@digitalcredentials/vc": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-6.0.1.tgz", + "integrity": "sha512-TZgLoi00Jc9uv3b6jStH+G8+bCqpHIqFw9DYODz+fVjNh197ksvcYqSndUDHa2oi0HCcK+soI8j4ba3Sa4Pl4w==", + "license": "BSD-3-Clause", "dependencies": { - "expect": "30.0.5", - "jest-snapshot": "30.0.5" + "@digitalbazaar/vc-status-list": "^7.0.0", + "@digitalcredentials/ed25519-signature-2020": "^3.0.2", + "@digitalcredentials/jsonld": "^6.0.0", + "@digitalcredentials/jsonld-signatures": "^9.3.2", + "@digitalcredentials/open-badges-context": "^2.1.0", + "@digitalcredentials/vc-status-list": "^5.0.2", + "credentials-context": "^2.0.0", + "fix-esm": "^1.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" } }, - "node_modules/@jest/expect-utils": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.5.tgz", - "integrity": "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==", - "dev": true, - "license": "MIT", + "node_modules/@digitalcredentials/vc-status-list": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc-status-list/-/vc-status-list-5.0.2.tgz", + "integrity": "sha512-PI0N7SM0tXpaNLelbCNsMAi34AjOeuhUzMSYTkHdeqRPX7oT2F3ukyOssgr4koEqDxw9shHtxHu3fSJzrzcPMQ==", + "license": "BSD-3-Clause", "dependencies": { - "@jest/get-type": "30.0.1" + "@digitalbazaar/vc-status-list-context": "^3.0.1", + "@digitalcredentials/bitstring": "^2.0.1", + "@digitalcredentials/vc": "^4.1.1", + "credentials-context": "^2.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=14" } }, - "node_modules/@jest/fake-timers": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.5.tgz", - "integrity": "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==", - "dev": true, - "license": "MIT", + "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/jsonld": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.2.tgz", + "integrity": "sha512-hz7YR3kv6+8UUdgMyTGl1o8NjVKKwnMry/Rh/rWeAvwL+NqgoUHorWzI3rM+PW+MPFyDC0ieXStClt9n9D9SGA==", + "license": "BSD-3-Clause", "dependencies": { - "@jest/types": "30.0.5", - "@sinonjs/fake-timers": "^13.0.0", - "@types/node": "*", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "@digitalcredentials/http-client": "^1.0.0", + "@digitalcredentials/rdf-canonize": "^1.0.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" } }, - "node_modules/@jest/get-type": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", - "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", - "dev": true, - "license": "MIT", + "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/vc": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-4.2.0.tgz", + "integrity": "sha512-8Rxpn77JghJN7noBQdcMuzm/tB8vhDwPoFepr3oGd5w+CyJxOk2RnBlgIGlAAGA+mALFWECPv1rANfXno+hdjA==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalcredentials/jsonld": "^5.2.1", + "@digitalcredentials/jsonld-signatures": "^9.3.1", + "credentials-context": "^2.0.0" + }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" } }, - "node_modules/@jest/globals": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.5.tgz", - "integrity": "sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==", - "dev": true, - "license": "MIT", + "node_modules/@digitalcredentials/vc-status-list/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/expect": "30.0.5", - "@jest/types": "30.0.5", - "jest-mock": "30.0.5" + "yallist": "^4.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10" } }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "node_modules/@digitalcredentials/vc-status-list/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@emnapi/core": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", + "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@emnapi/wasi-threads": "1.0.4", + "tslib": "^2.4.0" } }, - "node_modules/@jest/reporters": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.5.tgz", - "integrity": "sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g==", + "node_modules/@emnapi/runtime": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "@jridgewell/trace-mapping": "^0.3.25", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.0.5", - "jest-util": "30.0.5", - "jest-worker": "30.0.5", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", + "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "url": "https://opencollective.com/eslint" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/@eslint-community/eslint-utils/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, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@jest/snapshot-utils": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.5.tgz", - "integrity": "sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ==", + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@jest/types": "30.0.5", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/source-map": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "callsites": "^3.1.0", - "graceful-fs": "^4.2.11" - }, + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/test-result": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.5.tgz", - "integrity": "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ==", + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@jest/console": "30.0.5", - "@jest/types": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/test-sequencer": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.5.tgz", - "integrity": "sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ==", + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.0.5", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "slash": "^3.0.0" + "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": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jest/transform": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.5.tgz", - "integrity": "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==", + "node_modules/@eslint/js": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", + "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.0.5", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.0", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", - "micromatch": "^4.0.8", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/types": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", - "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@expo/cli": { + "version": "0.24.20", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.24.20.tgz", + "integrity": "sha512-uF1pOVcd+xizNtVTuZqNGzy7I6IJon5YMmQidsURds1Ww96AFDxrR/NEACqeATNAmY60m8wy1VZZpSg5zLNkpw==", "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "optional": true, + "peer": true, + "dependencies": { + "@0no-co/graphql.web": "^1.0.8", + "@babel/runtime": "^7.20.0", + "@expo/code-signing-certificates": "^0.0.5", + "@expo/config": "~11.0.13", + "@expo/config-plugins": "~10.1.2", + "@expo/devcert": "^1.1.2", + "@expo/env": "~1.0.7", + "@expo/image-utils": "^0.7.6", + "@expo/json-file": "^9.1.5", + "@expo/metro-config": "~0.20.17", + "@expo/osascript": "^2.2.5", + "@expo/package-manager": "^1.8.6", + "@expo/plist": "^0.3.5", + "@expo/prebuild-config": "^9.0.11", + "@expo/spawn-async": "^1.7.2", + "@expo/ws-tunnel": "^1.0.1", + "@expo/xcpretty": "^4.3.0", + "@react-native/dev-middleware": "0.79.5", + "@urql/core": "^5.0.6", + "@urql/exchange-retry": "^1.3.0", + "accepts": "^1.3.8", + "arg": "^5.0.2", + "better-opn": "~3.0.2", + "bplist-creator": "0.1.0", + "bplist-parser": "^0.3.1", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "compression": "^1.7.4", + "connect": "^3.7.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "freeport-async": "^2.0.0", + "getenv": "^2.0.0", + "glob": "^10.4.2", + "lan-network": "^0.1.6", + "minimatch": "^9.0.0", + "node-forge": "^1.3.1", + "npm-package-arg": "^11.0.0", + "ora": "^3.4.0", + "picomatch": "^3.0.1", + "pretty-bytes": "^5.6.0", + "pretty-format": "^29.7.0", + "progress": "^2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", + "resolve": "^1.22.2", + "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.3", + "semver": "^7.6.0", + "send": "^0.19.0", + "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", + "structured-headers": "^0.4.1", + "tar": "^7.4.3", + "terminal-link": "^2.1.1", + "undici": "^6.18.2", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" + }, + "bin": { + "expo-internal": "build/bin/cli" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", + "node_modules/@expo/cli/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==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", - "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "node_modules/@expo/cli/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==", "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@js-joda/core": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.3.tgz", - "integrity": "sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==", - "license": "BSD-3-Clause" - }, - "node_modules/@js-joda/timezone": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@js-joda/timezone/-/timezone-2.3.0.tgz", - "integrity": "sha512-DHXdNs0SydSqC5f0oRJPpTcNfnpRojgBqMCFupQFv6WgeZAjU3DBx+A7JtaGPP3dHrP2Odi2N8Vf+uAm/8ynCQ==", - "license": "BSD-3-Clause", - "peerDependencies": { - "@js-joda/core": ">=1.11.0" - } + "optional": true, + "peer": true }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", - "dev": true, + "node_modules/@expo/cli/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "optional": true, + "peer": true, + "engines": { + "node": ">=6" } }, - "node_modules/@js-soft/docdb-access-abstractions": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.2.0.tgz", - "integrity": "sha512-DlDCNWHBLmiNEa7I8LqlKVK/xY6QTit3K20/2SkIRIWMqkUCObkVfi113zfiRg4wt+XeBjtLiNHwWxHoGSrLoA==", - "license": "MIT" + "node_modules/@expo/cli/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT", + "optional": true, + "peer": true }, - "node_modules/@js-soft/docdb-access-loki": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-loki/-/docdb-access-loki-1.3.0.tgz", - "integrity": "sha512-uJ7T4T28K0FoZNMVO/6n4gI+WLnHkEJGHkMTWND2Sm88czXFjY4Pa55zHo/QWqZYZbj2Fdk7DAnI4ABsUSfFJg==", + "node_modules/@expo/cli/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@js-soft/docdb-access-abstractions": "1.1.0", - "@types/lokijs": "1.5.14", - "lokijs": "1.5.12" + "balanced-match": "^1.0.0" } }, - "node_modules/@js-soft/docdb-access-loki/node_modules/@js-soft/docdb-access-abstractions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.1.0.tgz", - "integrity": "sha512-AkN2D4nRDF/35znXs5xfBRIGCngPIev9h6EGm7AdBAYlfiXg4k1uh4+BcdLroiD8nlaCQMmLSNCmUGFjSINuuQ==", - "license": "MIT" + "node_modules/@expo/cli/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } }, - "node_modules/@js-soft/docdb-access-mongo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-mongo/-/docdb-access-mongo-1.3.0.tgz", - "integrity": "sha512-ydvk8v+hLCmZ7Y0IunQxGjFbLCfD3PisWqg2R61XVgkYg6V2H/jnqgCK6WyAXllNq89h4rHUNCOAX3w0VCszFA==", - "dev": true, + "node_modules/@expo/cli/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "@js-soft/docdb-access-abstractions": "1.1.0", - "mongodb": "6.17.0" + "optional": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@js-soft/docdb-access-mongo/node_modules/@js-soft/docdb-access-abstractions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.1.0.tgz", - "integrity": "sha512-AkN2D4nRDF/35znXs5xfBRIGCngPIev9h6EGm7AdBAYlfiXg4k1uh4+BcdLroiD8nlaCQMmLSNCmUGFjSINuuQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@js-soft/docdb-querytranslator": { - "version": "1.1.5", - "license": "MIT" - }, - "node_modules/@js-soft/eslint-config-ts": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@js-soft/eslint-config-ts/-/eslint-config-ts-2.0.3.tgz", - "integrity": "sha512-bv3MhZhPJKknky8lSySCoyRpMldSaztEPaDmqcD/FTjkwKGzyktWSqzmmbkoHkg9ed6sBz8aMOET6zsLEP5a8g==", - "dev": true, + "node_modules/@expo/cli/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@eslint/js": "^9.32.0", - "eslint-plugin-chai-expect": "^3.1.0", - "eslint-plugin-chai-friendly": "^1.1.0", - "eslint-plugin-jest": "^29.0.1", - "eslint-plugin-mocha": "^11.1.0", - "typescript-eslint": "^8.39.0" + "restore-cursor": "^2.0.0" }, - "peerDependencies": { - "eslint": ">=9" + "engines": { + "node": ">=4" } }, - "node_modules/@js-soft/license-check": { - "version": "1.0.9", - "dev": true, + "node_modules/@expo/cli/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "license-checker": "^25.0.1", - "yargs": "^17.7.2" - }, - "bin": { - "license-check": "bin/licenseCheck.js" + "color-name": "1.1.3" } }, - "node_modules/@js-soft/logging-abstractions": { - "version": "1.0.1", - "license": "MIT" + "node_modules/@expo/cli/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==", + "license": "MIT", + "optional": true, + "peer": true }, - "node_modules/@js-soft/node-logger": { - "version": "1.2.0", - "dev": true, + "node_modules/@expo/cli/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==", "license": "MIT", - "dependencies": { - "@js-soft/logging-abstractions": "1.0.1", - "correlation-id": "^5.2.0", - "json-stringify-safe": "^5.0.1", - "log4js": "^6.9.1" - } + "optional": true, + "peer": true }, - "node_modules/@js-soft/simple-logger": { + "node_modules/@expo/cli/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==", "license": "MIT", - "dependencies": { - "@js-soft/logging-abstractions": "1.0.1", - "json-stringify-safe": "^5.0.1", - "typescript-logging": "^2.2.0", - "typescript-logging-log4ts-style": "^2.2.0" + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/@js-soft/ts-serval": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@js-soft/ts-serval/-/ts-serval-2.0.13.tgz", - "integrity": "sha512-x/ljrxIbT+VCQIHTM1a3/6ZQwC17+XPfIm76q0CswbsE14VcREa5EVVRimh+A2zyEIb36IsnNYPDAX4iReWlhg==", + "node_modules/@expo/cli/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==", "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/cli/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "lodash": "^4.17.21", - "reflect-metadata": "^0.2.2" + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@js-soft/ts-utils": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@js-soft/ts-utils/-/ts-utils-2.3.4.tgz", - "integrity": "sha512-N4Ru0jo3CgywbJRxg7mP9rglfgx3u0e00M71JjXUI3/16Z9cx31GXlydY6Hp18w3yQGT0kl2e2kAiGU3hU7c1Q==", + "node_modules/@expo/cli/node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "eventemitter2": "^6.4.9", - "json-stringify-safe": "^5.0.1", - "reflect-metadata": "^0.2.2" + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.9", - "dev": true, + "node_modules/@expo/cli/node_modules/log-symbols/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "sparse-bitfield": "^3.0.3" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@multiformats/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", - "license": "MIT" - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, + "node_modules/@expo/cli/node_modules/log-symbols/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==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@nmshd/app-runtime": { - "resolved": "packages/app-runtime", - "link": true - }, - "node_modules/@nmshd/consumption": { - "resolved": "packages/consumption", - "link": true - }, - "node_modules/@nmshd/content": { - "resolved": "packages/content", - "link": true - }, - "node_modules/@nmshd/core-types": { - "resolved": "packages/core-types", - "link": true + "node_modules/@expo/cli/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC", + "optional": true, + "peer": true }, - "node_modules/@nmshd/crypto": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@nmshd/crypto/-/crypto-2.1.2.tgz", - "integrity": "sha512-DbcBnqPAeviaMiIG7G1QaICvoAS3xNMdW/CWoig1XJAbRcpeVRQ3LpKZSgt5XwDc8xl+0j3Ork/HDWijk3rlNw==", + "node_modules/@expo/cli/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "license": "MIT", - "dependencies": { - "libsodium-wrappers-sumo": "0.7.15", - "uuid": "^11.1.0" + "optional": true, + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/@nmshd/iql": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@nmshd/iql/-/iql-1.0.3.tgz", - "integrity": "sha512-gTc69pUQrxjN8kajwfcg9+6/HCRrEcIURKkGtCc/5CqYf6Owq3F1AwPX31BPAopnB/ElvkNpzM1MntohXUe2vA==", - "license": "MIT" - }, - "node_modules/@nmshd/runtime": { - "resolved": "packages/runtime", - "link": true - }, - "node_modules/@nmshd/runtime-types": { - "resolved": "packages/runtime-types", - "link": true - }, - "node_modules/@nmshd/transport": { - "resolved": "packages/transport", - "link": true - }, - "node_modules/@nmshd/typescript-ioc": { - "version": "3.2.4", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "reflect-metadata": "^0.2.2" - } - }, - "node_modules/@noble/curves": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", - "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", - "license": "MIT", + "node_modules/@expo/cli/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "@noble/hashes": "1.8.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "node_modules/@expo/cli/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">=10" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "devOptional": true, - "license": "MIT", + "node_modules/@expo/cli/node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "devOptional": true, + "node_modules/@expo/cli/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "devOptional": true, + "node_modules/@expo/cli/node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/@npmcli/agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", - "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/node_modules/ora/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" + "color-convert": "^1.9.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=4" } }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/node_modules/ora/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "semver": "^7.3.5" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=4" } }, - "node_modules/@npmcli/git": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", - "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@expo/cli/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/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==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=16" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" + "node_modules/@expo/cli/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "license": "ISC", + "optional": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/@npmcli/git/node_modules/which": { + "node_modules/@expo/cli/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/cli/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=4" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", - "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", - "dev": true, + "node_modules/@expo/cli/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==", "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/@expo/cli/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@expo/cli/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==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", - "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/node_modules/string-width/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==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@npmcli/package-json": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", - "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/node_modules/string-width/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "ansi-regex": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=6" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", - "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "which": "^5.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" + "node": ">=4" } }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, + "node_modules/@expo/cli/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18" } }, - "node_modules/@npmcli/redact": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", - "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", - "dev": true, + "node_modules/@expo/cli/node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "license": "ISC", + "optional": true, + "peer": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", - "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/node_modules/wrap-ansi/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==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=16" + "node": ">=8" } }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", + "node_modules/@expo/cli/node_modules/wrap-ansi/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@openid4vc/oauth2": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-BRY43zVD8fNEfQlOzYdaGxIUM9GcBubiJcqXpDCzGB+hc7g8LToAuNaAeNe0ZJmeN5Fn+iaL9tnmlz6Lq6A+Dw==", - "license": "Apache-2.0", - "dependencies": { - "@openid4vc/utils": "0.3.0-alpha-20250602121005", - "zod": "^3.24.2" + "node_modules/@expo/cli/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" } }, - "node_modules/@openid4vc/openid4vci": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-7F4E6qigwhqHXIg5pRPQ8O79mVzIsHA+M5UzUwy86btLQIalJOBJK9Td6BX4H9TROeXWoPM/cWsw1s0WZsrIeA==", - "license": "Apache-2.0", + "node_modules/@expo/code-signing-certificates": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", - "@openid4vc/utils": "0.3.0-alpha-20250602121005", - "zod": "^3.24.2" + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" } }, - "node_modules/@openid4vc/openid4vp": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-n45JxZFTJyOlJFjW/y4bXxDYwDfm4F61RCt+qy8lDPp+DtCnw9pFGHndk6IZtP4t33/e88ntKvV2lUgIrJLLpw==", - "license": "Apache-2.0", + "node_modules/@expo/config": { + "version": "11.0.13", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-11.0.13.tgz", + "integrity": "sha512-TnGb4u/zUZetpav9sx/3fWK71oCPaOjZHoVED9NaEncktAd0Eonhq5NUghiJmkUGt3gGSjRAEBXiBbbY9/B1LA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", - "@openid4vc/utils": "0.3.0-alpha-20250602121005", - "zod": "^3.24.2" + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~10.1.2", + "@expo/config-types": "^53.0.5", + "@expo/json-file": "^9.1.5", + "deepmerge": "^4.3.1", + "getenv": "^2.0.0", + "glob": "^10.4.2", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "resolve-workspace-root": "^2.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.35.0" } }, - "node_modules/@openid4vc/utils": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-68lU8pqqGrqIjhb+/y+UjYFgbzluljIhTAEan5LyW0IKOMO0slFHfEzjn85Cv8bN1En/SuNT+U/McX/krlSSwg==", - "license": "Apache-2.0", + "node_modules/@expo/config-plugins": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-10.1.2.tgz", + "integrity": "sha512-IMYCxBOcnuFStuK0Ay+FzEIBKrwW8OVUMc65+v0+i7YFIIe8aL342l7T4F8lR4oCfhXn7d6M5QPgXvjtc/gAcw==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "buffer": "^6.0.3", - "zod": "^3.24.2" + "@expo/config-types": "^53.0.5", + "@expo/json-file": "~9.1.5", + "@expo/plist": "^0.3.5", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.5", + "getenv": "^2.0.0", + "glob": "^10.4.2", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" } }, - "node_modules/@openid4vc/utils/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@expo/config-plugins/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==", "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "optional": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@openwallet-foundation/askar-nodejs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-nodejs/-/askar-nodejs-0.3.2.tgz", - "integrity": "sha512-kHZaPl32azKzqT/+ksRqGXNs9lxTrhbuWVuILS1HNGXA+A5vSINRA8WwDHk2KGZ9WP7jhszbPx804cfRKrrBPA==", - "hasInstallScript": true, - "license": "Apache-2.0", + "node_modules/@expo/config-types": { + "version": "53.0.5", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-53.0.5.tgz", + "integrity": "sha512-kqZ0w44E+HEGBjy+Lpyn0BVL5UANg/tmNixxaRMLS6nf37YsDrLk2VMAmeKMMk5CKG0NmOdVv3ngeUjRQMsy9g==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@expo/config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@2060.io/ffi-napi": "^4.0.9", - "@2060.io/ref-napi": "^3.0.6", - "@openwallet-foundation/askar-shared": "0.3.2", - "ref-array-di": "^1.2.2", - "ref-struct-di": "^1.1.1" - }, - "engines": { - "node": ">= 18" + "@babel/highlight": "^7.10.4" } }, - "node_modules/@openwallet-foundation/askar-shared": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-shared/-/askar-shared-0.3.2.tgz", - "integrity": "sha512-WQSHM5+5Vy1QMUpUTj0DpwFKYdciNcksWsft/iD6Ff+AdDERKo5Mjv/4JSIZIzXUEyq7kqqNbejl4a3TDGeU3A==", - "license": "Apache-2.0", - "dependencies": { - "buffer": "^6.0.3", - "tar": "^7.4.3" + "node_modules/@expo/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==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@expo/devcert": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.0.tgz", + "integrity": "sha512-Uilcv3xGELD5t/b0eM4cxBFEKQRIivB3v7i+VhWLV/gL98aw810unLKKJbGAxAIhY6Ipyz8ChWibFsKFXYwstA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "@expo/sudo-prompt": "^9.3.1", + "debug": "^3.1.0", + "glob": "^10.4.2" } }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "node_modules/@expo/env": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-1.0.7.tgz", + "integrity": "sha512-qSTEnwvuYJ3umapO9XJtrb1fAqiPlmUUg78N0IZXXGwQRt+bkp0OBls+Y5Mxw/Owj8waAM0Z3huKKskRADR5ow==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^2.0.0" + } + }, + "node_modules/@expo/fingerprint": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.13.4.tgz", + "integrity": "sha512-MYfPYBTMfrrNr07DALuLhG6EaLVNVrY/PXjEzsjWdWE4ZFn0yqI0IdHNkJG7t1gePT8iztHc7qnsx+oo/rDo6w==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "arg": "^5.0.2", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "find-up": "^5.0.0", + "getenv": "^2.0.0", + "glob": "^10.4.2", + "ignore": "^5.3.1", + "minimatch": "^9.0.0", + "p-limit": "^3.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0" + }, "bin": { - "mkdirp": "dist/cjs/src/bin.js" + "fingerprint": "bin/cli.js" + } + }, + "node_modules/@expo/fingerprint/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@expo/fingerprint/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@expo/fingerprint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, + "node_modules/@expo/fingerprint/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==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/yallist": { + "node_modules/@expo/image-utils": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.7.6.tgz", + "integrity": "sha512-GKnMqC79+mo/1AFrmAcUcGfbsXXTRqOMNS1umebuevl3aaw+ztsYEFEiuNhHZW7PQ3Xs3URNT513ZxKhznDscw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.0.0", + "getenv": "^2.0.0", + "jimp-compact": "0.16.1", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "temp-dir": "~2.0.0", + "unique-string": "~2.0.0" + } + }, + "node_modules/@expo/image-utils/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/@peculiar/asn1-cms": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.4.0.tgz", - "integrity": "sha512-TJvw5Tna/txvzzwnKUlCFd6zIz4R7qysHCaU6M2oe/MUT6EkvJDOzGGNY0hdjJYpuuHoqanQbIqEBhSLSWe1Tg==", + "node_modules/@expo/json-file": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.1.5.tgz", + "integrity": "sha512-prWBhLUlmcQtvN6Y7BpW2k9zXGd3ySa3R6rAguMJkp1z22nunLN64KYTUWfijFlprFoxm9r2VNnGkcbndAlgKA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "@peculiar/asn1-x509-attr": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.3" } }, - "node_modules/@peculiar/asn1-csr": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.4.0.tgz", - "integrity": "sha512-9yQz0hQ9ynGr/I1X1v64QQGfRMbviHXyqY07cy69UzXa8s4ayCKx/TncU6lDWcTKs7P/X/AEcuJcG7Xbw0cl1A==", + "node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" + "@babel/highlight": "^7.10.4" } }, - "node_modules/@peculiar/asn1-ecc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.4.0.tgz", - "integrity": "sha512-fJiYUBCJBDkjh347zZe5H81BdJ0+OGIg0X9z06v8xXUoql3MFeENUX0JsjCaVaU9A0L85PefLPGYkIoGpTnXLQ==", + "node_modules/@expo/metro-config": { + "version": "0.20.17", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.20.17.tgz", + "integrity": "sha512-lpntF2UZn5bTwrPK6guUv00Xv3X9mkN3YYla+IhEHiYXWyG7WKOtDU0U4KR8h3ubkZ6SPH3snDyRyAzMsWtZFA==", "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "@expo/config": "~11.0.12", + "@expo/env": "~1.0.7", + "@expo/json-file": "~9.1.5", + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^2.0.0", + "glob": "^10.4.2", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.27.0", + "minimatch": "^9.0.0", + "postcss": "~8.4.32", + "resolve-from": "^5.0.0" } }, - "node_modules/@peculiar/asn1-pfx": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.4.0.tgz", - "integrity": "sha512-fhpeoJ6T4nCLWT5tt3Un+BbyM1lLFnGXcRC2Ioe5ra2I0yptdjw05j20rV8BlUVzPIvUYpatq6joMQKe3ibh0w==", + "node_modules/@expo/metro-config/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@peculiar/asn1-cms": "^2.4.0", - "@peculiar/asn1-pkcs8": "^2.4.0", - "@peculiar/asn1-rsa": "^2.4.0", - "@peculiar/asn1-schema": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" + "balanced-match": "^1.0.0" } }, - "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.4.0.tgz", - "integrity": "sha512-4r2LtsAM0HWXLxetGTYKyBumky7W6C1EuiOctqhl7zFK5MHjiZ+9WOeaoeTPR1g3OEoeG7KEWIkaUOyRH4ojTw==", - "license": "MIT", + "node_modules/@expo/metro-config/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.4.0.tgz", - "integrity": "sha512-D7paqEVpu9wuWuClMN+vR5cqJWJITNPaMoa9R+FmkJ8ywF9UaS2JFI0RYclKILNoLdLg1N4eUCoJvM+ubsIIZQ==", + "node_modules/@expo/metro-config/node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@peculiar/asn1-cms": "^2.4.0", - "@peculiar/asn1-pfx": "^2.4.0", - "@peculiar/asn1-pkcs8": "^2.4.0", - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "@peculiar/asn1-x509-attr": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/@peculiar/asn1-rsa": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.4.0.tgz", - "integrity": "sha512-6PP75voaEnOSlWR9sD25iCQyLgFZHXbmxvUfnnDcfL6Zh5h2iHW38+bve4LfH7a60x7fkhZZNmiYqAlAff9Img==", + "node_modules/@expo/metro-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==", "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" + "optional": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.4.0.tgz", - "integrity": "sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ==", + "node_modules/@expo/osascript": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.2.5.tgz", + "integrity": "sha512-Bpp/n5rZ0UmpBOnl7Li3LtM7la0AR3H9NNesqL+ytW5UiqV/TbonYW3rDZY38u4u/lG7TnYflVIVQPD+iqZJ5w==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" + "@expo/spawn-async": "^1.7.2", + "exec-async": "^2.2.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@peculiar/asn1-x509": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.4.0.tgz", - "integrity": "sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw==", + "node_modules/@expo/package-manager": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.8.6.tgz", + "integrity": "sha512-gcdICLuL+nHKZagPIDC5tX8UoDDB8vNA5/+SaQEqz8D+T2C4KrEJc2Vi1gPAlDnKif834QS6YluHWyxjk0yZlQ==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" + "@expo/json-file": "^9.1.5", + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.0.0", + "npm-package-arg": "^11.0.0", + "ora": "^3.4.0", + "resolve-workspace-root": "^2.0.0" } }, - "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.4.0.tgz", - "integrity": "sha512-Tr5Zi+wcE2sfR0gKRvsPwXoA1U8CuDnwiFbxCS+5Z1Nck9zlHj86+4/EZhwucjKXwPEHk1ekhqb3iwISY/+E/w==", + "node_modules/@expo/package-manager/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" + "optional": true, + "peer": true, + "engines": { + "node": ">=6" } }, - "node_modules/@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "node_modules/@expo/package-manager/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "tslib": "^2.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/@peculiar/webcrypto": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", - "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", + "node_modules/@expo/package-manager/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2", - "webcrypto-core": "^1.8.0" + "restore-cursor": "^2.0.0" }, "engines": { - "node": ">=10.12.0" + "node": ">=4" } }, - "node_modules/@peculiar/x509": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.13.0.tgz", - "integrity": "sha512-r9BOb1GZ3gx58Pog7u9x70spnHlCQPFm7u/ZNlFv+uBsU7kTDY9QkUD+l+X0awopDuCK1fkH3nEIZeMDSG/jlw==", + "node_modules/@expo/package-manager/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@peculiar/asn1-cms": "^2.3.15", - "@peculiar/asn1-csr": "^2.3.15", - "@peculiar/asn1-ecc": "^2.3.15", - "@peculiar/asn1-pkcs9": "^2.3.15", - "@peculiar/asn1-rsa": "^2.3.15", - "@peculiar/asn1-schema": "^2.3.15", - "@peculiar/asn1-x509": "^2.3.15", - "pvtsutils": "^1.3.6", - "reflect-metadata": "^0.2.2", - "tslib": "^2.8.1", - "tsyringe": "^4.10.0" + "color-name": "1.1.3" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, + "node_modules/@expo/package-manager/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==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@expo/package-manager/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==", "license": "MIT", "optional": true, + "peer": true, "engines": { - "node": ">=14" + "node": ">=0.8.0" } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, + "node_modules/@expo/package-manager/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==", "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" + "node": ">=4" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@expo/package-manager/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sd-jwt/core": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/core/-/core-0.10.0.tgz", - "integrity": "sha512-EuFsIHP76fwNi97dGcz2jdEenHL/AkDGcqrEA00k82Uw0HP/hvbAfB+yyPxYrd3dVaxe5PWSKvDkgDK6kKk+6Q==", - "license": "Apache-2.0", + "node_modules/@expo/package-manager/node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@sd-jwt/decode": "0.10.0", - "@sd-jwt/present": "0.10.0", - "@sd-jwt/types": "0.10.0", - "@sd-jwt/utils": "0.10.0" + "chalk": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/@sd-jwt/decode": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.10.0.tgz", - "integrity": "sha512-djNWMWpF1kUVh1fM/lRrmoQtTaJy8J0mS0bu96XPL5Jea5ov4klxOtSvuYmPFFcqLpxyrLOIwcbqmVQ20Mdzpg==", - "license": "Apache-2.0", + "node_modules/@expo/package-manager/node_modules/log-symbols/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@sd-jwt/types": "0.10.0", - "@sd-jwt/utils": "0.10.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/@sd-jwt/jwt-status-list": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/jwt-status-list/-/jwt-status-list-0.10.0.tgz", - "integrity": "sha512-TVLLQ7qjZKKEXODXUAxoWvJmnH3bSNXsttp0hxVP/qv42Rk7OFKIjepkzy6lh+RQRWw3NK/rHiz95/Fz1m4xBQ==", - "license": "Apache-2.0", + "node_modules/@expo/package-manager/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/@expo/package-manager/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/package-manager/node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "@sd-jwt/types": "0.10.0", - "base64url": "^3.0.1", - "pako": "^2.1.0" + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": ">=18" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@sd-jwt/present": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.10.0.tgz", - "integrity": "sha512-ITkyXAfdPOnfWlPgGkHpN1JxaOCC/A8Oid0CUY25AsGuwkSCw9rd+B0nwG5KBwmf1RaOG75FkvwmSCHXBlHgUg==", - "license": "Apache-2.0", + "node_modules/@expo/package-manager/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@sd-jwt/decode": "0.10.0", - "@sd-jwt/types": "0.10.0", - "@sd-jwt/utils": "0.10.0" + "mimic-fn": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/@sd-jwt/sd-jwt-vc": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.10.0.tgz", - "integrity": "sha512-418TX436dBK7FnwsLJXUXnTQByZQOonCuJ4vKyrOJ27mZXxkiFiLSaUojqoFerSw5u29nwrcRRJzd1NLdLWqkQ==", - "license": "Apache-2.0", + "node_modules/@expo/package-manager/node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@sd-jwt/core": "0.10.0", - "@sd-jwt/jwt-status-list": "0.10.0", - "@sd-jwt/utils": "0.10.0", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1" + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/@sd-jwt/sd-jwt-vc/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/@expo/package-manager/node_modules/ora/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=4" } }, - "node_modules/@sd-jwt/sd-jwt-vc/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/@sd-jwt/types": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.10.0.tgz", - "integrity": "sha512-/UOSel/n16qi5xt/hiX3ob4y/ke+yLn+iuVZDfYUvxKTOs/g0VXRo2/RQ5Fp5Coa8SxSms0uW9kb5pv2YdY8yw==", - "license": "Apache-2.0", + "node_modules/@expo/package-manager/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "license": "ISC", + "optional": true, + "peer": true, "engines": { - "node": ">=18" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@sd-jwt/utils": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.10.0.tgz", - "integrity": "sha512-4ozPvrer45NCuMtVDnsDtQMxp9cI6AgaFKE/B11TBmpxER8eXjGD2xTfSpRtJokUTIQmY267jQJNVwNnC/8DOw==", - "license": "Apache-2.0", + "node_modules/@expo/package-manager/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@sd-jwt/types": "0.10.0", - "js-base64": "^3.7.6" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/@sigstore/bundle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", - "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@expo/package-manager/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==", + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/@expo/package-manager/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.4.0" + "ansi-regex": "^4.1.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" } }, - "node_modules/@sigstore/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", - "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@expo/package-manager/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==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=4" } }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", - "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@expo/package-manager/node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "license": "ISC", + "optional": true, + "peer": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@sigstore/sign": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", - "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@expo/plist": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.3.5.tgz", + "integrity": "sha512-9RYVU1iGyCJ7vWfg3e7c/NVyMFs8wbl+dMWZphtFtsqyN9zppGREU3ctlD3i8KUE0sCUTVnLjCWr+VeUIDep2g==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "make-fetch-happen": "^14.0.2", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.2.3", + "xmlbuilder": "^15.1.1" } }, - "node_modules/@sigstore/tuf": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", - "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.4.1", - "tuf-js": "^3.0.1" - }, + "node_modules/@expo/prebuild-config": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-9.0.11.tgz", + "integrity": "sha512-0DsxhhixRbCCvmYskBTq8czsU0YOBsntYURhWPNpkl0IPVpeP9haE5W4OwtHGzXEbmHdzaoDwNmVcWjS/mqbDw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@expo/config": "~11.0.13", + "@expo/config-plugins": "~10.1.2", + "@expo/config-types": "^53.0.5", + "@expo/image-utils": "^0.7.6", + "@expo/json-file": "^9.1.5", + "@react-native/normalize-colors": "0.79.5", + "debug": "^4.3.1", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/prebuild-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==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@sigstore/verify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", - "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@expo/spawn-async": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.1" + "cross-spawn": "^7.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=12" } }, - "node_modules/@sinclair/typebox": { - "version": "0.34.38", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.38.tgz", - "integrity": "sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==", - "dev": true, - "license": "MIT" + "node_modules/@expo/sudo-prompt": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz", + "integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==", + "license": "MIT", + "optional": true, + "peer": true }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "devOptional": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" + "node_modules/@expo/vector-icons": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.1.0.tgz", + "integrity": "sha512-7T09UE9h8QDTsUeMGymB4i+iqvtEeaO5VvUjryFB4tugDTG/bkzViWA74hm5pfjjDEhYMXWaX112mcvhccmIwQ==", + "license": "MIT", + "optional": true, + "peer": true, + "peerDependencies": { + "expo-font": "*", + "react": "*", + "react-native": "*" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", - "dev": true, + "node_modules/@expo/ws-tunnel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz", + "integrity": "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@expo/xcpretty": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.2.tgz", + "integrity": "sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==", "license": "BSD-3-Clause", + "optional": true, + "peer": true, "dependencies": { - "@sinonjs/commons": "^3.0.1" + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "bin": { + "excpretty": "build/cli.js" } }, - "node_modules/@sovpro/delimited-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz", - "integrity": "sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==", + "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sphereon/kmp-mdoc-core": { - "version": "0.2.0-SNAPSHOT.26", - "resolved": "https://registry.npmjs.org/@sphereon/kmp-mdoc-core/-/kmp-mdoc-core-0.2.0-SNAPSHOT.26.tgz", - "integrity": "sha512-QXJ6R8ENiZV2rPMbn06cw5JKwqUYN1kzVRbYfONqE1PEXx1noQ4md7uxr2zSczi0ubKkNcbyYDNtIMTZIhGzmQ==", + "optional": true, + "peer": true, "dependencies": { - "@js-joda/core": "5.6.3", - "@js-joda/timezone": "2.3.0", - "format-util": "^1.0.5" + "@babel/highlight": "^7.10.4" } }, - "node_modules/@sphereon/pex-models": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.3.2.tgz", - "integrity": "sha512-foFxfLkRwcn/MOp/eht46Q7wsvpQGlO7aowowIIb5Tz9u97kYZ2kz6K2h2ODxWuv5CRA7Q0MY8XUBGE2lfOhOQ==", - "license": "Apache-2.0" + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } }, - "node_modules/@sphereon/ssi-types": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.33.0.tgz", - "integrity": "sha512-OQnWLKZQU6lHlMw3JS5308q5Kctv1eT/NNQthGNXETarsgJFiD711pWMOJvi0p5kLpU8N1e7/okaH3mXsVAW0A==", + "node_modules/@grpc/grpc-js": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@noble/hashes": "1.6.1", - "@sd-jwt/decode": "^0.9.2", - "@sphereon/kmp-mdoc-core": "0.2.0-SNAPSHOT.26", - "debug": "^4.3.5", - "events": "^3.3.0", - "jwt-decode": "^4.0.0", - "uint8arrays": "3.1.1" - } - }, - "node_modules/@sphereon/ssi-types/node_modules/@noble/hashes": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", - "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=12.10.0" } }, - "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/decode": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.9.2.tgz", - "integrity": "sha512-jHY7hqk7EMkp6E2cB13QmXvRZN7njvAveVh+zKKy0kxpAM7DmcR4TqcDA4mc5y4lP8zWFUgbk7oGLCx2wiBq+w==", + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@sd-jwt/types": "0.9.2", - "@sd-jwt/utils": "0.9.2" + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/types": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.9.2.tgz", - "integrity": "sha512-eV/MY80ekeTrqaohzPpkrgwPki6Igx69D6RniduV1Ehv6o/zaJQ2F0hY/RqBAkJhQtBQoOzouwKYHme40k1Dlw==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=18.18.0" } }, - "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/utils": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.9.2.tgz", - "integrity": "sha512-GpTD0isav2f+JyMyzeyf6wV3nYcD5e3oL+sVVr/61Y3oaIBGMWLtGGGhBRMCimSnd8kbb0P9jLxvp7ioASk6vw==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@sd-jwt/types": "0.9.2", - "js-base64": "^3.7.6" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=18" + "node": ">=18.18.0" } }, - "node_modules/@sphereon/ssi-types/node_modules/jwt-decode": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", - "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", - "license": "MIT", + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@stablelib/binary": { + "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", - "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", - "license": "MIT", - "dependencies": { - "@stablelib/int": "^1.0.1" + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@stablelib/ed25519": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", - "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", - "license": "MIT", - "dependencies": { - "@stablelib/random": "^1.0.2", - "@stablelib/sha512": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@stablelib/hash": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", - "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==", - "license": "MIT" - }, - "node_modules/@stablelib/int": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", - "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==", - "license": "MIT" - }, - "node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "engines": { + "node": "20 || >=22" } }, - "node_modules/@stablelib/sha512": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", - "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, "license": "MIT", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" } }, - "node_modules/@stablelib/wipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", - "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==", - "license": "MIT" - }, - "node_modules/@ts-graphviz/adapter": { - "version": "2.0.5", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ts-graphviz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ts-graphviz" - } - ], - "license": "MIT", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "devOptional": true, + "license": "ISC", "dependencies": { - "@ts-graphviz/common": "^2.1.4" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@ts-graphviz/ast": { - "version": "2.0.5", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ts-graphviz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ts-graphviz" - } - ], - "license": "MIT", + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", "dependencies": { - "@ts-graphviz/common": "^2.1.4" + "minipass": "^7.0.4" }, "engines": { - "node": ">=18" + "node": ">=18.0.0" } }, - "node_modules/@ts-graphviz/common": { - "version": "2.1.4", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ts-graphviz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ts-graphviz" - } - ], - "license": "MIT", + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "license": "ISC", + "optional": true, + "peer": true, "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@ts-graphviz/core": { - "version": "2.0.5", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ts-graphviz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ts-graphviz" - } - ], - "license": "MIT", + "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==", + "devOptional": true, + "license": "ISC", "dependencies": { - "@ts-graphviz/ast": "^2.0.5", - "@ts-graphviz/common": "^2.1.4" + "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": ">=18" + "node": ">=8" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, + "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==", + "devOptional": true, "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@tufjs/models": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", - "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", - "dev": true, + "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==", + "devOptional": true, "license": "MIT", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", - "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", - "dev": true, + "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==", + "devOptional": true, "license": "MIT", - "optional": true, "dependencies": { - "tslib": "^2.4.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "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==", + "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==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "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==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.0.0" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "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==", "devOptional": true, "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" + "engines": { + "node": ">=8" } }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "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==", + "devOptional": true, "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@jest/console": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.5.tgz", + "integrity": "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.0.5", + "jest-util": "30.0.5", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/docker-modem": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", - "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==", + "node_modules/@jest/core": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.5.tgz", + "integrity": "sha512-fKD0OulvRsXF1hmaFgHhVJzczWzA1RXMMo9LTPuFXo9q/alDbME3JIyWYqovWsUBWSoBcsHaGPSLF9rz4l9Qeg==", "dev": true, "license": "MIT", "dependencies": { + "@jest/console": "30.0.5", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", "@types/node": "*", - "@types/ssh2": "*" + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.0.5", + "jest-config": "30.0.5", + "jest-haste-map": "30.0.5", + "jest-message-util": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.5", + "jest-resolve-dependencies": "30.0.5", + "jest-runner": "30.0.5", + "jest-runtime": "30.0.5", + "jest-snapshot": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "jest-watcher": "30.0.5", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@types/dockerode": { - "version": "3.3.42", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.42.tgz", - "integrity": "sha512-U1jqHMShibMEWHdxYhj3rCMNCiLx5f35i4e3CEUuW+JSSszc/tVqc6WCAPdhwBymG5R/vgbcceagK0St7Cq6Eg==", - "dev": true, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/docker-modem": "*", - "@types/node": "*", - "@types/ssh2": "*" + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "node_modules/@jest/create-cache-key-function/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "node_modules/@jest/create-cache-key-function/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "license": "MIT" + "node_modules/@jest/create-cache-key-function/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==", + "license": "MIT", + "optional": true, + "peer": true }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "devOptional": true, - "license": "MIT" + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "devOptional": true, + "node_modules/@jest/environment": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.5.tgz", + "integrity": "sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@jest/fake-timers": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-mock": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "devOptional": true, + "node_modules/@jest/expect": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.5.tgz", + "integrity": "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/istanbul-lib-report": "*" + "expect": "30.0.5", + "jest-snapshot": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/jest": { - "version": "30.0.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", - "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", + "node_modules/@jest/expect-utils": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.5.tgz", + "integrity": "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==", "dev": true, "license": "MIT", "dependencies": { - "expect": "^30.0.0", - "pretty-format": "^30.0.0" + "@jest/get-type": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", + "node_modules/@jest/fake-timers": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.5.tgz", + "integrity": "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/@types/json-stringify-safe": { - "version": "5.0.3", + "node_modules/@jest/get-type": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", + "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "node_modules/@jest/globals": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.5.tgz", + "integrity": "sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/lokijs": { - "version": "1.5.14", - "license": "MIT" - }, - "node_modules/@types/luxon": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", - "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", - "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", "license": "MIT", "dependencies": { - "undici-types": "~7.10.0" + "@jest/environment": "30.0.5", + "@jest/expect": "30.0.5", + "@jest/types": "30.0.5", + "jest-mock": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "node_modules/@jest/reporters": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.5.tgz", + "integrity": "sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g==", + "dev": true, "license": "MIT", "dependencies": { - "@types/http-errors": "*", + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", - "@types/send": "*" + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.0.5", + "jest-util": "30.0.5", + "jest-worker": "30.0.5", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@types/ssh2": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", - "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==", + "node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "^18.11.18" + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/ssh2-streams": { - "version": "0.1.12", + "node_modules/@jest/snapshot-utils": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.5.tgz", + "integrity": "sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/ssh2/node_modules/@types/node": { - "version": "18.19.86", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", - "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/ssh2/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==", + "node_modules/@jest/test-result": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.5.tgz", + "integrity": "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "devOptional": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@jest/console": "30.0.5", + "@jest/types": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/@types/uuid": { - "version": "10.0.0", + "node_modules/@jest/test-sequencer": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.5.tgz", + "integrity": "sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/validator": { - "version": "13.15.2", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz", - "integrity": "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==", - "license": "MIT" + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.0.5", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", + "node_modules/@jest/transform": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.5.tgz", + "integrity": "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.0", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/@types/whatwg-url": { - "version": "11.0.5", + "node_modules/@jest/types": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", + "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/webidl-conversions": "*" + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@types/node": "*" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "devOptional": true, + "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==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/yargs-parser": "*" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "devOptional": true, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz", - "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==", - "dev": true, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/type-utils": "8.39.0", - "@typescript-eslint/utils": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.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.39.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } + "node_modules/@js-joda/core": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.3.tgz", + "integrity": "sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==", + "license": "BSD-3-Clause" }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, + "node_modules/@js-joda/timezone": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@js-joda/timezone/-/timezone-2.3.0.tgz", + "integrity": "sha512-DHXdNs0SydSqC5f0oRJPpTcNfnpRojgBqMCFupQFv6WgeZAjU3DBx+A7JtaGPP3dHrP2Odi2N8Vf+uAm/8ynCQ==", + "license": "BSD-3-Clause", "peerDependencies": { - "typescript": ">=4.8.4" + "@js-joda/core": ">=1.11.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz", - "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.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", - "typescript": ">=4.8.4 <6.0.0" + "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz", - "integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==", - "dev": true, + "node_modules/@js-soft/docdb-access-abstractions": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.2.0.tgz", + "integrity": "sha512-DlDCNWHBLmiNEa7I8LqlKVK/xY6QTit3K20/2SkIRIWMqkUCObkVfi113zfiRg4wt+XeBjtLiNHwWxHoGSrLoA==", + "license": "MIT" + }, + "node_modules/@js-soft/docdb-access-loki": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-loki/-/docdb-access-loki-1.3.0.tgz", + "integrity": "sha512-uJ7T4T28K0FoZNMVO/6n4gI+WLnHkEJGHkMTWND2Sm88czXFjY4Pa55zHo/QWqZYZbj2Fdk7DAnI4ABsUSfFJg==", "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.39.0", - "@typescript-eslint/types": "^8.39.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": { - "typescript": ">=4.8.4 <6.0.0" + "@js-soft/docdb-access-abstractions": "1.1.0", + "@types/lokijs": "1.5.14", + "lokijs": "1.5.12" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", - "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", + "node_modules/@js-soft/docdb-access-loki/node_modules/@js-soft/docdb-access-abstractions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.1.0.tgz", + "integrity": "sha512-AkN2D4nRDF/35znXs5xfBRIGCngPIev9h6EGm7AdBAYlfiXg4k1uh4+BcdLroiD8nlaCQMmLSNCmUGFjSINuuQ==", + "license": "MIT" + }, + "node_modules/@js-soft/docdb-access-mongo": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-mongo/-/docdb-access-mongo-1.3.0.tgz", + "integrity": "sha512-ydvk8v+hLCmZ7Y0IunQxGjFbLCfD3PisWqg2R61XVgkYg6V2H/jnqgCK6WyAXllNq89h4rHUNCOAX3w0VCszFA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@js-soft/docdb-access-abstractions": "1.1.0", + "mongodb": "6.17.0" } }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz", - "integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==", + "node_modules/@js-soft/docdb-access-mongo/node_modules/@js-soft/docdb-access-abstractions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.1.0.tgz", + "integrity": "sha512-AkN2D4nRDF/35znXs5xfBRIGCngPIev9h6EGm7AdBAYlfiXg4k1uh4+BcdLroiD8nlaCQMmLSNCmUGFjSINuuQ==", "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } + "license": "MIT" }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz", - "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==", + "node_modules/@js-soft/docdb-querytranslator": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-querytranslator/-/docdb-querytranslator-1.1.5.tgz", + "integrity": "sha512-VfuAWmGF3fJ/hrbvk+2CYh3p6kdqlcdUtHrOM6LK9q7lnZrVHmlnaE242fhGoUiAiKF0w5PWhUtd5/lggEb0EA==", + "license": "MIT" + }, + "node_modules/@js-soft/eslint-config-ts": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@js-soft/eslint-config-ts/-/eslint-config-ts-2.0.3.tgz", + "integrity": "sha512-bv3MhZhPJKknky8lSySCoyRpMldSaztEPaDmqcD/FTjkwKGzyktWSqzmmbkoHkg9ed6sBz8aMOET6zsLEP5a8g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/utils": "8.39.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@eslint/js": "^9.32.0", + "eslint-plugin-chai-expect": "^3.1.0", + "eslint-plugin-chai-friendly": "^1.1.0", + "eslint-plugin-jest": "^29.0.1", + "eslint-plugin-mocha": "^11.1.0", + "typescript-eslint": "^8.39.0" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "eslint": ">=9" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "node_modules/@js-soft/license-check": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@js-soft/license-check/-/license-check-1.0.9.tgz", + "integrity": "sha512-cupYi2KYDnwjPn77hoHpRgbGh8PKESYSFudFqgzzwA/4LqFCV1N2nLV5UHxhmtr3j7S6AmFeOAo19s1TsQUf3w==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18.12" + "dependencies": { + "license-checker": "^25.0.1", + "yargs": "^17.7.2" }, - "peerDependencies": { - "typescript": ">=4.8.4" + "bin": { + "license-check": "bin/licenseCheck.js" } }, - "node_modules/@typescript-eslint/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", - "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "node_modules/@js-soft/logging-abstractions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@js-soft/logging-abstractions/-/logging-abstractions-1.0.1.tgz", + "integrity": "sha512-giFnUcpfq07vNmMFetvI1bfKo8g5slIiQbSnwLF1dHU8gLE/hJmL3jTnchXFRTwSeMhTFCNg0GudsNMw1esMVQ==", + "license": "MIT" }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", - "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", + "node_modules/@js-soft/node-logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@js-soft/node-logger/-/node-logger-1.2.0.tgz", + "integrity": "sha512-jEvBpqvhds+ReW46981UHtqaQVc2T1DpPmzo7SsaYMywIrV8O4c0gmZSOtZ3M4pTXysoSf121jTxxVMCXdQWFw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.39.0", - "@typescript-eslint/tsconfig-utils": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.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": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "@js-soft/logging-abstractions": "1.0.1", + "correlation-id": "^5.2.0", + "json-stringify-safe": "^5.0.1", + "log4js": "^6.9.1" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, + "node_modules/@js-soft/simple-logger": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@js-soft/simple-logger/-/simple-logger-1.0.5.tgz", + "integrity": "sha512-ISrOACkOKJrlxsRazXHzXC1NeVxJEqUnorwPbb74wLPUkS09IY+8QE17QUkoLhv3R7eMJrhlaUMW/ZLyCn+kWQ==", "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" + "dependencies": { + "@js-soft/logging-abstractions": "1.0.1", + "json-stringify-safe": "^5.0.1", + "typescript-logging": "^2.2.0", + "typescript-logging-log4ts-style": "^2.2.0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", - "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", - "dev": true, + "node_modules/@js-soft/ts-serval": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@js-soft/ts-serval/-/ts-serval-2.0.13.tgz", + "integrity": "sha512-x/ljrxIbT+VCQIHTM1a3/6ZQwC17+XPfIm76q0CswbsE14VcREa5EVVRimh+A2zyEIb36IsnNYPDAX4iReWlhg==", "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.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", - "typescript": ">=4.8.4 <6.0.0" + "lodash": "^4.17.21", + "reflect-metadata": "^0.2.2" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", - "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", - "dev": true, + "node_modules/@js-soft/ts-utils": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@js-soft/ts-utils/-/ts-utils-2.3.4.tgz", + "integrity": "sha512-N4Ru0jo3CgywbJRxg7mP9rglfgx3u0e00M71JjXUI3/16Z9cx31GXlydY6Hp18w3yQGT0kl2e2kAiGU3hU7c1Q==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "eslint-visitor-keys": "^4.2.1" + "eventemitter2": "^6.4.9", + "json-stringify-safe": "^5.0.1", + "reflect-metadata": "^0.2.2" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.0.tgz", + "integrity": "sha512-zlayKCsIjYb7/IdfqxorK5+xUMyi4vOKcFy10wKJYc63NSdKI8mNME+uJqfatkPmOSMMUiojrL58IePKBm3gvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@multiformats/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@nmshd/app-runtime": { + "resolved": "packages/app-runtime", + "link": true + }, + "node_modules/@nmshd/consumption": { + "resolved": "packages/consumption", + "link": true + }, + "node_modules/@nmshd/content": { + "resolved": "packages/content", + "link": true + }, + "node_modules/@nmshd/core-types": { + "resolved": "packages/core-types", + "link": true + }, + "node_modules/@nmshd/crypto": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nmshd/crypto/-/crypto-2.1.2.tgz", + "integrity": "sha512-DbcBnqPAeviaMiIG7G1QaICvoAS3xNMdW/CWoig1XJAbRcpeVRQ3LpKZSgt5XwDc8xl+0j3Ork/HDWijk3rlNw==", + "license": "MIT", + "dependencies": { + "libsodium-wrappers-sumo": "0.7.15", + "uuid": "^11.1.0" + } + }, + "node_modules/@nmshd/iql": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@nmshd/iql/-/iql-1.0.3.tgz", + "integrity": "sha512-gTc69pUQrxjN8kajwfcg9+6/HCRrEcIURKkGtCc/5CqYf6Owq3F1AwPX31BPAopnB/ElvkNpzM1MntohXUe2vA==", + "license": "MIT" + }, + "node_modules/@nmshd/runtime": { + "resolved": "packages/runtime", + "link": true + }, + "node_modules/@nmshd/runtime-types": { + "resolved": "packages/runtime-types", + "link": true + }, + "node_modules/@nmshd/transport": { + "resolved": "packages/transport", + "link": true + }, + "node_modules/@nmshd/typescript-ioc": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@nmshd/typescript-ioc/-/typescript-ioc-3.2.4.tgz", + "integrity": "sha512-CNJbsdqcI+vB9eRACB0AI1s0IL3qXfuINKwoKVP/1DhuL+leZUXAV9GcuJ68Fr3scCz/fhzQK9bWLJus66V6HQ==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "reflect-metadata": "^0.2.2" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "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==", + "devOptional": true, + "license": "MIT", + "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==", + "devOptional": true, + "license": "MIT", + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", + "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@openid4vc/oauth2": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-BRY43zVD8fNEfQlOzYdaGxIUM9GcBubiJcqXpDCzGB+hc7g8LToAuNaAeNe0ZJmeN5Fn+iaL9tnmlz6Lq6A+Dw==", + "license": "Apache-2.0", + "dependencies": { + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "zod": "^3.24.2" + } + }, + "node_modules/@openid4vc/openid4vci": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-7F4E6qigwhqHXIg5pRPQ8O79mVzIsHA+M5UzUwy86btLQIalJOBJK9Td6BX4H9TROeXWoPM/cWsw1s0WZsrIeA==", + "license": "Apache-2.0", + "dependencies": { + "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "zod": "^3.24.2" + } + }, + "node_modules/@openid4vc/openid4vp": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-n45JxZFTJyOlJFjW/y4bXxDYwDfm4F61RCt+qy8lDPp+DtCnw9pFGHndk6IZtP4t33/e88ntKvV2lUgIrJLLpw==", + "license": "Apache-2.0", + "dependencies": { + "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "zod": "^3.24.2" + } + }, + "node_modules/@openid4vc/utils": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-68lU8pqqGrqIjhb+/y+UjYFgbzluljIhTAEan5LyW0IKOMO0slFHfEzjn85Cv8bN1En/SuNT+U/McX/krlSSwg==", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^6.0.3", + "zod": "^3.24.2" + } + }, + "node_modules/@openid4vc/utils/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@openwallet-foundation/askar-nodejs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-nodejs/-/askar-nodejs-0.3.2.tgz", + "integrity": "sha512-kHZaPl32azKzqT/+ksRqGXNs9lxTrhbuWVuILS1HNGXA+A5vSINRA8WwDHk2KGZ9WP7jhszbPx804cfRKrrBPA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@2060.io/ffi-napi": "^4.0.9", + "@2060.io/ref-napi": "^3.0.6", + "@openwallet-foundation/askar-shared": "0.3.2", + "ref-array-di": "^1.2.2", + "ref-struct-di": "^1.1.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@openwallet-foundation/askar-shared": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-shared/-/askar-shared-0.3.2.tgz", + "integrity": "sha512-WQSHM5+5Vy1QMUpUTj0DpwFKYdciNcksWsft/iD6Ff+AdDERKo5Mjv/4JSIZIzXUEyq7kqqNbejl4a3TDGeU3A==", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^6.0.3", + "tar": "^7.4.3" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@openwallet-foundation/askar-shared/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.4.0.tgz", + "integrity": "sha512-TJvw5Tna/txvzzwnKUlCFd6zIz4R7qysHCaU6M2oe/MUT6EkvJDOzGGNY0hdjJYpuuHoqanQbIqEBhSLSWe1Tg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-x509-attr": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.4.0.tgz", + "integrity": "sha512-9yQz0hQ9ynGr/I1X1v64QQGfRMbviHXyqY07cy69UzXa8s4ayCKx/TncU6lDWcTKs7P/X/AEcuJcG7Xbw0cl1A==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.4.0.tgz", + "integrity": "sha512-fJiYUBCJBDkjh347zZe5H81BdJ0+OGIg0X9z06v8xXUoql3MFeENUX0JsjCaVaU9A0L85PefLPGYkIoGpTnXLQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.4.0.tgz", + "integrity": "sha512-fhpeoJ6T4nCLWT5tt3Un+BbyM1lLFnGXcRC2Ioe5ra2I0yptdjw05j20rV8BlUVzPIvUYpatq6joMQKe3ibh0w==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.4.0", + "@peculiar/asn1-pkcs8": "^2.4.0", + "@peculiar/asn1-rsa": "^2.4.0", + "@peculiar/asn1-schema": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.4.0.tgz", + "integrity": "sha512-4r2LtsAM0HWXLxetGTYKyBumky7W6C1EuiOctqhl7zFK5MHjiZ+9WOeaoeTPR1g3OEoeG7KEWIkaUOyRH4ojTw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.4.0.tgz", + "integrity": "sha512-D7paqEVpu9wuWuClMN+vR5cqJWJITNPaMoa9R+FmkJ8ywF9UaS2JFI0RYclKILNoLdLg1N4eUCoJvM+ubsIIZQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.4.0", + "@peculiar/asn1-pfx": "^2.4.0", + "@peculiar/asn1-pkcs8": "^2.4.0", + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-x509-attr": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.4.0.tgz", + "integrity": "sha512-6PP75voaEnOSlWR9sD25iCQyLgFZHXbmxvUfnnDcfL6Zh5h2iHW38+bve4LfH7a60x7fkhZZNmiYqAlAff9Img==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.4.0.tgz", + "integrity": "sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ==", + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.4.0.tgz", + "integrity": "sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.4.0.tgz", + "integrity": "sha512-Tr5Zi+wcE2sfR0gKRvsPwXoA1U8CuDnwiFbxCS+5Z1Nck9zlHj86+4/EZhwucjKXwPEHk1ekhqb3iwISY/+E/w==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", + "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.13.0.tgz", + "integrity": "sha512-r9BOb1GZ3gx58Pog7u9x70spnHlCQPFm7u/ZNlFv+uBsU7kTDY9QkUD+l+X0awopDuCK1fkH3nEIZeMDSG/jlw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.3.15", + "@peculiar/asn1-csr": "^2.3.15", + "@peculiar/asn1-ecc": "^2.3.15", + "@peculiar/asn1-pkcs9": "^2.3.15", + "@peculiar/asn1-rsa": "^2.3.15", + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@react-native/assets-registry": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.80.2.tgz", + "integrity": "sha512-+sI2zIM22amhkZqW+RpD3qDoopeRiezrTtZMP+Y3HI+6/2JbEq7DdyV/2YS1lrSSdyy3STW2V37Lt4dKqP0lEQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.79.5.tgz", + "integrity": "sha512-Rt/imdfqXihD/sn0xnV4flxxb1aLLjPtMF1QleQjEhJsTUPpH4TFlfOpoCvsrXoDl4OIcB1k4FVM24Ez92zf5w==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.3", + "@react-native/codegen": "0.79.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-preset": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.79.5.tgz", + "integrity": "sha512-GDUYIWslMLbdJHEgKNfrOzXk8EDKxKzbwmBXUugoiSlr6TyepVZsj3GZDLEFarOcTwH1EXXHJsixihk8DCRQDA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-proposal-export-default-from": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-default-from": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.25.4", + "@babel/plugin-transform-classes": "^7.25.4", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-flow-strip-types": "^7.25.2", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.25.2", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/template": "^7.25.0", + "@react-native/babel-plugin-codegen": "0.79.5", + "babel-plugin-syntax-hermes-parser": "0.25.1", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/codegen": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.79.5.tgz", + "integrity": "sha512-FO5U1R525A1IFpJjy+KVznEinAgcs3u7IbnbRJUG9IH/MBXi2lEU2LtN+JarJ81MCfW4V2p0pg6t/3RGHFRrlQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.1", + "hermes-parser": "0.25.1", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/codegen/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", + "license": "ISC", + "optional": 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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.80.2.tgz", + "integrity": "sha512-UBjsE+lv1YtThs56mgFaUdWv0jNE1oO58Lkbf3dn47F0e7YiTubIcvP6AnlaMhZF2Pmt9ky8J1jTpgItO9tGeg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@react-native/dev-middleware": "0.80.2", + "chalk": "^4.0.0", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.82.2", + "metro-config": "^0.82.2", + "metro-core": "^0.82.2", + "semver": "^7.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@react-native-community/cli": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + } + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.80.2.tgz", + "integrity": "sha512-n3D88bqNk0bY+YjNxbM6giqva06xj+rgEfu91Pg+nJ0szSL2eLl7ULERJqI3hxFt0XGuTpTOxZgw/Po5maXa4g==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.80.2.tgz", + "integrity": "sha512-8OeBEZNiApdbZaqTrrzeyFwXn/JwgJox7jdtjVAH56DggTVJXdbnyUjQ4ts6XAacEQgpFOAskoO730eyafOkAA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.80.2", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^6.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.79.5.tgz", + "integrity": "sha512-WQ49TRpCwhgUYo5/n+6GGykXmnumpOkl4Lr2l2o2buWU9qPOwoiBqJAtmWEXsAug4ciw3eLiVfthn5ufs0VB0A==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.79.5.tgz", + "integrity": "sha512-U7r9M/SEktOCP/0uS6jXMHmYjj4ESfYCkNAenBjFjjsRWekiHE+U/vRMeO+fG9gq4UCcBAUISClkQCowlftYBw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.79.5", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^6.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.80.2.tgz", + "integrity": "sha512-C5/FYbIfCXPFjF/hIcWFKC9rEadDDhPMbxE7tarGR9tmYKyb9o7fYvfNe8fFgbCRKelMHP0ShATz3T73pHHDfA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.80.2.tgz", + "integrity": "sha512-f63M3paxHK92p6L9o+AY7hV/YojCZAhb+fdDpSfOtDtCngWbBhd6foJrO6IybzDFERxlwErupUg3pqr5w3KJWw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/normalize-colors": { + "version": "0.79.5", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.79.5.tgz", + "integrity": "sha512-nGXMNMclZgzLUxijQQ38Dm3IAEhgxuySAWQHnljFtfB0JdaMwpe0Ox9H7Tp2OgrEA+EMEv+Od9ElKlHwGKmmvQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.80.2.tgz", + "integrity": "sha512-kXsIV2eB73QClbbH/z/lRhZkyj3Dke4tarM5w2yXSNwJthMPMfj4KqLZ6Lnf0nmPPjz7qo/voKtlrGqlM822Rg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^19.0.0", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@sd-jwt/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/core/-/core-0.10.0.tgz", + "integrity": "sha512-EuFsIHP76fwNi97dGcz2jdEenHL/AkDGcqrEA00k82Uw0HP/hvbAfB+yyPxYrd3dVaxe5PWSKvDkgDK6kKk+6Q==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/decode": "0.10.0", + "@sd-jwt/present": "0.10.0", + "@sd-jwt/types": "0.10.0", + "@sd-jwt/utils": "0.10.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/decode": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.10.0.tgz", + "integrity": "sha512-djNWMWpF1kUVh1fM/lRrmoQtTaJy8J0mS0bu96XPL5Jea5ov4klxOtSvuYmPFFcqLpxyrLOIwcbqmVQ20Mdzpg==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.10.0", + "@sd-jwt/utils": "0.10.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/jwt-status-list": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/jwt-status-list/-/jwt-status-list-0.10.0.tgz", + "integrity": "sha512-TVLLQ7qjZKKEXODXUAxoWvJmnH3bSNXsttp0hxVP/qv42Rk7OFKIjepkzy6lh+RQRWw3NK/rHiz95/Fz1m4xBQ==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.10.0", + "base64url": "^3.0.1", + "pako": "^2.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/present": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.10.0.tgz", + "integrity": "sha512-ITkyXAfdPOnfWlPgGkHpN1JxaOCC/A8Oid0CUY25AsGuwkSCw9rd+B0nwG5KBwmf1RaOG75FkvwmSCHXBlHgUg==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/decode": "0.10.0", + "@sd-jwt/types": "0.10.0", + "@sd-jwt/utils": "0.10.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/sd-jwt-vc": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.10.0.tgz", + "integrity": "sha512-418TX436dBK7FnwsLJXUXnTQByZQOonCuJ4vKyrOJ27mZXxkiFiLSaUojqoFerSw5u29nwrcRRJzd1NLdLWqkQ==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/core": "0.10.0", + "@sd-jwt/jwt-status-list": "0.10.0", + "@sd-jwt/utils": "0.10.0", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/sd-jwt-vc/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@sd-jwt/sd-jwt-vc/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@sd-jwt/types": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.10.0.tgz", + "integrity": "sha512-/UOSel/n16qi5xt/hiX3ob4y/ke+yLn+iuVZDfYUvxKTOs/g0VXRo2/RQ5Fp5Coa8SxSms0uW9kb5pv2YdY8yw==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@sd-jwt/utils": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.10.0.tgz", + "integrity": "sha512-4ozPvrer45NCuMtVDnsDtQMxp9cI6AgaFKE/B11TBmpxER8eXjGD2xTfSpRtJokUTIQmY267jQJNVwNnC/8DOw==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.10.0", + "js-base64": "^3.7.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sigstore/bundle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", + "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", + "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", + "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", + "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", + "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", + "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.40", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.40.tgz", + "integrity": "sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "devOptional": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@sovpro/delimited-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz", + "integrity": "sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sphereon/kmp-mdoc-core": { + "version": "0.2.0-SNAPSHOT.26", + "resolved": "https://registry.npmjs.org/@sphereon/kmp-mdoc-core/-/kmp-mdoc-core-0.2.0-SNAPSHOT.26.tgz", + "integrity": "sha512-QXJ6R8ENiZV2rPMbn06cw5JKwqUYN1kzVRbYfONqE1PEXx1noQ4md7uxr2zSczi0ubKkNcbyYDNtIMTZIhGzmQ==", + "dependencies": { + "@js-joda/core": "5.6.3", + "@js-joda/timezone": "2.3.0", + "format-util": "^1.0.5" + } + }, + "node_modules/@sphereon/pex-models": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.3.2.tgz", + "integrity": "sha512-foFxfLkRwcn/MOp/eht46Q7wsvpQGlO7aowowIIb5Tz9u97kYZ2kz6K2h2ODxWuv5CRA7Q0MY8XUBGE2lfOhOQ==", + "license": "Apache-2.0" + }, + "node_modules/@sphereon/ssi-types": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.33.0.tgz", + "integrity": "sha512-OQnWLKZQU6lHlMw3JS5308q5Kctv1eT/NNQthGNXETarsgJFiD711pWMOJvi0p5kLpU8N1e7/okaH3mXsVAW0A==", + "license": "Apache-2.0", + "dependencies": { + "@noble/hashes": "1.6.1", + "@sd-jwt/decode": "^0.9.2", + "@sphereon/kmp-mdoc-core": "0.2.0-SNAPSHOT.26", + "debug": "^4.3.5", + "events": "^3.3.0", + "jwt-decode": "^4.0.0", + "uint8arrays": "3.1.1" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/decode": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.9.2.tgz", + "integrity": "sha512-jHY7hqk7EMkp6E2cB13QmXvRZN7njvAveVh+zKKy0kxpAM7DmcR4TqcDA4mc5y4lP8zWFUgbk7oGLCx2wiBq+w==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.9.2", + "@sd-jwt/utils": "0.9.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/types": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.9.2.tgz", + "integrity": "sha512-eV/MY80ekeTrqaohzPpkrgwPki6Igx69D6RniduV1Ehv6o/zaJQ2F0hY/RqBAkJhQtBQoOzouwKYHme40k1Dlw==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/utils": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.9.2.tgz", + "integrity": "sha512-GpTD0isav2f+JyMyzeyf6wV3nYcD5e3oL+sVVr/61Y3oaIBGMWLtGGGhBRMCimSnd8kbb0P9jLxvp7ioASk6vw==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.9.2", + "js-base64": "^3.7.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sphereon/ssi-types/node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "license": "MIT", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/ed25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", + "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "license": "MIT", + "dependencies": { + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==", + "license": "MIT" + }, + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==", + "license": "MIT" + }, + "node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==", + "license": "MIT" + }, + "node_modules/@ts-graphviz/adapter": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@ts-graphviz/adapter/-/adapter-2.0.6.tgz", + "integrity": "sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ts-graphviz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ts-graphviz" + } + ], + "license": "MIT", + "dependencies": { + "@ts-graphviz/common": "^2.1.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ts-graphviz/ast": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@ts-graphviz/ast/-/ast-2.0.7.tgz", + "integrity": "sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ts-graphviz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ts-graphviz" + } + ], + "license": "MIT", + "dependencies": { + "@ts-graphviz/common": "^2.1.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ts-graphviz/common": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@ts-graphviz/common/-/common-2.1.5.tgz", + "integrity": "sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ts-graphviz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ts-graphviz" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@ts-graphviz/core": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@ts-graphviz/core/-/core-2.0.7.tgz", + "integrity": "sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ts-graphviz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ts-graphviz" + } + ], + "license": "MIT", + "dependencies": { + "@ts-graphviz/ast": "^2.0.7", + "@ts-graphviz/common": "^2.1.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", + "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.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==", + "devOptional": true, + "license": "MIT", + "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.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "devOptional": true, + "license": "MIT", + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/docker-modem": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", + "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/ssh2": "*" + } + }, + "node_modules/@types/dockerode": { + "version": "3.3.43", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.43.tgz", + "integrity": "sha512-YCi0aKKpKeC9dhKTbuglvsWDnAyuIITd6CCJSTKiAdbDzPH4RWu0P9IK2XkJHdyplH6mzYtDYO+gB06JlzcPxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/docker-modem": "*", + "@types/node": "*", + "@types/ssh2": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "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==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT", + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^30.0.0", + "pretty-format": "^30.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-stringify-safe": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/json-stringify-safe/-/json-stringify-safe-5.0.3.tgz", + "integrity": "sha512-oNOjRxLfPeYbBSQ60maucaFNqbslVOPU4WWs5t/sHvAh6tyo/CThXSG+E24tEzkgh/fzvxyDrYdOJufgeNy1sQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lokijs": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@types/lokijs/-/lokijs-1.5.14.tgz", + "integrity": "sha512-4Fic47BX3Qxr8pd12KT6/T1XWU8dOlJBIp1jGoMbaDbiEvdv50rAii+B3z1b/J2pvMywcVP+DBPGP5/lgLOKGA==", + "license": "MIT" + }, + "node_modules/@types/luxon": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", + "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/ssh2": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", + "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^18.11.18" + } + }, + "node_modules/@types/ssh2-streams": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz", + "integrity": "sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ssh2/node_modules/@types/node": { + "version": "18.19.123", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.123.tgz", + "integrity": "sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/ssh2/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, + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/validator": { + "version": "13.15.2", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz", + "integrity": "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==", + "license": "MIT" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "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==", + "devOptional": true, + "license": "MIT", + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz", + "integrity": "sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.40.0", + "@typescript-eslint/type-utils": "8.40.0", + "@typescript-eslint/utils": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.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.40.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.40.0.tgz", + "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.40.0", + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.40.0.tgz", + "integrity": "sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.40.0", + "@typescript-eslint/types": "^8.40.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": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz", + "integrity": "sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.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/tsconfig-utils": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz", + "integrity": "sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz", + "integrity": "sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.0", + "@typescript-eslint/utils": "8.40.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.40.0.tgz", + "integrity": "sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz", + "integrity": "sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.40.0", + "@typescript-eslint/tsconfig-utils": "8.40.0", + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.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": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "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, + "license": "ISC", + "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": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.40.0.tgz", + "integrity": "sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.40.0", + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz", + "integrity": "sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.40.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unimodules/core": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.2.0.tgz", + "integrity": "sha512-Nu+bAd/xG4B2xyYMrmV3LnDr8czUQgV1XhoL3sOOMwGydDJtfpWNodGhPhEMyKq2CXo4X7DDIo8qG6W2fk6XAQ==", + "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "license": "MIT", + "optional": true, + "dependencies": { + "expo-modules-core": "~0.4.0" + } + }, + "node_modules/@unimodules/react-native-adapter": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.5.0.tgz", + "integrity": "sha512-F2J6gVw9a57DTVTQQunp64fqD4HVBkltOpUz1L5lEccNbQlZEA7SjnqKJzXakI7uPhhN76/n+SGb7ihzHw2swQ==", + "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "license": "MIT", + "optional": true, + "dependencies": { + "expo-modules-autolinking": "^0.3.2", + "expo-modules-core": "~0.4.0" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@urql/core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.2.0.tgz", + "integrity": "sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@0no-co/graphql.web": "^1.0.13", + "wonka": "^6.3.2" + } + }, + "node_modules/@urql/exchange-retry": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.2.tgz", + "integrity": "sha512-TQMCz2pFJMfpNxmSfX1VSfTjwUIFx/mL+p1bnfM1xjjdla7Z+KnGMW/EhFbpckp3LyWAH4PgOsMwOMnIN+MBFg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@urql/core": "^5.1.2", + "wonka": "^6.3.2" + }, + "peerDependencies": { + "@urql/core": "^5.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.19.tgz", + "integrity": "sha512-/afpyvlkrSNYbPo94Qu8GtIOWS+g5TRdOvs6XZNw6pWQQmj5pBgSZvEPOIZlqWq0YvoUhDDQaQ2TnzuJdOV4hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/shared": "3.5.19", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.19.tgz", + "integrity": "sha512-Drs6rPHQZx/pN9S6ml3Z3K/TWCIRPvzG2B/o5kFK9X0MNHt8/E+38tiRfojufrYBfA6FQUFB2qBBRXlcSXWtOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.19", + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.19.tgz", + "integrity": "sha512-YWCm1CYaJ+2RvNmhCwI7t3I3nU+hOrWGWMsn+Z/kmm1jy5iinnVtlmkiZwbLlbV1SRizX7vHsc0/bG5dj0zRTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/compiler-core": "3.5.19", + "@vue/compiler-dom": "3.5.19", + "@vue/compiler-ssr": "3.5.19", + "@vue/shared": "3.5.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.19.tgz", + "integrity": "sha512-/wx0VZtkWOPdiQLWPeQeqpHWR/LuNC7bHfSX7OayBTtUy8wur6vT6EQIX6Et86aED6J+y8tTw43qo2uoqGg5sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.19", + "@vue/shared": "3.5.19" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.19.tgz", + "integrity": "sha512-IhXCOn08wgKrLQxRFKKlSacWg4Goi1BolrdEeLYn6tgHjJNXVrWJ5nzoxZqNwl5p88aLlQ8LOaoMa3AYvaKJ/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "devOptional": true, + "license": "MIT", + "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, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "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, + "license": "MIT", + "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/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "license": "MIT", + "optional": true, + "peer": true + }, + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "devOptional": true, + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/archiver/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/archiver/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "Python-2.0" + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-index": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", + "integrity": "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "es6-symbol": "^3.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/array-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/array-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/asmcrypto.js": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", + "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==", + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", + "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ast-module-types": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz", + "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/b64-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", + "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", + "license": "MIT", + "dependencies": { + "base-64": "^0.1.0" + } + }, + "node_modules/b64u-lite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", + "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", + "license": "MIT", + "dependencies": { + "b64-lite": "^1.4.0" + } + }, + "node_modules/babel-jest": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.5.tgz", + "integrity": "sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "30.0.5", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.0", + "babel-preset-jest": "30.0.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", + "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", + "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "@types/babel__core": "^7.20.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-react-native-web": { + "version": "0.19.13", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz", + "integrity": "sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz", + "integrity": "sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "hermes-parser": "0.25.1" + } + }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "devOptional": true, + "license": "MIT", + "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 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-expo": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-13.2.3.tgz", + "integrity": "sha512-wQJn92lqj8GKR7Ojg/aW4+GkqI6ZdDNTDyOqhhl7A9bAqk6t0ukUOWLDXQb4p0qKJjMDV1F6gNWasI2KUbuVTQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-proposal-export-default-from": "^7.24.7", + "@babel/plugin-syntax-export-default-from": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-flow-strip-types": "^7.25.2", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@react-native/babel-preset": "0.79.5", + "babel-plugin-react-native-web": "~0.19.13", + "babel-plugin-syntax-hermes-parser": "^0.25.1", + "babel-plugin-transform-flow-enums": "^0.0.2", + "debug": "^4.3.4", + "react-refresh": "^0.14.2", + "resolve-from": "^5.0.0" + }, + "peerDependencies": { + "babel-plugin-react-compiler": "^19.0.0-beta-e993439-20250405" + }, + "peerDependenciesMeta": { + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/babel-preset-expo/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==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-preset-jest": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", + "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "30.0.1", + "babel-preset-current-node-syntax": "^1.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.1.tgz", + "integrity": "sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-fs": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.2.1.tgz", + "integrity": "sha512-mELROzV0IhqilFgsl1gyp48pnZsaV9xhQapHLDsvn4d4ZTfbFhcghQezl7FTEDNBcGqLUnNI3lUlm6ecrLWdFA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/base64url-universal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-2.0.0.tgz", + "integrity": "sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw==", + "license": "BSD-3-Clause", + "dependencies": { + "base64url": "^3.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/better-opn/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/borc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/borc/-/borc-3.0.0.tgz", + "integrity": "sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0", + "buffer": "^6.0.3", + "commander": "^2.15.0", + "ieee754": "^1.1.13", + "iso-url": "^1.1.5", + "json-text-sequence": "~0.3.0", + "readable-stream": "^3.6.0" + }, + "bin": { + "cbor2comment": "bin/cbor2comment.js", + "cbor2diag": "bin/cbor2diag.js", + "cbor2json": "bin/cbor2json.js", + "json2cbor": "bin/json2cbor.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/borc/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/borc/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "devOptional": true, + "license": "MIT", + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", + "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001735", + "electron-to-chromium": "^1.5.204", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/bson": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT", + "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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001736", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001736.tgz", + "integrity": "sha512-ImpN5gLEY8gWeqfLUyEF4b7mYWcYoR2Si1VhnrbM4JizRFmfGaAQ12PhNykq6nvI4XvKLrsp8Xde74D5phJOSw==", + "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" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.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==", + "devOptional": true, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12.13.0" + } + }, + "node_modules/chromium-edge-launcher": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", + "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "node_modules/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", + "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" + }, + "node_modules/class-validator": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", + "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", + "license": "MIT", + "dependencies": { + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.10.53", + "validator": "^13.9.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/cliui/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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/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==", + "devOptional": true, + "license": "MIT", + "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/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT", + "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==", + "devOptional": true, + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "license": "MIT" + }, + "node_modules/compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/compress-commons/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@unimodules/core": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.2.0.tgz", - "integrity": "sha512-Nu+bAd/xG4B2xyYMrmV3LnDr8czUQgV1XhoL3sOOMwGydDJtfpWNodGhPhEMyKq2CXo4X7DDIo8qG6W2fk6XAQ==", - "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "expo-modules-core": "~0.4.0" + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/@unimodules/react-native-adapter": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.5.0.tgz", - "integrity": "sha512-F2J6gVw9a57DTVTQQunp64fqD4HVBkltOpUz1L5lEccNbQlZEA7SjnqKJzXakI7uPhhN76/n+SGb7ihzHw2swQ==", - "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "expo-modules-autolinking": "^0.3.2", - "expo-modules-core": "~0.4.0" + "ms": "2.0.0" } }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT", "optional": true, - "os": [ - "android" - ] + "peer": true }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "license": "MIT", "optional": true, - "os": [ - "android" - ] + "peer": true, + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "license": "MIT", "optional": true, - "os": [ - "darwin" - ] + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "optional": true, - "os": [ - "darwin" - ] + "peer": true, + "dependencies": { + "ms": "2.0.0" + } }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/connect/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "optional": true, - "os": [ - "freebsd" - ] + "peer": true, + "engines": { + "node": ">= 0.8" + } }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "license": "MIT", "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT", "optional": true, - "os": [ - "linux" - ] + "peer": true }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", + "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", "license": "MIT", "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "browserslist": "^4.25.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], + "node_modules/correlation-id": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/correlation-id/-/correlation-id-5.2.0.tgz", + "integrity": "sha512-qTsYujgBvWIx05qF9HV4+KoezGTelgqJiFnyEfRsEqjpQUZdWnraOGHD+IMep7lPFg6MiI55fvpC4qruKdY5Dw==", "dev": true, "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "license": "MIT", "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "license": "MIT", "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "license": "MIT", "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, + "node_modules/cosmiconfig/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==", "license": "MIT", "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "license": "MIT", "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "license": "MIT", "optional": true, - "os": [ - "linux" - ] + "peer": true, + "engines": { + "node": ">=4" + } }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], + "node_modules/cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" + "buildcheck": "~0.0.6", + "nan": "^2.19.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=10.0.0" } }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], + "node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" + "node_modules/crc32-stream/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/crc32-stream/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } }, - "node_modules/@vue/compiler-core": { - "version": "3.5.13", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, + "license": "MIT" + }, + "node_modules/credentials-context": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz", + "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" + "node-fetch": "^2.7.0" } }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "dev": true, + "node_modules/cross-fetch/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==", "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "dev": true, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/cross-fetch/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==", + "license": "BSD-2-Clause" + }, + "node_modules/cross-fetch/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==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.13", - "dev": true, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "devOptional": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/shared": "3.5.13" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@vue/shared": { - "version": "3.5.13", - "dev": true, - "license": "MIT" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "license": "ISC" + "node_modules/crypto-ld": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-6.0.0.tgz", + "integrity": "sha512-XWL1LslqggNoaCI/m3I7HcvaSt9b2tYzdrXO+jHLUj9G1BvRfvV7ZTFDVY5nifYuIGAPdAGu7unPxLRustw3VA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8.3.0" + } }, - "node_modules/abort-controller": { - "version": "3.0.0", + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, + "optional": true, + "peer": true, "engines": { - "node": ">=6.5" + "node": ">=8" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "es5-ext": "^0.10.64", + "type": "^2.7.2" }, "engines": { - "node": ">= 0.6" + "node": ">=0.12" } }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 6" } }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "devOptional": true, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=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, + "node_modules/dcql": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dcql/-/dcql-0.3.0.tgz", + "integrity": "sha512-Q/yEf1itIpAYpLbGJsdGMj5Q2Ug0/NMYmyYiJWlKjk7LQOkDJ5Qh6ebLbiZBQ7gsvNBGWiOhtL306j5WdXcOcA==", "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "valibot": "1.0.0-beta.8" } }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "dev": true, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=0.4.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/agent-base": { - "version": "7.1.3", + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, "license": "MIT", "engines": { - "node": ">= 14" + "node": "*" } }, - "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, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "license": "MIT", - "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" + "engines": { + "node": ">=0.10" } }, - "node_modules/ajv-formats": { - "version": "3.0.1", + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, "peerDependencies": { - "ajv": "^8.0.0" + "babel-plugin-macros": "^3.1.0" }, "peerDependenciesMeta": { - "ajv": { + "babel-plugin-macros": { "optional": true } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "devOptional": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "clone": "^1.0.2" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } }, - "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==", - "devOptional": true, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-tree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-11.2.0.tgz", + "integrity": "sha512-+C1H3mXhcvMCeu5i2Jpg9dc0N29TWTuT6vJD7mHLAfVmAbo9zW8NlkvQ1tYd3PDMab0IRQM0ccoyX68EZtx9xw==", + "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "commander": "^12.1.0", + "filing-cabinet": "^5.0.3", + "precinct": "^12.2.0", + "typescript": "^5.8.3" }, - "engines": { - "node": ">=8" + "bin": { + "dependency-tree": "bin/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18" } }, - "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==", - "devOptional": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/dependency-tree/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "bin": { + "detect-libc": "bin/detect-libc.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "devOptional": true, + "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, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "devOptional": true, + "node_modules/detective-amd": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz", + "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ast-module-types": "^6.0.1", + "escodegen": "^2.1.0", + "get-amd-module-type": "^6.0.1", + "node-source-walk": "^7.0.1" }, - "engines": { - "node": ">=8" + "bin": { + "detective-amd": "bin/cli.js" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=18" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "devOptional": true, - "license": "ISC", + "node_modules/detective-cjs": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz", + "integrity": "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==", + "dev": true, + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" }, "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/app-module-path": { - "version": "2.2.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/archiver": { - "version": "7.0.1", + "node_modules/detective-es6": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz", + "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==", "dev": true, "license": "MIT", "dependencies": { - "archiver-utils": "^5.0.2", - "async": "^3.2.4", - "buffer-crc32": "^1.0.0", - "readable-stream": "^4.0.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^6.0.1" + "node-source-walk": "^7.0.1" }, "engines": { - "node": ">= 14" + "node": ">=18" } }, - "node_modules/archiver-utils": { - "version": "5.0.2", + "node_modules/detective-postcss": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz", + "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==", "dev": true, "license": "MIT", "dependencies": { - "glob": "^10.0.0", - "graceful-fs": "^4.2.0", - "is-stream": "^2.0.1", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" + "is-url": "^1.2.4", + "postcss-values-parser": "^6.0.2" }, "engines": { - "node": ">= 14" + "node": "^14.0.0 || >=16.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.47" } }, - "node_modules/archiver-utils/node_modules/buffer": { - "version": "6.0.3", + "node_modules/detective-sass": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz", + "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "10.4.5", + "node_modules/detective-scss": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz", + "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=18" } }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "4.5.2", + "node_modules/detective-stylus": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz", + "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==", "dev": true, "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" } }, - "node_modules/archiver/node_modules/buffer": { - "version": "6.0.3", + "node_modules/detective-typescript": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz", + "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "@typescript-eslint/typescript-estree": "^8.23.0", + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "typescript": "^5.4.4" } }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "4.5.2", + "node_modules/detective-vue2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz", + "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==", "dev": true, "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "@dependents/detective-less": "^5.0.1", + "@vue/compiler-sfc": "^3.5.13", + "detective-es6": "^5.0.1", + "detective-sass": "^6.0.1", + "detective-scss": "^5.0.1", + "detective-stylus": "^5.0.1", + "detective-typescript": "^14.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" + }, + "peerDependencies": { + "typescript": "^5.4.4" } }, - "node_modules/arg": { - "version": "4.1.3", + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } }, - "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==", - "devOptional": true, - "license": "Python-2.0" + "node_modules/did-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", + "license": "Apache-2.0" }, - "node_modules/array-find-index": { - "version": "1.0.2", + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=0.3.1" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-index": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", - "integrity": "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==", + "node_modules/docker-compose": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-1.2.0.tgz", + "integrity": "sha512-wIU1eHk3Op7dFgELRdmOYlPYS4gP8HhH1ZmZa13QZF59y0fblzFDFmKPhyc05phCy2hze9OEvNZAsoljrs+72w==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "^2.2.0", - "es6-symbol": "^3.0.2" + "yaml": "^2.2.2" }, "engines": { - "node": "*" + "node": ">= 6.0.0" } }, - "node_modules/array-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", + "node_modules/docker-modem": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.6.tgz", + "integrity": "sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "ms": "2.0.0" + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" + }, + "engines": { + "node": ">= 8.0" } }, - "node_modules/array-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", + "node_modules/dockerode": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.7.tgz", + "integrity": "sha512-R+rgrSRTRdU5mH14PZTCPZtW/zw3HDWNTS/1ZAQpL/5Upe/ye5K9WQkIysu4wBoiMwKynsz0a8qWuGsHgEvSAA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@balena/dockerignore": "^1.0.2", + "@grpc/grpc-js": "^1.11.1", + "@grpc/proto-loader": "^0.7.13", + "docker-modem": "^5.0.6", + "protobufjs": "^7.3.2", + "tar-fs": "~2.1.2", + "uuid": "^10.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 8.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "devOptional": true, - "license": "MIT" - }, - "node_modules/asmcrypto.js": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", - "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==", - "license": "MIT" + "node_modules/dockerode/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "license": "ISC" }, - "node_modules/asn1": { - "version": "0.2.6", + "node_modules/dockerode/node_modules/tar-fs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": "~2.1.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/asn1js": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", - "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", - "license": "BSD-3-Clause", + "node_modules/dockerode/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", "dependencies": { - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", - "tslib": "^2.8.1" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=6" } }, - "node_modules/ast-module-types": { - "version": "6.0.0", + "node_modules/dockerode/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", - "engines": { - "node": ">=18" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/async": { - "version": "3.2.5", - "dev": true, - "license": "MIT" - }, - "node_modules/async-lock": { - "version": "1.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", "optional": true, + "peer": true, "engines": { - "node": ">= 4.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", - "license": "MIT", + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "license": "BSD-2-Clause", + "optional": true, + "peer": true, "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/b4a": { - "version": "1.6.7", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/b64-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", - "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "base-64": "^0.1.0" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/b64u-lite": { + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/ec-compression": { + "version": "0.0.1-alpha.12", + "resolved": "https://registry.npmjs.org/ec-compression/-/ec-compression-0.0.1-alpha.12.tgz", + "integrity": "sha512-rfsgHPnS/q8SiiJyaJ5w+qpkLtvtvEFOXoh40VmjH+Xs1pjzCCKwhd9Un3BQV+1+Qg0es5VQnzwZVJ7fjzfN+A==" + }, + "node_modules/ed25519-signature-2018-context": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", - "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", - "license": "MIT", - "dependencies": { - "b64-lite": "^1.4.0" - } + "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", + "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", + "license": "BSD-3-Clause" }, - "node_modules/babel-jest": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.5.tgz", - "integrity": "sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==", + "node_modules/ed25519-signature-2020-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", + "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==", + "license": "BSD-3-Clause" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.207", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz", + "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==", + "license": "ISC" + }, + "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, "license": "MIT", - "dependencies": { - "@jest/transform": "30.0.5", - "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.0", - "babel-preset-jest": "30.0.1", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "slash": "^3.0.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.11.0" + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/babel-plugin-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", - "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" - }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.8" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", - "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "@types/babel__core": "^7.20.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "once": "^1.4.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==", - "devOptional": true, + "node_modules/enhanced-publish": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/enhanced-publish/-/enhanced-publish-1.1.4.tgz", + "integrity": "sha512-grP0N7MsOmL++ebP0NE6p32fPJpFOR/q2EJJLNbTd/de4eIiH/q+RVWaLeIP8PAL+GNMpFev6sqpIFXyymxrdw==", + "dev": true, "license": "MIT", "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" + "pacote": "^21.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "bin": { + "enhanced-publish": "index.js" } }, - "node_modules/babel-preset-jest": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", - "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "30.0.1", - "babel-preset-current-node-syntax": "^1.1.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0" + "node": ">=10.13.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "license": "Apache-2.0", - "optional": true + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/bare-fs": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.2.tgz", - "integrity": "sha512-8wSeOia5B7LwD4+h465y73KOdj5QHsbbuoUfPBi+pXgFJIPuG7SsiOdJuijWMyfid49eD+WivpfY7KT8gbAzBA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "license": "MIT", "optional": true, - "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4" - }, + "peer": true, "engines": { - "bare": ">=1.16.0" - }, - "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } + "node": ">=8" } }, - "node_modules/bare-os": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", - "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "Apache-2.0", - "optional": true, + "license": "MIT", "engines": { - "bare": ">=1.14.0" + "node": ">=6" } }, - "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true, - "license": "Apache-2.0", - "optional": true, + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT", "dependencies": { - "bare-os": "^3.0.1" + "is-arrayish": "^0.2.1" } }, - "node_modules/bare-stream": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", - "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } + "stackframe": "^1.3.4" } }, - "node_modules/base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" } }, - "node_modules/base64url-universal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-2.0.0.tgz", - "integrity": "sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw==", - "license": "BSD-3-Clause", - "dependencies": { - "base64url": "^3.0.1" - }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { - "node": ">=14" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" + "node": ">= 0.4" } }, - "node_modules/bignumber.js": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { - "node": "*" + "node": ">= 0.4" } }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=0.10" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "d": "^1.0.2", + "ext": "^1.7.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.12" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.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==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/borc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/borc/-/borc-3.0.0.tgz", - "integrity": "sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g==", - "license": "MIT", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "bignumber.js": "^9.0.0", - "buffer": "^6.0.3", - "commander": "^2.15.0", - "ieee754": "^1.1.13", - "iso-url": "^1.1.5", - "json-text-sequence": "~0.3.0", - "readable-stream": "^3.6.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, "bin": { - "cbor2comment": "bin/cbor2comment.js", - "cbor2diag": "bin/cbor2diag.js", - "cbor2json": "bin/cbor2json.js", - "json2cbor": "bin/json2cbor.js" + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4" + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/borc/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/eslint": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", + "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", + "dev": true, "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.33.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/borc/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "devOptional": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/eslint-plugin-chai-expect": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-chai-expect/-/eslint-plugin-chai-expect-3.1.0.tgz", + "integrity": "sha512-a9F8b38hhJsR7fgDEfyMxppZXCnCW6OOHj7cQfygsm9guXqdSzfpwrHX5FT93gSExDqD71HQglF1lLkGBwhJ+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "10.* || 12.* || || 14.* || 16.* || >= 18.*" + }, + "peerDependencies": { + "eslint": ">=2.0.0 <= 9.x" } }, - "node_modules/braces": { - "version": "3.0.3", - "devOptional": true, + "node_modules/eslint-plugin-chai-friendly": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-1.1.0.tgz", + "integrity": "sha512-+T1rClpDdXkgBAhC16vRQMI5umiWojVqkj9oUTdpma50+uByCZM/oBfxitZiOkjMRlm725mwFfz/RVgyDRvCKA==", + "dev": true, "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=3.0.0" } }, - "node_modules/browserslist": { - "version": "4.25.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", - "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", - "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" - } - ], + "node_modules/eslint-plugin-jest": { + "version": "29.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.0.1.tgz", + "integrity": "sha512-EE44T0OSMCeXhDrrdsbKAhprobKkPtJTbQz5yEktysNpHeDZTAL1SfDTNKmcFfJkY6yrQLtTKZALrD3j/Gpmiw==", + "dev": true, "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001735", - "electron-to-chromium": "^1.5.204", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" + "@typescript-eslint/utils": "^8.0.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "^20.12.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } } }, - "node_modules/bs-logger": { - "version": "0.2.6", + "node_modules/eslint-plugin-mocha": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.1.0.tgz", + "integrity": "sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==", "dev": true, "license": "MIT", "dependencies": { - "fast-json-stable-stringify": "2.x" + "@eslint-community/eslint-utils": "^4.4.1", + "globals": "^15.14.0" }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" + "peerDependencies": { + "eslint": ">=9.0.0" } }, - "node_modules/bson": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", - "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "node_modules/eslint-plugin-mocha/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=16.20.1" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/buffer": { - "version": "5.7.1", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/buffer-crc32": { - "version": "1.0.0", + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=8.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/buildcheck": { - "version": "0.0.6", - "dev": true, - "optional": true, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, "engines": { - "node": ">=10.0.0" + "node": ">=0.10" } }, - "node_modules/byline": { - "version": "5.0.0", + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/cacache": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", - "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" + "estraverse": "^5.1.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.10" } }, - "node_modules/cacache/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "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, - "license": "BlueOak-1.0.0", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=18" + "node": ">=4.0" } }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "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, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.6" } }, - "node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dev": true, - "license": "ISC", + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" + "d": "1", + "es5-ext": "~0.10.14" } }, - "node_modules/cacache/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", + "node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=0.8.x" } }, - "node_modules/call-bound": { - "version": "1.0.3", + "node_modules/eventsource": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-4.0.0.tgz", + "integrity": "sha512-fvIkb9qZzdMxgZrEQDyll+9oJsyaVvY92I2Re+qK0qEJ+w5s0X3dtz+M0VAPOjP1gtU3iqWyjQ0G3nvd5CLZ2g==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "eventsource-parser": "^3.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=20.0.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, + "node_modules/eventsource-parser": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.5.tgz", + "integrity": "sha512-bSRG85ZrMdmWtm7qkF9He9TNRzc/Bm99gEJMaQoHJ9E6Kv9QBbsldh2oMj7iXmYNEAVvNgvv5vPorG6W+XtBhQ==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=20.0.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "devOptional": true, + "node_modules/exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001735", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz", - "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==", - "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" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/canonicalize": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", - "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", - "license": "Apache-2.0" + "optional": true, + "peer": true }, - "node_modules/chalk": { - "version": "4.1.2", - "devOptional": true, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "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/chalk/chalk?sponsor=1" + "url": "https://github.com/sindresorhus/execa?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==", + "node_modules/execa/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, - "license": "MIT", - "engines": { - "node": ">=10" - } + "license": "ISC" }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "node_modules/expect": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.5.tgz", + "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.0.5", + "@jest/get-type": "30.0.1", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/cjs-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", - "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", - "dev": true, - "license": "MIT" - }, - "node_modules/class-transformer": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", - "license": "MIT" + "node_modules/expo": { + "version": "53.0.20", + "resolved": "https://registry.npmjs.org/expo/-/expo-53.0.20.tgz", + "integrity": "sha512-Nh+HIywVy9KxT/LtH08QcXqrxtUOA9BZhsXn3KCsAYA+kNb80M8VKN8/jfQF+I6CgeKyFKJoPNsWgI0y0VBGrA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.20.0", + "@expo/cli": "0.24.20", + "@expo/config": "~11.0.13", + "@expo/config-plugins": "~10.1.2", + "@expo/fingerprint": "0.13.4", + "@expo/metro-config": "0.20.17", + "@expo/vector-icons": "^14.0.0", + "babel-preset-expo": "~13.2.3", + "expo-asset": "~11.1.7", + "expo-constants": "~17.1.7", + "expo-file-system": "~18.1.11", + "expo-font": "~13.3.2", + "expo-keep-awake": "~14.1.4", + "expo-modules-autolinking": "2.1.14", + "expo-modules-core": "2.5.0", + "react-native-edge-to-edge": "1.6.0", + "whatwg-url-without-unicode": "8.0.0-3" + }, + "bin": { + "expo": "bin/cli", + "expo-modules-autolinking": "bin/autolinking", + "fingerprint": "bin/fingerprint" + }, + "peerDependencies": { + "@expo/dom-webview": "*", + "@expo/metro-runtime": "*", + "react": "*", + "react-native": "*", + "react-native-webview": "*" + }, + "peerDependenciesMeta": { + "@expo/dom-webview": { + "optional": true + }, + "@expo/metro-runtime": { + "optional": true + }, + "react-native-webview": { + "optional": true + } + } }, - "node_modules/class-validator": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", - "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", + "node_modules/expo-asset": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.1.7.tgz", + "integrity": "sha512-b5P8GpjUh08fRCf6m5XPVAh7ra42cQrHBIMgH2UXP+xsj4Wufl6pLy6jRF5w6U7DranUMbsXm8TOyq4EHy7ADg==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/validator": "^13.11.8", - "libphonenumber-js": "^1.10.53", - "validator": "^13.9.0" + "@expo/image-utils": "^0.7.6", + "expo-constants": "~17.1.7" + }, + "peerDependencies": { + "expo": "*", + "react": "*", + "react-native": "*" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, + "node_modules/expo-constants": { + "version": "17.1.7", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.1.7.tgz", + "integrity": "sha512-byBjGsJ6T6FrLlhOBxw4EaiMXrZEn/MlUYIj/JAd+FS7ll5X/S4qVRbIimSJtdW47hXMq0zxPfJX6njtA56hHA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "restore-cursor": "^3.1.0" + "@expo/config": "~11.0.12", + "@expo/env": "~1.0.7" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "expo": "*", + "react-native": "*" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "devOptional": true, + "node_modules/expo-file-system": { + "version": "18.1.11", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.1.11.tgz", + "integrity": "sha512-HJw/m0nVOKeqeRjPjGdvm+zBi5/NxcdPf8M8P3G2JFvH5Z8vBWqVDic2O58jnT1OFEy0XXzoH9UqFu7cHg9DTQ==", "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optional": true, + "peer": true, + "peerDependencies": { + "expo": "*", + "react-native": "*" } }, - "node_modules/cliui": { - "version": "8.0.1", - "devOptional": true, - "license": "ISC", + "node_modules/expo-font": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.3.2.tgz", + "integrity": "sha512-wUlMdpqURmQ/CNKK/+BIHkDA5nGjMqNlYmW0pJFXY/KE/OG80Qcavdu2sHsL4efAIiNGvYdBS10WztuQYU4X0A==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "fontfaceobserver": "^2.1.0" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "expo": "*", + "react": "*" } }, - "node_modules/clone": { - "version": "1.0.4", - "devOptional": true, + "node_modules/expo-keep-awake": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.1.4.tgz", + "integrity": "sha512-wU9qOnosy4+U4z/o4h8W9PjPvcFMfZXrlUoKTMBW7F4pLqhkkP/5G4EviPZixv4XWFMjn1ExQ5rV6BX8GwJsWA==", "license": "MIT", - "engines": { - "node": ">=0.8" + "optional": true, + "peer": true, + "peerDependencies": { + "expo": "*", + "react": "*" } }, - "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, + "node_modules/expo-modules-autolinking": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.3.4.tgz", + "integrity": "sha512-Mu3CIMqEAI8aNM18U/l+7CCi+afU8dERrKjDDEx/Hu7XX3v3FcnnP+NuWDLY/e9/ETzwTJaqoRoBuzhawsuLWw==", "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "~5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "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, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "devOptional": true, + "node_modules/expo-modules-core": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.4.10.tgz", + "integrity": "sha512-uCZA3QzF0syRaHwYY99iaNhnye4vSQGsJ/y6IAiesXdbeVahWibX4G1KoKNPUyNsKXIM4tqA+4yByUSvJe4AAw==", "license": "MIT", + "optional": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "compare-versions": "^3.4.0", + "invariant": "^2.2.4" } }, - "node_modules/color-name": { - "version": "1.1.4", - "devOptional": true, - "license": "MIT" + "node_modules/expo-modules-core/node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "license": "MIT", + "optional": true }, - "node_modules/combined-stream": { - "version": "1.0.8", + "node_modules/expo-random": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-14.0.1.tgz", + "integrity": "sha512-gX2mtR9o+WelX21YizXUCD/y+a4ZL+RDthDmFkHxaYbdzjSYTn8u/igoje/l3WEO+/RYspmqUFa8w/ckNbt6Vg==", + "deprecated": "This package is now deprecated in favor of expo-crypto, which provides the same functionality. To migrate, replace all imports from expo-random with imports from expo-crypto.", "license": "MIT", + "optional": true, "dependencies": { - "delayed-stream": "~1.0.0" + "base64-js": "^1.3.0" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "7.2.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 10" + "peerDependencies": { + "expo": "*" } }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/compare-versions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "license": "MIT" - }, - "node_modules/compress-commons": { - "version": "6.0.2", - "dev": true, + "node_modules/expo/node_modules/expo-modules-autolinking": { + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.1.14.tgz", + "integrity": "sha512-nT5ERXwc+0ZT/pozDoJjYZyUQu5RnXMk9jDGm5lg+PiKvsrCTSA/2/eftJGMxLkTjVI2MXp5WjSz3JRjbA7UXA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "crc-32": "^1.2.0", - "crc32-stream": "^6.0.0", - "is-stream": "^2.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "find-up": "^5.0.0", + "glob": "^10.4.2", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0" }, - "engines": { - "node": ">= 14" + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "node_modules/compress-commons/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/expo/node_modules/expo-modules-core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.5.0.tgz", + "integrity": "sha512-aIbQxZE2vdCKsolQUl6Q9Farlf8tjh/ROR4hfN1qT7QBGPl1XrJGnaOKkcgYaGrlzCPg/7IBe0Np67GzKMZKKQ==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "invariant": "^2.2.4" } }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "4.5.2", - "dev": true, + "node_modules/expo/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==", "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, + "optional": true, + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/concat-map": { - "version": "0.0.1", + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", "devOptional": true, - "license": "MIT" + "license": "Apache-2.0" }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/convert-source-map": { + "node_modules/express/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", + "node_modules/express/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "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==", "license": "MIT" }, - "node_modules/core-util-is": { - "version": "1.0.3", + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true, "license": "MIT" }, - "node_modules/correlation-id": { - "version": "5.2.0", - "dev": true, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">=14.17.0" - } - }, - "node_modules/cpu-features": { - "version": "0.0.10", - "dev": true, - "hasInstallScript": true, - "optional": true, "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.19.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "dev": true, - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=0.8" + "node": ">=8.6.0" } }, - "node_modules/crc32-stream": { - "version": "6.0.0", - "dev": true, - "license": "MIT", + "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==", + "devOptional": true, + "license": "ISC", "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^4.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">= 14" + "node": ">= 6" } }, - "node_modules/crc32-stream/node_modules/buffer": { - "version": "6.0.3", - "dev": true, + "node_modules/fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "license": "Apache-2.0" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "url": "https://github.com/sponsors/fastify" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "opencollective", + "url": "https://opencollective.com/fastify" } ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } + "license": "BSD-3-Clause" }, - "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "4.5.2", - "dev": true, - "license": "MIT", + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "devOptional": true, + "license": "ISC", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "reusify": "^1.0.4" } }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/credentials-context": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz", - "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==", - "license": "SEE LICENSE IN LICENSE.md" - }, - "node_modules/cross-fetch": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", - "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", - "license": "MIT", + "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==", + "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "node-fetch": "^2.7.0" + "bser": "2.1.1" } }, - "node_modules/cross-fetch/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==", + "node_modules/fetch-blob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", + "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": "^10.17.0 || >=12.3.0" }, "peerDependenciesMeta": { - "encoding": { + "domexception": { "optional": true } } }, - "node_modules/cross-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/cross-fetch/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==", - "license": "BSD-2-Clause" - }, - "node_modules/cross-fetch/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==", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "devOptional": true, + "node_modules/filing-cabinet": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-5.0.3.tgz", + "integrity": "sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "app-module-path": "^2.2.0", + "commander": "^12.1.0", + "enhanced-resolve": "^5.18.0", + "module-definition": "^6.0.1", + "module-lookup-amd": "^9.0.3", + "resolve": "^1.22.10", + "resolve-dependency-path": "^4.0.1", + "sass-lookup": "^6.1.0", + "stylus-lookup": "^6.1.0", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.7.3" + }, + "bin": { + "filing-cabinet": "bin/cli.js" }, "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/crypto-ld": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-6.0.0.tgz", - "integrity": "sha512-XWL1LslqggNoaCI/m3I7HcvaSt9b2tYzdrXO+jHLUj9G1BvRfvV7ZTFDVY5nifYuIGAPdAGu7unPxLRustw3VA==", - "license": "BSD-3-Clause", + "node_modules/filing-cabinet/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=18" } }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "license": "ISC", + "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==", + "devOptional": true, + "license": "MIT", "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.12" + "node": ">=8" } }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/date-format": { - "version": "4.0.14", - "dev": true, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">= 0.8" } }, - "node_modules/dcql": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dcql/-/dcql-0.3.0.tgz", - "integrity": "sha512-Q/yEf1itIpAYpLbGJsdGMj5Q2Ug0/NMYmyYiJWlKjk7LQOkDJ5Qh6ebLbiZBQ7gsvNBGWiOhtL306j5WdXcOcA==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "valibot": "1.0.0-beta.8" + "ms": "2.0.0" } }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "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==", + "devOptional": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fix-esm": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-esm/-/fix-esm-1.0.1.tgz", + "integrity": "sha512-EZtb7wPXZS54GaGxaWxMlhd1DUDCnAg5srlYdu/1ZVeW+7wwR3Tp59nu52dXByFs3MBRq+SByx1wDOJpRvLEXw==", + "license": "WTFPL OR CC0-1.0", + "dependencies": { + "@babel/core": "^7.14.6", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" } }, - "node_modules/debuglog": { - "version": "1.0.1", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } + "license": "ISC" }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", "license": "MIT", - "engines": { - "node": ">=0.10" - } + "optional": true, + "peer": true }, - "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", - "dev": true, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "engines": { + "node": ">=4.0" }, "peerDependenciesMeta": { - "babel-plugin-macros": { + "debug": { "optional": true } } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "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==", - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/fontfaceobserver": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", + "license": "BSD-2-Clause", + "optional": true, + "peer": true }, - "node_modules/defaults": { - "version": "1.0.4", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "devOptional": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "clone": "^1.0.2" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=0.4.0" + "node": ">= 6" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/format-util": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", + "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==", + "license": "MIT" + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, "engines": { - "node": ">= 0.8" + "node": ">=12.20.0" } }, - "node_modules/dependency-tree": { - "version": "11.0.1", - "dev": true, + "node_modules/formdata-polyfill/node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", "dependencies": { - "commander": "^12.0.0", - "filing-cabinet": "^5.0.1", - "precinct": "^12.0.2", - "typescript": "^5.4.5" - }, - "bin": { - "dependency-tree": "bin/cli.js" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": ">=18" + "node": "^12.20 || >= 14.13" } }, - "node_modules/dependency-tree/node_modules/commander": { - "version": "12.1.0", - "dev": true, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=8" } }, - "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, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/detective-amd": { - "version": "6.0.0", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "license": "MIT", + "optional": true, "dependencies": { - "ast-module-types": "^6.0.0", - "escodegen": "^2.1.0", - "get-amd-module-type": "^6.0.0", - "node-source-walk": "^7.0.0" - }, - "bin": { - "detective-amd": "bin/cli.js" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/detective-cjs": { - "version": "6.0.0", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ast-module-types": "^6.0.0", - "node-source-walk": "^7.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=18" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/detective-es6": { - "version": "5.0.0", - "dev": 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==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "node-source-walk": "^7.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/detective-postcss": { - "version": "7.0.0", - "dev": true, + "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==", "license": "MIT", - "dependencies": { - "is-url": "^1.2.4", - "postcss-values-parser": "^6.0.2" - }, - "engines": { - "node": "^14.0.0 || >=16.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.38" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/detective-sass": { - "version": "6.0.0", - "dev": true, + "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==", "license": "MIT", - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.0" - }, "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/detective-scss": { - "version": "5.0.0", + "node_modules/get-amd-module-type": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz", + "integrity": "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==", "dev": true, "license": "MIT", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.0" + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" }, "engines": { "node": ">=18" } }, - "node_modules/detective-stylus": { - "version": "5.0.0", - "dev": true, - "license": "MIT", + "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==", + "devOptional": true, + "license": "ISC", "engines": { - "node": ">=18" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/detective-typescript": { - "version": "13.0.0", - "dev": true, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "^7.6.0", - "ast-module-types": "^6.0.0", - "node-source-walk": "^7.0.0" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": "^14.14.0 || >=16.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "typescript": "^5.4.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/types": { - "version": "7.18.0", + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true, + "license": "ISC" + }, + "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==", + "devOptional": true, "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8.0.0" } }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", + "node_modules/get-port": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", + "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", "dev": true, - "license": "BSD-2-Clause", - "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" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": ">=16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "dev": true, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 0.4" } }, - "node_modules/detective-vue2": { - "version": "2.1.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, "license": "MIT", - "dependencies": { - "@dependents/detective-less": "^5.0.0", - "@vue/compiler-sfc": "^3.5.12", - "detective-es6": "^5.0.0", - "detective-sass": "^6.0.0", - "detective-scss": "^5.0.0", - "detective-stylus": "^5.0.0", - "detective-typescript": "^13.0.0" - }, "engines": { - "node": ">=18" + "node": ">=10" }, - "peerDependencies": { - "typescript": "^5.4.4" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/did-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", - "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", - "license": "Apache-2.0" - }, - "node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } + "node_modules/get-symbol-from-current-process-h": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz", + "integrity": "sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==", + "license": "MIT" }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, + "node_modules/get-uv-event-loop-napi-h": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz", + "integrity": "sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==", "license": "MIT", "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" + "get-symbol-from-current-process-h": "^1.0.1" } }, - "node_modules/docker-compose": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-1.2.0.tgz", - "integrity": "sha512-wIU1eHk3Op7dFgELRdmOYlPYS4gP8HhH1ZmZa13QZF59y0fblzFDFmKPhyc05phCy2hze9OEvNZAsoljrs+72w==", - "dev": true, + "node_modules/getenv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/getenv/-/getenv-2.0.0.tgz", + "integrity": "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==", "license": "MIT", - "dependencies": { - "yaml": "^2.2.2" - }, + "optional": true, + "peer": true, "engines": { - "node": ">= 6.0.0" + "node": ">=6" } }, - "node_modules/docker-modem": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.6.tgz", - "integrity": "sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "devOptional": true, + "license": "ISC", "dependencies": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.15.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">= 8.0" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/dockerode": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.7.tgz", - "integrity": "sha512-R+rgrSRTRdU5mH14PZTCPZtW/zw3HDWNTS/1ZAQpL/5Upe/ye5K9WQkIysu4wBoiMwKynsz0a8qWuGsHgEvSAA==", + "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, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "@balena/dockerignore": "^1.0.2", - "@grpc/grpc-js": "^1.11.1", - "@grpc/proto-loader": "^0.7.13", - "docker-modem": "^5.0.6", - "protobufjs": "^7.3.2", - "tar-fs": "~2.1.2", - "uuid": "^10.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 8.0" + "node": ">=10.13.0" } }, - "node_modules/dockerode/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "license": "ISC" - }, - "node_modules/dockerode/node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", - "dev": true, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "balanced-match": "^1.0.0" } }, - "node_modules/dockerode/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "license": "MIT", + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "devOptional": true, + "license": "ISC", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/dockerode/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "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, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "minimist": "^1.2.5" }, + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", + "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==", "devOptional": true, - "license": "MIT" - }, - "node_modules/ec-compression": { - "version": "0.0.1-alpha.12", - "resolved": "https://registry.npmjs.org/ec-compression/-/ec-compression-0.0.1-alpha.12.tgz", - "integrity": "sha512-rfsgHPnS/q8SiiJyaJ5w+qpkLtvtvEFOXoh40VmjH+Xs1pjzCCKwhd9Un3BQV+1+Qg0es5VQnzwZVJ7fjzfN+A==" - }, - "node_modules/ed25519-signature-2018-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", - "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", - "license": "BSD-3-Clause" - }, - "node_modules/ed25519-signature-2020-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", - "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==", - "license": "BSD-3-Clause" + "license": "ISC" }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, "license": "MIT" }, - "node_modules/electron-to-chromium": { - "version": "1.5.207", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz", - "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==", - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, "engines": { - "node": ">=12" + "node": ">=0.4.7" }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", + "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==", "devOptional": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", - "optional": true, "dependencies": { - "iconv-lite": "^0.6.2" + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { - "once": "^1.4.0" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/enhanced-publish": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/enhanced-publish/-/enhanced-publish-1.1.4.tgz", - "integrity": "sha512-grP0N7MsOmL++ebP0NE6p32fPJpFOR/q2EJJLNbTd/de4eIiH/q+RVWaLeIP8PAL+GNMpFev6sqpIFXyymxrdw==", - "dev": true, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "pacote": "^21.0.0" - }, - "bin": { - "enhanced-publish": "index.js" + "hermes-estree": "0.25.1" } }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", + "node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=10.13.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/entities": { - "version": "4.5.0", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "license": "ISC" }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "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, + "license": "MIT" + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "license": "MIT" - }, - "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==", - "devOptional": true, "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/es-define-property": { - "version": "1.0.1", + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, "engines": { - "node": ">= 0.4" + "node": ">= 14" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "license": "MIT", + "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, + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" + "node": ">=10.17.0" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", + "optional": true, "dependencies": { - "es-errors": "^1.3.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "devOptional": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">= 4" } }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "hasInstallScript": true, + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "dev": true, "license": "ISC", "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" + "minimatch": "^10.0.3" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, "license": "ISC", "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=0.12" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/escalade": { - "version": "3.2.0", + "node_modules/image-size": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, "engines": { - "node": ">=6" + "node": ">=16.x" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "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==", - "devOptional": true, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.1.0", + "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, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=6.0" + "node": ">=8" }, - "optionalDependencies": { - "source-map": "~0.6.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", - "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", - "dev": true, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "devOptional": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.33.0", - "@eslint/plugin-kit": "^0.3.5", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } + "node": ">=0.8.19" } }, - "node_modules/eslint-plugin-chai-expect": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-chai-expect/-/eslint-plugin-chai-expect-3.1.0.tgz", - "integrity": "sha512-a9F8b38hhJsR7fgDEfyMxppZXCnCW6OOHj7cQfygsm9guXqdSzfpwrHX5FT93gSExDqD71HQglF1lLkGBwhJ+g==", + "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.", + "devOptional": true, + "license": "ISC", + "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==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": "10.* || 12.* || || 14.* || 16.* || >= 18.*" - }, - "peerDependencies": { - "eslint": ">=2.0.0 <= 9.x" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/eslint-plugin-chai-friendly": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-1.1.0.tgz", - "integrity": "sha512-+T1rClpDdXkgBAhC16vRQMI5umiWojVqkj9oUTdpma50+uByCZM/oBfxitZiOkjMRlm725mwFfz/RVgyDRvCKA==", - "dev": true, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "license": "MIT", - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "eslint": ">=3.0.0" + "optional": true, + "dependencies": { + "loose-envify": "^1.0.0" } }, - "node_modules/eslint-plugin-jest": { - "version": "29.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.0.1.tgz", - "integrity": "sha512-EE44T0OSMCeXhDrrdsbKAhprobKkPtJTbQz5yEktysNpHeDZTAL1SfDTNKmcFfJkY6yrQLtTKZALrD3j/Gpmiw==", + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^8.0.0" - }, "engines": { - "node": "^20.12.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "node": ">= 12" } }, - "node_modules/eslint-plugin-mocha": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.1.0.tgz", - "integrity": "sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==", - "dev": true, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.1", - "globals": "^15.14.0" - }, - "peerDependencies": { - "eslint": ">=9.0.0" + "engines": { + "node": ">= 0.10" } }, - "node_modules/eslint-plugin-mocha/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "devOptional": true, "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.10.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.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==", + "devOptional": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "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==", + "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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "MIT", "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "license": "ISC", + "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==", + "devOptional": true, + "license": "MIT", "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.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==", + "devOptional": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.12.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "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/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, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estraverse": { - "version": "5.3.0", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estree-walker": { - "version": "2.0.2", + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true, "license": "MIT" }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/is-url-superb": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", + "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "license": "MIT", + "is-docker": "^2.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/eventemitter2": { - "version": "6.4.9", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, "license": "MIT" }, - "node_modules/events": { - "version": "3.3.0", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/iso-url": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", + "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", "license": "MIT", "engines": { - "node": ">=0.8.x" + "node": ">=12" } }, - "node_modules/eventsource": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-4.0.0.tgz", - "integrity": "sha512-fvIkb9qZzdMxgZrEQDyll+9oJsyaVvY92I2Re+qK0qEJ+w5s0X3dtz+M0VAPOjP1gtU3iqWyjQ0G3nvd5CLZ2g==", + "node_modules/isomorphic-webcrypto": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", + "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", "license": "MIT", "dependencies": { - "eventsource-parser": "^3.0.1" + "@peculiar/webcrypto": "^1.0.22", + "asmcrypto.js": "^0.22.0", + "b64-lite": "^1.3.1", + "b64u-lite": "^1.0.1", + "msrcrypto": "^1.5.6", + "str2buf": "^1.3.0", + "webcrypto-shim": "^0.1.4" }, - "engines": { - "node": ">=20.0.0" + "optionalDependencies": { + "@unimodules/core": "*", + "@unimodules/react-native-adapter": "*", + "expo-random": "*", + "react-native-securerandom": "^0.1.1" } }, - "node_modules/eventsource-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", - "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", - "license": "MIT", + "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==", + "devOptional": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "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, - "license": "MIT", + "license": "BSD-3-Clause", "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" + "@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": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit-x": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", - "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" } }, - "node_modules/expect": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.5.tgz", - "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==", + "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, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@jest/expect-utils": "30.0.5", - "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10" } }, - "node_modules/expo-modules-autolinking": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.3.4.tgz", - "integrity": "sha512-Mu3CIMqEAI8aNM18U/l+7CCi+afU8dERrKjDDEx/Hu7XX3v3FcnnP+NuWDLY/e9/ETzwTJaqoRoBuzhawsuLWw==", - "license": "MIT", - "optional": true, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "~5.0.0", - "fs-extra": "^9.1.0" + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + "engines": { + "node": ">=10" } }, - "node_modules/expo-modules-autolinking/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "optional": true, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/expo-modules-autolinking/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", - "optional": true, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "devOptional": true, + "license": "BlueOak-1.0.0", "dependencies": { - "universalify": "^2.0.0" + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" }, "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/expo-modules-autolinking/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10.0.0" + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/expo-modules-core": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.4.10.tgz", - "integrity": "sha512-uCZA3QzF0syRaHwYY99iaNhnye4vSQGsJ/y6IAiesXdbeVahWibX4G1KoKNPUyNsKXIM4tqA+4yByUSvJe4AAw==", + "node_modules/jest": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.5.tgz", + "integrity": "sha512-y2mfcJywuTUkvLm2Lp1/pFX8kTgMO5yyQGq/Sk/n2mN7XWYp4JsCZ/QXW34M8YScgk8bPZlREH04f6blPnoHnQ==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" + "@jest/core": "30.0.5", + "@jest/types": "30.0.5", + "import-local": "^3.2.0", + "jest-cli": "30.0.5" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/expo-modules-core/node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "license": "MIT", - "optional": true - }, - "node_modules/expo-random": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-14.0.1.tgz", - "integrity": "sha512-gX2mtR9o+WelX21YizXUCD/y+a4ZL+RDthDmFkHxaYbdzjSYTn8u/igoje/l3WEO+/RYspmqUFa8w/ckNbt6Vg==", - "deprecated": "This package is now deprecated in favor of expo-crypto, which provides the same functionality. To migrate, replace all imports from expo-random with imports from expo-crypto.", + "node_modules/jest-changed-files": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", + "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "base64-js": "^1.3.0" + "execa": "^5.1.1", + "jest-util": "30.0.5", + "p-limit": "^3.1.0" }, - "peerDependencies": { - "expo": "*" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "node_modules/jest-circus": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.5.tgz", + "integrity": "sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug==", + "dev": true, "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@jest/environment": "30.0.5", + "@jest/expect": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.0.5", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-runtime": "30.0.5", + "jest-snapshot": "30.0.5", + "jest-util": "30.0.5", + "p-limit": "^3.1.0", + "pretty-format": "30.0.5", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" }, "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/jest-cli": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.5.tgz", + "integrity": "sha512-Sa45PGMkBZzF94HMrlX4kUyPOwUpdZasaliKN3mifvDmkhLYqLLg8HQTzn6gq7vJGahFYMQjXgyJWfYImKZzOw==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@jest/core": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", + "node_modules/jest-config": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.5.tgz", + "integrity": "sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA==", + "dev": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.0.6" + "@babel/core": "^7.27.4", + "@jest/get-type": "30.0.1", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.0.5", + "@jest/types": "30.0.5", + "babel-jest": "30.0.5", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.0.5", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.5", + "jest-runner": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "micromatch": "^4.0.8", + "parse-json": "^5.2.0", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=0.6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "license": "ISC", + "node_modules/jest-diff": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.5.tgz", + "integrity": "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==", + "dev": true, + "license": "MIT", "dependencies": { - "type": "^2.7.2" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "pretty-format": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", + "node_modules/jest-docblock": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", + "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "devOptional": true, "license": "MIT", "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" + "detect-newline": "^3.1.0" }, "engines": { - "node": ">=8.6.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "devOptional": true, - "license": "ISC", + "node_modules/jest-each": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.5.tgz", + "integrity": "sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ==", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "@jest/get-type": "30.0.1", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "jest-util": "30.0.5", + "pretty-format": "30.0.5" }, "engines": { - "node": ">= 6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fast-json-patch": { - "version": "3.1.1", - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "devOptional": true, - "license": "MIT" - }, - "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==", - "license": "MIT" - }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", - "license": "Apache-2.0" - }, - "node_modules/fast-uri": { - "version": "3.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.17.1", - "devOptional": true, - "license": "ISC", + "node_modules/jest-environment-node": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.5.tgz", + "integrity": "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA==", + "dev": true, + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "@jest/environment": "30.0.5", + "@jest/fake-timers": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-mock": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } + "node_modules/jest-expect-message": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.1.3.tgz", + "integrity": "sha512-bTK77T4P+zto+XepAX3low8XVQxDgaEqh3jSTQOG8qvPpD69LsIdyJTa+RmnJh3HNSzJng62/44RPPc7OIlFxg==", + "dev": true, + "license": "MIT" }, - "node_modules/fetch-blob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", - "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", + "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==", "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": "^10.17.0 || >=12.3.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.5.tgz", + "integrity": "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "jest-worker": "30.0.5", + "micromatch": "^4.0.8", + "walker": "^1.0.8" }, - "peerDependenciesMeta": { - "domexception": { - "optional": true - } + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" } }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "node_modules/jest-leak-detector": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.5.tgz", + "integrity": "sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^4.0.0" + "@jest/get-type": "30.0.1", + "pretty-format": "30.0.5" }, "engines": { - "node": ">=16.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/filing-cabinet": { - "version": "5.0.2", + "node_modules/jest-matcher-utils": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", + "integrity": "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==", "dev": true, "license": "MIT", "dependencies": { - "app-module-path": "^2.2.0", - "commander": "^12.0.0", - "enhanced-resolve": "^5.16.0", - "module-definition": "^6.0.0", - "module-lookup-amd": "^9.0.1", - "resolve": "^1.22.8", - "resolve-dependency-path": "^4.0.0", - "sass-lookup": "^6.0.1", - "stylus-lookup": "^6.0.0", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.4.4" - }, - "bin": { - "filing-cabinet": "bin/cli.js" + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "jest-diff": "30.0.5", + "pretty-format": "30.0.5" }, "engines": { - "node": ">=18" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/filing-cabinet/node_modules/commander": { - "version": "12.1.0", + "node_modules/jest-message-util": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.5.tgz", + "integrity": "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.5", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, "engines": { - "node": ">=18" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "devOptional": true, + "node_modules/jest-mock": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", + "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", + "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-util": "30.0.5" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "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, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "node_modules/jest-regex-util": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.5.tgz", + "integrity": "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": ">= 0.8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/jest-resolve-dependencies": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.5.tgz", + "integrity": "sha512-/xMvBR4MpwkrHW4ikZIWRttBBRZgWK4d6xt3xW1iRDSKt4tXzYkMkyPfBnSCgv96cpkrctfXs6gexeqMYqdEpw==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "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==", - "devOptional": true, + "node_modules/jest-runner": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.5.tgz", + "integrity": "sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw==", + "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "@jest/console": "30.0.5", + "@jest/environment": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.0.5", + "jest-haste-map": "30.0.5", + "jest-leak-detector": "30.0.5", + "jest-message-util": "30.0.5", + "jest-resolve": "30.0.5", + "jest-runtime": "30.0.5", + "jest-util": "30.0.5", + "jest-watcher": "30.0.5", + "jest-worker": "30.0.5", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fix-esm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fix-esm/-/fix-esm-1.0.1.tgz", - "integrity": "sha512-EZtb7wPXZS54GaGxaWxMlhd1DUDCnAg5srlYdu/1ZVeW+7wwR3Tp59nu52dXByFs3MBRq+SByx1wDOJpRvLEXw==", - "license": "WTFPL OR CC0-1.0", + "node_modules/jest-runtime": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.5.tgz", + "integrity": "sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.14.6", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5" + "@jest/environment": "30.0.5", + "@jest/fake-timers": "30.0.5", + "@jest/globals": "30.0.5", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.5", + "jest-snapshot": "30.0.5", + "jest-util": "30.0.5", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "node_modules/jest-snapshot": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.5.tgz", + "integrity": "sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.0.5", + "@jest/get-type": "30.0.1", + "@jest/snapshot-utils": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "babel-preset-current-node-syntax": "^1.1.0", + "chalk": "^4.1.2", + "expect": "30.0.5", + "graceful-fs": "^4.2.11", + "jest-diff": "30.0.5", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-util": "30.0.5", + "pretty-format": "30.0.5", + "semver": "^7.7.2", + "synckit": "^0.11.8" }, "engines": { - "node": ">=16" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/flatted": { - "version": "3.3.1", + "node_modules/jest-util": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", + "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "devOptional": true, - "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "devOptional": true, - "license": "ISC", + "node_modules/jest-util/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/jest-validate": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.5.tgz", + "integrity": "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw==", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "@jest/get-type": "30.0.1", + "@jest/types": "30.0.5", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.0.5" }, "engines": { - "node": ">= 6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/format-util": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", - "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==", - "license": "MIT" - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "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, "license": "MIT", - "dependencies": { - "fetch-blob": "^3.1.2" - }, "engines": { - "node": ">=12.20.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/formdata-polyfill/node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/jest-watcher": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.5.tgz", + "integrity": "sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg==", + "dev": true, "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" + "@jest/test-result": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.0.5", + "string-length": "^4.0.2" }, "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "8.1.0", + "node_modules/jest-worker": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.5.tgz", + "integrity": "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.0.5", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" }, "engines": { - "node": ">=6 <7 || >=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "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, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^7.0.3" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "devOptional": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, + "node_modules/jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", "license": "MIT", "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "peer": true }, - "node_modules/function-bind": { - "version": "1.1.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/js-base64": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "license": "BSD-3-Clause" }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } + "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==", + "license": "MIT" }, - "node_modules/get-amd-module-type": { - "version": "6.0.0", - "dev": true, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "devOptional": true, "license": "MIT", "dependencies": { - "ast-module-types": "^6.0.0", - "node-source-walk": "^7.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=18" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "devOptional": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", + "license": "0BSD", + "optional": true, + "peer": true + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", + "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, - "license": "ISC" + "license": "MIT" }, - "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==", - "devOptional": true, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "license": "MIT", - "engines": { - "node": ">=8.0.0" - } + "optional": true, + "peer": true }, - "node_modules/get-port": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", - "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/get-proto": { + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/json-text-sequence": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.3.0.tgz", + "integrity": "sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA==", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "@sovpro/delimited-stream": "^1.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10.18.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, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "license": "MIT", - "engines": { - "node": ">=10" + "bin": { + "json5": "lib/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/get-symbol-from-current-process-h": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz", - "integrity": "sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==", - "license": "MIT" - }, - "node_modules/get-uv-event-loop-napi-h": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz", - "integrity": "sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==", + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", + "optional": true, "dependencies": { - "get-symbol-from-current-process-h": "^1.0.1" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/glob": { - "version": "7.2.3", - "devOptional": true, - "license": "ISC", + "node_modules/jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", "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" + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=14" } }, - "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, - "license": "ISC", + "node_modules/jsonld-signatures": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz", + "integrity": "sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw==", + "license": "BSD-3-Clause", "dependencies": { - "is-glob": "^4.0.3" + "@digitalbazaar/security-context": "^1.0.0", + "jsonld": "^8.0.0", + "rdf-canonize": "^4.0.1", + "serialize-error": "^8.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=18" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "devOptional": true, + "node_modules/jsonld-signatures/node_modules/rdf-canonize": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", + "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", + "license": "BSD-3-Clause", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=18" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "devOptional": true, + "node_modules/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "yallist": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=10" } }, - "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/jsonld/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", + "dependencies": { + "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==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=18" + "node": ">=6" + } + }, + "node_modules/ky": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", + "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, + "node_modules/ky-universal": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", + "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", "license": "MIT", "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" + "abort-controller": "^3.0.0", + "node-fetch": "3.0.0-beta.9" }, "engines": { - "node": ">=10" + "node": ">=10.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.17.0", + "web-streams-polyfill": ">=2.0.0" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } } }, - "node_modules/gonzales-pe": { - "version": "4.3.0", + "node_modules/lan-network": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/lan-network/-/lan-network-0.1.7.tgz", + "integrity": "sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "lan-network": "dist/lan-network-cli.js" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "gonzales": "bin/gonzales.js" + "readable-stream": "^2.0.5" }, "engines": { - "node": ">=0.6.0" + "node": ">= 0.6.3" } }, - "node_modules/gopd": { - "version": "1.2.0", + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "devOptional": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "safe-buffer": "~5.1.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", + "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==", "devOptional": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/has-symbols": { - "version": "1.1.0", + "node_modules/levn": { + "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, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "license": "MIT", + "node_modules/libphonenumber-js": { + "version": "1.12.13", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.13.tgz", + "integrity": "sha512-QZXnR/OGiDcBjF4hGk0wwVrPcZvbSSyzlvkjXv5LFfktj7O2VZDrt4Xs8SgR/vOFco+qk1i8J43ikMXZoTrtPw==", + "license": "MIT" + }, + "node_modules/libsodium-sumo": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.15.tgz", + "integrity": "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==", + "license": "ISC" + }, + "node_modules/libsodium-wrappers-sumo": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.15.tgz", + "integrity": "sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==", + "license": "ISC", "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" + "libsodium-sumo": "^0.7.15" + } + }, + "node_modules/license-checker": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", + "integrity": "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "chalk": "^2.4.1", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "read-installed": "~4.0.3", + "semver": "^5.5.0", + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-satisfies": "^4.0.0", + "treeify": "^1.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "license-checker": "bin/license-checker" } }, - "node_modules/hasown": { - "version": "2.0.2", + "node_modules/license-checker/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, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "node_modules/license-checker/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, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^10.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=4" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/license-checker/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, - "license": "ISC" + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } }, - "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==", + "node_modules/license-checker/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, "license": "MIT" }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "node_modules/license-checker/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" + "ms": "^2.1.1" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "node_modules/license-checker/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, "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, "engines": { - "node": ">= 14" + "node": ">=0.8.0" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", + "node_modules/license-checker/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, "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, "engines": { - "node": ">= 14" + "node": ">=4" } }, - "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==", + "node_modules/license-checker/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/license-checker/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, "license": "MIT", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 4" + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" } }, - "node_modules/ignore-walk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", - "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", - "dev": true, - "license": "ISC", + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "ms": "2.0.0" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lightningcss": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.27.0.tgz", + "integrity": "sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==", + "license": "MPL-2.0", + "optional": true, + "peer": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "detect-libc": "^1.0.3" }, "engines": { - "node": ">=6" + "node": ">= 12.0.0" }, "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, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" + "type": "opencollective", + "url": "https://opencollective.com/parcel" }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.27.0", + "lightningcss-darwin-x64": "1.27.0", + "lightningcss-freebsd-x64": "1.27.0", + "lightningcss-linux-arm-gnueabihf": "1.27.0", + "lightningcss-linux-arm64-gnu": "1.27.0", + "lightningcss-linux-arm64-musl": "1.27.0", + "lightningcss-linux-x64-gnu": "1.27.0", + "lightningcss-linux-x64-musl": "1.27.0", + "lightningcss-win32-arm64-msvc": "1.27.0", + "lightningcss-win32-x64-msvc": "1.27.0" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.27.0.tgz", + "integrity": "sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz", + "integrity": "sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": ">=8" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "devOptional": true, - "license": "MIT", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz", + "integrity": "sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, "engines": { - "node": ">=0.8.19" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/inflight": { - "version": "1.0.6", - "devOptional": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz", + "integrity": "sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz", + "integrity": "sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/ini": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", - "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", - "dev": true, - "license": "ISC", + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz", + "integrity": "sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz", + "integrity": "sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", "optional": true, - "dependencies": { - "loose-envify": "^1.0.0" + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/ip-address": { - "version": "9.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz", + "integrity": "sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz", + "integrity": "sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": ">= 12" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz", + "integrity": "sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": ">= 0.10" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", + "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==", "devOptional": true, "license": "MIT" }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "devOptional": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "devOptional": true, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "optional": true, + "peer": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT" }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "devOptional": true, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", "license": "MIT", - "engines": { - "node": ">=8" - } + "optional": true, + "peer": true }, - "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==", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "devOptional": true, - "license": "MIT", + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "is-extglob": "^2.1.1" + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0" } }, - "node_modules/is-interactive": { - "version": "1.0.0", + "node_modules/lokijs": { + "version": "1.5.12", + "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.12.tgz", + "integrity": "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "Apache-2.0" }, - "node_modules/is-number": { - "version": "7.0.0", - "devOptional": true, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "license": "MIT", - "engines": { - "node": ">=0.12.0" + "optional": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/is-obj": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/lru_map": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", + "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", + "license": "MIT" + }, + "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==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/is-regexp": { - "version": "1.0.0", - "dev": true, + "node_modules/luxon": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.1.tgz", + "integrity": "sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/is-stream": { - "version": "2.0.1", + "node_modules/madge": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/madge/-/madge-8.0.0.tgz", + "integrity": "sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "commander": "^7.2.0", + "commondir": "^1.0.1", + "debug": "^4.3.4", + "dependency-tree": "^11.0.0", + "ora": "^5.4.1", + "pluralize": "^8.0.0", + "pretty-ms": "^7.0.1", + "rc": "^1.2.8", + "stream-to-array": "^2.3.0", + "ts-graphviz": "^2.1.2", + "walkdir": "^0.4.1" + }, + "bin": { + "madge": "bin/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://www.paypal.me/pahen" + }, + "peerDependencies": { + "typescript": "^5.4.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/is-url": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/is-url-superb": { + "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, "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, "engines": { "node": ">=10" }, @@ -8790,759 +14632,824 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "1.0.0", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/isexe": { - "version": "2.0.0", + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "devOptional": true, - "license": "ISC" + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } }, - "node_modules/iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", + "node_modules/marky": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", + "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/isomorphic-webcrypto": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", - "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", - "dependencies": { - "@peculiar/webcrypto": "^1.0.22", - "asmcrypto.js": "^0.22.0", - "b64-lite": "^1.3.1", - "b64u-lite": "^1.0.1", - "msrcrypto": "^1.5.6", - "str2buf": "^1.3.0", - "webcrypto-shim": "^0.1.4" - }, - "optionalDependencies": { - "@unimodules/core": "*", - "@unimodules/react-native-adapter": "*", - "expo-random": "*", - "react-native-securerandom": "^0.1.1" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "devOptional": true, - "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "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==", + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, + "license": "MIT" + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 8" } }, - "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, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/metro": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.82.5.tgz", + "integrity": "sha512-8oAXxL7do8QckID/WZEKaIFuQJFUTLzfVcC48ghkHhNK2RGuQq8Xvf4AVd+TUA0SZtX0q8TGNXZ/eba1ckeGCg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" + "@babel/code-frame": "^7.24.7", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "@babel/types": "^7.25.2", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.29.1", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.82.5", + "metro-cache": "0.82.5", + "metro-cache-key": "0.82.5", + "metro-config": "0.82.5", + "metro-core": "0.82.5", + "metro-file-map": "0.82.5", + "metro-resolver": "0.82.5", + "metro-runtime": "0.82.5", + "metro-source-map": "0.82.5", + "metro-symbolicate": "0.82.5", + "metro-transform-plugins": "0.82.5", + "metro-transform-worker": "0.82.5", + "mime-types": "^2.1.27", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" }, "engines": { - "node": ">=10" + "node": ">=18.18" } }, - "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, - "license": "BSD-3-Clause", + "node_modules/metro-babel-transformer": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.82.5.tgz", + "integrity": "sha512-W/scFDnwJXSccJYnOFdGiYr9srhbHPdxX9TvvACOFsIXdLilh3XuxQl/wXW6jEJfgIb0jTvoTlwwrqvuwymr6Q==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.29.1", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=8" + "node": ">=18.18" } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "devOptional": true, - "license": "BlueOak-1.0.0", + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "hermes-estree": "0.29.1" } }, - "node_modules/jest": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.5.tgz", - "integrity": "sha512-y2mfcJywuTUkvLm2Lp1/pFX8kTgMO5yyQGq/Sk/n2mN7XWYp4JsCZ/QXW34M8YScgk8bPZlREH04f6blPnoHnQ==", - "dev": true, + "node_modules/metro-cache": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.82.5.tgz", + "integrity": "sha512-AwHV9607xZpedu1NQcjUkua8v7HfOTKfftl6Vc9OGr/jbpiJX6Gpy8E/V9jo/U9UuVYX2PqSUcVNZmu+LTm71Q==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/core": "30.0.5", - "@jest/types": "30.0.5", - "import-local": "^3.2.0", - "jest-cli": "30.0.5" - }, - "bin": { - "jest": "bin/jest.js" + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "https-proxy-agent": "^7.0.5", + "metro-core": "0.82.5" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=18.18" } }, - "node_modules/jest-changed-files": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", - "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", - "dev": true, + "node_modules/metro-cache-key": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.82.5.tgz", + "integrity": "sha512-qpVmPbDJuRLrT4kcGlUouyqLGssJnbTllVtvIgXfR7ZuzMKf0mGS+8WzcqzNK8+kCyakombQWR0uDd8qhWGJcA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "execa": "^5.1.1", - "jest-util": "30.0.5", - "p-limit": "^3.1.0" + "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-circus": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.5.tgz", - "integrity": "sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug==", - "dev": true, + "node_modules/metro-config": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.82.5.tgz", + "integrity": "sha512-/r83VqE55l0WsBf8IhNmc/3z71y2zIPe5kRSuqA5tY/SL/ULzlHUJEMd1szztd0G45JozLwjvrhAzhDPJ/Qo/g==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/environment": "30.0.5", - "@jest/expect": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "chalk": "^4.1.2", - "co": "^4.6.0", - "dedent": "^1.6.0", - "is-generator-fn": "^2.1.0", - "jest-each": "30.0.5", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-runtime": "30.0.5", - "jest-snapshot": "30.0.5", - "jest-util": "30.0.5", - "p-limit": "^3.1.0", - "pretty-format": "30.0.5", - "pure-rand": "^7.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.7.0", + "metro": "0.82.5", + "metro-cache": "0.82.5", + "metro-core": "0.82.5", + "metro-runtime": "0.82.5" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-cli": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.5.tgz", - "integrity": "sha512-Sa45PGMkBZzF94HMrlX4kUyPOwUpdZasaliKN3mifvDmkhLYqLLg8HQTzn6gq7vJGahFYMQjXgyJWfYImKZzOw==", - "dev": true, + "node_modules/metro-config/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/core": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/types": "30.0.5", - "chalk": "^4.1.2", - "exit-x": "^0.2.2", - "import-local": "^3.2.0", - "jest-config": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "yargs": "^17.7.2" - }, - "bin": { - "jest": "bin/jest.js" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-config": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.5.tgz", - "integrity": "sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA==", - "dev": true, + "node_modules/metro-config/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/core": "^7.27.4", - "@jest/get-type": "30.0.1", - "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.0.5", - "@jest/types": "30.0.5", - "babel-jest": "30.0.5", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "deepmerge": "^4.3.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-circus": "30.0.5", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.5", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-runner": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "micromatch": "^4.0.8", - "parse-json": "^5.2.0", - "pretty-format": "30.0.5", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "esbuild-register": ">=3.4.0", - "ts-node": ">=9.0.0" + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild-register": { - "optional": true - }, - "ts-node": { - "optional": true - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-config/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "node_modules/metro-config/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==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/metro-config/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==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-diff": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.5.tgz", - "integrity": "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==", - "dev": true, + "node_modules/metro-config/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/metro-config/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "pretty-format": "30.0.5" + "@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": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-docblock": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", - "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", - "dev": true, + "node_modules/metro-config/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "detect-newline": "^3.1.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.5.tgz", - "integrity": "sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ==", - "dev": true, + "node_modules/metro-core": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.82.5.tgz", + "integrity": "sha512-OJL18VbSw2RgtBm1f2P3J5kb892LCVJqMvslXxuxjAPex8OH7Eb8RBfgEo7VZSjgb/LOf4jhC4UFk5l5tAOHHA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/get-type": "30.0.1", - "@jest/types": "30.0.5", - "chalk": "^4.1.2", - "jest-util": "30.0.5", - "pretty-format": "30.0.5" + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.82.5" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-environment-node": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.5.tgz", - "integrity": "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA==", - "dev": true, + "node_modules/metro-file-map": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.82.5.tgz", + "integrity": "sha512-vpMDxkGIB+MTN8Af5hvSAanc6zXQipsAUO+XUx3PCQieKUfLwdoa8qaZ1WAQYRpaU+CJ8vhBcxtzzo3d9IsCIQ==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/environment": "30.0.5", - "@jest/fake-timers": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "jest-mock": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5" + "debug": "^4.4.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-expect-message": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-haste-map": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.5.tgz", - "integrity": "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg==", - "dev": true, + "node_modules/metro-file-map/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/types": "30.0.5", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", - "jest-worker": "30.0.5", - "micromatch": "^4.0.8", - "walker": "^1.0.8" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-leak-detector": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.5.tgz", - "integrity": "sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==", - "dev": true, + "node_modules/metro-file-map/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/get-type": "30.0.1", - "pretty-format": "30.0.5" + "@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": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", - "integrity": "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==", - "dev": true, + "node_modules/metro-file-map/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==", "license": "MIT", - "dependencies": { - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "jest-diff": "30.0.5", - "pretty-format": "30.0.5" - }, + "optional": true, + "peer": true + }, + "node_modules/metro-file-map/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/jest-message-util": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.5.tgz", - "integrity": "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==", - "dev": true, + "node_modules/metro-file-map/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.5", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.5", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" + "@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": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-mock": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", - "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", - "dev": true, + "node_modules/metro-file-map/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/types": "30.0.5", "@types/node": "*", - "jest-util": "30.0.5" + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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, + "node_modules/metro-file-map/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==", "license": "MIT", - "engines": { - "node": ">=6" + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" }, - "peerDependencies": { - "jest-resolve": "*" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", - "dev": true, + "node_modules/metro-minify-terser": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.82.5.tgz", + "integrity": "sha512-v6Nx7A4We6PqPu/ta1oGTqJ4Usz0P7c+3XNeBxW9kp8zayS3lHUKR0sY0wsCHInxZlNAEICx791x+uXytFUuwg==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-resolve": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.5.tgz", - "integrity": "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg==", - "dev": true, + "node_modules/metro-resolver": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.82.5.tgz", + "integrity": "sha512-kFowLnWACt3bEsuVsaRNgwplT8U7kETnaFHaZePlARz4Fg8tZtmRDUmjaD68CGAwc0rwdwNCkWizLYpnyVcs2g==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "slash": "^3.0.0", - "unrs-resolver": "^1.7.11" + "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-resolve-dependencies": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.5.tgz", - "integrity": "sha512-/xMvBR4MpwkrHW4ikZIWRttBBRZgWK4d6xt3xW1iRDSKt4tXzYkMkyPfBnSCgv96cpkrctfXs6gexeqMYqdEpw==", - "dev": true, + "node_modules/metro-runtime": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.82.5.tgz", + "integrity": "sha512-rQZDoCUf7k4Broyw3Ixxlq5ieIPiR1ULONdpcYpbJQ6yQ5GGEyYjtkztGD+OhHlw81LCR2SUAoPvtTus2WDK5g==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "jest-regex-util": "30.0.1", - "jest-snapshot": "30.0.5" + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-runner": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.5.tgz", - "integrity": "sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw==", - "dev": true, + "node_modules/metro-source-map": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.82.5.tgz", + "integrity": "sha512-wH+awTOQJVkbhn2SKyaw+0cd+RVSCZ3sHVgyqJFQXIee/yLs3dZqKjjeKKhhVeudgjXo7aE/vSu/zVfcQEcUfw==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/console": "30.0.5", - "@jest/environment": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.5", - "jest-haste-map": "30.0.5", - "jest-leak-detector": "30.0.5", - "jest-message-util": "30.0.5", - "jest-resolve": "30.0.5", - "jest-runtime": "30.0.5", - "jest-util": "30.0.5", - "jest-watcher": "30.0.5", - "jest-worker": "30.0.5", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "@babel/traverse": "^7.25.3", + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.82.5", + "nullthrows": "^1.1.1", + "ob1": "0.82.5", + "source-map": "^0.5.6", + "vlq": "^1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-runtime": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.5.tgz", - "integrity": "sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.0.5", - "@jest/fake-timers": "30.0.5", - "@jest/globals": "30.0.5", - "@jest/source-map": "30.0.1", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "chalk": "^4.1.2", - "cjs-module-lexer": "^2.1.0", - "collect-v8-coverage": "^1.0.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-snapshot": "30.0.5", - "jest-util": "30.0.5", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", + "node_modules/metro-symbolicate": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.82.5.tgz", + "integrity": "sha512-1u+07gzrvYDJ/oNXuOG1EXSvXZka/0JSW1q2EYBWerVKMOhvv9JzDGyzmuV7hHbF2Hg3T3S2uiM36sLz1qKsiw==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.82.5", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" }, "bin": { - "glob": "dist/esm/bin.mjs" + "metro-symbolicate": "src/index.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=18.18" } }, - "node_modules/jest-snapshot": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.5.tgz", - "integrity": "sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==", - "dev": true, + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.82.5.tgz", + "integrity": "sha512-57Bqf3rgq9nPqLrT2d9kf/2WVieTFqsQ6qWHpEng5naIUtc/Iiw9+0bfLLWSAw0GH40iJ4yMjFcFJDtNSYynMA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.0.5", - "@jest/get-type": "30.0.1", - "@jest/snapshot-utils": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "babel-preset-current-node-syntax": "^1.1.0", - "chalk": "^4.1.2", - "expect": "30.0.5", - "graceful-fs": "^4.2.11", - "jest-diff": "30.0.5", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-util": "30.0.5", - "pretty-format": "30.0.5", - "semver": "^7.7.2", - "synckit": "^0.11.8" + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-util": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", - "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", - "dev": true, + "node_modules/metro-transform-worker": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.82.5.tgz", + "integrity": "sha512-mx0grhAX7xe+XUQH6qoHHlWedI8fhSpDGsfga7CpkO9Lk9W+aPitNtJWNGrW8PfjKEWbT9Uz9O50dkI8bJqigw==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/types": "30.0.5", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "metro": "0.82.5", + "metro-babel-transformer": "0.82.5", + "metro-cache": "0.82.5", + "metro-cache-key": "0.82.5", + "metro-minify-terser": "0.82.5", + "metro-source-map": "0.82.5", + "metro-transform-plugins": "0.82.5", + "nullthrows": "^1.1.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.18" } }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, + "node_modules/metro/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==", "license": "MIT", - "engines": { - "node": ">=12" + "optional": true, + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.5.tgz", - "integrity": "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw==", - "dev": true, + "node_modules/metro/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/get-type": "30.0.1", - "@jest/types": "30.0.5", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.0.5" + "@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": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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, + "node_modules/metro/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==", "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optional": true, + "peer": true + }, + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "hermes-estree": "0.29.1" } }, - "node_modules/jest-watcher": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.5.tgz", - "integrity": "sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg==", - "dev": true, + "node_modules/metro/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/test-result": "30.0.5", - "@jest/types": "30.0.5", + "@jest/types": "^29.6.3", "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "jest-util": "30.0.5", - "string-length": "^4.0.2" + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.5.tgz", - "integrity": "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ==", - "dev": true, + "node_modules/metro/node_modules/jest-util/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.0.5", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" + "supports-color": "^8.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { + "node_modules/metro/node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/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, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -9553,1496 +15460,1636 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/js-base64": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", - "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", - "license": "BSD-3-Clause" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "devOptional": true, + "node_modules/metro/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" + "optional": true, + "peer": true, + "engines": { + "node": ">=8.3.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, - "engines": { - "node": ">=6" - } - }, - "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, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", - "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": 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", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "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, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "license": "ISC" - }, - "node_modules/json-text-sequence": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.3.0.tgz", - "integrity": "sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "devOptional": true, "license": "MIT", "dependencies": { - "@sovpro/delimited-stream": "^1.1.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=10.18.0" + "node": ">=8.6" } }, - "node_modules/json5": { - "version": "2.2.3", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { - "json5": "lib/cli.js" + "mime": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" } }, - "node_modules/jsonld": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", - "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", - "license": "BSD-3-Clause", + "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==", + "license": "MIT", "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">=14" + "node": ">= 0.6" } }, - "node_modules/jsonld-signatures": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz", - "integrity": "sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/security-context": "^1.0.0", - "jsonld": "^8.0.0", - "rdf-canonize": "^4.0.1", - "serialize-error": "^8.1.0" - }, + "node_modules/mime-types/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==", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/jsonld-signatures/node_modules/rdf-canonize": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", - "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, + "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, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/jsonld/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/jsonld/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/jwt-decode": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "devOptional": true, "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ky": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", - "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", - "license": "MIT", + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/ky-universal": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", - "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", - "license": "MIT", + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "3.0.0-beta.9" + "minipass": "^7.0.3" }, "engines": { - "node": ">=10.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.17.0", - "web-streams-polyfill": ">=2.0.0" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } + "node": ">=16 || 14 >=14.17" } }, - "node_modules/lazystream": { - "version": "1.0.1", + "node_modules/minipass-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "^2.0.5" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" }, "engines": { - "node": ">= 0.6.3" + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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==", - "devOptional": true, - "license": "MIT", + "yallist": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/libphonenumber-js": { - "version": "1.12.12", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.12.tgz", - "integrity": "sha512-aWVR6xXYYRvnK0v/uIwkf5Lthq9Jpn0N8TISW/oDTWlYB2sOimuiLn9Q26aUw4KxkJoiT8ACdiw44Y8VwKFIfQ==", - "license": "MIT" - }, - "node_modules/libsodium-sumo": { - "version": "0.7.15", - "license": "ISC" - }, - "node_modules/libsodium-wrappers-sumo": { - "version": "0.7.15", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "license": "ISC", "dependencies": { - "libsodium-sumo": "^0.7.15" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/license-checker": { - "version": "25.0.1", + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", "dependencies": { - "chalk": "^2.4.1", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "read-installed": "~4.0.3", - "semver": "^5.5.0", - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0", - "spdx-satisfies": "^4.0.0", - "treeify": "^1.1.0" + "minipass": "^3.0.0" }, - "bin": { - "license-checker": "bin/license-checker" + "engines": { + "node": ">=8" } }, - "node_modules/license-checker/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^1.9.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/license-checker/node_modules/chalk": { - "version": "2.4.2", + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=4" + "node": ">= 18" } }, - "node_modules/license-checker/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/license-checker/node_modules/color-name": { - "version": "1.1.3", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true, "license": "MIT" }, - "node_modules/license-checker/node_modules/debug": { - "version": "3.2.7", + "node_modules/module-definition": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz", + "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "bin": { + "module-definition": "bin/cli.js" + }, + "engines": { + "node": ">=18" } }, - "node_modules/license-checker/node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/module-lookup-amd": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-9.0.5.tgz", + "integrity": "sha512-Rs5FVpVcBYRHPLuhHOjgbRhosaQYLtEo3JIeDIbmNo7mSssi1CTzwMh8v36gAzpbzLGXI9wB/yHh+5+3fY1QVw==", "dev": true, "license": "MIT", + "dependencies": { + "commander": "^12.1.0", + "glob": "^7.2.3", + "requirejs": "^2.3.7", + "requirejs-config-file": "^4.0.0" + }, + "bin": { + "lookup-amd": "bin/cli.js" + }, "engines": { - "node": ">=0.8.0" + "node": ">=18" } }, - "node_modules/license-checker/node_modules/has-flag": { - "version": "3.0.0", + "node_modules/module-lookup-amd/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/license-checker/node_modules/semver": { - "version": "5.7.2", + "node_modules/module-lookup-amd/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, "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/license-checker/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "devOptional": true, - "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "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": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "dev": true, - "license": "MIT" - }, - "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, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", + "node_modules/mongodb": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.17.0.tgz", + "integrity": "sha512-neerUzg/8U26cgruLysKEjJvoNSXhyID3RvzvdcpsIi2COYM3FS3o9nlH7fxFtefTb942dX3W9i37oPfCVj4wA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.4", + "mongodb-connection-string-url": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=16.20.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } } }, - "node_modules/log4js": { - "version": "6.9.1", + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" } }, - "node_modules/lokijs": { - "version": "1.5.12", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/long": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", - "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", - "dev": true, + "node_modules/msrcrypto": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", + "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==", "license": "Apache-2.0" }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/lru_map": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", - "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", - "license": "MIT" - }, - "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==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } + "node_modules/nan": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", + "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", + "dev": true, + "license": "MIT", + "optional": true }, - "node_modules/luxon": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.1.tgz", - "integrity": "sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==", + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">=12" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/madge": { - "version": "8.0.0", + "node_modules/napi-postinstall": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", + "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "commander": "^7.2.0", - "commondir": "^1.0.1", - "debug": "^4.3.4", - "dependency-tree": "^11.0.0", - "ora": "^5.4.1", - "pluralize": "^8.0.0", - "pretty-ms": "^7.0.1", - "rc": "^1.2.8", - "stream-to-array": "^2.3.0", - "ts-graphviz": "^2.1.2", - "walkdir": "^0.4.1" - }, "bin": { - "madge": "bin/cli.js" + "napi-postinstall": "lib/cli.js" }, "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "type": "individual", - "url": "https://www.paypal.me/pahen" - }, - "peerDependencies": { - "typescript": "^5.4.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://opencollective.com/napi-postinstall" } }, - "node_modules/magic-string": { - "version": "0.30.12", + "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, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "engines": { + "node": ">= 0.6" } }, - "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==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, + "license": "MIT" + }, + "node_modules/nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.0.0-beta.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", + "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^2.1.1" }, "engines": { - "node": ">=10" + "node": "^10.17 || >=12.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/make-error": { - "version": "1.3.6", - "license": "ISC" + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "optional": true, + "peer": true, + "engines": { + "node": ">= 6.13.0" + } }, - "node_modules/make-fetch-happen": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", - "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "node_modules/node-gyp": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.1.tgz", + "integrity": "sha512-GiVxQ1e4TdZSSVmFDYUn6uUsrEUP68pa8C/xBzCfL/FcLHa4reWrxxTP7tRGhNdviYrNsL5kRolBL5LNYEutCw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "devOptional": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "license": "MIT", + "node_modules/node-gyp/node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", + "node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "node_modules/memory-pager": { - "version": "1.5.0", + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "license": "MIT" - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "ISC", + "engines": { + "node": ">=16" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "devOptional": true, + "node_modules/node-gyp/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", + "node_modules/node-gyp/node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, "engines": { - "node": ">= 0.6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "devOptional": true, - "license": "MIT", + "node_modules/node-gyp/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, + "license": "ISC", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=18" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", + "node_modules/node-gyp/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, "bin": { - "mime": "cli.js" + "node-which": "bin/which.js" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", + "node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "node_modules/mime-types": { - "version": "2.1.35", + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/node-source-walk": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz", + "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==", + "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "@babel/parser": "^7.26.7" }, "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", + "node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "devOptional": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "abbrev": "1", + "osenv": "^0.1.4" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "nopt": "bin/nopt.js" } }, - "node_modules/minimist": { - "version": "1.2.8", - "devOptional": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/minipass": { - "version": "7.1.2", + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "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==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.10.0" } }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/minipass-fetch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", - "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "node_modules/npm-check-updates": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-18.0.2.tgz", + "integrity": "sha512-9uVFZUCg5oDOcbzdsrJ4BEvq2gikd23tXuF5mqpl4mxVl051lzB00Xmd7ZVjVWY3XNUF3BQKWlN/qmyD8/bwrA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "bin": { + "ncu": "build/cli.js", + "npm-check-updates": "build/cli.js" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0", + "npm": ">=8.12.1" + } + }, + "node_modules/npm-install-checks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz", + "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" + "semver": "^7.1.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", "dev": true, "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/npm-packlist": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.1.tgz", + "integrity": "sha512-vaC03b2PqJA6QqmwHi1jNU8fAPXEnnyv4j/W4PVfgm24C4/zZGSVut3z0YUeN0WIFCo1oGOL02+6LbvFK7JL4Q==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "ignore-walk": "^8.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "node_modules/npm-registry-fetch": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "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, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "path-key": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "license": "MIT", + "optional": true, + "peer": true }, - "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "node_modules/ob1": { + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.82.5.tgz", + "integrity": "sha512-QyQQ6e66f+Ut/qUVjEce0E/wux5nAGLXYZDn1jr15JWstHsCH3l6VVrg8NKDptW9NEiBXKOJeGF/ydxeSDF3IQ==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "minipass": "^7.1.2" + "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">= 18" + "node": ">=18.18" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/module-definition": { - "version": "6.0.0", - "dev": true, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", - "dependencies": { - "ast-module-types": "^6.0.0", - "node-source-walk": "^7.0.0" - }, - "bin": { - "module-definition": "bin/cli.js" - }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/module-lookup-amd": { - "version": "9.0.2", - "dev": true, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { - "commander": "^12.1.0", - "glob": "^7.2.3", - "requirejs": "^2.3.7", - "requirejs-config-file": "^4.0.0" - }, - "bin": { - "lookup-amd": "bin/cli.js" + "ee-first": "1.1.1" }, "engines": { - "node": ">=18" + "node": ">= 0.8" } }, - "node_modules/module-lookup-amd/node_modules/commander": { - "version": "12.1.0", - "dev": true, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=18" + "node": ">= 0.8" } }, - "node_modules/mongodb": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.17.0.tgz", - "integrity": "sha512-neerUzg/8U26cgruLysKEjJvoNSXhyID3RvzvdcpsIi2COYM3FS3o9nlH7fxFtefTb942dX3W9i37oPfCVj4wA==", + "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==", + "devOptional": true, + "license": "ISC", + "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, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@mongodb-js/saslprep": "^1.1.9", - "bson": "^6.10.4", - "mongodb-connection-string-url": "^3.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" + "node": ">=6" }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.2", - "dev": true, - "license": "Apache-2.0", + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^14.1.0 || ^13.0.0" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/msrcrypto": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", - "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==", - "license": "Apache-2.0" - }, - "node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "license": "(Apache-2.0 AND MIT)" - }, - "node_modules/nan": { - "version": "2.22.0", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.8", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">= 0.8.0" } }, - "node_modules/napi-postinstall": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz", - "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/napi-postinstall" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/natural-compare": { - "version": "1.4.0", + "node_modules/ora/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, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "node_modules/ora/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "MIT" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "license": "ISC" - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], "license": "MIT", "engines": { - "node": ">=10.5.0" + "node": ">=0.10.0" } }, - "node_modules/node-fetch": { - "version": "3.0.0-beta.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", - "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^2.1.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^10.17 || >=12.3" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", - "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==", - "dev": true, + "node_modules/p-locate": { + "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==", + "devOptional": true, "license": "MIT", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "tinyglobby": "^0.2.12", - "which": "^5.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "p-limit": "^3.0.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "dev": true, "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp/node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", - "dev": true, - "license": "ISC", + "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==", + "devOptional": true, + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" } }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "devOptional": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", + "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^10.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, "engines": { - "node": ">=18" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "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, - "license": "ISC", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { - "node": ">=16" + "node": ">=6" } }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "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, "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" + "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": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "node_modules/parse-json/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, - "license": "ISC", - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, + "license": "MIT" + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" } }, - "node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dev": true, - "license": "ISC", + "node_modules/parse-png": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", + "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" + "pngjs": "^3.3.0" }, "engines": { - "node": ">=18" + "node": ">=10" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "devOptional": true, + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.10.0" } }, - "node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/node-int64": { - "version": "0.4.0", + "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==", "devOptional": true, "license": "MIT" }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "license": "MIT" - }, - "node_modules/node-source-walk": { - "version": "7.0.0", - "dev": true, - "license": "MIT", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "devOptional": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@babel/parser": "^7.24.4" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nopt": { - "version": "4.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8.6" }, - "bin": { - "nopt": "bin/nopt.js" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/normalize-path": { - "version": "3.0.0", + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "devOptional": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/npm-bundled": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", - "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "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, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-normalize-package-bin": "^4.0.0" + "find-up": "^4.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/npm-check-updates": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-18.0.2.tgz", - "integrity": "sha512-9uVFZUCg5oDOcbzdsrJ4BEvq2gikd23tXuF5mqpl4mxVl051lzB00Xmd7ZVjVWY3XNUF3BQKWlN/qmyD8/bwrA==", + "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, - "license": "Apache-2.0", - "bin": { - "ncu": "build/cli.js", - "npm-check-updates": "build/cli.js" + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0", - "npm": ">=8.12.1" + "node": ">=8" } }, - "node_modules/npm-install-checks": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz", - "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==", + "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, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "semver": "^7.1.1" + "p-locate": "^4.1.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", - "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "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, - "license": "ISC", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-package-arg": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", - "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "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, - "license": "ISC", + "license": "MIT", "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/npm-packlist": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.0.tgz", - "integrity": "sha512-rht9U6nS8WOBDc53eipZNPo5qkAV4X2rhKE2Oj1DYUQ3DieXfj0mKkVmjnf3iuNdtMd8WfLdi2L6ASkD/8a+Kg==", - "dev": true, - "license": "ISC", + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "ignore-walk": "^7.0.0" + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10.4.0" } }, - "node_modules/npm-pick-manifest": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", - "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, - "license": "ISC", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/npm-registry-fetch": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", - "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", + "node_modules/postcss-values-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", + "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", "dev": true, - "license": "ISC", + "license": "MPL-2.0", "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" + "color-name": "^1.1.4", + "is-url-superb": "^4.0.0", + "quote-unquote": "^1.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.2.9" } }, - "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==", + "node_modules/precinct": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz", + "integrity": "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "@dependents/detective-less": "^5.0.1", + "commander": "^12.1.0", + "detective-amd": "^6.0.1", + "detective-cjs": "^6.0.1", + "detective-es6": "^5.0.1", + "detective-postcss": "^7.0.1", + "detective-sass": "^6.0.1", + "detective-scss": "^5.0.1", + "detective-stylus": "^5.0.1", + "detective-typescript": "^14.0.0", + "detective-vue2": "^2.2.0", + "module-definition": "^6.0.1", + "node-source-walk": "^7.0.1", + "postcss": "^8.5.1", + "typescript": "^5.7.3" + }, + "bin": { + "precinct": "bin/cli.js" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "node_modules/precinct/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "devOptional": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" + "node": ">= 0.8.0" } }, - "node_modules/onetime": { - "version": "5.1.2", + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=6" }, @@ -11050,38 +17097,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/pretty-format": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", + "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", "dev": true, "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": ">= 0.8.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/ora": { - "version": "5.4.1", + "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, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "parse-ms": "^2.1.0" }, "engines": { "node": ">=10" @@ -11090,474 +17141,697 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-homedir": { - "version": "1.0.2", + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6.0" } }, - "node_modules/osenv": { - "version": "0.1.5", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "asap": "~2.0.6" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "devOptional": true, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { "node": ">=10" + } + }, + "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==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 6" } }, - "node_modules/p-locate": { - "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==", - "devOptional": true, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/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, + "license": "ISC" + }, + "node_modules/properties-reader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/properties-reader/-/properties-reader-2.3.0.tgz", + "integrity": "sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/steveukx/properties?sponsor=1" } }, - "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "node_modules/properties-reader/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=18" + "node": ">=10" + } + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "dev": true, + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "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==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "devOptional": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "devOptional": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pacote": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", - "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^10.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6.0.0" } }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", - "license": "(MIT AND Zlib)" + "node_modules/qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "optional": true, + "peer": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } }, - "node_modules/parent-module": { - "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, - "license": "MIT", + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { - "callsites": "^3.0.0" + "side-channel": "^1.1.0" }, "engines": { - "node": ">=6" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", "license": "MIT", "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" + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-json/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/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, - "node_modules/parse-ms": { - "version": "2.1.0", + "node_modules/quote-unquote": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", + "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", "dev": true, + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, "engines": { "node": ">= 0.8" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "devOptional": true, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "node_modules/path-key": { - "version": "3.1.1", + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "devOptional": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "devOptional": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "devOptional": true, - "license": "BlueOak-1.0.0", + "node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "setimmediate": "^1.0.5" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "devOptional": true, - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, + "node_modules/react": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "license": "ISC" + "node_modules/react-devtools-core": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.5.tgz", + "integrity": "sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } }, - "node_modules/picomatch": { - "version": "2.3.1", - "devOptional": true, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=8.6" + "node": ">=8.3.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "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==", "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } + "license": "MIT" }, - "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, + "node_modules/react-native": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.80.2.tgz", + "integrity": "sha512-6ySV4qTJo/To3lgpG/9Mcg/ZtvExqOVZuT7JVGcO5rS2Bjvl/yUAkQF0hTnbRb2Ch6T5MlKghrM4OeHX+KA9Pg==", "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" + "optional": true, + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.7.0", + "@react-native/assets-registry": "0.80.2", + "@react-native/codegen": "0.80.2", + "@react-native/community-cli-plugin": "0.80.2", + "@react-native/gradle-plugin": "0.80.2", + "@react-native/js-polyfills": "0.80.2", + "@react-native/normalize-colors": "0.80.2", + "@react-native/virtualized-lists": "0.80.2", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "babel-jest": "^29.7.0", + "babel-plugin-syntax-hermes-parser": "0.28.1", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "commander": "^12.0.0", + "flow-enums-runtime": "^0.0.6", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jest-environment-node": "^29.7.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.82.2", + "metro-source-map": "^0.82.2", + "nullthrows": "^1.1.1", + "pretty-format": "^29.7.0", + "promise": "^8.3.0", + "react-devtools-core": "^6.1.1", + "react-refresh": "^0.14.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.26.0", + "semver": "^7.1.3", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.3", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^19.1.0", + "react": "^19.1.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "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, + "node_modules/react-native-edge-to-edge": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/react-native-edge-to-edge/-/react-native-edge-to-edge-1.6.0.tgz", + "integrity": "sha512-2WCNdE3Qd6Fwg9+4BpbATUxCLcouF6YRY7K+J36KJ4l3y+tWN6XCqAC4DuoGblAAbb2sLkhEDp4FOlbOIot2Og==", "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "optional": true, + "peer": true, + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "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, + "node_modules/react-native-securerandom": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", + "integrity": "sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw==", "license": "MIT", + "optional": true, "dependencies": { - "p-locate": "^4.1.0" + "base64-js": "*" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react-native": "*" } }, - "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, + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "p-try": "^2.0.0" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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, + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "p-limit": "^2.2.0" + "@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": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/pluralize": { - "version": "8.0.0", - "dev": true, + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/postcss": { - "version": "8.4.49", - "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/react-native/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "@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": "^10 || ^12 || >=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/postcss-values-parser": { - "version": "6.0.2", - "dev": true, - "license": "MPL-2.0", + "node_modules/react-native/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "color-name": "^1.1.4", - "is-url-superb": "^4.0.0", - "quote-unquote": "^1.0.0" + "@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": ">=10" - }, - "peerDependencies": { - "postcss": "^8.2.9" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/precinct": { - "version": "12.1.2", - "dev": true, + "node_modules/react-native/node_modules/@react-native/codegen": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.80.2.tgz", + "integrity": "sha512-eYad9ex9/RS6oFbbpu6LxsczktbhfJbJlTvtRlcWLJjJbFTeNr5Q7CgBT2/m5VtpxnJ/0YdmZ9vdazsJ2yp9kw==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@dependents/detective-less": "^5.0.0", - "commander": "^12.1.0", - "detective-amd": "^6.0.0", - "detective-cjs": "^6.0.0", - "detective-es6": "^5.0.0", - "detective-postcss": "^7.0.0", - "detective-sass": "^6.0.0", - "detective-scss": "^5.0.0", - "detective-stylus": "^5.0.0", - "detective-typescript": "^13.0.0", - "detective-vue2": "^2.0.3", - "module-definition": "^6.0.0", - "node-source-walk": "^7.0.0", - "postcss": "^8.4.40", - "typescript": "^5.5.4" - }, - "bin": { - "precinct": "bin/cli.js" + "glob": "^7.1.1", + "hermes-parser": "0.28.1", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" } }, - "node_modules/precinct/node_modules/commander": { - "version": "12.1.0", - "dev": true, + "node_modules/react-native/node_modules/@react-native/normalize-colors": { + "version": "0.80.2", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.80.2.tgz", + "integrity": "sha512-08Ax7554Z31NXi5SQ6h1GsiSrlZEOYHQNSC7u+x91Tdiq87IXldW8Ib1N3ThXoDcD8bjr+I+MdlabEJw36/fFg==", "license": "MIT", - "engines": { - "node": ">=18" - } + "optional": true, + "peer": true }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, + "node_modules/react-native/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==", "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } + "optional": true, + "peer": true }, - "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node_modules/react-native/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==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/pretty-format": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", - "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", - "dev": true, + "node_modules/react-native/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==", "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, + "optional": true, + "peer": true, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { + "node_modules/react-native/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, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=10" }, @@ -11565,344 +17839,406 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "dev": true, + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "parse-ms": "^2.1.0" + "@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": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", - "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/process": { - "version": "0.11.10", - "dev": true, - "license": "MIT", + "node_modules/react-native/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==", + "license": "BSD-3-Clause", + "optional": true, + "peer": 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": ">= 0.6.0" + "node": ">=8" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "dev": true, + "node_modules/react-native/node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.28.1.tgz", + "integrity": "sha512-meT17DOuUElMNsL5LZN56d+KBp22hb0EfxWfuPUeoSi54e40v1W4C2V36P75FpsH9fVEfDKpw5Nnkahc8haSsQ==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" + "hermes-parser": "0.28.1" } }, - "node_modules/properties-reader": { - "version": "2.3.0", - "dev": true, + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "mkdirp": "^1.0.4" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/steveukx/properties?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/properties-reader/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, + "node_modules/react-native/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "optional": true, + "peer": true, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/protobufjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", - "dev": true, - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, + "node_modules/react-native/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=12.0.0" + "node": ">=18" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", + "node_modules/react-native/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", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "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": ">= 0.10" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" + "node_modules/react-native/node_modules/hermes-estree": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.28.1.tgz", + "integrity": "sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==", + "license": "MIT", + "optional": true, + "peer": true }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, + "node_modules/react-native/node_modules/hermes-parser": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.28.1.tgz", + "integrity": "sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "hermes-estree": "0.28.1" } }, - "node_modules/punycode": { - "version": "2.3.1", - "devOptional": true, - "license": "MIT", + "node_modules/react-native/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==", + "license": "BSD-3-Clause", + "optional": true, + "peer": 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": ">=6" + "node": ">=8" } }, - "node_modules/pure-rand": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" + "node_modules/react-native/node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/pvtsutils": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", - "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "tslib": "^2.8.1" + "@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/pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@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": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/qs": { - "version": "6.14.0", - "license": "BSD-3-Clause", + "node_modules/react-native/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "side-channel": "^1.1.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": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/quote-unquote": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "@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": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/rc": { - "version": "1.2.8", - "devOptional": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "node_modules/react-native/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==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "bin": { - "rc": "cli.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "devOptional": true, - "license": "ISC" + "node_modules/react-native/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==", + "license": "ISC", + "optional": true, + "peer": true }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "devOptional": true, + "node_modules/react-native/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==", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/rdf-canonize": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", - "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", - "license": "BSD-3-Clause", + "node_modules/react-native/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==", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "setimmediate": "^1.0.5" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/react-is": { - "version": "18.3.1", - "devOptional": true, - "license": "MIT" - }, - "node_modules/react-native-securerandom": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", - "integrity": "sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw==", + "node_modules/react-native/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "base64-js": "*" - }, - "peerDependencies": { - "react-native": "*" + "async-limiter": "~1.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/read-installed": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "integrity": "sha512-O03wg/IYuV/VtnK2h/KXEt9VIbMUFbk3ERG0Iu4FhLZw0EP0T9znqrYDGn6ncbEsXUFaUjiVAWXHzxwt3lhRPQ==", + "deprecated": "This package is no longer supported.", "dev": true, "license": "ISC", "dependencies": { @@ -11919,6 +18255,8 @@ }, "node_modules/read-installed/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -11927,6 +18265,9 @@ }, "node_modules/read-package-json": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", "dev": true, "license": "ISC", "dependencies": { @@ -11936,42 +18277,46 @@ "npm-normalize-package-bin": "^1.0.0" } }, - "node_modules/read-package-json/node_modules/hosted-git-info": { - "version": "2.8.9", + "node_modules/read-package-json/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, - "license": "ISC" + "license": "ISC", + "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/read-package-json/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, "license": "MIT" }, - "node_modules/read-package-json/node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "license": "ISC" }, - "node_modules/read-package-json/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -11984,14 +18329,28 @@ }, "node_modules/readdir-glob": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, "license": "Apache-2.0", "dependencies": { "minimatch": "^5.1.0" } }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/readdir-glob/node_modules/minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -12003,6 +18362,9 @@ }, "node_modules/readdir-scoped-modules": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "license": "ISC", "dependencies": { @@ -12051,10 +18413,99 @@ }, "node_modules/reflect-metadata": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "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==", "devOptional": true, "license": "MIT", "engines": { @@ -12063,13 +18514,43 @@ }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "optional": true, + "peer": true, + "dependencies": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/requireg/node_modules/resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "path-parse": "^1.0.5" + } + }, "node_modules/requirejs": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", + "integrity": "sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==", "dev": true, "license": "MIT", "bin": { @@ -12082,6 +18563,8 @@ }, "node_modules/requirejs-config-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", + "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", "dev": true, "license": "MIT", "dependencies": { @@ -12093,17 +18576,22 @@ } }, "node_modules/resolve": { - "version": "1.22.8", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "devOptional": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12132,7 +18620,9 @@ } }, "node_modules/resolve-dependency-path": { - "version": "4.0.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-4.0.1.tgz", + "integrity": "sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==", "dev": true, "license": "MIT", "engines": { @@ -12149,8 +18639,29 @@ "node": ">=4" } }, + "node_modules/resolve-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz", + "integrity": "sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -12161,8 +18672,17 @@ "node": ">=8" } }, + "node_modules/restore-cursor/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, + "license": "ISC" + }, "node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", "engines": { @@ -12170,7 +18690,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "devOptional": true, "license": "MIT", "engines": { @@ -12180,11 +18702,56 @@ }, "node_modules/rfdc": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/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", + "license": "ISC", + "optional": 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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "devOptional": true, "funding": [ { @@ -12216,6 +18783,8 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -12234,6 +18803,8 @@ }, "node_modules/safe-stable-stringify": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "dev": true, "license": "MIT", "engines": { @@ -12242,14 +18813,19 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/sass-lookup": { - "version": "6.0.1", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-6.1.0.tgz", + "integrity": "sha512-Zx+lVyoWqXZxHuYWlTA17Z5sczJ6braNT2C7rmClw+c4E7r/n911Zwss3h1uHI9reR5AgHZyNHF7c2+VIp5AUA==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^12.0.0" + "commander": "^12.1.0", + "enhanced-resolve": "^5.18.0" }, "bin": { "sass-lookup": "bin/cli.js" @@ -12260,12 +18836,30 @@ }, "node_modules/sass-lookup/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -12342,6 +18936,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serialize-error/node_modules/type-fest": { + "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==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/serve-static": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", @@ -12371,6 +18977,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -12382,14 +18990,32 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "devOptional": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -12407,6 +19033,8 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -12421,6 +19049,8 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -12437,6 +19067,8 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -12453,9 +19085,17 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "devOptional": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/sigstore": { "version": "3.1.0", @@ -12475,8 +19115,45 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "devOptional": true, "license": "MIT", "engines": { @@ -12485,14 +19162,29 @@ }, "node_modules/slide": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", "dev": true, "license": "ISC", "engines": { "node": "*" } }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "license": "MIT", "engines": { @@ -12501,11 +19193,13 @@ } }, "node_modules/socks": { - "version": "2.8.3", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -12530,6 +19224,8 @@ }, "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==", "devOptional": true, "license": "BSD-3-Clause", "engines": { @@ -12538,6 +19234,8 @@ }, "node_modules/source-map-js": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "devOptional": true, "license": "BSD-3-Clause", "engines": { @@ -12557,6 +19255,8 @@ }, "node_modules/sparse-bitfield": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12565,6 +19265,8 @@ }, "node_modules/spdx-compare": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", "dev": true, "license": "MIT", "dependencies": { @@ -12575,6 +19277,8 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12584,11 +19288,15 @@ }, "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, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12597,17 +19305,23 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.20", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/spdx-ranges": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==", "dev": true, "license": "(MIT AND CC-BY-3.0)" }, "node_modules/spdx-satisfies": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-4.0.1.tgz", + "integrity": "sha512-WVzZ/cXAzoNmjCWiEluEA3BjHp5tiUmmhn9MK+X0tBbR9sOqtC6UQwmgCNrAIZvNlMuBUYAaHYfb2oqlF9SwKA==", "dev": true, "license": "MIT", "dependencies": { @@ -12633,12 +19347,16 @@ } }, "node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/ssh-remote-port-forward": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ssh-remote-port-forward/-/ssh-remote-port-forward-1.0.4.tgz", + "integrity": "sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12648,6 +19366,8 @@ }, "node_modules/ssh-remote-port-forward/node_modules/@types/ssh2": { "version": "0.5.52", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-0.5.52.tgz", + "integrity": "sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==", "dev": true, "license": "MIT", "dependencies": { @@ -12656,7 +19376,9 @@ } }, "node_modules/ssh2": { - "version": "1.16.0", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.17.0.tgz", + "integrity": "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -12668,7 +19390,7 @@ }, "optionalDependencies": { "cpu-features": "~0.0.10", - "nan": "^2.20.0" + "nan": "^2.23.0" } }, "node_modules/ssri": { @@ -12686,6 +19408,8 @@ }, "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==", "devOptional": true, "license": "MIT", "dependencies": { @@ -12697,12 +19421,47 @@ }, "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==", "devOptional": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/static-eval": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", @@ -12808,8 +19567,21 @@ "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==", "license": "MIT" }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "license": "Unlicense", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/stream-to-array": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", "dev": true, "license": "MIT", "dependencies": { @@ -12818,6 +19590,8 @@ }, "node_modules/streamroller": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", "dev": true, "license": "MIT", "dependencies": { @@ -12829,13 +19603,49 @@ "node": ">=8.0" } }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/streamx": { - "version": "2.21.0", + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", + "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", "dev": true, "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", "text-decoder": "^1.1.0" }, "optionalDependencies": { @@ -12853,6 +19663,8 @@ }, "node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -12872,22 +19684,52 @@ "node": ">=10" } }, + "node_modules/string-length/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string-width": { - "version": "4.2.3", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "devOptional": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { "name": "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==", "devOptional": true, "license": "MIT", "dependencies": { @@ -12899,8 +19741,40 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/stringify-object": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12913,19 +19787,26 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.1", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "devOptional": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "devOptional": true, "license": "MIT", "dependencies": { @@ -12935,6 +19816,16 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs/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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -12957,6 +19848,8 @@ }, "node_modules/strip-json-comments": { "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, "license": "MIT", "engines": { @@ -12966,12 +19859,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/stylus-lookup": { - "version": "6.0.0", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-6.1.0.tgz", + "integrity": "sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^12.0.0" + "commander": "^12.1.0" }, "bin": { "stylus-lookup": "bin/cli.js" @@ -12982,14 +19885,53 @@ }, "node_modules/stylus-lookup/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -12999,8 +19941,25 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "devOptional": true, "license": "MIT", "engines": { @@ -13027,7 +19986,9 @@ } }, "node_modules/tapable": { - "version": "2.2.1", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", "dev": true, "license": "MIT", "engines": { @@ -13069,6 +20030,8 @@ }, "node_modules/tar-stream": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13160,6 +20123,75 @@ "dev": true, "license": "ISC" }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -13175,28 +20207,26 @@ "node": ">=8" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/test-exclude/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", "devOptional": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "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/testcontainers": { @@ -13223,14 +20253,59 @@ "undici": "^7.13.0" } }, + "node_modules/testcontainers/node_modules/undici": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.14.0.tgz", + "integrity": "sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, "node_modules/text-decoder": { - "version": "1.2.2", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "dev": true, "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" } }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/tinyglobby": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", @@ -13249,11 +20324,14 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -13264,9 +20342,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -13277,9 +20355,9 @@ } }, "node_modules/tmp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", - "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { @@ -13288,11 +20366,15 @@ }, "node_modules/tmpl": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "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==", "devOptional": true, "license": "MIT", "dependencies": { @@ -13312,7 +20394,9 @@ } }, "node_modules/tr46": { - "version": "5.0.0", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", "dev": true, "license": "MIT", "dependencies": { @@ -13324,6 +20408,8 @@ }, "node_modules/treeify": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", "dev": true, "license": "MIT", "engines": { @@ -13331,18 +20417,22 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-graphviz": { - "version": "2.1.4", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-2.1.6.tgz", + "integrity": "sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==", "dev": true, "funding": [ { @@ -13356,15 +20446,23 @@ ], "license": "MIT", "dependencies": { - "@ts-graphviz/adapter": "^2.0.5", - "@ts-graphviz/ast": "^2.0.5", - "@ts-graphviz/common": "^2.1.4", - "@ts-graphviz/core": "^2.0.5" + "@ts-graphviz/adapter": "^2.0.6", + "@ts-graphviz/ast": "^2.0.7", + "@ts-graphviz/common": "^2.1.5", + "@ts-graphviz/core": "^2.0.7" }, "engines": { "node": ">=18" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, "node_modules/ts-jest": { "version": "29.4.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.1.tgz", @@ -13465,15 +20563,15 @@ } }, "node_modules/ts-json-schema-generator/node_modules/glob": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", - "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", "dev": true, "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -13489,9 +20587,9 @@ } }, "node_modules/ts-json-schema-generator/node_modules/jackspeak": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", - "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -13515,13 +20613,13 @@ } }, "node_modules/ts-json-schema-generator/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { "node": "20 || >=22" @@ -13549,6 +20647,8 @@ }, "node_modules/ts-mockito": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", + "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", "dev": true, "license": "MIT", "dependencies": { @@ -13557,6 +20657,8 @@ }, "node_modules/ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13605,6 +20707,8 @@ }, "node_modules/tsconfig-paths": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "license": "MIT", "dependencies": { @@ -13618,6 +20722,8 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -13665,6 +20771,8 @@ }, "node_modules/tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true, "license": "Unlicense" }, @@ -13698,9 +20806,10 @@ } }, "node_modules/type-fest": { - "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==", + "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==", + "devOptional": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -13737,16 +20846,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.39.0.tgz", - "integrity": "sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.40.0.tgz", + "integrity": "sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.39.0", - "@typescript-eslint/parser": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/utils": "8.39.0" + "@typescript-eslint/eslint-plugin": "8.40.0", + "@typescript-eslint/parser": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.0", + "@typescript-eslint/utils": "8.40.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -13762,10 +20871,14 @@ }, "node_modules/typescript-logging": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/typescript-logging/-/typescript-logging-2.2.0.tgz", + "integrity": "sha512-mPKFGAgGJmeCqrzA6B64Lqoz6vLPtxa8yCd7sWAnfrz9opuNlxqW57VxjtEOL0OOoQeTdc/kBjGUh8sieBXa8A==", "license": "Apache-2.0" }, "node_modules/typescript-logging-log4ts-style": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/typescript-logging-log4ts-style/-/typescript-logging-log4ts-style-2.2.0.tgz", + "integrity": "sha512-NP8uoFVoNJkhH6iOM1Y8+/RVFoSPCxLe/kgdxQ0uJNhUJh4CLp7CuMIh/njC9mzK0wdq2DgSJcmlzkqnRXx1Eg==", "license": "Apache-2.0", "peerDependencies": { "typescript-logging": "~2.2.0" @@ -13795,13 +20908,14 @@ } }, "node_modules/undici": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.13.0.tgz", - "integrity": "sha512-l+zSMssRqrzDcb3fjMkjjLGmuiiK2pMIcV++mJaAc9vhjSGpvM7h43QgP+OAMb1GImHmbPyG2tBXeuyG5iY4gA==", - "dev": true, + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=20.18.1" + "node": ">=18.17" } }, "node_modules/undici-types": { @@ -13810,6 +20924,54 @@ "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "license": "MIT" }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/unique-filename": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", @@ -13836,12 +20998,28 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/universalify": { - "version": "0.1.2", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", + "optional": true, "engines": { - "node": ">= 4.0.0" + "node": ">= 10.0.0" } }, "node_modules/unpipe": { @@ -13930,10 +21108,14 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, "node_modules/util-extend": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", "dev": true, "license": "MIT" }, @@ -13948,6 +21130,8 @@ }, "node_modules/uuid": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -13959,6 +21143,8 @@ }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, "license": "MIT" }, @@ -13993,6 +21179,8 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14001,9 +21189,9 @@ } }, "node_modules/validate-npm-package-name": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.1.tgz", - "integrity": "sha512-OaI//3H0J7ZkR1OqlhGA8cA+Cbk/2xFOQpJOt5+s27/ta9eZwpeervh4Mxh4w0im/kdgktowaqVNR7QOrUd7Yg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", "dev": true, "license": "ISC", "engines": { @@ -14034,8 +21222,18 @@ "node": ">= 0.8" } }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/walkdir": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", "dev": true, "license": "MIT", "engines": { @@ -14044,6 +21242,8 @@ }, "node_modules/walker": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "devOptional": true, "license": "Apache-2.0", "dependencies": { @@ -14052,6 +21252,8 @@ }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -14098,26 +21300,67 @@ }, "node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/whatwg-url": { - "version": "14.1.0", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "^5.0.0", + "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" }, "engines": { "node": ">=18" } }, + "node_modules/whatwg-url-without-unicode": { + "version": "8.0.0-3", + "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", + "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer": "^5.4.3", + "punycode": "^2.1.1", + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "devOptional": true, "license": "ISC", "dependencies": { @@ -14130,6 +21373,14 @@ "node": ">= 8" } }, + "node_modules/wonka": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-6.3.5.tgz", + "integrity": "sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -14147,18 +21398,18 @@ "license": "MIT" }, "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==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "devOptional": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -14167,6 +21418,8 @@ "node_modules/wrap-ansi-cjs": { "name": "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==", "devOptional": true, "license": "MIT", "dependencies": { @@ -14181,8 +21434,68 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?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==", "devOptional": true, "license": "ISC" }, @@ -14200,19 +21513,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", @@ -14234,8 +21534,73 @@ } } }, + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/xml2js": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", + "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8.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==", "devOptional": true, "license": "ISC", "engines": { @@ -14249,18 +21614,22 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.6.1", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "devOptional": true, "license": "MIT", "dependencies": { @@ -14278,14 +21647,63 @@ }, "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==", "devOptional": true, "license": "ISC", "engines": { "node": ">=12" } }, + "node_modules/yargs/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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/yargs/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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -14294,6 +21712,8 @@ }, "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==", "devOptional": true, "license": "MIT", "engines": { @@ -14305,6 +21725,8 @@ }, "node_modules/zip-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", "dev": true, "license": "MIT", "dependencies": { @@ -14318,6 +21740,8 @@ }, "node_modules/zip-stream/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -14340,7 +21764,9 @@ } }, "node_modules/zip-stream/node_modules/readable-stream": { - "version": "4.5.2", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", "dependencies": { @@ -14383,6 +21809,10 @@ "name": "@nmshd/consumption", "license": "MIT", "dependencies": { + "@credo-ts/askar": "v0.6.0-alpha-20250704130724", + "@credo-ts/core": "v0.6.0-alpha-20250704130724", + "@credo-ts/node": "v0.6.0-alpha-20250704130724", + "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", "@js-soft/docdb-querytranslator": "^1.1.5", "@js-soft/ts-serval": "2.0.13", "@js-soft/ts-utils": "2.3.4", @@ -14390,6 +21820,7 @@ "@nmshd/core-types": "*", "@nmshd/iql": "^1.0.3", "@nmshd/transport": "*", + "@openwallet-foundation/askar-nodejs": "^0.3.2", "lodash": "^4.17.21", "ts-simple-nameof": "^1.3.3" }, diff --git a/package.json b/package.json index f3cf18840..9366f9bf2 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,6 @@ "teardown:backbone": "docker compose -p runtime-test-backbone -f .dev/compose.backbone.yml down -v", "test:teardown": "docker compose -f .dev/compose.yml down -fsv" }, - "dependencies": { - "@credo-ts/askar": "v0.6.0-alpha-20250704130724", - "@credo-ts/core": "v0.6.0-alpha-20250704130724", - "@credo-ts/node": "v0.6.0-alpha-20250704130724", - "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", - "@openwallet-foundation/askar-nodejs": "^0.3.2" - }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.3", "@js-soft/license-check": "^1.0.9", diff --git a/packages/consumption/package.json b/packages/consumption/package.json index efa7d6bb8..05b7b9971 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -67,7 +67,12 @@ "@nmshd/iql": "^1.0.3", "@nmshd/transport": "*", "lodash": "^4.17.21", - "ts-simple-nameof": "^1.3.3" + "ts-simple-nameof": "^1.3.3", + "@credo-ts/askar": "v0.6.0-alpha-20250704130724", + "@credo-ts/core": "v0.6.0-alpha-20250704130724", + "@credo-ts/node": "v0.6.0-alpha-20250704130724", + "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", + "@openwallet-foundation/askar-nodejs": "^0.3.2" }, "devDependencies": { "@js-soft/docdb-access-loki": "1.3.0", diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 12dcb4aee..c45ac5328 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,3 +1,4 @@ +import { IdentityAttribute } from "@nmshd/content"; import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; @@ -18,17 +19,21 @@ export class OpenId4VcController extends ConsumptionBaseController { const res = await holder.resolveCredentialOffer(credentialOffer); this._log.error("Resolved credential offer:", res); - const credential = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); - this._log.error("Fetched credentials:", credential); + const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); + this._log.error("Fetched credentials:", credentials); - // TODO: ask britta - // currently we are simply creating a dummy IdentityAttribute - /* await this._parent.attributes.createRepositoryAttribute({ + const response = JSON.parse(JSON.stringify(credentials)); + const attribute = await this._parent.attributes.createRepositoryAttribute({ content: IdentityAttribute.from({ - value: { value: credentialOffer }, + value: { + "@type": "VerifieableCredential", + value: response + }, owner: this.parent.accountController.identity.address }) - }); */ + }); + + this._log.error("Created attribute:", attribute); return { status: "success", From 5e8aed4182f29246e31bac1c664df378c0a15811 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Fri, 22 Aug 2025 14:31:58 +0200 Subject: [PATCH 11/75] feat: finish openid4vc controller --- .../src/consumption/ConsumptionController.ts | 9 ++++++ .../modules/openid4vc/OpenId4VcController.ts | 32 +++++++++++-------- packages/consumption/tsconfig.json | 4 ++- packages/runtime/src/Runtime.ts | 5 +++ 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/packages/consumption/src/consumption/ConsumptionController.ts b/packages/consumption/src/consumption/ConsumptionController.ts index 1b8ab930e..376fb4b2e 100644 --- a/packages/consumption/src/consumption/ConsumptionController.ts +++ b/packages/consumption/src/consumption/ConsumptionController.ts @@ -28,6 +28,7 @@ import { NotificationItemProcessorConstructor, NotificationItemProcessorRegistry, NotificationsController, + OpenId4VcController, OutgoingRequestsController, OwnSharedAttributeDeletedByOwnerNotificationItemProcessor, PeerSharedAttributeDeletedByPeerNotificationItemProcessor, @@ -81,6 +82,11 @@ export class ConsumptionController { return this._notifications; } + private _openId4Vc: OpenId4VcController; + public get openId4Vc(): OpenId4VcController { + return this._openId4Vc; + } + private _identityMetadata: IdentityMetadataController; public get identityMetadata(): IdentityMetadataController { return this._identityMetadata; @@ -138,6 +144,9 @@ export class ConsumptionController { this._identityMetadata = await new IdentityMetadataController(this).init(); this._settings = await new SettingsController(this).init(); + + this._openId4Vc = await new OpenId4VcController(this).init(); + return this; } diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index c45ac5328..7f48c44f8 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,4 +1,3 @@ -import { IdentityAttribute } from "@nmshd/content"; import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; @@ -22,23 +21,28 @@ export class OpenId4VcController extends ConsumptionBaseController { const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); this._log.error("Fetched credentials:", credentials); - const response = JSON.parse(JSON.stringify(credentials)); - const attribute = await this._parent.attributes.createRepositoryAttribute({ - content: IdentityAttribute.from({ - value: { - "@type": "VerifieableCredential", - value: response - }, - owner: this.parent.accountController.identity.address - }) - }); - - this._log.error("Created attribute:", attribute); + const attributes = []; + + for (const credential of credentials) { + const response = JSON.parse(JSON.stringify(credential)); + const attribute = await this._parent.attributes.createRepositoryAttribute({ + content: IdentityAttribute.from({ + value: { + "@type": "VerifiableCredential", + value: response + }, + owner: this.parent.accountController.identity.address + }) + }); + this._log.error("Created attribute:", attribute); + attributes.push(attribute); + } return { status: "success", message: "Credential offer processed successfully", - data: credentialOffer + data: credentialOfferm, + attributes: attributes }; } } diff --git a/packages/consumption/tsconfig.json b/packages/consumption/tsconfig.json index 323399fff..9c1c63549 100644 --- a/packages/consumption/tsconfig.json +++ b/packages/consumption/tsconfig.json @@ -2,7 +2,9 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": "src", + // ONLY POC - THIS IS STRICTLY FORBIDDEN IN PRODUCTION + "skipLibCheck": true }, "include": ["src/**/*.ts"], "exclude": [], diff --git a/packages/runtime/src/Runtime.ts b/packages/runtime/src/Runtime.ts index b240d61b1..33aa70f07 100644 --- a/packages/runtime/src/Runtime.ts +++ b/packages/runtime/src/Runtime.ts @@ -8,6 +8,7 @@ import { IdentityMetadataController, IncomingRequestsController, NotificationsController, + OpenId4VcController, OutgoingRequestsController, SettingsController } from "@nmshd/consumption"; @@ -314,6 +315,10 @@ export abstract class Runtime { .factory(() => this.getConsumptionController().notifications) .scope(Scope.Request); + Container.bind(OpenId4VcController) + .factory(() => this.getConsumptionController().openId4Vc) + .scope(Scope.Request); + Container.bind(AnonymousTokenController) .factory(() => new AnonymousTokenController(this.transport.config, this.correlator)) .scope(Scope.Singleton); From a2a3f4340f84c8097b143975b16ae5c0d027ae0e Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Thu, 28 Aug 2025 09:33:58 +0200 Subject: [PATCH 12/75] chore: activate skip lib check --- packages/tsconfig.base.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/tsconfig.base.json b/packages/tsconfig.base.json index 5ef06cf28..797aa9697 100644 --- a/packages/tsconfig.base.json +++ b/packages/tsconfig.base.json @@ -20,6 +20,7 @@ "noImplicitOverride": true, "useDefineForClassFields": false, "lib": ["ES2022", "DOM"], - "composite": true + "composite": true, + "skipLibCheck": true } } From 2e0c1b9c01763572225309051372f1f008fad076 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Thu, 28 Aug 2025 09:34:23 +0200 Subject: [PATCH 13/75] chore: correct dependencies --- package-lock.json | 23475 ++++++++++------------------ packages/consumption/package.json | 10 +- 2 files changed, 7932 insertions(+), 15553 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a2dfc6e1..044e2f9bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,56 +33,6 @@ "typescript": "^5.9.2" } }, - "node_modules/@0no-co/graphql.web": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.2.0.tgz", - "integrity": "sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==", - "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" - }, - "peerDependenciesMeta": { - "graphql": { - "optional": true - } - } - }, - "node_modules/@2060.io/ffi-napi": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@2060.io/ffi-napi/-/ffi-napi-4.0.9.tgz", - "integrity": "sha512-JfVREbtkJhMXSUpya3JCzDumdjeZDCKv4PemiWK+pts5CYgdoMidxeySVlFeF5pHqbBpox4I0Be7sDwAq4N0VQ==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@2060.io/ref-napi": "^3.0.6", - "debug": "^4.1.1", - "get-uv-event-loop-napi-h": "^1.0.5", - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.1", - "ref-struct-di": "^1.1.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@2060.io/ref-napi": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@2060.io/ref-napi/-/ref-napi-3.0.6.tgz", - "integrity": "sha512-8VAIXLdKL85E85jRYpPcZqATBL6fGnC/XjBGNeSgRSMJtrAMSmfRksqIq5AmuZkA2eeJXMWCiN6UQOUdozcymg==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "get-symbol-from-current-process-h": "^1.0.2", - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.1" - }, - "engines": { - "node": ">= 18.0" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -303,20 +253,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", @@ -342,88 +278,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", - "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -433,21 +287,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", @@ -478,20 +317,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", @@ -501,59 +326,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -581,307 +353,105 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function": { + "node_modules/@babel/helpers": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", - "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helpers": { + "node_modules/@babel/parser": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", - "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" }, + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/highlight": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", - "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "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, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^1.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "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, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "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, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-name": "1.1.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "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, "license": "MIT", - "optional": true, - "peer": 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==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "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==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", - "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", - "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-decorators": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz", - "integrity": "sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", - "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.27.1.tgz", - "integrity": "sha512-eBC/3KSekshx19+N40MzjWqJd7KTEdOoLesAfa4IDFI8eRz5a47i5Oszus6zG/cwIXN63YhgLOMSSNJx49sENg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", @@ -895,28 +465,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", - "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -932,7 +485,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -945,7 +498,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -958,7 +511,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -974,7 +527,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -987,7 +540,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1000,7 +553,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1013,7 +566,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1026,7 +579,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1039,7 +592,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1052,7 +605,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1068,7 +621,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1084,7 +637,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1096,14 +649,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { @@ -1113,11436 +665,5321 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", - "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "node_modules/@babel/traverse": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", - "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "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, + "license": "MIT" + }, + "node_modules/@credo-ts/askar": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/askar/-/askar-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-AgeiLbW3wdV5PWUnMFEIRJ1Xrrom+pTNdxNkk4j774f0yAswi2jBYrVpzSr8UmspdSiVIjbxZe/q/WUAn6NQ/Q==", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "rxjs": "^7.8.2", + "tsyringe": "^4.10.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@openwallet-foundation/askar-shared": "^0.3.2" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.3.tgz", - "integrity": "sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@credo-ts/core": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-vqNYnQa6Kn8g2Ay5rGxm6zqMqepV4jdSHLpAgXQJ1zvaBIVZ4zU7zjxccILhruCFlvlUreKtSqcEI8SAMUigUQ==", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@animo-id/mdoc": "^0.5.2", + "@animo-id/pex": "^6.1.0", + "@astronautlabs/jsonpath": "^1.1.2", + "@digitalcredentials/jsonld": "^6.0.0", + "@digitalcredentials/jsonld-signatures": "^9.4.0", + "@digitalcredentials/vc": "^6.0.1", + "@multiformats/base-x": "^4.0.1", + "@noble/curves": "^1.9.2", + "@noble/hashes": "^1.8.0", + "@peculiar/asn1-ecc": "^2.3.15", + "@peculiar/asn1-rsa": "^2.3.15", + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "@peculiar/x509": "^1.12.1", + "@sd-jwt/core": "^0.10.0", + "@sd-jwt/decode": "^0.10.0", + "@sd-jwt/jwt-status-list": "^0.10.0", + "@sd-jwt/present": "^0.10.0", + "@sd-jwt/sd-jwt-vc": "^0.10.0", + "@sd-jwt/types": "^0.10.0", + "@sd-jwt/utils": "^0.10.0", + "@sphereon/pex-models": "^2.3.2", + "@sphereon/ssi-types": "0.33.0", + "@stablelib/ed25519": "^1.0.3", + "@types/ws": "^8.18.1", + "borc": "^3.0.0", + "buffer": "^6.0.3", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "dcql": "^0.3.0", + "did-resolver": "^4.1.0", + "ec-compression": "0.0.1-alpha.12", + "lru_map": "^0.4.1", + "make-error": "^1.3.6", + "object-inspect": "^1.13.4", + "reflect-metadata": "^0.2.2", + "rxjs": "^7.8.2", + "tsyringe": "^4.10.0", + "uuid": "^11.1.0", + "varint": "^6.0.0", + "web-did-resolver": "^2.0.21", + "webcrypto-core": "^1.8.1", + "zod": "^3.25.56" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "node_modules/@credo-ts/core/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", - "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@credo-ts/openid4vc": { + "version": "0.6.0-alpha-20250704130724", + "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20250704130724.tgz", + "integrity": "sha512-+9BwT0tbo1B4++DcVXBEcoNAmkI5LNpacDDnUYdVumlSYYmmdE1WAAxCvM052ipBFke82w4kPOyo5YSZvZ7IFA==", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@credo-ts/core": "0.6.0-alpha-20250704130724", + "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", + "@openid4vc/openid4vci": "0.3.0-alpha-20250602121005", + "@openid4vc/openid4vp": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "class-transformer": "0.5.1", + "rxjs": "^7.8.2", + "zod": "^3.25.56" } }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", - "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-flow": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "node_modules/@dependents/detective-less": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz", + "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalbazaar/bitstring": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/bitstring/-/bitstring-3.1.0.tgz", + "integrity": "sha512-Cii+Sl++qaexOvv3vchhgZFfSmtHPNIPzGegaq4ffPnflVXFu+V2qrJ17aL2+gfLxrlC/zazZFuAltyKTPq7eg==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "base64url-universal": "^2.0.0", + "pako": "^2.0.4" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=16" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14.0" } }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "node_modules/@digitalbazaar/http-client/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 12" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "node_modules/@digitalbazaar/http-client/node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.20 || >= 14.13" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "node_modules/@digitalbazaar/http-client/node_modules/ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, "engines": { - "node": ">=6.9.0" + "node": ">=14.16" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "node_modules/@digitalbazaar/http-client/node_modules/ky-universal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } } }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "node_modules/@digitalbazaar/http-client/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=6.9.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", - "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", + "node_modules/@digitalbazaar/http-client/node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.0" + "@fastify/busboy": "^2.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14.0" } }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalbazaar/security-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", + "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", + "license": "BSD-3-Clause" + }, + "node_modules/@digitalbazaar/vc": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc/-/vc-5.0.0.tgz", + "integrity": "sha512-XmLM7Ag5W+XidGnFuxFIyUFSMnHnWEMJlHei602GG94+WzFJ6Ik8txzPQL8T18egSoiTsd1VekymbIlSimhuaQ==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "credentials-context": "^2.0.0", + "jsonld": "^8.0.0", + "jsonld-signatures": "^11.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14" } }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalbazaar/vc-status-list": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list/-/vc-status-list-7.1.0.tgz", + "integrity": "sha512-p5uxKJlX13N8TcTuv9qFDeej+6bndU+Rh1Cez2MT+bXQE6Jpn5t336FBSHmcECB4yUfZQpkmV/LOcYU4lW8Ojw==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@digitalbazaar/bitstring": "^3.0.0", + "@digitalbazaar/vc": "^5.0.0", + "@digitalbazaar/vc-status-list-context": "^3.0.1", + "credentials-context": "^2.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=16" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", - "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, + "node_modules/@digitalbazaar/vc-status-list-context": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list-context/-/vc-status-list-context-3.1.1.tgz", + "integrity": "sha512-cMVtd+EV+4KN2kUG4/vsV74JVsGE6dcpod6zRoFB/AJA2W/sZbJqR44KL3G6P262+GcAECNhtnSsKsTnQ6y8+w==", + "license": "BSD-3-Clause" + }, + "node_modules/@digitalcredentials/base58-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/base58-universal/-/base58-universal-1.0.1.tgz", + "integrity": "sha512-1xKdJnfITMvrF/sCgwBx2C4p7qcNAARyIvrAOZGqIHmBaT/hAenpC8bf44qVY+UIMuCYP23kqpIfJQebQDThDQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/base64url-universal": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@digitalcredentials/base64url-universal/-/base64url-universal-2.0.6.tgz", + "integrity": "sha512-QJyK6xS8BYNnkKLhEAgQc6Tb9DMe+GkHnBAWJKITCxVRXJAFLhJnr+FsJnCThS3x2Y0UiiDAXoWjwMqtUrp4Kg==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "base64url": "^3.0.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14" } }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/bitstring": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/bitstring/-/bitstring-2.0.1.tgz", + "integrity": "sha512-9priXvsEJGI4LYHPwLqf5jv9HtQGlG0MgeuY8Q4NHN+xWz5rYMylh1TYTVThKa3XI6xF2pR2oEfKZD21eWXveQ==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@digitalcredentials/base64url-universal": "^2.0.2", + "pako": "^2.0.4" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14" } }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", - "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/ed25519-signature-2020": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-signature-2020/-/ed25519-signature-2020-3.0.2.tgz", + "integrity": "sha512-R8IrR21Dh+75CYriQov3nVHKaOVusbxfk9gyi6eCAwLHKn6fllUt+2LQfuUrL7Ts/sGIJqQcev7YvkX9GvyYRA==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@digitalcredentials/base58-universal": "^1.0.1", + "@digitalcredentials/ed25519-verification-key-2020": "^3.1.1", + "@digitalcredentials/jsonld-signatures": "^9.3.1", + "ed25519-signature-2018-context": "^1.1.0", + "ed25519-signature-2020-context": "^1.0.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", - "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/ed25519-verification-key-2020": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.2.tgz", + "integrity": "sha512-ZfxNFZlA379MZpf+gV2tUYyiZ15eGVgjtCQLWlyu3frWxsumUgv++o0OJlMnrDsWGwzFMRrsXcosd5+752rLOA==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" + "@digitalcredentials/base58-universal": "^1.0.1", + "@stablelib/ed25519": "^1.0.1", + "base64url-universal": "^1.1.0", + "crypto-ld": "^6.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/ed25519-verification-key-2020/node_modules/base64url-universal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", + "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.27.1" + "base64url": "^3.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.3.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/http-client": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz", + "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "ky": "^0.25.1", + "ky-universal": "^0.8.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/jsonld": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-6.0.0.tgz", + "integrity": "sha512-5tTakj0/GsqAJi8beQFVMQ97wUJZnuxViW9xRuAATL6eOBIefGBwHkVryAgEq2I4J/xKgb/nEyw1ZXX0G8wQJQ==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@digitalcredentials/http-client": "^1.0.0", + "@digitalcredentials/rdf-canonize": "^1.0.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/jsonld-signatures": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.4.0.tgz", + "integrity": "sha512-DnR+HDTm7qpcDd0wcD1w6GdlAwfHjQSgu+ahion8REkCkkMRywF+CLunU7t8AZpFB2Gr/+N8naUtiEBNje1Oew==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@digitalbazaar/security-context": "^1.0.0", + "@digitalcredentials/jsonld": "^6.0.0", + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8", + "serialize-error": "^8.0.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.3.tgz", - "integrity": "sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=10" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", - "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/jsonld/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@digitalcredentials/open-badges-context": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/open-badges-context/-/open-badges-context-2.1.0.tgz", + "integrity": "sha512-VK7X5u6OoBFxkyIFplNqUPVbo+8vFSAEoam8tSozpj05KPfcGw41Tp5p9fqMnY38oPfwtZR2yDNSctj/slrE0A==", + "license": "MIT" + }, + "node_modules/@digitalcredentials/rdf-canonize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz", + "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "semver": "^6.3.1" + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/vc": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-6.0.1.tgz", + "integrity": "sha512-TZgLoi00Jc9uv3b6jStH+G8+bCqpHIqFw9DYODz+fVjNh197ksvcYqSndUDHa2oi0HCcK+soI8j4ba3Sa4Pl4w==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@digitalbazaar/vc-status-list": "^7.0.0", + "@digitalcredentials/ed25519-signature-2020": "^3.0.2", + "@digitalcredentials/jsonld": "^6.0.0", + "@digitalcredentials/jsonld-signatures": "^9.3.2", + "@digitalcredentials/open-badges-context": "^2.1.0", + "@digitalcredentials/vc-status-list": "^5.0.2", + "credentials-context": "^2.0.0", + "fix-esm": "^1.0.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/vc-status-list": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc-status-list/-/vc-status-list-5.0.2.tgz", + "integrity": "sha512-PI0N7SM0tXpaNLelbCNsMAi34AjOeuhUzMSYTkHdeqRPX7oT2F3ukyOssgr4koEqDxw9shHtxHu3fSJzrzcPMQ==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@digitalbazaar/vc-status-list-context": "^3.0.1", + "@digitalcredentials/bitstring": "^2.0.1", + "@digitalcredentials/vc": "^4.1.1", + "credentials-context": "^2.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/jsonld": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.2.tgz", + "integrity": "sha512-hz7YR3kv6+8UUdgMyTGl1o8NjVKKwnMry/Rh/rWeAvwL+NqgoUHorWzI3rM+PW+MPFyDC0ieXStClt9n9D9SGA==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@digitalcredentials/http-client": "^1.0.0", + "@digitalcredentials/rdf-canonize": "^1.0.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", - "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/vc": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-4.2.0.tgz", + "integrity": "sha512-8Rxpn77JghJN7noBQdcMuzm/tB8vhDwPoFepr3oGd5w+CyJxOk2RnBlgIGlAAGA+mALFWECPv1rANfXno+hdjA==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" + "@digitalcredentials/jsonld": "^5.2.1", + "@digitalcredentials/jsonld-signatures": "^9.3.1", + "credentials-context": "^2.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@digitalcredentials/vc-status-list/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=10" } }, - "node_modules/@babel/preset-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", - "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "node_modules/@digitalcredentials/vc-status-list/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@emnapi/core": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", + "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", + "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-transform-react-display-name": "^7.27.1", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@babel/plugin-transform-react-pure-annotations": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@emnapi/wasi-threads": "1.0.4", + "tslib": "^2.4.0" } }, - "node_modules/@babel/preset-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", - "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "node_modules/@emnapi/runtime": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "tslib": "^2.4.0" } }, - "node_modules/@babel/runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", - "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", + "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", + "dev": true, "license": "MIT", "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@babel/traverse": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", - "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.3", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2", - "debug": "^4.3.1" - }, + "node_modules/@eslint-community/eslint-utils/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, + "license": "Apache-2.0", "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/traverse--for-generate-function-map": { - "name": "@babel/traverse", - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", - "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.3", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2", - "debug": "^4.3.1" - }, "engines": { - "node": ">=6.9.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", - "license": "MIT", + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": ">=6.9.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } }, - "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==", + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, - "license": "MIT" - }, - "node_modules/@credo-ts/askar": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/askar/-/askar-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-AgeiLbW3wdV5PWUnMFEIRJ1Xrrom+pTNdxNkk4j774f0yAswi2jBYrVpzSr8UmspdSiVIjbxZe/q/WUAn6NQ/Q==", "license": "Apache-2.0", "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "rxjs": "^7.8.2", - "tsyringe": "^4.10.0" + "@types/json-schema": "^7.0.15" }, - "peerDependencies": { - "@openwallet-foundation/askar-shared": "^0.3.2" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@credo-ts/core": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-vqNYnQa6Kn8g2Ay5rGxm6zqMqepV4jdSHLpAgXQJ1zvaBIVZ4zU7zjxccILhruCFlvlUreKtSqcEI8SAMUigUQ==", - "license": "Apache-2.0", + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@animo-id/mdoc": "^0.5.2", - "@animo-id/pex": "^6.1.0", - "@astronautlabs/jsonpath": "^1.1.2", - "@digitalcredentials/jsonld": "^6.0.0", - "@digitalcredentials/jsonld-signatures": "^9.4.0", - "@digitalcredentials/vc": "^6.0.1", - "@multiformats/base-x": "^4.0.1", - "@noble/curves": "^1.9.2", - "@noble/hashes": "^1.8.0", - "@peculiar/asn1-ecc": "^2.3.15", - "@peculiar/asn1-rsa": "^2.3.15", - "@peculiar/asn1-schema": "^2.3.15", - "@peculiar/asn1-x509": "^2.3.15", - "@peculiar/x509": "^1.12.1", - "@sd-jwt/core": "^0.10.0", - "@sd-jwt/decode": "^0.10.0", - "@sd-jwt/jwt-status-list": "^0.10.0", - "@sd-jwt/present": "^0.10.0", - "@sd-jwt/sd-jwt-vc": "^0.10.0", - "@sd-jwt/types": "^0.10.0", - "@sd-jwt/utils": "^0.10.0", - "@sphereon/pex-models": "^2.3.2", - "@sphereon/ssi-types": "0.33.0", - "@stablelib/ed25519": "^1.0.3", - "@types/ws": "^8.18.1", - "borc": "^3.0.0", - "buffer": "^6.0.3", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "dcql": "^0.3.0", - "did-resolver": "^4.1.0", - "ec-compression": "0.0.1-alpha.12", - "lru_map": "^0.4.1", - "make-error": "^1.3.6", - "object-inspect": "^1.13.4", - "reflect-metadata": "^0.2.2", - "rxjs": "^7.8.2", - "tsyringe": "^4.10.0", - "uuid": "^11.1.0", - "varint": "^6.0.0", - "web-did-resolver": "^2.0.21", - "webcrypto-core": "^1.8.1", - "zod": "^3.25.56" + "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": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@credo-ts/core/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@eslint/js": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", + "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", + "dev": true, "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/@credo-ts/didcomm": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/didcomm/-/didcomm-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-rbXdMOSH7heE58I8fFZTSvO8l/o5dKnywjrrwC4vsZFTf0Jvt23biuhjMV05VJcxvAwLvTX9e6+AKYSFX1UONA==", + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, "license": "Apache-2.0", - "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "luxon": "^3.5.0", - "query-string": "^7.0.1", - "rxjs": "^7.8.2" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@credo-ts/node": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/node/-/node-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-yKwItgLoN27a2wkM87EfT7zcw/QEH2l7IZuXHU6GKmSzacsnqRP9sA0/FqZZehGIzq3OwYU6p+QK1UHKkIZPGg==", + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@2060.io/ffi-napi": "^4.0.9", - "@2060.io/ref-napi": "^3.0.6", - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "@credo-ts/didcomm": "0.6.0-alpha-20250704130724", - "@types/express": "^4.17.23", - "express": "^4.21.2", - "rxjs": "^7.8.2", - "ws": "^8.18.2" + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@credo-ts/openid4vc": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-+9BwT0tbo1B4++DcVXBEcoNAmkI5LNpacDDnUYdVumlSYYmmdE1WAAxCvM052ipBFke82w4kPOyo5YSZvZ7IFA==", - "license": "Apache-2.0", - "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", - "@openid4vc/openid4vci": "0.3.0-alpha-20250602121005", - "@openid4vc/openid4vp": "0.3.0-alpha-20250602121005", - "@openid4vc/utils": "0.3.0-alpha-20250602121005", - "class-transformer": "0.5.1", - "rxjs": "^7.8.2", - "zod": "^3.25.56" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "node": ">=14" } }, - "node_modules/@dependents/detective-less": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz", - "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==", + "node_modules/@grpc/grpc-js": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.1" + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" }, "engines": { - "node": ">=18" + "node": ">=12.10.0" } }, - "node_modules/@digitalbazaar/bitstring": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/bitstring/-/bitstring-3.1.0.tgz", - "integrity": "sha512-Cii+Sl++qaexOvv3vchhgZFfSmtHPNIPzGegaq4ffPnflVXFu+V2qrJ17aL2+gfLxrlC/zazZFuAltyKTPq7eg==", - "license": "BSD-3-Clause", + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "base64url-universal": "^2.0.0", - "pako": "^2.0.4" + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@digitalbazaar/http-client": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", - "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", - "license": "BSD-3-Clause", - "dependencies": { - "ky": "^0.33.3", - "ky-universal": "^0.11.0", - "undici": "^5.21.2" + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" }, "engines": { - "node": ">=14.0" + "node": ">=6" } }, - "node_modules/@digitalbazaar/http-client/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 12" + "node": ">=18.18.0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": "^12.20 || >= 14.13" + "node": ">=18.18.0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/ky": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", - "license": "MIT", + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=14.16" + "node": ">=18.18" }, "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@digitalbazaar/http-client/node_modules/ky-universal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", - "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "^3.2.10" - }, + "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, + "license": "Apache-2.0", "engines": { - "node": ">=14.16" + "node": ">=12.22" }, "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.31.4", - "web-streams-polyfill": ">=3.2.1" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@digitalbazaar/http-client/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18.18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@digitalbazaar/http-client/node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, "engines": { - "node": ">=14.0" + "node": "20 || >=22" } }, - "node_modules/@digitalbazaar/security-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", - "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", - "license": "BSD-3-Clause" - }, - "node_modules/@digitalbazaar/vc": { + "node_modules/@isaacs/brace-expansion": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/vc/-/vc-5.0.0.tgz", - "integrity": "sha512-XmLM7Ag5W+XidGnFuxFIyUFSMnHnWEMJlHei602GG94+WzFJ6Ik8txzPQL8T18egSoiTsd1VekymbIlSimhuaQ==", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", "dependencies": { - "credentials-context": "^2.0.0", - "jsonld": "^8.0.0", - "jsonld-signatures": "^11.0.0" + "@isaacs/balanced-match": "^4.0.1" }, "engines": { - "node": ">=14" + "node": "20 || >=22" } }, - "node_modules/@digitalbazaar/vc-status-list": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list/-/vc-status-list-7.1.0.tgz", - "integrity": "sha512-p5uxKJlX13N8TcTuv9qFDeej+6bndU+Rh1Cez2MT+bXQE6Jpn5t336FBSHmcECB4yUfZQpkmV/LOcYU4lW8Ojw==", - "license": "BSD-3-Clause", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", "dependencies": { - "@digitalbazaar/bitstring": "^3.0.0", - "@digitalbazaar/vc": "^5.0.0", - "@digitalbazaar/vc-status-list-context": "^3.0.1", - "credentials-context": "^2.0.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=16" + "node": ">=12" } }, - "node_modules/@digitalbazaar/vc-status-list-context": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list-context/-/vc-status-list-context-3.1.1.tgz", - "integrity": "sha512-cMVtd+EV+4KN2kUG4/vsV74JVsGE6dcpod6zRoFB/AJA2W/sZbJqR44KL3G6P262+GcAECNhtnSsKsTnQ6y8+w==", - "license": "BSD-3-Clause" - }, - "node_modules/@digitalcredentials/base58-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@digitalcredentials/base58-universal/-/base58-universal-1.0.1.tgz", - "integrity": "sha512-1xKdJnfITMvrF/sCgwBx2C4p7qcNAARyIvrAOZGqIHmBaT/hAenpC8bf44qVY+UIMuCYP23kqpIfJQebQDThDQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalcredentials/base64url-universal": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@digitalcredentials/base64url-universal/-/base64url-universal-2.0.6.tgz", - "integrity": "sha512-QJyK6xS8BYNnkKLhEAgQc6Tb9DMe+GkHnBAWJKITCxVRXJAFLhJnr+FsJnCThS3x2Y0UiiDAXoWjwMqtUrp4Kg==", - "license": "BSD-3-Clause", + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", "dependencies": { - "base64url": "^3.0.1" + "minipass": "^7.0.4" }, "engines": { - "node": ">=14" + "node": ">=18.0.0" } }, - "node_modules/@digitalcredentials/bitstring": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@digitalcredentials/bitstring/-/bitstring-2.0.1.tgz", - "integrity": "sha512-9priXvsEJGI4LYHPwLqf5jv9HtQGlG0MgeuY8Q4NHN+xWz5rYMylh1TYTVThKa3XI6xF2pR2oEfKZD21eWXveQ==", - "license": "BSD-3-Clause", + "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, + "license": "ISC", "dependencies": { - "@digitalcredentials/base64url-universal": "^2.0.2", - "pako": "^2.0.4" + "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": ">=14" + "node": ">=8" } }, - "node_modules/@digitalcredentials/ed25519-signature-2020": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-signature-2020/-/ed25519-signature-2020-3.0.2.tgz", - "integrity": "sha512-R8IrR21Dh+75CYriQov3nVHKaOVusbxfk9gyi6eCAwLHKn6fllUt+2LQfuUrL7Ts/sGIJqQcev7YvkX9GvyYRA==", - "license": "BSD-3-Clause", + "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, + "license": "MIT", "dependencies": { - "@digitalcredentials/base58-universal": "^1.0.1", - "@digitalcredentials/ed25519-verification-key-2020": "^3.1.1", - "@digitalcredentials/jsonld-signatures": "^9.3.1", - "ed25519-signature-2018-context": "^1.1.0", - "ed25519-signature-2020-context": "^1.0.1" - }, - "engines": { - "node": ">=14" + "sprintf-js": "~1.0.2" } }, - "node_modules/@digitalcredentials/ed25519-verification-key-2020": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.2.tgz", - "integrity": "sha512-ZfxNFZlA379MZpf+gV2tUYyiZ15eGVgjtCQLWlyu3frWxsumUgv++o0OJlMnrDsWGwzFMRrsXcosd5+752rLOA==", - "license": "BSD-3-Clause", + "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, + "license": "MIT", "dependencies": { - "@digitalcredentials/base58-universal": "^1.0.1", - "@stablelib/ed25519": "^1.0.1", - "base64url-universal": "^1.1.0", - "crypto-ld": "^6.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/@digitalcredentials/ed25519-verification-key-2020/node_modules/base64url-universal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", - "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", - "license": "BSD-3-Clause", + "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, + "license": "MIT", "dependencies": { - "base64url": "^3.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=8.3.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@digitalcredentials/http-client": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz", - "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==", - "license": "BSD-3-Clause", + "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, + "license": "MIT", "dependencies": { - "ky": "^0.25.1", - "ky-universal": "^0.8.2" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" } }, - "node_modules/@digitalcredentials/jsonld": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-6.0.0.tgz", - "integrity": "sha512-5tTakj0/GsqAJi8beQFVMQ97wUJZnuxViW9xRuAATL6eOBIefGBwHkVryAgEq2I4J/xKgb/nEyw1ZXX0G8wQJQ==", - "license": "BSD-3-Clause", + "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, + "license": "MIT", "dependencies": { - "@digitalcredentials/http-client": "^1.0.0", - "@digitalcredentials/rdf-canonize": "^1.0.0", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalcredentials/jsonld-signatures": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.4.0.tgz", - "integrity": "sha512-DnR+HDTm7qpcDd0wcD1w6GdlAwfHjQSgu+ahion8REkCkkMRywF+CLunU7t8AZpFB2Gr/+N8naUtiEBNje1Oew==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/security-context": "^1.0.0", - "@digitalcredentials/jsonld": "^6.0.0", - "fast-text-encoding": "^1.0.3", - "isomorphic-webcrypto": "^2.3.8", - "serialize-error": "^8.0.1" + "node": ">=6" }, - "engines": { - "node": ">=18" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@digitalcredentials/jsonld/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", + "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, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@digitalcredentials/jsonld/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/@digitalcredentials/open-badges-context": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/open-badges-context/-/open-badges-context-2.1.0.tgz", - "integrity": "sha512-VK7X5u6OoBFxkyIFplNqUPVbo+8vFSAEoam8tSozpj05KPfcGw41Tp5p9fqMnY38oPfwtZR2yDNSctj/slrE0A==", - "license": "MIT" - }, - "node_modules/@digitalcredentials/rdf-canonize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz", - "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==", - "license": "BSD-3-Clause", - "dependencies": { - "fast-text-encoding": "^1.0.3", - "isomorphic-webcrypto": "^2.3.8" - }, + "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, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@digitalcredentials/vc": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-6.0.1.tgz", - "integrity": "sha512-TZgLoi00Jc9uv3b6jStH+G8+bCqpHIqFw9DYODz+fVjNh197ksvcYqSndUDHa2oi0HCcK+soI8j4ba3Sa4Pl4w==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/vc-status-list": "^7.0.0", - "@digitalcredentials/ed25519-signature-2020": "^3.0.2", - "@digitalcredentials/jsonld": "^6.0.0", - "@digitalcredentials/jsonld-signatures": "^9.3.2", - "@digitalcredentials/open-badges-context": "^2.1.0", - "@digitalcredentials/vc-status-list": "^5.0.2", - "credentials-context": "^2.0.0", - "fix-esm": "^1.0.1" - }, + "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, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@digitalcredentials/vc-status-list": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/vc-status-list/-/vc-status-list-5.0.2.tgz", - "integrity": "sha512-PI0N7SM0tXpaNLelbCNsMAi34AjOeuhUzMSYTkHdeqRPX7oT2F3ukyOssgr4koEqDxw9shHtxHu3fSJzrzcPMQ==", - "license": "BSD-3-Clause", + "node_modules/@jest/console": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.5.tgz", + "integrity": "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA==", + "dev": true, + "license": "MIT", "dependencies": { - "@digitalbazaar/vc-status-list-context": "^3.0.1", - "@digitalcredentials/bitstring": "^2.0.1", - "@digitalcredentials/vc": "^4.1.1", - "credentials-context": "^2.0.0" + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.0.5", + "jest-util": "30.0.5", + "slash": "^3.0.0" }, "engines": { - "node": ">=14" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/jsonld": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.2.tgz", - "integrity": "sha512-hz7YR3kv6+8UUdgMyTGl1o8NjVKKwnMry/Rh/rWeAvwL+NqgoUHorWzI3rM+PW+MPFyDC0ieXStClt9n9D9SGA==", - "license": "BSD-3-Clause", + "node_modules/@jest/core": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.5.tgz", + "integrity": "sha512-fKD0OulvRsXF1hmaFgHhVJzczWzA1RXMMo9LTPuFXo9q/alDbME3JIyWYqovWsUBWSoBcsHaGPSLF9rz4l9Qeg==", + "dev": true, + "license": "MIT", "dependencies": { - "@digitalcredentials/http-client": "^1.0.0", - "@digitalcredentials/rdf-canonize": "^1.0.0", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0" + "@jest/console": "30.0.5", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.0.5", + "jest-config": "30.0.5", + "jest-haste-map": "30.0.5", + "jest-message-util": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.5", + "jest-resolve-dependencies": "30.0.5", + "jest-runner": "30.0.5", + "jest-runtime": "30.0.5", + "jest-snapshot": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "jest-watcher": "30.0.5", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/vc": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-4.2.0.tgz", - "integrity": "sha512-8Rxpn77JghJN7noBQdcMuzm/tB8vhDwPoFepr3oGd5w+CyJxOk2RnBlgIGlAAGA+mALFWECPv1rANfXno+hdjA==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalcredentials/jsonld": "^5.2.1", - "@digitalcredentials/jsonld-signatures": "^9.3.1", - "credentials-context": "^2.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/@emnapi/core": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", - "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.0.4", - "tslib": "^2.4.0" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@emnapi/runtime": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "node_modules/@jest/environment": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.5.tgz", + "integrity": "sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "tslib": "^2.4.0" + "@jest/fake-timers": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-mock": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", - "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", + "node_modules/@jest/expect": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.5.tgz", + "integrity": "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "tslib": "^2.4.0" + "expect": "30.0.5", + "jest-snapshot": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "node_modules/@jest/expect-utils": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.5.tgz", + "integrity": "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "@jest/get-type": "30.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@eslint-community/eslint-utils/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/@jest/fake-timers": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.5.tgz", + "integrity": "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "node_modules/@jest/get-type": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", + "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", "dev": true, "license": "MIT", "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "node_modules/@jest/globals": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.5.tgz", + "integrity": "sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" + "@jest/environment": "30.0.5", + "@jest/expect": "30.0.5", + "@jest/types": "30.0.5", + "jest-mock": "30.0.5" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "node_modules/@jest/reporters": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.5.tgz", + "integrity": "sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.15" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.0.5", + "jest-util": "30.0.5", + "jest-worker": "30.0.5", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, "license": "MIT", "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" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", + "node_modules/@jest/snapshot-utils": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.5.tgz", + "integrity": "sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" }, - "funding": { - "url": "https://eslint.org/donate" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "node_modules/@jest/test-result": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.5.tgz", + "integrity": "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@jest/console": "30.0.5", + "@jest/types": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "node_modules/@jest/test-sequencer": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.5.tgz", + "integrity": "sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@eslint/core": "^0.15.2", - "levn": "^0.4.1" + "@jest/test-result": "30.0.5", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "slash": "^3.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@expo/cli": { - "version": "0.24.20", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.24.20.tgz", - "integrity": "sha512-uF1pOVcd+xizNtVTuZqNGzy7I6IJon5YMmQidsURds1Ww96AFDxrR/NEACqeATNAmY60m8wy1VZZpSg5zLNkpw==", + "node_modules/@jest/transform": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.5.tgz", + "integrity": "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@0no-co/graphql.web": "^1.0.8", - "@babel/runtime": "^7.20.0", - "@expo/code-signing-certificates": "^0.0.5", - "@expo/config": "~11.0.13", - "@expo/config-plugins": "~10.1.2", - "@expo/devcert": "^1.1.2", - "@expo/env": "~1.0.7", - "@expo/image-utils": "^0.7.6", - "@expo/json-file": "^9.1.5", - "@expo/metro-config": "~0.20.17", - "@expo/osascript": "^2.2.5", - "@expo/package-manager": "^1.8.6", - "@expo/plist": "^0.3.5", - "@expo/prebuild-config": "^9.0.11", - "@expo/spawn-async": "^1.7.2", - "@expo/ws-tunnel": "^1.0.1", - "@expo/xcpretty": "^4.3.0", - "@react-native/dev-middleware": "0.79.5", - "@urql/core": "^5.0.6", - "@urql/exchange-retry": "^1.3.0", - "accepts": "^1.3.8", - "arg": "^5.0.2", - "better-opn": "~3.0.2", - "bplist-creator": "0.1.0", - "bplist-parser": "^0.3.1", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "compression": "^1.7.4", - "connect": "^3.7.0", - "debug": "^4.3.4", - "env-editor": "^0.4.1", - "freeport-async": "^2.0.0", - "getenv": "^2.0.0", - "glob": "^10.4.2", - "lan-network": "^0.1.6", - "minimatch": "^9.0.0", - "node-forge": "^1.3.1", - "npm-package-arg": "^11.0.0", - "ora": "^3.4.0", - "picomatch": "^3.0.1", - "pretty-bytes": "^5.6.0", - "pretty-format": "^29.7.0", - "progress": "^2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "require-from-string": "^2.0.2", - "requireg": "^0.2.2", - "resolve": "^1.22.2", - "resolve-from": "^5.0.0", - "resolve.exports": "^2.0.3", - "semver": "^7.6.0", - "send": "^0.19.0", - "slugify": "^1.3.4", - "source-map-support": "~0.5.21", - "stacktrace-parser": "^0.1.10", - "structured-headers": "^0.4.1", - "tar": "^7.4.3", - "terminal-link": "^2.1.1", - "undici": "^6.18.2", - "wrap-ansi": "^7.0.0", - "ws": "^8.12.1" + "@babel/core": "^7.27.4", + "@jest/types": "30.0.5", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.0", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" }, - "bin": { - "expo-internal": "build/bin/cli" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@expo/cli/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==", + "node_modules/@jest/types": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", + "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@expo/cli/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==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", - "optional": true, - "peer": true + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } }, - "node_modules/@expo/cli/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "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==", "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=6" + "node": ">=6.0.0" } }, - "node_modules/@expo/cli/node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT", - "optional": true, - "peer": true + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" }, - "node_modules/@expo/cli/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "balanced-match": "^1.0.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@expo/cli/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } + "node_modules/@js-joda/core": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.3.tgz", + "integrity": "sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==", + "license": "BSD-3-Clause" }, - "node_modules/@expo/cli/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "node_modules/@js-joda/timezone": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@js-joda/timezone/-/timezone-2.3.0.tgz", + "integrity": "sha512-DHXdNs0SydSqC5f0oRJPpTcNfnpRojgBqMCFupQFv6WgeZAjU3DBx+A7JtaGPP3dHrP2Odi2N8Vf+uAm/8ynCQ==", + "license": "BSD-3-Clause", + "peerDependencies": { + "@js-joda/core": ">=1.11.0" } }, - "node_modules/@expo/cli/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/@expo/cli/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==", + "node_modules/@js-soft/docdb-access-abstractions": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.2.0.tgz", + "integrity": "sha512-DlDCNWHBLmiNEa7I8LqlKVK/xY6QTit3K20/2SkIRIWMqkUCObkVfi113zfiRg4wt+XeBjtLiNHwWxHoGSrLoA==", + "license": "MIT" + }, + "node_modules/@js-soft/docdb-access-loki": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-loki/-/docdb-access-loki-1.3.0.tgz", + "integrity": "sha512-uJ7T4T28K0FoZNMVO/6n4gI+WLnHkEJGHkMTWND2Sm88czXFjY4Pa55zHo/QWqZYZbj2Fdk7DAnI4ABsUSfFJg==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-name": "1.1.3" + "@js-soft/docdb-access-abstractions": "1.1.0", + "@types/lokijs": "1.5.14", + "lokijs": "1.5.12" } }, - "node_modules/@expo/cli/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==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/cli/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==", - "license": "MIT", - "optional": true, - "peer": true + "node_modules/@js-soft/docdb-access-loki/node_modules/@js-soft/docdb-access-abstractions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.1.0.tgz", + "integrity": "sha512-AkN2D4nRDF/35znXs5xfBRIGCngPIev9h6EGm7AdBAYlfiXg4k1uh4+BcdLroiD8nlaCQMmLSNCmUGFjSINuuQ==", + "license": "MIT" }, - "node_modules/@expo/cli/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==", + "node_modules/@js-soft/docdb-access-mongo": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-mongo/-/docdb-access-mongo-1.3.0.tgz", + "integrity": "sha512-ydvk8v+hLCmZ7Y0IunQxGjFbLCfD3PisWqg2R61XVgkYg6V2H/jnqgCK6WyAXllNq89h4rHUNCOAX3w0VCszFA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.8.0" + "dependencies": { + "@js-soft/docdb-access-abstractions": "1.1.0", + "mongodb": "6.17.0" } }, - "node_modules/@expo/cli/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==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } + "node_modules/@js-soft/docdb-access-mongo/node_modules/@js-soft/docdb-access-abstractions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.1.0.tgz", + "integrity": "sha512-AkN2D4nRDF/35znXs5xfBRIGCngPIev9h6EGm7AdBAYlfiXg4k1uh4+BcdLroiD8nlaCQMmLSNCmUGFjSINuuQ==", + "dev": true, + "license": "MIT" }, - "node_modules/@expo/cli/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "license": "ISC", - "optional": true, - "peer": true, + "node_modules/@js-soft/docdb-querytranslator": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@js-soft/docdb-querytranslator/-/docdb-querytranslator-1.1.5.tgz", + "integrity": "sha512-VfuAWmGF3fJ/hrbvk+2CYh3p6kdqlcdUtHrOM6LK9q7lnZrVHmlnaE242fhGoUiAiKF0w5PWhUtd5/lggEb0EA==", + "license": "MIT" + }, + "node_modules/@js-soft/eslint-config-ts": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@js-soft/eslint-config-ts/-/eslint-config-ts-2.0.3.tgz", + "integrity": "sha512-bv3MhZhPJKknky8lSySCoyRpMldSaztEPaDmqcD/FTjkwKGzyktWSqzmmbkoHkg9ed6sBz8aMOET6zsLEP5a8g==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^10.0.1" + "@eslint/js": "^9.32.0", + "eslint-plugin-chai-expect": "^3.1.0", + "eslint-plugin-chai-friendly": "^1.1.0", + "eslint-plugin-jest": "^29.0.1", + "eslint-plugin-mocha": "^11.1.0", + "typescript-eslint": "^8.39.0" }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "peerDependencies": { + "eslint": ">=9" } }, - "node_modules/@expo/cli/node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "node_modules/@js-soft/license-check": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@js-soft/license-check/-/license-check-1.0.9.tgz", + "integrity": "sha512-cupYi2KYDnwjPn77hoHpRgbGh8PKESYSFudFqgzzwA/4LqFCV1N2nLV5UHxhmtr3j7S6AmFeOAo19s1TsQUf3w==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "chalk": "^2.0.1" + "license-checker": "^25.0.1", + "yargs": "^17.7.2" }, - "engines": { - "node": ">=4" + "bin": { + "license-check": "bin/licenseCheck.js" } }, - "node_modules/@expo/cli/node_modules/log-symbols/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==", + "node_modules/@js-soft/logging-abstractions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@js-soft/logging-abstractions/-/logging-abstractions-1.0.1.tgz", + "integrity": "sha512-giFnUcpfq07vNmMFetvI1bfKo8g5slIiQbSnwLF1dHU8gLE/hJmL3jTnchXFRTwSeMhTFCNg0GudsNMw1esMVQ==", + "license": "MIT" + }, + "node_modules/@js-soft/node-logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@js-soft/node-logger/-/node-logger-1.2.0.tgz", + "integrity": "sha512-jEvBpqvhds+ReW46981UHtqaQVc2T1DpPmzo7SsaYMywIrV8O4c0gmZSOtZ3M4pTXysoSf121jTxxVMCXdQWFw==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@js-soft/logging-abstractions": "1.0.1", + "correlation-id": "^5.2.0", + "json-stringify-safe": "^5.0.1", + "log4js": "^6.9.1" } }, - "node_modules/@expo/cli/node_modules/log-symbols/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==", + "node_modules/@js-soft/simple-logger": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@js-soft/simple-logger/-/simple-logger-1.0.5.tgz", + "integrity": "sha512-ISrOACkOKJrlxsRazXHzXC1NeVxJEqUnorwPbb74wLPUkS09IY+8QE17QUkoLhv3R7eMJrhlaUMW/ZLyCn+kWQ==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "@js-soft/logging-abstractions": "1.0.1", + "json-stringify-safe": "^5.0.1", + "typescript-logging": "^2.2.0", + "typescript-logging-log4ts-style": "^2.2.0" } }, - "node_modules/@expo/cli/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/@expo/cli/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "node_modules/@js-soft/ts-serval": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@js-soft/ts-serval/-/ts-serval-2.0.13.tgz", + "integrity": "sha512-x/ljrxIbT+VCQIHTM1a3/6ZQwC17+XPfIm76q0CswbsE14VcREa5EVVRimh+A2zyEIb36IsnNYPDAX4iReWlhg==", "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" + "dependencies": { + "lodash": "^4.17.21", + "reflect-metadata": "^0.2.2" } }, - "node_modules/@expo/cli/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "optional": true, - "peer": true, + "node_modules/@js-soft/ts-utils": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@js-soft/ts-utils/-/ts-utils-2.3.4.tgz", + "integrity": "sha512-N4Ru0jo3CgywbJRxg7mP9rglfgx3u0e00M71JjXUI3/16Z9cx31GXlydY6Hp18w3yQGT0kl2e2kAiGU3hU7c1Q==", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "eventemitter2": "^6.4.9", + "json-stringify-safe": "^5.0.1", + "reflect-metadata": "^0.2.2" } }, - "node_modules/@expo/cli/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "node_modules/@mongodb-js/saslprep": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.0.tgz", + "integrity": "sha512-zlayKCsIjYb7/IdfqxorK5+xUMyi4vOKcFy10wKJYc63NSdKI8mNME+uJqfatkPmOSMMUiojrL58IePKBm3gvQ==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "dependencies": { + "sparse-bitfield": "^3.0.3" } }, - "node_modules/@expo/cli/node_modules/npm-package-arg": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", - "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", - "license": "ISC", + "node_modules/@multiformats/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", "optional": true, - "peer": true, "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" } }, - "node_modules/@expo/cli/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "node_modules/@nmshd/app-runtime": { + "resolved": "packages/app-runtime", + "link": true + }, + "node_modules/@nmshd/consumption": { + "resolved": "packages/consumption", + "link": true + }, + "node_modules/@nmshd/content": { + "resolved": "packages/content", + "link": true + }, + "node_modules/@nmshd/core-types": { + "resolved": "packages/core-types", + "link": true + }, + "node_modules/@nmshd/crypto": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nmshd/crypto/-/crypto-2.1.2.tgz", + "integrity": "sha512-DbcBnqPAeviaMiIG7G1QaICvoAS3xNMdW/CWoig1XJAbRcpeVRQ3LpKZSgt5XwDc8xl+0j3Ork/HDWijk3rlNw==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" + "libsodium-wrappers-sumo": "0.7.15", + "uuid": "^11.1.0" } }, - "node_modules/@expo/cli/node_modules/ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "node_modules/@nmshd/iql": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@nmshd/iql/-/iql-1.0.3.tgz", + "integrity": "sha512-gTc69pUQrxjN8kajwfcg9+6/HCRrEcIURKkGtCc/5CqYf6Owq3F1AwPX31BPAopnB/ElvkNpzM1MntohXUe2vA==", + "license": "MIT" + }, + "node_modules/@nmshd/runtime": { + "resolved": "packages/runtime", + "link": true + }, + "node_modules/@nmshd/runtime-types": { + "resolved": "packages/runtime-types", + "link": true + }, + "node_modules/@nmshd/transport": { + "resolved": "packages/transport", + "link": true + }, + "node_modules/@nmshd/typescript-ioc": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@nmshd/typescript-ioc/-/typescript-ioc-3.2.4.tgz", + "integrity": "sha512-CNJbsdqcI+vB9eRACB0AI1s0IL3qXfuINKwoKVP/1DhuL+leZUXAV9GcuJ68Fr3scCz/fhzQK9bWLJus66V6HQ==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=6" + "lodash": "^4.17.21", + "reflect-metadata": "^0.2.2" } }, - "node_modules/@expo/cli/node_modules/ora/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==", + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^1.9.0" + "@noble/hashes": "1.8.0" }, "engines": { - "node": ">=4" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@expo/cli/node_modules/ora/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==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@expo/cli/node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=10" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@expo/cli/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==", + "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==", + "devOptional": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@expo/cli/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==", + "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==", + "devOptional": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/cli/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "license": "ISC", - "optional": true, - "peer": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@expo/cli/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==", + "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==", + "devOptional": true, "license": "MIT", - "optional": true, - "peer": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@expo/cli/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "dev": true, + "license": "ISC", "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/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==", - "license": "ISC", - "optional": true, - "peer": true + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" }, - "node_modules/@expo/cli/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "dev": true, + "license": "ISC", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/git": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "dev": true, + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/node_modules/string-width/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16" } }, - "node_modules/@expo/cli/node_modules/string-width/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "dev": true, + "license": "ISC", "dependencies": { - "ansi-regex": "^4.1.0" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" }, "engines": { - "node": ">=6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/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==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, + "node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "node_modules/@npmcli/package-json": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", + "dev": true, "license": "ISC", - "optional": true, - "peer": true, "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", + "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==", + "dev": true, "license": "ISC", - "optional": true, - "peer": true, + "dependencies": { + "which": "^5.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "isexe": "^3.1.1" }, - "engines": { - "node": ">=10" + "bin": { + "node-which": "bin/which.js" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/node_modules/wrap-ansi/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/node_modules/wrap-ansi/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/run-script": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "dev": true, + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/cli/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "optional": true, - "peer": true, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=18" + "node": ">=16" } }, - "node_modules/@expo/code-signing-certificates": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", - "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", "dependencies": { - "node-forge": "^1.2.1", - "nullthrows": "^1.1.1" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/config": { - "version": "11.0.13", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-11.0.13.tgz", - "integrity": "sha512-TnGb4u/zUZetpav9sx/3fWK71oCPaOjZHoVED9NaEncktAd0Eonhq5NUghiJmkUGt3gGSjRAEBXiBbbY9/B1LA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@openid4vc/oauth2": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-BRY43zVD8fNEfQlOzYdaGxIUM9GcBubiJcqXpDCzGB+hc7g8LToAuNaAeNe0ZJmeN5Fn+iaL9tnmlz6Lq6A+Dw==", + "license": "Apache-2.0", "dependencies": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~10.1.2", - "@expo/config-types": "^53.0.5", - "@expo/json-file": "^9.1.5", - "deepmerge": "^4.3.1", - "getenv": "^2.0.0", - "glob": "^10.4.2", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "resolve-workspace-root": "^2.0.0", - "semver": "^7.6.0", - "slugify": "^1.3.4", - "sucrase": "3.35.0" + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "zod": "^3.24.2" } }, - "node_modules/@expo/config-plugins": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-10.1.2.tgz", - "integrity": "sha512-IMYCxBOcnuFStuK0Ay+FzEIBKrwW8OVUMc65+v0+i7YFIIe8aL342l7T4F8lR4oCfhXn7d6M5QPgXvjtc/gAcw==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@openid4vc/openid4vci": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-7F4E6qigwhqHXIg5pRPQ8O79mVzIsHA+M5UzUwy86btLQIalJOBJK9Td6BX4H9TROeXWoPM/cWsw1s0WZsrIeA==", + "license": "Apache-2.0", "dependencies": { - "@expo/config-types": "^53.0.5", - "@expo/json-file": "~9.1.5", - "@expo/plist": "^0.3.5", - "@expo/sdk-runtime-versions": "^1.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.5", - "getenv": "^2.0.0", - "glob": "^10.4.2", - "resolve-from": "^5.0.0", - "semver": "^7.5.4", - "slash": "^3.0.0", - "slugify": "^1.6.6", - "xcode": "^3.0.1", - "xml2js": "0.6.0" + "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "zod": "^3.24.2" } }, - "node_modules/@expo/config-plugins/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==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "node_modules/@openid4vc/openid4vp": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-n45JxZFTJyOlJFjW/y4bXxDYwDfm4F61RCt+qy8lDPp+DtCnw9pFGHndk6IZtP4t33/e88ntKvV2lUgIrJLLpw==", + "license": "Apache-2.0", + "dependencies": { + "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "zod": "^3.24.2" } }, - "node_modules/@expo/config-types": { - "version": "53.0.5", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-53.0.5.tgz", - "integrity": "sha512-kqZ0w44E+HEGBjy+Lpyn0BVL5UANg/tmNixxaRMLS6nf37YsDrLk2VMAmeKMMk5CKG0NmOdVv3ngeUjRQMsy9g==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/config/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@openid4vc/utils": { + "version": "0.3.0-alpha-20250602121005", + "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20250602121005.tgz", + "integrity": "sha512-68lU8pqqGrqIjhb+/y+UjYFgbzluljIhTAEan5LyW0IKOMO0slFHfEzjn85Cv8bN1En/SuNT+U/McX/krlSSwg==", + "license": "Apache-2.0", "dependencies": { - "@babel/highlight": "^7.10.4" + "buffer": "^6.0.3", + "zod": "^3.24.2" } }, - "node_modules/@expo/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==", + "node_modules/@openid4vc/utils/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@expo/devcert": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.0.tgz", - "integrity": "sha512-Uilcv3xGELD5t/b0eM4cxBFEKQRIivB3v7i+VhWLV/gL98aw810unLKKJbGAxAIhY6Ipyz8ChWibFsKFXYwstA==", - "license": "MIT", - "optional": true, + "node_modules/@openwallet-foundation/askar-shared": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-shared/-/askar-shared-0.3.2.tgz", + "integrity": "sha512-WQSHM5+5Vy1QMUpUTj0DpwFKYdciNcksWsft/iD6Ff+AdDERKo5Mjv/4JSIZIzXUEyq7kqqNbejl4a3TDGeU3A==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@expo/sudo-prompt": "^9.3.1", - "debug": "^3.1.0", - "glob": "^10.4.2" + "buffer": "^6.0.3", + "tar": "^7.4.3" } }, - "node_modules/@expo/devcert/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/@openwallet-foundation/askar-shared/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "optional": true, "peer": true, "dependencies": { - "ms": "^2.1.1" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@expo/env": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-1.0.7.tgz", - "integrity": "sha512-qSTEnwvuYJ3umapO9XJtrb1fAqiPlmUUg78N0IZXXGwQRt+bkp0OBls+Y5Mxw/Owj8waAM0Z3huKKskRADR5ow==", - "license": "MIT", - "optional": true, + "node_modules/@openwallet-foundation/askar-shared/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "debug": "^4.3.4", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "getenv": "^2.0.0" + "engines": { + "node": ">=18" } }, - "node_modules/@expo/fingerprint": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.13.4.tgz", - "integrity": "sha512-MYfPYBTMfrrNr07DALuLhG6EaLVNVrY/PXjEzsjWdWE4ZFn0yqI0IdHNkJG7t1gePT8iztHc7qnsx+oo/rDo6w==", + "node_modules/@openwallet-foundation/askar-shared/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "license": "MIT", - "optional": true, "peer": true, - "dependencies": { - "@expo/spawn-async": "^1.7.2", - "arg": "^5.0.2", - "chalk": "^4.1.2", - "debug": "^4.3.4", - "find-up": "^5.0.0", - "getenv": "^2.0.0", - "glob": "^10.4.2", - "ignore": "^5.3.1", - "minimatch": "^9.0.0", - "p-limit": "^3.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.6.0" - }, "bin": { - "fingerprint": "bin/cli.js" + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@expo/fingerprint/node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/fingerprint/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@expo/fingerprint/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/@openwallet-foundation/askar-shared/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "license": "ISC", - "optional": true, "peer": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/@expo/fingerprint/node_modules/resolve-from": { + "node_modules/@openwallet-foundation/askar-shared/node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "optional": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", "peer": true, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@expo/image-utils": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.7.6.tgz", - "integrity": "sha512-GKnMqC79+mo/1AFrmAcUcGfbsXXTRqOMNS1umebuevl3aaw+ztsYEFEiuNhHZW7PQ3Xs3URNT513ZxKhznDscw==", + "node_modules/@peculiar/asn1-cms": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.4.0.tgz", + "integrity": "sha512-TJvw5Tna/txvzzwnKUlCFd6zIz4R7qysHCaU6M2oe/MUT6EkvJDOzGGNY0hdjJYpuuHoqanQbIqEBhSLSWe1Tg==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@expo/spawn-async": "^1.7.2", - "chalk": "^4.0.0", - "getenv": "^2.0.0", - "jimp-compact": "0.16.1", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.6.0", - "temp-dir": "~2.0.0", - "unique-string": "~2.0.0" - } - }, - "node_modules/@expo/image-utils/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==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-x509-attr": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/json-file": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.1.5.tgz", - "integrity": "sha512-prWBhLUlmcQtvN6Y7BpW2k9zXGd3ySa3R6rAguMJkp1z22nunLN64KYTUWfijFlprFoxm9r2VNnGkcbndAlgKA==", + "node_modules/@peculiar/asn1-csr": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.4.0.tgz", + "integrity": "sha512-9yQz0hQ9ynGr/I1X1v64QQGfRMbviHXyqY07cy69UzXa8s4ayCKx/TncU6lDWcTKs7P/X/AEcuJcG7Xbw0cl1A==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.3" + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/json-file/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "node_modules/@peculiar/asn1-ecc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.4.0.tgz", + "integrity": "sha512-fJiYUBCJBDkjh347zZe5H81BdJ0+OGIg0X9z06v8xXUoql3MFeENUX0JsjCaVaU9A0L85PefLPGYkIoGpTnXLQ==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/highlight": "^7.10.4" + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/metro-config": { - "version": "0.20.17", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.20.17.tgz", - "integrity": "sha512-lpntF2UZn5bTwrPK6guUv00Xv3X9mkN3YYla+IhEHiYXWyG7WKOtDU0U4KR8h3ubkZ6SPH3snDyRyAzMsWtZFA==", + "node_modules/@peculiar/asn1-pfx": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.4.0.tgz", + "integrity": "sha512-fhpeoJ6T4nCLWT5tt3Un+BbyM1lLFnGXcRC2Ioe5ra2I0yptdjw05j20rV8BlUVzPIvUYpatq6joMQKe3ibh0w==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.5", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "@expo/config": "~11.0.12", - "@expo/env": "~1.0.7", - "@expo/json-file": "~9.1.5", - "@expo/spawn-async": "^1.7.2", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "getenv": "^2.0.0", - "glob": "^10.4.2", - "jsc-safe-url": "^0.2.4", - "lightningcss": "~1.27.0", - "minimatch": "^9.0.0", - "postcss": "~8.4.32", - "resolve-from": "^5.0.0" + "@peculiar/asn1-cms": "^2.4.0", + "@peculiar/asn1-pkcs8": "^2.4.0", + "@peculiar/asn1-rsa": "^2.4.0", + "@peculiar/asn1-schema": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/metro-config/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.4.0.tgz", + "integrity": "sha512-4r2LtsAM0HWXLxetGTYKyBumky7W6C1EuiOctqhl7zFK5MHjiZ+9WOeaoeTPR1g3OEoeG7KEWIkaUOyRH4ojTw==", "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@expo/metro-config/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "optional": true, - "peer": true, "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/metro-config/node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.4.0.tgz", + "integrity": "sha512-D7paqEVpu9wuWuClMN+vR5cqJWJITNPaMoa9R+FmkJ8ywF9UaS2JFI0RYclKILNoLdLg1N4eUCoJvM+ubsIIZQ==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" + "@peculiar/asn1-cms": "^2.4.0", + "@peculiar/asn1-pfx": "^2.4.0", + "@peculiar/asn1-pkcs8": "^2.4.0", + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-x509-attr": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/metro-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==", + "node_modules/@peculiar/asn1-rsa": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.4.0.tgz", + "integrity": "sha512-6PP75voaEnOSlWR9sD25iCQyLgFZHXbmxvUfnnDcfL6Zh5h2iHW38+bve4LfH7a60x7fkhZZNmiYqAlAff9Img==", "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/osascript": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.2.5.tgz", - "integrity": "sha512-Bpp/n5rZ0UmpBOnl7Li3LtM7la0AR3H9NNesqL+ytW5UiqV/TbonYW3rDZY38u4u/lG7TnYflVIVQPD+iqZJ5w==", + "node_modules/@peculiar/asn1-schema": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.4.0.tgz", + "integrity": "sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@expo/spawn-async": "^1.7.2", - "exec-async": "^2.2.0" - }, - "engines": { - "node": ">=12" + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/package-manager": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.8.6.tgz", - "integrity": "sha512-gcdICLuL+nHKZagPIDC5tX8UoDDB8vNA5/+SaQEqz8D+T2C4KrEJc2Vi1gPAlDnKif834QS6YluHWyxjk0yZlQ==", + "node_modules/@peculiar/asn1-x509": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.4.0.tgz", + "integrity": "sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@expo/json-file": "^9.1.5", - "@expo/spawn-async": "^1.7.2", - "chalk": "^4.0.0", - "npm-package-arg": "^11.0.0", - "ora": "^3.4.0", - "resolve-workspace-root": "^2.0.0" + "@peculiar/asn1-schema": "^2.4.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/package-manager/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.4.0.tgz", + "integrity": "sha512-Tr5Zi+wcE2sfR0gKRvsPwXoA1U8CuDnwiFbxCS+5Z1Nck9zlHj86+4/EZhwucjKXwPEHk1ekhqb3iwISY/+E/w==", "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" + "dependencies": { + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@expo/package-manager/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==", + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^1.9.0" + "tslib": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/@expo/package-manager/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "node_modules/@peculiar/webcrypto": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", + "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "restore-cursor": "^2.0.0" + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" }, "engines": { - "node": ">=4" + "node": ">=10.12.0" } }, - "node_modules/@expo/package-manager/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==", + "node_modules/@peculiar/x509": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.13.0.tgz", + "integrity": "sha512-r9BOb1GZ3gx58Pog7u9x70spnHlCQPFm7u/ZNlFv+uBsU7kTDY9QkUD+l+X0awopDuCK1fkH3nEIZeMDSG/jlw==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@expo/package-manager/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==", - "license": "MIT", - "optional": true, - "peer": true + "@peculiar/asn1-cms": "^2.3.15", + "@peculiar/asn1-csr": "^2.3.15", + "@peculiar/asn1-ecc": "^2.3.15", + "@peculiar/asn1-pkcs9": "^2.3.15", + "@peculiar/asn1-rsa": "^2.3.15", + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + } }, - "node_modules/@expo/package-manager/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==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { - "node": ">=0.8.0" + "node": ">=14" } }, - "node_modules/@expo/package-manager/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==", + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" } }, - "node_modules/@expo/package-manager/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "license": "ISC", - "optional": true, - "peer": true, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@expo/package-manager/node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sd-jwt/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/core/-/core-0.10.0.tgz", + "integrity": "sha512-EuFsIHP76fwNi97dGcz2jdEenHL/AkDGcqrEA00k82Uw0HP/hvbAfB+yyPxYrd3dVaxe5PWSKvDkgDK6kKk+6Q==", + "license": "Apache-2.0", "dependencies": { - "chalk": "^2.0.1" + "@sd-jwt/decode": "0.10.0", + "@sd-jwt/present": "0.10.0", + "@sd-jwt/types": "0.10.0", + "@sd-jwt/utils": "0.10.0" }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/@expo/package-manager/node_modules/log-symbols/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sd-jwt/decode": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.10.0.tgz", + "integrity": "sha512-djNWMWpF1kUVh1fM/lRrmoQtTaJy8J0mS0bu96XPL5Jea5ov4klxOtSvuYmPFFcqLpxyrLOIwcbqmVQ20Mdzpg==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@sd-jwt/types": "0.10.0", + "@sd-jwt/utils": "0.10.0" }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/@expo/package-manager/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/@expo/package-manager/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sd-jwt/jwt-status-list": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/jwt-status-list/-/jwt-status-list-0.10.0.tgz", + "integrity": "sha512-TVLLQ7qjZKKEXODXUAxoWvJmnH3bSNXsttp0hxVP/qv42Rk7OFKIjepkzy6lh+RQRWw3NK/rHiz95/Fz1m4xBQ==", + "license": "Apache-2.0", + "dependencies": { + "@sd-jwt/types": "0.10.0", + "base64url": "^3.0.1", + "pako": "^2.1.0" + }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/@expo/package-manager/node_modules/npm-package-arg": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", - "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", - "license": "ISC", - "optional": true, - "peer": true, + "node_modules/@sd-jwt/present": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.10.0.tgz", + "integrity": "sha512-ITkyXAfdPOnfWlPgGkHpN1JxaOCC/A8Oid0CUY25AsGuwkSCw9rd+B0nwG5KBwmf1RaOG75FkvwmSCHXBlHgUg==", + "license": "Apache-2.0", "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "@sd-jwt/decode": "0.10.0", + "@sd-jwt/types": "0.10.0", + "@sd-jwt/utils": "0.10.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/@expo/package-manager/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sd-jwt/sd-jwt-vc": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.10.0.tgz", + "integrity": "sha512-418TX436dBK7FnwsLJXUXnTQByZQOonCuJ4vKyrOJ27mZXxkiFiLSaUojqoFerSw5u29nwrcRRJzd1NLdLWqkQ==", + "license": "Apache-2.0", "dependencies": { - "mimic-fn": "^1.0.0" + "@sd-jwt/core": "0.10.0", + "@sd-jwt/jwt-status-list": "0.10.0", + "@sd-jwt/utils": "0.10.0", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1" }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/@expo/package-manager/node_modules/ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "node_modules/@sd-jwt/sd-jwt-vc/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@sd-jwt/sd-jwt-vc/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@sd-jwt/types": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.10.0.tgz", + "integrity": "sha512-/UOSel/n16qi5xt/hiX3ob4y/ke+yLn+iuVZDfYUvxKTOs/g0VXRo2/RQ5Fp5Coa8SxSms0uW9kb5pv2YdY8yw==", + "license": "Apache-2.0", "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@expo/package-manager/node_modules/ora/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sd-jwt/utils": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.10.0.tgz", + "integrity": "sha512-4ozPvrer45NCuMtVDnsDtQMxp9cI6AgaFKE/B11TBmpxER8eXjGD2xTfSpRtJokUTIQmY267jQJNVwNnC/8DOw==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@sd-jwt/types": "0.10.0", + "js-base64": "^3.7.6" }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/@expo/package-manager/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "license": "ISC", - "optional": true, - "peer": true, + "node_modules/@sigstore/bundle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", + "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/package-manager/node_modules/restore-cursor": { + "node_modules/@sigstore/core": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", + "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/package-manager/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==", - "license": "ISC", - "optional": true, - "peer": true + "node_modules/@sigstore/protobuf-specs": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", + "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/@expo/package-manager/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sigstore/sign": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", + "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "ansi-regex": "^4.1.0" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" }, "engines": { - "node": ">=6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/package-manager/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sigstore/tuf": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", + "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "has-flag": "^3.0.0" + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/package-manager/node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "license": "ISC", - "optional": true, - "peer": true, + "node_modules/@sigstore/verify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", + "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@expo/plist": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.3.5.tgz", - "integrity": "sha512-9RYVU1iGyCJ7vWfg3e7c/NVyMFs8wbl+dMWZphtFtsqyN9zppGREU3ctlD3i8KUE0sCUTVnLjCWr+VeUIDep2g==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sinclair/typebox": { + "version": "0.34.40", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.40.tgz", + "integrity": "sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "BSD-3-Clause", "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.2.3", - "xmlbuilder": "^15.1.1" + "type-detect": "4.0.8" } }, - "node_modules/@expo/prebuild-config": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-9.0.11.tgz", - "integrity": "sha512-0DsxhhixRbCCvmYskBTq8czsU0YOBsntYURhWPNpkl0IPVpeP9haE5W4OwtHGzXEbmHdzaoDwNmVcWjS/mqbDw==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@expo/config": "~11.0.13", - "@expo/config-plugins": "~10.1.2", - "@expo/config-types": "^53.0.5", - "@expo/image-utils": "^0.7.6", - "@expo/json-file": "^9.1.5", - "@react-native/normalize-colors": "0.79.5", - "debug": "^4.3.1", - "resolve-from": "^5.0.0", - "semver": "^7.6.0", - "xml2js": "0.6.0" + "@sinonjs/commons": "^3.0.1" } }, - "node_modules/@expo/prebuild-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==", + "node_modules/@sovpro/delimited-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz", + "integrity": "sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==", "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/spawn-async": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", - "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sphereon/kmp-mdoc-core": { + "version": "0.2.0-SNAPSHOT.26", + "resolved": "https://registry.npmjs.org/@sphereon/kmp-mdoc-core/-/kmp-mdoc-core-0.2.0-SNAPSHOT.26.tgz", + "integrity": "sha512-QXJ6R8ENiZV2rPMbn06cw5JKwqUYN1kzVRbYfONqE1PEXx1noQ4md7uxr2zSczi0ubKkNcbyYDNtIMTZIhGzmQ==", "dependencies": { - "cross-spawn": "^7.0.3" - }, - "engines": { - "node": ">=12" + "@js-joda/core": "5.6.3", + "@js-joda/timezone": "2.3.0", + "format-util": "^1.0.5" } }, - "node_modules/@expo/sudo-prompt": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz", - "integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==", - "license": "MIT", - "optional": true, - "peer": true + "node_modules/@sphereon/pex-models": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.3.2.tgz", + "integrity": "sha512-foFxfLkRwcn/MOp/eht46Q7wsvpQGlO7aowowIIb5Tz9u97kYZ2kz6K2h2ODxWuv5CRA7Q0MY8XUBGE2lfOhOQ==", + "license": "Apache-2.0" }, - "node_modules/@expo/vector-icons": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.1.0.tgz", - "integrity": "sha512-7T09UE9h8QDTsUeMGymB4i+iqvtEeaO5VvUjryFB4tugDTG/bkzViWA74hm5pfjjDEhYMXWaX112mcvhccmIwQ==", - "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "expo-font": "*", - "react": "*", - "react-native": "*" + "node_modules/@sphereon/ssi-types": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.33.0.tgz", + "integrity": "sha512-OQnWLKZQU6lHlMw3JS5308q5Kctv1eT/NNQthGNXETarsgJFiD711pWMOJvi0p5kLpU8N1e7/okaH3mXsVAW0A==", + "license": "Apache-2.0", + "dependencies": { + "@noble/hashes": "1.6.1", + "@sd-jwt/decode": "^0.9.2", + "@sphereon/kmp-mdoc-core": "0.2.0-SNAPSHOT.26", + "debug": "^4.3.5", + "events": "^3.3.0", + "jwt-decode": "^4.0.0", + "uint8arrays": "3.1.1" } }, - "node_modules/@expo/ws-tunnel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz", - "integrity": "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==", + "node_modules/@sphereon/ssi-types/node_modules/@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@expo/xcpretty": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.2.tgz", - "integrity": "sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "7.10.4", - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "js-yaml": "^4.1.0" + "engines": { + "node": "^14.21.3 || >=16" }, - "bin": { - "excpretty": "build/cli.js" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/decode": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.9.2.tgz", + "integrity": "sha512-jHY7hqk7EMkp6E2cB13QmXvRZN7njvAveVh+zKKy0kxpAM7DmcR4TqcDA4mc5y4lP8zWFUgbk7oGLCx2wiBq+w==", + "license": "Apache-2.0", "dependencies": { - "@babel/highlight": "^7.10.4" + "@sd-jwt/types": "0.9.2", + "@sd-jwt/utils": "0.9.2" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "license": "MIT", + "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/types": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.9.2.tgz", + "integrity": "sha512-eV/MY80ekeTrqaohzPpkrgwPki6Igx69D6RniduV1Ehv6o/zaJQ2F0hY/RqBAkJhQtBQoOzouwKYHme40k1Dlw==", + "license": "Apache-2.0", "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/@grpc/grpc-js": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", - "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", - "dev": true, + "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/utils": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.9.2.tgz", + "integrity": "sha512-GpTD0isav2f+JyMyzeyf6wV3nYcD5e3oL+sVVr/61Y3oaIBGMWLtGGGhBRMCimSnd8kbb0P9jLxvp7ioASk6vw==", "license": "Apache-2.0", "dependencies": { - "@grpc/proto-loader": "^0.7.13", - "@js-sdsl/ordered-map": "^4.4.2" + "@sd-jwt/types": "0.9.2", + "js-base64": "^3.7.6" }, "engines": { - "node": ">=12.10.0" + "node": ">=18" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", - "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, + "node_modules/@sphereon/ssi-types/node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "license": "MIT", + "dependencies": { + "@stablelib/int": "^1.0.1" } }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@stablelib/ed25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", + "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "license": "MIT", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node_modules/@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==", + "license": "MIT" + }, + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==", + "license": "MIT" + }, + "node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" } }, - "node_modules/@humanwhocodes/module-importer": { + "node_modules/@stablelib/sha512": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==", + "license": "MIT" + }, + "node_modules/@ts-graphviz/adapter": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@ts-graphviz/adapter/-/adapter-2.0.6.tgz", + "integrity": "sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ts-graphviz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ts-graphviz" + } + ], + "license": "MIT", + "dependencies": { + "@ts-graphviz/common": "^2.1.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">=18" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "node_modules/@ts-graphviz/ast": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@ts-graphviz/ast/-/ast-2.0.7.tgz", + "integrity": "sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ts-graphviz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ts-graphviz" + } + ], + "license": "MIT", + "dependencies": { + "@ts-graphviz/common": "^2.1.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">=18" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "node_modules/@ts-graphviz/common": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@ts-graphviz/common/-/common-2.1.5.tgz", + "integrity": "sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ts-graphviz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ts-graphviz" + } + ], "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=18" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "node_modules/@ts-graphviz/core": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@ts-graphviz/core/-/core-2.0.7.tgz", + "integrity": "sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ts-graphviz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ts-graphviz" + } + ], "license": "MIT", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "@ts-graphviz/ast": "^2.0.7", + "@ts-graphviz/common": "^2.1.5" }, "engines": { - "node": "20 || >=22" + "node": ">=18" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "license": "ISC", + "node_modules/@tufjs/models": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^7.0.4" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@isaacs/ttlcache": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", - "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", - "license": "ISC", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" + "node": "^18.17.0 || >=20.5.0" } }, - "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==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "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" - } - }, - "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==", - "devOptional": true, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "balanced-match": "^1.0.0" } }, - "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==", - "devOptional": true, - "license": "MIT", + "node_modules/@tufjs/models/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, + "license": "ISC", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "node": ">=16 || 14 >=14.17" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", - "devOptional": true, + "node_modules/@tybys/wasm-util": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", + "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "tslib": "^2.4.0" } }, - "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==", - "devOptional": true, + "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, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "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==", - "devOptional": true, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "@babel/types": "^7.0.0" } }, - "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==", - "devOptional": true, + "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, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "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==", - "devOptional": true, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@babel/types": "^7.28.2" } }, - "node_modules/@jest/console": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.5.tgz", - "integrity": "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA==", + "node_modules/@types/docker-modem": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", + "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.0.5", - "jest-util": "30.0.5", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@types/ssh2": "*" } }, - "node_modules/@jest/core": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.5.tgz", - "integrity": "sha512-fKD0OulvRsXF1hmaFgHhVJzczWzA1RXMMo9LTPuFXo9q/alDbME3JIyWYqovWsUBWSoBcsHaGPSLF9rz4l9Qeg==", + "node_modules/@types/dockerode": { + "version": "3.3.43", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.43.tgz", + "integrity": "sha512-YCi0aKKpKeC9dhKTbuglvsWDnAyuIITd6CCJSTKiAdbDzPH4RWu0P9IK2XkJHdyplH6mzYtDYO+gB06JlzcPxg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.5", - "@jest/pattern": "30.0.1", - "@jest/reporters": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", + "@types/docker-modem": "*", "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-changed-files": "30.0.5", - "jest-config": "30.0.5", - "jest-haste-map": "30.0.5", - "jest-message-util": "30.0.5", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-resolve-dependencies": "30.0.5", - "jest-runner": "30.0.5", - "jest-runtime": "30.0.5", - "jest-snapshot": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "jest-watcher": "30.0.5", - "micromatch": "^4.0.8", - "pretty-format": "30.0.5", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "@types/ssh2": "*" } }, - "node_modules/@jest/create-cache-key-function": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", - "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/types": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@jest/create-cache-key-function/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==", + "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, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/istanbul-lib-report": "*" } }, - "node_modules/@jest/create-cache-key-function/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==", + "node_modules/@types/jest": { + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": 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" + "expect": "^30.0.0", + "pretty-format": "^30.0.0" } }, - "node_modules/@jest/create-cache-key-function/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==", - "license": "MIT", - "optional": true, - "peer": true + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" }, - "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "node_modules/@types/json-stringify-safe": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/json-stringify-safe/-/json-stringify-safe-5.0.3.tgz", + "integrity": "sha512-oNOjRxLfPeYbBSQ60maucaFNqbslVOPU4WWs5t/sHvAh6tyo/CThXSG+E24tEzkgh/fzvxyDrYdOJufgeNy1sQ==", "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } + "license": "MIT" }, - "node_modules/@jest/environment": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.5.tgz", - "integrity": "sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==", + "node_modules/@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lokijs": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@types/lokijs/-/lokijs-1.5.14.tgz", + "integrity": "sha512-4Fic47BX3Qxr8pd12KT6/T1XWU8dOlJBIp1jGoMbaDbiEvdv50rAii+B3z1b/J2pvMywcVP+DBPGP5/lgLOKGA==", + "license": "MIT" + }, + "node_modules/@types/luxon": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", + "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "jest-mock": "30.0.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "undici-types": "~7.10.0" } }, - "node_modules/@jest/expect": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.5.tgz", - "integrity": "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA==", + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ssh2": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", + "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.0.5", - "jest-snapshot": "30.0.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@types/node": "^18.11.18" } }, - "node_modules/@jest/expect-utils": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.5.tgz", - "integrity": "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==", + "node_modules/@types/ssh2-streams": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz", + "integrity": "sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@types/node": "*" } }, - "node_modules/@jest/fake-timers": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.5.tgz", - "integrity": "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==", + "node_modules/@types/ssh2/node_modules/@types/node": { + "version": "18.19.123", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.123.tgz", + "integrity": "sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", - "@sinonjs/fake-timers": "^13.0.0", - "@types/node": "*", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "undici-types": "~5.26.4" } }, - "node_modules/@jest/get-type": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", - "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", + "node_modules/@types/ssh2/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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/validator": { + "version": "13.15.2", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz", + "integrity": "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==", + "license": "MIT" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", "dev": true, "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "dependencies": { + "@types/webidl-conversions": "*" } }, - "node_modules/@jest/globals": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.5.tgz", - "integrity": "sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==", - "dev": true, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "license": "MIT", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/expect": "30.0.5", - "@jest/types": "30.0.5", - "jest-mock": "30.0.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@types/node": "*" } }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "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, "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@types/yargs-parser": "*" } }, - "node_modules/@jest/reporters": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.5.tgz", - "integrity": "sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g==", + "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, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz", + "integrity": "sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==", "dev": true, "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "@jridgewell/trace-mapping": "^0.3.25", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.0.5", - "jest-util": "30.0.5", - "jest-worker": "30.0.5", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.40.0", + "@typescript-eslint/type-utils": "8.40.0", + "@typescript-eslint/utils": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "peerDependencies": { + "@typescript-eslint/parser": "^8.40.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 4" } }, - "node_modules/@jest/snapshot-utils": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.5.tgz", - "integrity": "sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ==", + "node_modules/@typescript-eslint/parser": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.40.0.tgz", + "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" + "@typescript-eslint/scope-manager": "8.40.0", + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.0", + "debug": "^4.3.4" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "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", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@jest/source-map": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.40.0.tgz", + "integrity": "sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "callsites": "^3.1.0", - "graceful-fs": "^4.2.11" + "@typescript-eslint/tsconfig-utils": "^8.40.0", + "@typescript-eslint/types": "^8.40.0", + "debug": "^4.3.4" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@jest/test-result": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.5.tgz", - "integrity": "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz", + "integrity": "sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.5", - "@jest/types": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@jest/test-sequencer": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.5.tgz", - "integrity": "sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz", + "integrity": "sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/test-result": "30.0.5", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "slash": "^3.0.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@jest/transform": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.5.tgz", - "integrity": "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz", + "integrity": "sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.0.5", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.0", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", - "micromatch": "^4.0.8", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.0", + "@typescript-eslint/utils": "8.40.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "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", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@jest/types": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", - "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", + "node_modules/@typescript-eslint/types": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.40.0.tgz", + "integrity": "sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz", + "integrity": "sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "@typescript-eslint/project-service": "8.40.0", + "@typescript-eslint/tsconfig-utils": "8.40.0", + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/visitor-keys": "8.40.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": "^2.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "balanced-match": "^1.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==", - "license": "MIT", + "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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=6.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "node_modules/@typescript-eslint/utils": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.40.0.tgz", + "integrity": "sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.40.0", + "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/typescript-estree": "8.40.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", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", - "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz", + "integrity": "sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==", + "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@js-joda/core": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.3.tgz", - "integrity": "sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==", - "license": "BSD-3-Clause" - }, - "node_modules/@js-joda/timezone": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@js-joda/timezone/-/timezone-2.3.0.tgz", - "integrity": "sha512-DHXdNs0SydSqC5f0oRJPpTcNfnpRojgBqMCFupQFv6WgeZAjU3DBx+A7JtaGPP3dHrP2Odi2N8Vf+uAm/8ynCQ==", - "license": "BSD-3-Clause", - "peerDependencies": { - "@js-joda/core": ">=1.11.0" - } - }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", - "dev": true, - "license": "MIT", + "@typescript-eslint/types": "8.40.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@js-soft/docdb-access-abstractions": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.2.0.tgz", - "integrity": "sha512-DlDCNWHBLmiNEa7I8LqlKVK/xY6QTit3K20/2SkIRIWMqkUCObkVfi113zfiRg4wt+XeBjtLiNHwWxHoGSrLoA==", - "license": "MIT" - }, - "node_modules/@js-soft/docdb-access-loki": { + "node_modules/@ungap/structured-clone": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-loki/-/docdb-access-loki-1.3.0.tgz", - "integrity": "sha512-uJ7T4T28K0FoZNMVO/6n4gI+WLnHkEJGHkMTWND2Sm88czXFjY4Pa55zHo/QWqZYZbj2Fdk7DAnI4ABsUSfFJg==", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unimodules/core": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.2.0.tgz", + "integrity": "sha512-Nu+bAd/xG4B2xyYMrmV3LnDr8czUQgV1XhoL3sOOMwGydDJtfpWNodGhPhEMyKq2CXo4X7DDIo8qG6W2fk6XAQ==", + "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", "license": "MIT", + "optional": true, "dependencies": { - "@js-soft/docdb-access-abstractions": "1.1.0", - "@types/lokijs": "1.5.14", - "lokijs": "1.5.12" + "expo-modules-core": "~0.4.0" } }, - "node_modules/@js-soft/docdb-access-loki/node_modules/@js-soft/docdb-access-abstractions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.1.0.tgz", - "integrity": "sha512-AkN2D4nRDF/35znXs5xfBRIGCngPIev9h6EGm7AdBAYlfiXg4k1uh4+BcdLroiD8nlaCQMmLSNCmUGFjSINuuQ==", - "license": "MIT" - }, - "node_modules/@js-soft/docdb-access-mongo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-mongo/-/docdb-access-mongo-1.3.0.tgz", - "integrity": "sha512-ydvk8v+hLCmZ7Y0IunQxGjFbLCfD3PisWqg2R61XVgkYg6V2H/jnqgCK6WyAXllNq89h4rHUNCOAX3w0VCszFA==", - "dev": true, + "node_modules/@unimodules/react-native-adapter": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.5.0.tgz", + "integrity": "sha512-F2J6gVw9a57DTVTQQunp64fqD4HVBkltOpUz1L5lEccNbQlZEA7SjnqKJzXakI7uPhhN76/n+SGb7ihzHw2swQ==", + "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", "license": "MIT", + "optional": true, "dependencies": { - "@js-soft/docdb-access-abstractions": "1.1.0", - "mongodb": "6.17.0" + "expo-modules-autolinking": "^0.3.2", + "expo-modules-core": "~0.4.0" } }, - "node_modules/@js-soft/docdb-access-mongo/node_modules/@js-soft/docdb-access-abstractions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-access-abstractions/-/docdb-access-abstractions-1.1.0.tgz", - "integrity": "sha512-AkN2D4nRDF/35znXs5xfBRIGCngPIev9h6EGm7AdBAYlfiXg4k1uh4+BcdLroiD8nlaCQMmLSNCmUGFjSINuuQ==", + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT" - }, - "node_modules/@js-soft/docdb-querytranslator": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@js-soft/docdb-querytranslator/-/docdb-querytranslator-1.1.5.tgz", - "integrity": "sha512-VfuAWmGF3fJ/hrbvk+2CYh3p6kdqlcdUtHrOM6LK9q7lnZrVHmlnaE242fhGoUiAiKF0w5PWhUtd5/lggEb0EA==", - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@js-soft/eslint-config-ts": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@js-soft/eslint-config-ts/-/eslint-config-ts-2.0.3.tgz", - "integrity": "sha512-bv3MhZhPJKknky8lSySCoyRpMldSaztEPaDmqcD/FTjkwKGzyktWSqzmmbkoHkg9ed6sBz8aMOET6zsLEP5a8g==", + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@eslint/js": "^9.32.0", - "eslint-plugin-chai-expect": "^3.1.0", - "eslint-plugin-chai-friendly": "^1.1.0", - "eslint-plugin-jest": "^29.0.1", - "eslint-plugin-mocha": "^11.1.0", - "typescript-eslint": "^8.39.0" - }, - "peerDependencies": { - "eslint": ">=9" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@js-soft/license-check": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@js-soft/license-check/-/license-check-1.0.9.tgz", - "integrity": "sha512-cupYi2KYDnwjPn77hoHpRgbGh8PKESYSFudFqgzzwA/4LqFCV1N2nLV5UHxhmtr3j7S6AmFeOAo19s1TsQUf3w==", + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "license-checker": "^25.0.1", - "yargs": "^17.7.2" - }, - "bin": { - "license-check": "bin/licenseCheck.js" - } - }, - "node_modules/@js-soft/logging-abstractions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@js-soft/logging-abstractions/-/logging-abstractions-1.0.1.tgz", - "integrity": "sha512-giFnUcpfq07vNmMFetvI1bfKo8g5slIiQbSnwLF1dHU8gLE/hJmL3jTnchXFRTwSeMhTFCNg0GudsNMw1esMVQ==", - "license": "MIT" + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@js-soft/node-logger": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@js-soft/node-logger/-/node-logger-1.2.0.tgz", - "integrity": "sha512-jEvBpqvhds+ReW46981UHtqaQVc2T1DpPmzo7SsaYMywIrV8O4c0gmZSOtZ3M4pTXysoSf121jTxxVMCXdQWFw==", + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@js-soft/logging-abstractions": "1.0.1", - "correlation-id": "^5.2.0", - "json-stringify-safe": "^5.0.1", - "log4js": "^6.9.1" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@js-soft/simple-logger": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@js-soft/simple-logger/-/simple-logger-1.0.5.tgz", - "integrity": "sha512-ISrOACkOKJrlxsRazXHzXC1NeVxJEqUnorwPbb74wLPUkS09IY+8QE17QUkoLhv3R7eMJrhlaUMW/ZLyCn+kWQ==", + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@js-soft/logging-abstractions": "1.0.1", - "json-stringify-safe": "^5.0.1", - "typescript-logging": "^2.2.0", - "typescript-logging-log4ts-style": "^2.2.0" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@js-soft/ts-serval": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@js-soft/ts-serval/-/ts-serval-2.0.13.tgz", - "integrity": "sha512-x/ljrxIbT+VCQIHTM1a3/6ZQwC17+XPfIm76q0CswbsE14VcREa5EVVRimh+A2zyEIb36IsnNYPDAX4iReWlhg==", + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "reflect-metadata": "^0.2.2" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@js-soft/ts-utils": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@js-soft/ts-utils/-/ts-utils-2.3.4.tgz", - "integrity": "sha512-N4Ru0jo3CgywbJRxg7mP9rglfgx3u0e00M71JjXUI3/16Z9cx31GXlydY6Hp18w3yQGT0kl2e2kAiGU3hU7c1Q==", + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "eventemitter2": "^6.4.9", - "json-stringify-safe": "^5.0.1", - "reflect-metadata": "^0.2.2" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.0.tgz", - "integrity": "sha512-zlayKCsIjYb7/IdfqxorK5+xUMyi4vOKcFy10wKJYc63NSdKI8mNME+uJqfatkPmOSMMUiojrL58IePKBm3gvQ==", + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "sparse-bitfield": "^3.0.3" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@multiformats/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", - "license": "MIT" - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, - "node_modules/@nmshd/app-runtime": { - "resolved": "packages/app-runtime", - "link": true - }, - "node_modules/@nmshd/consumption": { - "resolved": "packages/consumption", - "link": true - }, - "node_modules/@nmshd/content": { - "resolved": "packages/content", - "link": true - }, - "node_modules/@nmshd/core-types": { - "resolved": "packages/core-types", - "link": true - }, - "node_modules/@nmshd/crypto": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@nmshd/crypto/-/crypto-2.1.2.tgz", - "integrity": "sha512-DbcBnqPAeviaMiIG7G1QaICvoAS3xNMdW/CWoig1XJAbRcpeVRQ3LpKZSgt5XwDc8xl+0j3Ork/HDWijk3rlNw==", - "license": "MIT", - "dependencies": { - "libsodium-wrappers-sumo": "0.7.15", - "uuid": "^11.1.0" - } - }, - "node_modules/@nmshd/iql": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@nmshd/iql/-/iql-1.0.3.tgz", - "integrity": "sha512-gTc69pUQrxjN8kajwfcg9+6/HCRrEcIURKkGtCc/5CqYf6Owq3F1AwPX31BPAopnB/ElvkNpzM1MntohXUe2vA==", - "license": "MIT" - }, - "node_modules/@nmshd/runtime": { - "resolved": "packages/runtime", - "link": true - }, - "node_modules/@nmshd/runtime-types": { - "resolved": "packages/runtime-types", - "link": true - }, - "node_modules/@nmshd/transport": { - "resolved": "packages/transport", - "link": true - }, - "node_modules/@nmshd/typescript-ioc": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@nmshd/typescript-ioc/-/typescript-ioc-3.2.4.tgz", - "integrity": "sha512-CNJbsdqcI+vB9eRACB0AI1s0IL3qXfuINKwoKVP/1DhuL+leZUXAV9GcuJ68Fr3scCz/fhzQK9bWLJus66V6HQ==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "reflect-metadata": "^0.2.2" - } - }, - "node_modules/@noble/curves": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", - "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "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==", - "devOptional": true, - "license": "MIT", - "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==", - "devOptional": true, - "license": "MIT", - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", - "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/git": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", - "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", - "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", - "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", - "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", - "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", - "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", - "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@openid4vc/oauth2": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-BRY43zVD8fNEfQlOzYdaGxIUM9GcBubiJcqXpDCzGB+hc7g8LToAuNaAeNe0ZJmeN5Fn+iaL9tnmlz6Lq6A+Dw==", - "license": "Apache-2.0", - "dependencies": { - "@openid4vc/utils": "0.3.0-alpha-20250602121005", - "zod": "^3.24.2" - } - }, - "node_modules/@openid4vc/openid4vci": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-7F4E6qigwhqHXIg5pRPQ8O79mVzIsHA+M5UzUwy86btLQIalJOBJK9Td6BX4H9TROeXWoPM/cWsw1s0WZsrIeA==", - "license": "Apache-2.0", - "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", - "@openid4vc/utils": "0.3.0-alpha-20250602121005", - "zod": "^3.24.2" - } - }, - "node_modules/@openid4vc/openid4vp": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-n45JxZFTJyOlJFjW/y4bXxDYwDfm4F61RCt+qy8lDPp+DtCnw9pFGHndk6IZtP4t33/e88ntKvV2lUgIrJLLpw==", - "license": "Apache-2.0", - "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", - "@openid4vc/utils": "0.3.0-alpha-20250602121005", - "zod": "^3.24.2" - } - }, - "node_modules/@openid4vc/utils": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-68lU8pqqGrqIjhb+/y+UjYFgbzluljIhTAEan5LyW0IKOMO0slFHfEzjn85Cv8bN1En/SuNT+U/McX/krlSSwg==", - "license": "Apache-2.0", - "dependencies": { - "buffer": "^6.0.3", - "zod": "^3.24.2" - } - }, - "node_modules/@openid4vc/utils/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/@openwallet-foundation/askar-nodejs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-nodejs/-/askar-nodejs-0.3.2.tgz", - "integrity": "sha512-kHZaPl32azKzqT/+ksRqGXNs9lxTrhbuWVuILS1HNGXA+A5vSINRA8WwDHk2KGZ9WP7jhszbPx804cfRKrrBPA==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@2060.io/ffi-napi": "^4.0.9", - "@2060.io/ref-napi": "^3.0.6", - "@openwallet-foundation/askar-shared": "0.3.2", - "ref-array-di": "^1.2.2", - "ref-struct-di": "^1.1.1" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@openwallet-foundation/askar-shared": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-shared/-/askar-shared-0.3.2.tgz", - "integrity": "sha512-WQSHM5+5Vy1QMUpUTj0DpwFKYdciNcksWsft/iD6Ff+AdDERKo5Mjv/4JSIZIzXUEyq7kqqNbejl4a3TDGeU3A==", - "license": "Apache-2.0", - "dependencies": { - "buffer": "^6.0.3", - "tar": "^7.4.3" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@peculiar/asn1-cms": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.4.0.tgz", - "integrity": "sha512-TJvw5Tna/txvzzwnKUlCFd6zIz4R7qysHCaU6M2oe/MUT6EkvJDOzGGNY0hdjJYpuuHoqanQbIqEBhSLSWe1Tg==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "@peculiar/asn1-x509-attr": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-csr": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.4.0.tgz", - "integrity": "sha512-9yQz0hQ9ynGr/I1X1v64QQGfRMbviHXyqY07cy69UzXa8s4ayCKx/TncU6lDWcTKs7P/X/AEcuJcG7Xbw0cl1A==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-ecc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.4.0.tgz", - "integrity": "sha512-fJiYUBCJBDkjh347zZe5H81BdJ0+OGIg0X9z06v8xXUoql3MFeENUX0JsjCaVaU9A0L85PefLPGYkIoGpTnXLQ==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pfx": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.4.0.tgz", - "integrity": "sha512-fhpeoJ6T4nCLWT5tt3Un+BbyM1lLFnGXcRC2Ioe5ra2I0yptdjw05j20rV8BlUVzPIvUYpatq6joMQKe3ibh0w==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.4.0", - "@peculiar/asn1-pkcs8": "^2.4.0", - "@peculiar/asn1-rsa": "^2.4.0", - "@peculiar/asn1-schema": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.4.0.tgz", - "integrity": "sha512-4r2LtsAM0HWXLxetGTYKyBumky7W6C1EuiOctqhl7zFK5MHjiZ+9WOeaoeTPR1g3OEoeG7KEWIkaUOyRH4ojTw==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.4.0.tgz", - "integrity": "sha512-D7paqEVpu9wuWuClMN+vR5cqJWJITNPaMoa9R+FmkJ8ywF9UaS2JFI0RYclKILNoLdLg1N4eUCoJvM+ubsIIZQ==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.4.0", - "@peculiar/asn1-pfx": "^2.4.0", - "@peculiar/asn1-pkcs8": "^2.4.0", - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "@peculiar/asn1-x509-attr": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-rsa": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.4.0.tgz", - "integrity": "sha512-6PP75voaEnOSlWR9sD25iCQyLgFZHXbmxvUfnnDcfL6Zh5h2iHW38+bve4LfH7a60x7fkhZZNmiYqAlAff9Img==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.4.0.tgz", - "integrity": "sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ==", - "license": "MIT", - "dependencies": { - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-x509": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.4.0.tgz", - "integrity": "sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.4.0.tgz", - "integrity": "sha512-Tr5Zi+wcE2sfR0gKRvsPwXoA1U8CuDnwiFbxCS+5Z1Nck9zlHj86+4/EZhwucjKXwPEHk1ekhqb3iwISY/+E/w==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@peculiar/webcrypto": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", - "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2", - "webcrypto-core": "^1.8.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/@peculiar/x509": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.13.0.tgz", - "integrity": "sha512-r9BOb1GZ3gx58Pog7u9x70spnHlCQPFm7u/ZNlFv+uBsU7kTDY9QkUD+l+X0awopDuCK1fkH3nEIZeMDSG/jlw==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.3.15", - "@peculiar/asn1-csr": "^2.3.15", - "@peculiar/asn1-ecc": "^2.3.15", - "@peculiar/asn1-pkcs9": "^2.3.15", - "@peculiar/asn1-rsa": "^2.3.15", - "@peculiar/asn1-schema": "^2.3.15", - "@peculiar/asn1-x509": "^2.3.15", - "pvtsutils": "^1.3.6", - "reflect-metadata": "^0.2.2", - "tslib": "^2.8.1", - "tsyringe": "^4.10.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@react-native/assets-registry": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.80.2.tgz", - "integrity": "sha512-+sI2zIM22amhkZqW+RpD3qDoopeRiezrTtZMP+Y3HI+6/2JbEq7DdyV/2YS1lrSSdyy3STW2V37Lt4dKqP0lEQ==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.79.5", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.79.5.tgz", - "integrity": "sha512-Rt/imdfqXihD/sn0xnV4flxxb1aLLjPtMF1QleQjEhJsTUPpH4TFlfOpoCvsrXoDl4OIcB1k4FVM24Ez92zf5w==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.79.5" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/babel-preset": { - "version": "0.79.5", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.79.5.tgz", - "integrity": "sha512-GDUYIWslMLbdJHEgKNfrOzXk8EDKxKzbwmBXUugoiSlr6TyepVZsj3GZDLEFarOcTwH1EXXHJsixihk8DCRQDA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/plugin-proposal-export-default-from": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-default-from": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.25.2", - "@babel/plugin-transform-react-jsx-self": "^7.24.7", - "@babel/plugin-transform-react-jsx-source": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.25.2", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.79.5", - "babel-plugin-syntax-hermes-parser": "0.25.1", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/codegen": { - "version": "0.79.5", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.79.5.tgz", - "integrity": "sha512-FO5U1R525A1IFpJjy+KVznEinAgcs3u7IbnbRJUG9IH/MBXi2lEU2LtN+JarJ81MCfW4V2p0pg6t/3RGHFRrlQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.1", - "hermes-parser": "0.25.1", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "yargs": "^17.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/codegen/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", - "license": "ISC", - "optional": 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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.80.2.tgz", - "integrity": "sha512-UBjsE+lv1YtThs56mgFaUdWv0jNE1oO58Lkbf3dn47F0e7YiTubIcvP6AnlaMhZF2Pmt9ky8J1jTpgItO9tGeg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@react-native/dev-middleware": "0.80.2", - "chalk": "^4.0.0", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "metro": "^0.82.2", - "metro-config": "^0.82.2", - "metro-core": "^0.82.2", - "semver": "^7.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@react-native-community/cli": "*" - }, - "peerDependenciesMeta": { - "@react-native-community/cli": { - "optional": true - } - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.80.2.tgz", - "integrity": "sha512-n3D88bqNk0bY+YjNxbM6giqva06xj+rgEfu91Pg+nJ0szSL2eLl7ULERJqI3hxFt0XGuTpTOxZgw/Po5maXa4g==", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.80.2.tgz", - "integrity": "sha512-8OeBEZNiApdbZaqTrrzeyFwXn/JwgJox7jdtjVAH56DggTVJXdbnyUjQ4ts6XAacEQgpFOAskoO730eyafOkAA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.80.2", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.2.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "serve-static": "^1.16.2", - "ws": "^6.2.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@react-native/debugger-frontend": { - "version": "0.79.5", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.79.5.tgz", - "integrity": "sha512-WQ49TRpCwhgUYo5/n+6GGykXmnumpOkl4Lr2l2o2buWU9qPOwoiBqJAtmWEXsAug4ciw3eLiVfthn5ufs0VB0A==", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/dev-middleware": { - "version": "0.79.5", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.79.5.tgz", - "integrity": "sha512-U7r9M/SEktOCP/0uS6jXMHmYjj4ESfYCkNAenBjFjjsRWekiHE+U/vRMeO+fG9gq4UCcBAUISClkQCowlftYBw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.79.5", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.2.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "serve-static": "^1.16.2", - "ws": "^6.2.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/dev-middleware/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@react-native/dev-middleware/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.80.2.tgz", - "integrity": "sha512-C5/FYbIfCXPFjF/hIcWFKC9rEadDDhPMbxE7tarGR9tmYKyb9o7fYvfNe8fFgbCRKelMHP0ShATz3T73pHHDfA==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/js-polyfills": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.80.2.tgz", - "integrity": "sha512-f63M3paxHK92p6L9o+AY7hV/YojCZAhb+fdDpSfOtDtCngWbBhd6foJrO6IybzDFERxlwErupUg3pqr5w3KJWw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/normalize-colors": { - "version": "0.79.5", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.79.5.tgz", - "integrity": "sha512-nGXMNMclZgzLUxijQQ38Dm3IAEhgxuySAWQHnljFtfB0JdaMwpe0Ox9H7Tp2OgrEA+EMEv+Od9ElKlHwGKmmvQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.80.2.tgz", - "integrity": "sha512-kXsIV2eB73QClbbH/z/lRhZkyj3Dke4tarM5w2yXSNwJthMPMfj4KqLZ6Lnf0nmPPjz7qo/voKtlrGqlM822Rg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^19.0.0", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@sd-jwt/core": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/core/-/core-0.10.0.tgz", - "integrity": "sha512-EuFsIHP76fwNi97dGcz2jdEenHL/AkDGcqrEA00k82Uw0HP/hvbAfB+yyPxYrd3dVaxe5PWSKvDkgDK6kKk+6Q==", - "license": "Apache-2.0", - "dependencies": { - "@sd-jwt/decode": "0.10.0", - "@sd-jwt/present": "0.10.0", - "@sd-jwt/types": "0.10.0", - "@sd-jwt/utils": "0.10.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sd-jwt/decode": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.10.0.tgz", - "integrity": "sha512-djNWMWpF1kUVh1fM/lRrmoQtTaJy8J0mS0bu96XPL5Jea5ov4klxOtSvuYmPFFcqLpxyrLOIwcbqmVQ20Mdzpg==", - "license": "Apache-2.0", - "dependencies": { - "@sd-jwt/types": "0.10.0", - "@sd-jwt/utils": "0.10.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sd-jwt/jwt-status-list": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/jwt-status-list/-/jwt-status-list-0.10.0.tgz", - "integrity": "sha512-TVLLQ7qjZKKEXODXUAxoWvJmnH3bSNXsttp0hxVP/qv42Rk7OFKIjepkzy6lh+RQRWw3NK/rHiz95/Fz1m4xBQ==", - "license": "Apache-2.0", - "dependencies": { - "@sd-jwt/types": "0.10.0", - "base64url": "^3.0.1", - "pako": "^2.1.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sd-jwt/present": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.10.0.tgz", - "integrity": "sha512-ITkyXAfdPOnfWlPgGkHpN1JxaOCC/A8Oid0CUY25AsGuwkSCw9rd+B0nwG5KBwmf1RaOG75FkvwmSCHXBlHgUg==", - "license": "Apache-2.0", - "dependencies": { - "@sd-jwt/decode": "0.10.0", - "@sd-jwt/types": "0.10.0", - "@sd-jwt/utils": "0.10.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sd-jwt/sd-jwt-vc": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.10.0.tgz", - "integrity": "sha512-418TX436dBK7FnwsLJXUXnTQByZQOonCuJ4vKyrOJ27mZXxkiFiLSaUojqoFerSw5u29nwrcRRJzd1NLdLWqkQ==", - "license": "Apache-2.0", - "dependencies": { - "@sd-jwt/core": "0.10.0", - "@sd-jwt/jwt-status-list": "0.10.0", - "@sd-jwt/utils": "0.10.0", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sd-jwt/sd-jwt-vc/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@sd-jwt/sd-jwt-vc/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/@sd-jwt/types": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.10.0.tgz", - "integrity": "sha512-/UOSel/n16qi5xt/hiX3ob4y/ke+yLn+iuVZDfYUvxKTOs/g0VXRo2/RQ5Fp5Coa8SxSms0uW9kb5pv2YdY8yw==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@sd-jwt/utils": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.10.0.tgz", - "integrity": "sha512-4ozPvrer45NCuMtVDnsDtQMxp9cI6AgaFKE/B11TBmpxER8eXjGD2xTfSpRtJokUTIQmY267jQJNVwNnC/8DOw==", - "license": "Apache-2.0", - "dependencies": { - "@sd-jwt/types": "0.10.0", - "js-base64": "^3.7.6" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sigstore/bundle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", - "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.4.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", - "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", - "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", - "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "make-fetch-happen": "^14.0.2", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", - "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.4.1", - "tuf-js": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", - "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.40", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.40.tgz", - "integrity": "sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "devOptional": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/@sovpro/delimited-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz", - "integrity": "sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sphereon/kmp-mdoc-core": { - "version": "0.2.0-SNAPSHOT.26", - "resolved": "https://registry.npmjs.org/@sphereon/kmp-mdoc-core/-/kmp-mdoc-core-0.2.0-SNAPSHOT.26.tgz", - "integrity": "sha512-QXJ6R8ENiZV2rPMbn06cw5JKwqUYN1kzVRbYfONqE1PEXx1noQ4md7uxr2zSczi0ubKkNcbyYDNtIMTZIhGzmQ==", - "dependencies": { - "@js-joda/core": "5.6.3", - "@js-joda/timezone": "2.3.0", - "format-util": "^1.0.5" - } - }, - "node_modules/@sphereon/pex-models": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.3.2.tgz", - "integrity": "sha512-foFxfLkRwcn/MOp/eht46Q7wsvpQGlO7aowowIIb5Tz9u97kYZ2kz6K2h2ODxWuv5CRA7Q0MY8XUBGE2lfOhOQ==", - "license": "Apache-2.0" - }, - "node_modules/@sphereon/ssi-types": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.33.0.tgz", - "integrity": "sha512-OQnWLKZQU6lHlMw3JS5308q5Kctv1eT/NNQthGNXETarsgJFiD711pWMOJvi0p5kLpU8N1e7/okaH3mXsVAW0A==", - "license": "Apache-2.0", - "dependencies": { - "@noble/hashes": "1.6.1", - "@sd-jwt/decode": "^0.9.2", - "@sphereon/kmp-mdoc-core": "0.2.0-SNAPSHOT.26", - "debug": "^4.3.5", - "events": "^3.3.0", - "jwt-decode": "^4.0.0", - "uint8arrays": "3.1.1" - } - }, - "node_modules/@sphereon/ssi-types/node_modules/@noble/hashes": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", - "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/decode": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.9.2.tgz", - "integrity": "sha512-jHY7hqk7EMkp6E2cB13QmXvRZN7njvAveVh+zKKy0kxpAM7DmcR4TqcDA4mc5y4lP8zWFUgbk7oGLCx2wiBq+w==", - "license": "Apache-2.0", - "dependencies": { - "@sd-jwt/types": "0.9.2", - "@sd-jwt/utils": "0.9.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/types": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.9.2.tgz", - "integrity": "sha512-eV/MY80ekeTrqaohzPpkrgwPki6Igx69D6RniduV1Ehv6o/zaJQ2F0hY/RqBAkJhQtBQoOzouwKYHme40k1Dlw==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/utils": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.9.2.tgz", - "integrity": "sha512-GpTD0isav2f+JyMyzeyf6wV3nYcD5e3oL+sVVr/61Y3oaIBGMWLtGGGhBRMCimSnd8kbb0P9jLxvp7ioASk6vw==", - "license": "Apache-2.0", - "dependencies": { - "@sd-jwt/types": "0.9.2", - "js-base64": "^3.7.6" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sphereon/ssi-types/node_modules/jwt-decode": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", - "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@stablelib/binary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", - "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", - "license": "MIT", - "dependencies": { - "@stablelib/int": "^1.0.1" - } - }, - "node_modules/@stablelib/ed25519": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", - "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", - "license": "MIT", - "dependencies": { - "@stablelib/random": "^1.0.2", - "@stablelib/sha512": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "node_modules/@stablelib/hash": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", - "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==", - "license": "MIT" - }, - "node_modules/@stablelib/int": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", - "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==", - "license": "MIT" - }, - "node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", - "license": "MIT", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "node_modules/@stablelib/sha512": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", - "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", - "license": "MIT", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "node_modules/@stablelib/wipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", - "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==", - "license": "MIT" - }, - "node_modules/@ts-graphviz/adapter": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@ts-graphviz/adapter/-/adapter-2.0.6.tgz", - "integrity": "sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ts-graphviz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ts-graphviz" - } - ], - "license": "MIT", - "dependencies": { - "@ts-graphviz/common": "^2.1.5" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ts-graphviz/ast": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@ts-graphviz/ast/-/ast-2.0.7.tgz", - "integrity": "sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ts-graphviz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ts-graphviz" - } - ], - "license": "MIT", - "dependencies": { - "@ts-graphviz/common": "^2.1.5" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ts-graphviz/common": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@ts-graphviz/common/-/common-2.1.5.tgz", - "integrity": "sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ts-graphviz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ts-graphviz" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@ts-graphviz/core": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@ts-graphviz/core/-/core-2.0.7.tgz", - "integrity": "sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ts-graphviz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/ts-graphviz" - } - ], - "license": "MIT", - "dependencies": { - "@ts-graphviz/ast": "^2.0.7", - "@ts-graphviz/common": "^2.1.5" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", - "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", - "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.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==", - "devOptional": true, - "license": "MIT", - "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.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "devOptional": true, - "license": "MIT", - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/docker-modem": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", - "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/ssh2": "*" - } - }, - "node_modules/@types/dockerode": { - "version": "3.3.43", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.43.tgz", - "integrity": "sha512-YCi0aKKpKeC9dhKTbuglvsWDnAyuIITd6CCJSTKiAdbDzPH4RWu0P9IK2XkJHdyplH6mzYtDYO+gB06JlzcPxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/docker-modem": "*", - "@types/node": "*", - "@types/ssh2": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "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==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "MIT", - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "30.0.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", - "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^30.0.0", - "pretty-format": "^30.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-stringify-safe": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/json-stringify-safe/-/json-stringify-safe-5.0.3.tgz", - "integrity": "sha512-oNOjRxLfPeYbBSQ60maucaFNqbslVOPU4WWs5t/sHvAh6tyo/CThXSG+E24tEzkgh/fzvxyDrYdOJufgeNy1sQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lokijs": { - "version": "1.5.14", - "resolved": "https://registry.npmjs.org/@types/lokijs/-/lokijs-1.5.14.tgz", - "integrity": "sha512-4Fic47BX3Qxr8pd12KT6/T1XWU8dOlJBIp1jGoMbaDbiEvdv50rAii+B3z1b/J2pvMywcVP+DBPGP5/lgLOKGA==", - "license": "MIT" - }, - "node_modules/@types/luxon": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", - "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", - "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.10.0" - } - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/ssh2": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", - "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^18.11.18" - } - }, - "node_modules/@types/ssh2-streams": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz", - "integrity": "sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ssh2/node_modules/@types/node": { - "version": "18.19.123", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.123.tgz", - "integrity": "sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/ssh2/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, - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/validator": { - "version": "13.15.2", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz", - "integrity": "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==", - "license": "MIT" - }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/whatwg-url": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/webidl-conversions": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "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==", - "devOptional": true, - "license": "MIT", - "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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz", - "integrity": "sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.40.0", - "@typescript-eslint/type-utils": "8.40.0", - "@typescript-eslint/utils": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.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.40.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.40.0.tgz", - "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.40.0", - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.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", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.40.0.tgz", - "integrity": "sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.40.0", - "@typescript-eslint/types": "^8.40.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": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz", - "integrity": "sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.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/tsconfig-utils": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz", - "integrity": "sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz", - "integrity": "sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.0", - "@typescript-eslint/utils": "8.40.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.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", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.40.0.tgz", - "integrity": "sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz", - "integrity": "sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.40.0", - "@typescript-eslint/tsconfig-utils": "8.40.0", - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.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": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "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, - "license": "ISC", - "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": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.40.0.tgz", - "integrity": "sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.40.0", - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.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", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz", - "integrity": "sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.40.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@unimodules/core": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.2.0.tgz", - "integrity": "sha512-Nu+bAd/xG4B2xyYMrmV3LnDr8czUQgV1XhoL3sOOMwGydDJtfpWNodGhPhEMyKq2CXo4X7DDIo8qG6W2fk6XAQ==", - "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", - "license": "MIT", - "optional": true, - "dependencies": { - "expo-modules-core": "~0.4.0" - } - }, - "node_modules/@unimodules/react-native-adapter": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.5.0.tgz", - "integrity": "sha512-F2J6gVw9a57DTVTQQunp64fqD4HVBkltOpUz1L5lEccNbQlZEA7SjnqKJzXakI7uPhhN76/n+SGb7ihzHw2swQ==", - "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", - "license": "MIT", - "optional": true, - "dependencies": { - "expo-modules-autolinking": "^0.3.2", - "expo-modules-core": "~0.4.0" - } - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@urql/core": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.2.0.tgz", - "integrity": "sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@0no-co/graphql.web": "^1.0.13", - "wonka": "^6.3.2" - } - }, - "node_modules/@urql/exchange-retry": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.2.tgz", - "integrity": "sha512-TQMCz2pFJMfpNxmSfX1VSfTjwUIFx/mL+p1bnfM1xjjdla7Z+KnGMW/EhFbpckp3LyWAH4PgOsMwOMnIN+MBFg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@urql/core": "^5.1.2", - "wonka": "^6.3.2" - }, - "peerDependencies": { - "@urql/core": "^5.0.0" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.19", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.19.tgz", - "integrity": "sha512-/afpyvlkrSNYbPo94Qu8GtIOWS+g5TRdOvs6XZNw6pWQQmj5pBgSZvEPOIZlqWq0YvoUhDDQaQ2TnzuJdOV4hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.3", - "@vue/shared": "3.5.19", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.19", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.19.tgz", - "integrity": "sha512-Drs6rPHQZx/pN9S6ml3Z3K/TWCIRPvzG2B/o5kFK9X0MNHt8/E+38tiRfojufrYBfA6FQUFB2qBBRXlcSXWtOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.19", - "@vue/shared": "3.5.19" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.19", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.19.tgz", - "integrity": "sha512-YWCm1CYaJ+2RvNmhCwI7t3I3nU+hOrWGWMsn+Z/kmm1jy5iinnVtlmkiZwbLlbV1SRizX7vHsc0/bG5dj0zRTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.3", - "@vue/compiler-core": "3.5.19", - "@vue/compiler-dom": "3.5.19", - "@vue/compiler-ssr": "3.5.19", - "@vue/shared": "3.5.19", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.17", - "postcss": "^8.5.6", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.19", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.19.tgz", - "integrity": "sha512-/wx0VZtkWOPdiQLWPeQeqpHWR/LuNC7bHfSX7OayBTtUy8wur6vT6EQIX6Et86aED6J+y8tTw43qo2uoqGg5sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.19", - "@vue/shared": "3.5.19" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.19", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.19.tgz", - "integrity": "sha512-IhXCOn08wgKrLQxRFKKlSacWg4Goi1BolrdEeLYn6tgHjJNXVrWJ5nzoxZqNwl5p88aLlQ8LOaoMa3AYvaKJ/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "devOptional": true, - "license": "MIT", - "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, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "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, - "license": "MIT", - "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/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", - "license": "MIT", - "optional": true, - "peer": true - }, - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", - "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "devOptional": true, - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/archiver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver-utils": "^5.0.2", - "async": "^3.2.4", - "buffer-crc32": "^1.0.0", - "readable-stream": "^4.0.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^6.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/archiver-utils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^10.0.0", - "graceful-fs": "^4.2.0", - "is-stream": "^2.0.1", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/archiver-utils/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/archiver/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "Python-2.0" - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-index": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", - "integrity": "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==", - "license": "MIT", - "dependencies": { - "debug": "^2.2.0", - "es6-symbol": "^3.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/array-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/array-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/asmcrypto.js": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", - "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==", - "license": "MIT" - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1js": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", - "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", - "license": "BSD-3-Clause", - "dependencies": { - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ast-module-types": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz", - "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/async-lock": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", - "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/b4a": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/b64-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", - "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", - "license": "MIT", - "dependencies": { - "base-64": "^0.1.0" - } - }, - "node_modules/b64u-lite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", - "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", - "license": "MIT", - "dependencies": { - "b64-lite": "^1.4.0" - } - }, - "node_modules/babel-jest": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.5.tgz", - "integrity": "sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "30.0.5", - "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.0", - "babel-preset-jest": "30.0.1", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", - "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", - "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "@types/babel__core": "^7.20.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.19.13", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz", - "integrity": "sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/babel-plugin-syntax-hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz", - "integrity": "sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "hermes-parser": "0.25.1" - } - }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", - "devOptional": true, - "license": "MIT", - "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 || ^8.0.0-0" - } - }, - "node_modules/babel-preset-expo": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-13.2.3.tgz", - "integrity": "sha512-wQJn92lqj8GKR7Ojg/aW4+GkqI6ZdDNTDyOqhhl7A9bAqk6t0ukUOWLDXQb4p0qKJjMDV1F6gNWasI2KUbuVTQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-proposal-export-default-from": "^7.24.7", - "@babel/plugin-syntax-export-default-from": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/preset-react": "^7.22.15", - "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-preset": "0.79.5", - "babel-plugin-react-native-web": "~0.19.13", - "babel-plugin-syntax-hermes-parser": "^0.25.1", - "babel-plugin-transform-flow-enums": "^0.0.2", - "debug": "^4.3.4", - "react-refresh": "^0.14.2", - "resolve-from": "^5.0.0" - }, - "peerDependencies": { - "babel-plugin-react-compiler": "^19.0.0-beta-e993439-20250405" - }, - "peerDependenciesMeta": { - "babel-plugin-react-compiler": { - "optional": true - } - } - }, - "node_modules/babel-preset-expo/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==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-preset-jest": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", - "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "30.0.1", - "babel-preset-current-node-syntax": "^1.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.1.tgz", - "integrity": "sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==", - "dev": true, - "license": "Apache-2.0", - "optional": true - }, - "node_modules/bare-fs": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.2.1.tgz", - "integrity": "sha512-mELROzV0IhqilFgsl1gyp48pnZsaV9xhQapHLDsvn4d4ZTfbFhcghQezl7FTEDNBcGqLUnNI3lUlm6ecrLWdFA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4" - }, - "engines": { - "bare": ">=1.16.0" - }, - "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } - } - }, - "node_modules/bare-os": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", - "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "bare": ">=1.14.0" - } - }, - "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-os": "^3.0.1" - } - }, - "node_modules/bare-stream": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", - "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } - } - }, - "node_modules/base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/base64url-universal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-2.0.0.tgz", - "integrity": "sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw==", - "license": "BSD-3-Clause", - "dependencies": { - "base64url": "^3.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "open": "^8.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/better-opn/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "license": "Unlicense", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bignumber.js": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/borc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/borc/-/borc-3.0.0.tgz", - "integrity": "sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g==", - "license": "MIT", - "dependencies": { - "bignumber.js": "^9.0.0", - "buffer": "^6.0.3", - "commander": "^2.15.0", - "ieee754": "^1.1.13", - "iso-url": "^1.1.5", - "json-text-sequence": "~0.3.0", - "readable-stream": "^3.6.0" - }, - "bin": { - "cbor2comment": "bin/cbor2comment.js", - "cbor2diag": "bin/cbor2diag.js", - "cbor2json": "bin/cbor2json.js", - "json2cbor": "bin/json2cbor.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/borc/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/borc/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/bplist-creator": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", - "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "stream-buffers": "2.2.x" - } - }, - "node_modules/bplist-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", - "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "devOptional": true, - "license": "MIT", - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.25.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", - "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", - "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" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001735", - "electron-to-chromium": "^1.5.204", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "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==", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/bson": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", - "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.20.1" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/buildcheck": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", - "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", - "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/cacache/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "license": "MIT", - "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==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001736", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001736.tgz", - "integrity": "sha512-ImpN5gLEY8gWeqfLUyEF4b7mYWcYoR2Si1VhnrbM4JizRFmfGaAQ12PhNykq6nvI4XvKLrsp8Xde74D5phJOSw==", - "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" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/canonicalize": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", - "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", - "license": "Apache-2.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==", - "devOptional": true, - "license": "MIT", - "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, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/chromium-edge-launcher": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", - "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "node_modules/chromium-edge-launcher/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", - "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", - "dev": true, - "license": "MIT" - }, - "node_modules/class-transformer": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", - "license": "MIT" - }, - "node_modules/class-validator": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", - "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", - "license": "MIT", - "dependencies": { - "@types/validator": "^13.11.8", - "libphonenumber-js": "^1.10.53", - "validator": "^13.9.0" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/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==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/cliui/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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/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==", - "devOptional": true, - "license": "MIT", - "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/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "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, - "license": "MIT", - "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, - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "MIT", - "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==", - "devOptional": true, - "license": "MIT" - }, - "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==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" - }, - "node_modules/compare-versions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "license": "MIT" - }, - "node_modules/compress-commons": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", - "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "crc32-stream": "^6.0.0", - "is-stream": "^2.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/compress-commons/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/connect/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", - "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "browserslist": "^4.25.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/correlation-id": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/correlation-id/-/correlation-id-5.2.0.tgz", - "integrity": "sha512-qTsYujgBvWIx05qF9HV4+KoezGTelgqJiFnyEfRsEqjpQUZdWnraOGHD+IMep7lPFg6MiI55fvpC4qruKdY5Dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.17.0" - } - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/cosmiconfig/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/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==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cpu-features": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", - "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.19.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", - "dev": true, - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/crc32-stream/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/credentials-context": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz", - "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==", - "license": "SEE LICENSE IN LICENSE.md" - }, - "node_modules/cross-fetch": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", - "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.7.0" - } - }, - "node_modules/cross-fetch/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==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/cross-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/cross-fetch/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==", - "license": "BSD-2-Clause" - }, - "node_modules/cross-fetch/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==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-ld": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-6.0.0.tgz", - "integrity": "sha512-XWL1LslqggNoaCI/m3I7HcvaSt9b2tYzdrXO+jHLUj9G1BvRfvV7ZTFDVY5nifYuIGAPdAGu7unPxLRustw3VA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/dcql": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dcql/-/dcql-0.3.0.tgz", - "integrity": "sha512-Q/yEf1itIpAYpLbGJsdGMj5Q2Ug0/NMYmyYiJWlKjk7LQOkDJ5Qh6ebLbiZBQ7gsvNBGWiOhtL306j5WdXcOcA==", - "license": "MIT", - "dependencies": { - "valibot": "1.0.0-beta.8" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "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==", - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=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==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-tree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-11.2.0.tgz", - "integrity": "sha512-+C1H3mXhcvMCeu5i2Jpg9dc0N29TWTuT6vJD7mHLAfVmAbo9zW8NlkvQ1tYd3PDMab0IRQM0ccoyX68EZtx9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^12.1.0", - "filing-cabinet": "^5.0.3", - "precinct": "^12.2.0", - "typescript": "^5.8.3" - }, - "bin": { - "dependency-tree": "bin/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/dependency-tree/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/detective-amd": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz", - "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-module-types": "^6.0.1", - "escodegen": "^2.1.0", - "get-amd-module-type": "^6.0.1", - "node-source-walk": "^7.0.1" - }, - "bin": { - "detective-amd": "bin/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/detective-cjs": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz", - "integrity": "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-module-types": "^6.0.1", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/detective-es6": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz", - "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==", - "dev": true, - "license": "MIT", - "dependencies": { - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/detective-postcss": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz", - "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-url": "^1.2.4", - "postcss-values-parser": "^6.0.2" - }, - "engines": { - "node": "^14.0.0 || >=16.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.47" - } - }, - "node_modules/detective-sass": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz", - "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/detective-scss": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz", - "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==", - "dev": true, - "license": "MIT", - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/detective-stylus": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz", - "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/detective-typescript": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz", - "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "^8.23.0", - "ast-module-types": "^6.0.1", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "typescript": "^5.4.4" - } - }, - "node_modules/detective-vue2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz", - "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@dependents/detective-less": "^5.0.1", - "@vue/compiler-sfc": "^3.5.13", - "detective-es6": "^5.0.1", - "detective-sass": "^6.0.1", - "detective-scss": "^5.0.1", - "detective-stylus": "^5.0.1", - "detective-typescript": "^14.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "typescript": "^5.4.4" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/did-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", - "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", - "license": "Apache-2.0" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/docker-compose": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-1.2.0.tgz", - "integrity": "sha512-wIU1eHk3Op7dFgELRdmOYlPYS4gP8HhH1ZmZa13QZF59y0fblzFDFmKPhyc05phCy2hze9OEvNZAsoljrs+72w==", - "dev": true, - "license": "MIT", - "dependencies": { - "yaml": "^2.2.2" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/docker-modem": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.6.tgz", - "integrity": "sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.15.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/dockerode": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.7.tgz", - "integrity": "sha512-R+rgrSRTRdU5mH14PZTCPZtW/zw3HDWNTS/1ZAQpL/5Upe/ye5K9WQkIysu4wBoiMwKynsz0a8qWuGsHgEvSAA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@balena/dockerignore": "^1.0.2", - "@grpc/grpc-js": "^1.11.1", - "@grpc/proto-loader": "^0.7.13", - "docker-modem": "^5.0.6", - "protobufjs": "^7.3.2", - "tar-fs": "~2.1.2", - "uuid": "^10.0.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/dockerode/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "license": "ISC" - }, - "node_modules/dockerode/node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/dockerode/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dockerode/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/ec-compression": { - "version": "0.0.1-alpha.12", - "resolved": "https://registry.npmjs.org/ec-compression/-/ec-compression-0.0.1-alpha.12.tgz", - "integrity": "sha512-rfsgHPnS/q8SiiJyaJ5w+qpkLtvtvEFOXoh40VmjH+Xs1pjzCCKwhd9Un3BQV+1+Qg0es5VQnzwZVJ7fjzfN+A==" - }, - "node_modules/ed25519-signature-2018-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", - "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", - "license": "BSD-3-Clause" - }, - "node_modules/ed25519-signature-2020-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", - "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==", - "license": "BSD-3-Clause" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.207", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz", - "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==", - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "license": "MIT", "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-publish": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/enhanced-publish/-/enhanced-publish-1.1.4.tgz", - "integrity": "sha512-grP0N7MsOmL++ebP0NE6p32fPJpFOR/q2EJJLNbTd/de4eIiH/q+RVWaLeIP8PAL+GNMpFev6sqpIFXyymxrdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pacote": "^21.0.0" - }, - "bin": { - "enhanced-publish": "index.js" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } + "os": [ + "linux" + ] }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-editor": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", - "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", "license": "MIT", "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } + "os": [ + "linux" + ] }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">=6" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "license": "MIT", "optional": true, - "peer": true, - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } + "os": [ + "linux" + ] }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "optional": true, + "os": [ + "linux" + ] }, - "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==", - "devOptional": true, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/eslint": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", - "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.33.0", - "@eslint/plugin-kit": "^0.3.5", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" + "@napi-rs/wasm-runtime": "^0.2.11" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } + "node": ">=14.0.0" } }, - "node_modules/eslint-plugin-chai-expect": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-chai-expect/-/eslint-plugin-chai-expect-3.1.0.tgz", - "integrity": "sha512-a9F8b38hhJsR7fgDEfyMxppZXCnCW6OOHj7cQfygsm9guXqdSzfpwrHX5FT93gSExDqD71HQglF1lLkGBwhJ+g==", + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "engines": { - "node": "10.* || 12.* || || 14.* || 16.* || >= 18.*" - }, - "peerDependencies": { - "eslint": ">=2.0.0 <= 9.x" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/eslint-plugin-chai-friendly": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-1.1.0.tgz", - "integrity": "sha512-+T1rClpDdXkgBAhC16vRQMI5umiWojVqkj9oUTdpma50+uByCZM/oBfxitZiOkjMRlm725mwFfz/RVgyDRvCKA==", + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "eslint": ">=3.0.0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/eslint-plugin-jest": { - "version": "29.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.0.1.tgz", - "integrity": "sha512-EE44T0OSMCeXhDrrdsbKAhprobKkPtJTbQz5yEktysNpHeDZTAL1SfDTNKmcFfJkY6yrQLtTKZALrD3j/Gpmiw==", + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^8.0.0" - }, - "engines": { - "node": "^20.12.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/eslint-plugin-mocha": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.1.0.tgz", - "integrity": "sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==", + "node_modules/@vue/compiler-core": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.19.tgz", + "integrity": "sha512-/afpyvlkrSNYbPo94Qu8GtIOWS+g5TRdOvs6XZNw6pWQQmj5pBgSZvEPOIZlqWq0YvoUhDDQaQ2TnzuJdOV4hA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.1", - "globals": "^15.14.0" - }, - "peerDependencies": { - "eslint": ">=9.0.0" - } - }, - "node_modules/eslint-plugin-mocha/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/parser": "^7.28.3", + "@vue/shared": "3.5.19", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" } }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "node_modules/@vue/compiler-dom": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.19.tgz", + "integrity": "sha512-Drs6rPHQZx/pN9S6ml3Z3K/TWCIRPvzG2B/o5kFK9X0MNHt8/E+38tiRfojufrYBfA6FQUFB2qBBRXlcSXWtOA==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.19", + "@vue/shared": "3.5.19" } }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "node_modules/@vue/compiler-sfc": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.19.tgz", + "integrity": "sha512-YWCm1CYaJ+2RvNmhCwI7t3I3nU+hOrWGWMsn+Z/kmm1jy5iinnVtlmkiZwbLlbV1SRizX7vHsc0/bG5dj0zRTg==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/compiler-core": "3.5.19", + "@vue/compiler-dom": "3.5.19", + "@vue/compiler-ssr": "3.5.19", + "@vue/shared": "3.5.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" } }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "license": "ISC", + "node_modules/@vue/compiler-ssr": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.19.tgz", + "integrity": "sha512-/wx0VZtkWOPdiQLWPeQeqpHWR/LuNC7bHfSX7OayBTtUy8wur6vT6EQIX6Et86aED6J+y8tTw43qo2uoqGg5sw==", + "dev": true, + "license": "MIT", "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" + "@vue/compiler-dom": "3.5.19", + "@vue/shared": "3.5.19" } }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "node_modules/@vue/shared": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.19.tgz", + "integrity": "sha512-IhXCOn08wgKrLQxRFKKlSacWg4Goi1BolrdEeLYn6tgHjJNXVrWJ5nzoxZqNwl5p88aLlQ8LOaoMa3AYvaKJ/Q==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "event-target-shim": "^5.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6.5" } }, - "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==", - "license": "BSD-2-Clause", + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "acorn": "bin/acorn" }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "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, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "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/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "acorn": "^8.11.0" }, "engines": { - "node": ">=4.0" + "node": ">=0.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, - "license": "BSD-2-Clause", + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 14" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "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, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "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/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/eventsource": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-4.0.0.tgz", - "integrity": "sha512-fvIkb9qZzdMxgZrEQDyll+9oJsyaVvY92I2Re+qK0qEJ+w5s0X3dtz+M0VAPOjP1gtU3iqWyjQ0G3nvd5CLZ2g==", + "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, "license": "MIT", "dependencies": { - "eventsource-parser": "^3.0.1" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=20.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eventsource-parser": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.5.tgz", - "integrity": "sha512-bSRG85ZrMdmWtm7qkF9He9TNRzc/Bm99gEJMaQoHJ9E6Kv9QBbsldh2oMj7iXmYNEAVvNgvv5vPorG6W+XtBhQ==", + "node_modules/ansi-regex": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=20.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/exec-async": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", - "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "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==", + "devOptional": true, "license": "MIT", "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" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/execa/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==", + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/exit-x": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", - "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "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, - "license": "MIT", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, "engines": { - "node": ">= 0.8.0" + "node": ">= 8" } }, - "node_modules/expect": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.5.tgz", - "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==", + "node_modules/app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.0.5", - "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 14" } }, - "node_modules/expo": { - "version": "53.0.20", - "resolved": "https://registry.npmjs.org/expo/-/expo-53.0.20.tgz", - "integrity": "sha512-Nh+HIywVy9KxT/LtH08QcXqrxtUOA9BZhsXn3KCsAYA+kNb80M8VKN8/jfQF+I6CgeKyFKJoPNsWgI0y0VBGrA==", + "node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/runtime": "^7.20.0", - "@expo/cli": "0.24.20", - "@expo/config": "~11.0.13", - "@expo/config-plugins": "~10.1.2", - "@expo/fingerprint": "0.13.4", - "@expo/metro-config": "0.20.17", - "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~13.2.3", - "expo-asset": "~11.1.7", - "expo-constants": "~17.1.7", - "expo-file-system": "~18.1.11", - "expo-font": "~13.3.2", - "expo-keep-awake": "~14.1.4", - "expo-modules-autolinking": "2.1.14", - "expo-modules-core": "2.5.0", - "react-native-edge-to-edge": "1.6.0", - "whatwg-url-without-unicode": "8.0.0-3" - }, - "bin": { - "expo": "bin/cli", - "expo-modules-autolinking": "bin/autolinking", - "fingerprint": "bin/fingerprint" - }, - "peerDependencies": { - "@expo/dom-webview": "*", - "@expo/metro-runtime": "*", - "react": "*", - "react-native": "*", - "react-native-webview": "*" + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" }, - "peerDependenciesMeta": { - "@expo/dom-webview": { - "optional": true + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "@expo/metro-runtime": { - "optional": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "react-native-webview": { - "optional": true + { + "type": "consulting", + "url": "https://feross.org/support" } - } - }, - "node_modules/expo-asset": { - "version": "11.1.7", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.1.7.tgz", - "integrity": "sha512-b5P8GpjUh08fRCf6m5XPVAh7ra42cQrHBIMgH2UXP+xsj4Wufl6pLy6jRF5w6U7DranUMbsXm8TOyq4EHy7ADg==", + ], "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@expo/image-utils": "^0.7.6", - "expo-constants": "~17.1.7" - }, - "peerDependencies": { - "expo": "*", - "react": "*", - "react-native": "*" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/expo-constants": { - "version": "17.1.7", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.1.7.tgz", - "integrity": "sha512-byBjGsJ6T6FrLlhOBxw4EaiMXrZEn/MlUYIj/JAd+FS7ll5X/S4qVRbIimSJtdW47hXMq0zxPfJX6njtA56hHA==", + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@expo/config": "~11.0.12", - "@expo/env": "~1.0.7" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, - "peerDependencies": { - "expo": "*", - "react-native": "*" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/expo-file-system": { - "version": "18.1.11", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.1.11.tgz", - "integrity": "sha512-HJw/m0nVOKeqeRjPjGdvm+zBi5/NxcdPf8M8P3G2JFvH5Z8vBWqVDic2O58jnT1OFEy0XXzoH9UqFu7cHg9DTQ==", + "node_modules/archiver/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "expo": "*", - "react-native": "*" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/expo-font": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.3.2.tgz", - "integrity": "sha512-wUlMdpqURmQ/CNKK/+BIHkDA5nGjMqNlYmW0pJFXY/KE/OG80Qcavdu2sHsL4efAIiNGvYdBS10WztuQYU4X0A==", + "node_modules/archiver/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "fontfaceobserver": "^2.1.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, - "peerDependencies": { - "expo": "*", - "react": "*" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/expo-keep-awake": { - "version": "14.1.4", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.1.4.tgz", - "integrity": "sha512-wU9qOnosy4+U4z/o4h8W9PjPvcFMfZXrlUoKTMBW7F4pLqhkkP/5G4EviPZixv4XWFMjn1ExQ5rV6BX8GwJsWA==", - "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "expo": "*", - "react": "*" - } + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" }, - "node_modules/expo-modules-autolinking": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.3.4.tgz", - "integrity": "sha512-Mu3CIMqEAI8aNM18U/l+7CCi+afU8dERrKjDDEx/Hu7XX3v3FcnnP+NuWDLY/e9/ETzwTJaqoRoBuzhawsuLWw==", - "license": "MIT", - "optional": true, - "dependencies": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "~5.0.0", - "fs-extra": "^9.1.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" - } + "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, + "license": "Python-2.0" }, - "node_modules/expo-modules-core": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.4.10.tgz", - "integrity": "sha512-uCZA3QzF0syRaHwYY99iaNhnye4vSQGsJ/y6IAiesXdbeVahWibX4G1KoKNPUyNsKXIM4tqA+4yByUSvJe4AAw==", + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/expo-modules-core/node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "license": "MIT", - "optional": true + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" }, - "node_modules/expo-random": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-14.0.1.tgz", - "integrity": "sha512-gX2mtR9o+WelX21YizXUCD/y+a4ZL+RDthDmFkHxaYbdzjSYTn8u/igoje/l3WEO+/RYspmqUFa8w/ckNbt6Vg==", - "deprecated": "This package is now deprecated in favor of expo-crypto, which provides the same functionality. To migrate, replace all imports from expo-random with imports from expo-crypto.", + "node_modules/asmcrypto.js": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", + "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==", + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "base64-js": "^1.3.0" - }, - "peerDependencies": { - "expo": "*" + "safer-buffer": "~2.1.0" } }, - "node_modules/expo/node_modules/expo-modules-autolinking": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.1.14.tgz", - "integrity": "sha512-nT5ERXwc+0ZT/pozDoJjYZyUQu5RnXMk9jDGm5lg+PiKvsrCTSA/2/eftJGMxLkTjVI2MXp5WjSz3JRjbA7UXA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/asn1js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", + "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", + "license": "BSD-3-Clause", "dependencies": { - "@expo/spawn-async": "^1.7.2", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "find-up": "^5.0.0", - "glob": "^10.4.2", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0" + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/expo/node_modules/expo-modules-core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.5.0.tgz", - "integrity": "sha512-aIbQxZE2vdCKsolQUl6Q9Farlf8tjh/ROR4hfN1qT7QBGPl1XrJGnaOKkcgYaGrlzCPg/7IBe0Np67GzKMZKKQ==", + "node_modules/ast-module-types": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz", + "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "invariant": "^2.2.4" + "engines": { + "node": ">=18" } }, - "node_modules/expo/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==", - "license": "MIT", + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", "optional": true, - "peer": true, "engines": { - "node": ">=8" + "node": ">= 4.0.0" } }, - "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "devOptional": true, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true, "license": "Apache-2.0" }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node_modules/b64-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", + "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", + "license": "MIT", + "dependencies": { + "base-64": "^0.1.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/b64u-lite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", + "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "b64-lite": "^1.4.0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", + "node_modules/babel-jest": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.5.tgz", + "integrity": "sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==", + "dev": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.0.6" + "@jest/transform": "30.0.5", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.0", + "babel-preset-jest": "30.0.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.11.0" } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "license": "ISC", + "node_modules/babel-plugin-istanbul": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", + "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "type": "^2.7.2" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" } }, - "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==", - "license": "MIT" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "node_modules/babel-plugin-jest-hoist": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", + "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "devOptional": true, "license": "MIT", "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.8" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "@types/babel__core": "^7.20.5" }, "engines": { - "node": ">=8.6.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.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==", - "devOptional": true, - "license": "ISC", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "@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" }, - "engines": { - "node": ">= 6" + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, - "node_modules/fast-json-patch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", - "license": "MIT" - }, - "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==", - "devOptional": true, - "license": "MIT" - }, - "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==", - "license": "MIT" - }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", - "license": "Apache-2.0" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "devOptional": true, - "license": "ISC", + "node_modules/babel-preset-jest": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", + "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", + "dev": true, + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "babel-plugin-jest-hoist": "30.0.1", + "babel-preset-current-node-syntax": "^1.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" } }, - "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==", - "devOptional": true, + "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, + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.1.tgz", + "integrity": "sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==", + "dev": true, "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } + "optional": true }, - "node_modules/fetch-blob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", - "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", - "license": "MIT", + "node_modules/bare-fs": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.2.1.tgz", + "integrity": "sha512-mELROzV0IhqilFgsl1gyp48pnZsaV9xhQapHLDsvn4d4ZTfbFhcghQezl7FTEDNBcGqLUnNI3lUlm6ecrLWdFA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" + }, "engines": { - "node": "^10.17.0 || >=12.3.0" + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" }, "peerDependenciesMeta": { - "domexception": { + "bare-buffer": { "optional": true } } }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, + "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=16.0.0" + "bare": ">=1.14.0" } }, - "node_modules/filing-cabinet": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-5.0.3.tgz", - "integrity": "sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg==", + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "app-module-path": "^2.2.0", - "commander": "^12.1.0", - "enhanced-resolve": "^5.18.0", - "module-definition": "^6.0.1", - "module-lookup-amd": "^9.0.3", - "resolve": "^1.22.10", - "resolve-dependency-path": "^4.0.1", - "sass-lookup": "^6.1.0", - "stylus-lookup": "^6.1.0", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.7.3" + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" }, - "bin": { - "filing-cabinet": "bin/cli.js" + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" }, - "engines": { - "node": ">=18" + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } } }, - "node_modules/filing-cabinet/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, + "node_modules/base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">=6.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==", - "devOptional": true, - "license": "MIT", + "node_modules/base64url-universal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-2.0.0.tgz", + "integrity": "sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw==", + "license": "BSD-3-Clause", "dependencies": { - "to-regex-range": "^5.0.1" + "base64url": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" } }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": "*" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "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==", - "devOptional": true, + "node_modules/borc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/borc/-/borc-3.0.0.tgz", + "integrity": "sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g==", "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "bignumber.js": "^9.0.0", + "buffer": "^6.0.3", + "commander": "^2.15.0", + "ieee754": "^1.1.13", + "iso-url": "^1.1.5", + "json-text-sequence": "~0.3.0", + "readable-stream": "^3.6.0" }, - "engines": { - "node": ">=10" + "bin": { + "cbor2comment": "bin/cbor2comment.js", + "cbor2diag": "bin/cbor2diag.js", + "cbor2json": "bin/cbor2json.js", + "json2cbor": "bin/json2cbor.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" + } + }, + "node_modules/borc/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/fix-esm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fix-esm/-/fix-esm-1.0.1.tgz", - "integrity": "sha512-EZtb7wPXZS54GaGxaWxMlhd1DUDCnAg5srlYdu/1ZVeW+7wwR3Tp59nu52dXByFs3MBRq+SByx1wDOJpRvLEXw==", - "license": "WTFPL OR CC0-1.0", + "node_modules/borc/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.14.6", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, + "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==", + "devOptional": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=16" + "node": ">=8" } }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/flow-enums-runtime": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", - "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "node_modules/browserslist": { + "version": "4.25.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", + "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", "funding": [ { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "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" } ], "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fontfaceobserver": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", - "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", - "license": "BSD-2-Clause", - "optional": true, - "peer": true - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "devOptional": true, - "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "caniuse-lite": "^1.0.30001735", + "electron-to-chromium": "^1.5.204", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" }, - "engines": { - "node": ">=14" + "bin": { + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "fast-json-stable-stringify": "2.x" }, "engines": { "node": ">= 6" } }, - "node_modules/format-util": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", - "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==", - "license": "MIT" - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "license": "MIT", + "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, + "license": "Apache-2.0", "dependencies": { - "fetch-blob": "^3.1.2" - }, + "node-int64": "^0.4.0" + } + }, + "node_modules/bson": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=12.20.0" + "node": ">=16.20.1" } }, - "node_modules/formdata-polyfill/node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/jimmywarting" + "url": "https://github.com/sponsors/feross" }, { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } ], "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=8.0.0" } }, - "node_modules/freeport-async": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", - "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", - "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, "optional": true, - "peer": true, "engines": { - "node": ">=8" + "node": ">=10.0.0" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "license": "MIT", - "optional": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "bin": { + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" } }, - "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==", - "devOptional": true, - "license": "ISC" + "node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.4" } }, - "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/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, "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==", + "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, "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=6" } }, - "node_modules/get-amd-module-type": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz", - "integrity": "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==", + "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, "license": "MIT", - "dependencies": { - "ast-module-types": "^6.0.1", - "node-source-walk": "^7.0.1" - }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "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==", - "devOptional": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001736", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001736.tgz", + "integrity": "sha512-ImpN5gLEY8gWeqfLUyEF4b7mYWcYoR2Si1VhnrbM4JizRFmfGaAQ12PhNykq6nvI4XvKLrsp8Xde74D5phJOSw==", + "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" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.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==", + "devOptional": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "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, - "license": "ISC" - }, - "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==", - "devOptional": true, "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/get-port": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", - "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/cjs-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", + "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" + }, + "node_modules/class-validator": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", + "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.10.53", + "validator": "^13.9.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "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==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-from-current-process-h": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz", - "integrity": "sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==", - "license": "MIT" - }, - "node_modules/get-uv-event-loop-napi-h": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz", - "integrity": "sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==", - "license": "MIT", + "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, + "license": "ISC", "dependencies": { - "get-symbol-from-current-process-h": "^1.0.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/getenv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/getenv/-/getenv-2.0.0.tgz", - "integrity": "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==", + "node_modules/cliui/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, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/cliui/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, + "license": "MIT" }, - "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/cliui/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, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "devOptional": true, + "node_modules/cliui/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, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "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/cliui/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, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/gonzales-pe": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", - "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "gonzales": "bin/gonzales.js" - }, "engines": { - "node": ">=0.6.0" + "node": ">=0.8" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "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, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "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==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "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, "license": "MIT" }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "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==", + "devOptional": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">=7.0.0" } }, - "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/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==", "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "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==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "delayed-stream": "~1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "devOptional": true, "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "license": "MIT" + }, + "node_modules/compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 14" } }, - "node_modules/hermes-estree": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "node_modules/compress-commons/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "hermes-estree": "0.25.1" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^10.0.1" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "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, - "license": "ISC" + "license": "MIT" }, - "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/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==", "license": "MIT" }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } + "license": "MIT" }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "node_modules/correlation-id": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/correlation-id/-/correlation-id-5.2.0.tgz", + "integrity": "sha512-qTsYujgBvWIx05qF9HV4+KoezGTelgqJiFnyEfRsEqjpQUZdWnraOGHD+IMep7lPFg6MiI55fvpC4qruKdY5Dw==", "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, "engines": { - "node": ">= 14" + "node": ">=14.17.0" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", + "node_modules/cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "dev": true, + "hasInstallScript": true, + "optional": true, "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "buildcheck": "~0.0.6", + "nan": "^2.19.0" }, "engines": { - "node": ">= 14" + "node": ">=10.0.0" } }, - "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==", + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, "engines": { - "node": ">=10.17.0" + "node": ">=0.8" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/crc32-stream/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, "funding": [ { "type": "github", @@ -12557,2402 +5994,2253 @@ "url": "https://feross.org/support" } ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "devOptional": true, "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", - "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", - "dev": true, - "license": "ISC", "dependencies": { - "minimatch": "^10.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "node_modules/crc32-stream/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", - "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": ">=16.x" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, + "license": "MIT" + }, + "node_modules/credentials-context": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz", + "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node-fetch": "^2.7.0" } }, - "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, + "node_modules/cross-fetch/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==", "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "dependencies": { + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "4.x || >=6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "devOptional": true, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/cross-fetch/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==", + "license": "BSD-2-Clause" + }, + "node_modules/cross-fetch/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==", "license": "MIT", - "engines": { - "node": ">=0.8.19" + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.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.", - "devOptional": true, - "license": "ISC", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", - "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", - "dev": true, - "license": "ISC", + "node_modules/crypto-ld": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-6.0.0.tgz", + "integrity": "sha512-XWL1LslqggNoaCI/m3I7HcvaSt9b2tYzdrXO+jHLUj9G1BvRfvV7ZTFDVY5nifYuIGAPdAGu7unPxLRustw3VA==", + "license": "BSD-3-Clause", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8.3.0" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", "license": "MIT", - "optional": true, - "dependencies": { - "loose-envify": "^1.0.0" + "engines": { + "node": ">= 6" } }, - "node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 12" + "node": ">=4.0" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/dcql": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dcql/-/dcql-0.3.0.tgz", + "integrity": "sha512-Q/yEf1itIpAYpLbGJsdGMj5Q2Ug0/NMYmyYiJWlKjk7LQOkDJ5Qh6ebLbiZBQ7gsvNBGWiOhtL306j5WdXcOcA==", "license": "MIT", - "engines": { - "node": ">= 0.10" + "dependencies": { + "valibot": "1.0.0-beta.8" } }, - "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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "devOptional": true, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "devOptional": true, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4.0.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==", - "devOptional": 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==", + "license": "MIT" + }, + "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, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "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==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.4.0" } }, - "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==", - "devOptional": true, + "node_modules/dependency-tree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-11.2.0.tgz", + "integrity": "sha512-+C1H3mXhcvMCeu5i2Jpg9dc0N29TWTuT6vJD7mHLAfVmAbo9zW8NlkvQ1tYd3PDMab0IRQM0ccoyX68EZtx9xw==", + "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "commander": "^12.1.0", + "filing-cabinet": "^5.0.3", + "precinct": "^12.2.0", + "typescript": "^5.8.3" + }, + "bin": { + "dependency-tree": "bin/cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/dependency-tree/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" } }, - "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==", - "devOptional": true, + "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, "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=8" } }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "node_modules/detective-amd": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz", + "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==", "dev": true, "license": "MIT", + "dependencies": { + "ast-module-types": "^6.0.1", + "escodegen": "^2.1.0", + "get-amd-module-type": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "bin": { + "detective-amd": "bin/cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "node_modules/detective-cjs": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz", + "integrity": "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==", "dev": true, "license": "MIT", + "dependencies": { + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "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==", + "node_modules/detective-es6": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz", + "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "node-source-walk": "^7.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/detective-postcss": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz", + "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==", "dev": true, "license": "MIT", + "dependencies": { + "is-url": "^1.2.4", + "postcss-values-parser": "^6.0.2" + }, "engines": { - "node": ">=10" + "node": "^14.0.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.47" } }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-url-superb": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", - "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", + "node_modules/detective-sass": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz", + "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/detective-scss": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz", + "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "is-docker": "^2.0.0" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/detective-stylus": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz", + "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==", "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/isomorphic-webcrypto": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", - "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", + "node_modules/detective-typescript": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz", + "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==", + "dev": true, "license": "MIT", "dependencies": { - "@peculiar/webcrypto": "^1.0.22", - "asmcrypto.js": "^0.22.0", - "b64-lite": "^1.3.1", - "b64u-lite": "^1.0.1", - "msrcrypto": "^1.5.6", - "str2buf": "^1.3.0", - "webcrypto-shim": "^0.1.4" + "@typescript-eslint/typescript-estree": "^8.23.0", + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" }, - "optionalDependencies": { - "@unimodules/core": "*", - "@unimodules/react-native-adapter": "*", - "expo-random": "*", - "react-native-securerandom": "^0.1.1" - } - }, - "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==", - "devOptional": true, - "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "typescript": "^5.4.4" } }, - "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==", + "node_modules/detective-vue2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz", + "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "@dependents/detective-less": "^5.0.1", + "@vue/compiler-sfc": "^3.5.13", + "detective-es6": "^5.0.1", + "detective-sass": "^6.0.1", + "detective-scss": "^5.0.1", + "detective-stylus": "^5.0.1", + "detective-typescript": "^14.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "peerDependencies": { + "typescript": "^5.4.4" } }, - "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==", + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "asap": "^2.0.0", + "wrappy": "1" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "node_modules/did-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", + "license": "Apache-2.0" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/docker-compose": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-1.2.0.tgz", + "integrity": "sha512-wIU1eHk3Op7dFgELRdmOYlPYS4gP8HhH1ZmZa13QZF59y0fblzFDFmKPhyc05phCy2hze9OEvNZAsoljrs+72w==", + "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" + "yaml": "^2.2.2" }, "engines": { - "node": ">=10" + "node": ">= 6.0.0" } }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "node_modules/docker-modem": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.6.tgz", + "integrity": "sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" }, "engines": { - "node": ">=8" + "node": ">= 8.0" } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "devOptional": true, - "license": "BlueOak-1.0.0", + "node_modules/dockerode": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.7.tgz", + "integrity": "sha512-R+rgrSRTRdU5mH14PZTCPZtW/zw3HDWNTS/1ZAQpL/5Upe/ye5K9WQkIysu4wBoiMwKynsz0a8qWuGsHgEvSAA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@balena/dockerignore": "^1.0.2", + "@grpc/grpc-js": "^1.11.1", + "@grpc/proto-loader": "^0.7.13", + "docker-modem": "^5.0.6", + "protobufjs": "^7.3.2", + "tar-fs": "~2.1.2", + "uuid": "^10.0.0" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": ">= 8.0" } }, - "node_modules/jest": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.5.tgz", - "integrity": "sha512-y2mfcJywuTUkvLm2Lp1/pFX8kTgMO5yyQGq/Sk/n2mN7XWYp4JsCZ/QXW34M8YScgk8bPZlREH04f6blPnoHnQ==", + "node_modules/dockerode/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "license": "ISC" + }, + "node_modules/dockerode/node_modules/tar-fs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.0.5", - "@jest/types": "30.0.5", - "import-local": "^3.2.0", - "jest-cli": "30.0.5" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/jest-changed-files": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", - "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", + "node_modules/dockerode/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "license": "MIT", "dependencies": { - "execa": "^5.1.1", - "jest-util": "30.0.5", - "p-limit": "^3.1.0" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=6" } }, - "node_modules/jest-circus": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.5.tgz", - "integrity": "sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug==", + "node_modules/dockerode/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", - "dependencies": { - "@jest/environment": "30.0.5", - "@jest/expect": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "chalk": "^4.1.2", - "co": "^4.6.0", - "dedent": "^1.6.0", - "is-generator-fn": "^2.1.0", - "jest-each": "30.0.5", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-runtime": "30.0.5", - "jest-snapshot": "30.0.5", - "jest-util": "30.0.5", - "p-limit": "^3.1.0", - "pretty-format": "30.0.5", - "pure-rand": "^7.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/jest-cli": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.5.tgz", - "integrity": "sha512-Sa45PGMkBZzF94HMrlX4kUyPOwUpdZasaliKN3mifvDmkhLYqLLg8HQTzn6gq7vJGahFYMQjXgyJWfYImKZzOw==", - "dev": true, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "@jest/core": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/types": "30.0.5", - "chalk": "^4.1.2", - "exit-x": "^0.2.2", - "import-local": "^3.2.0", - "jest-config": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "yargs": "^17.7.2" - }, - "bin": { - "jest": "bin/jest.js" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/jest-config": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.5.tgz", - "integrity": "sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ec-compression": { + "version": "0.0.1-alpha.12", + "resolved": "https://registry.npmjs.org/ec-compression/-/ec-compression-0.0.1-alpha.12.tgz", + "integrity": "sha512-rfsgHPnS/q8SiiJyaJ5w+qpkLtvtvEFOXoh40VmjH+Xs1pjzCCKwhd9Un3BQV+1+Qg0es5VQnzwZVJ7fjzfN+A==" + }, + "node_modules/ed25519-signature-2018-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", + "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", + "license": "BSD-3-Clause" + }, + "node_modules/ed25519-signature-2020-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", + "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==", + "license": "BSD-3-Clause" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.207", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz", + "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==", + "license": "ISC" + }, + "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, "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/get-type": "30.0.1", - "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.0.5", - "@jest/types": "30.0.5", - "babel-jest": "30.0.5", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "deepmerge": "^4.3.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-circus": "30.0.5", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.5", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-runner": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "micromatch": "^4.0.8", - "parse-json": "^5.2.0", - "pretty-format": "30.0.5", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "esbuild-register": ">=3.4.0", - "ts-node": ">=9.0.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild-register": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node_modules/jest-diff": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.5.tgz", - "integrity": "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "pretty-format": "30.0.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "once": "^1.4.0" } }, - "node_modules/jest-docblock": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", - "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", + "node_modules/enhanced-publish": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/enhanced-publish/-/enhanced-publish-1.1.4.tgz", + "integrity": "sha512-grP0N7MsOmL++ebP0NE6p32fPJpFOR/q2EJJLNbTd/de4eIiH/q+RVWaLeIP8PAL+GNMpFev6sqpIFXyymxrdw==", "dev": true, "license": "MIT", "dependencies": { - "detect-newline": "^3.1.0" + "pacote": "^21.0.0" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "bin": { + "enhanced-publish": "index.js" } }, - "node_modules/jest-each": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.5.tgz", - "integrity": "sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ==", + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", - "@jest/types": "30.0.5", - "chalk": "^4.1.2", - "jest-util": "30.0.5", - "pretty-format": "30.0.5" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.13.0" } }, - "node_modules/jest-environment-node": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.5.tgz", - "integrity": "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.0.5", - "@jest/fake-timers": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "jest-mock": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.0.5" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=6" } }, - "node_modules/jest-expect-message": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.1.3.tgz", - "integrity": "sha512-bTK77T4P+zto+XepAX3low8XVQxDgaEqh3jSTQOG8qvPpD69LsIdyJTa+RmnJh3HNSzJng62/44RPPc7OIlFxg==", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true, "license": "MIT" }, - "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==", + "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, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-haste-map": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.5.tgz", - "integrity": "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg==", - "dev": true, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", - "jest-worker": "30.0.5", - "micromatch": "^4.0.8", - "walker": "^1.0.8" + "es-errors": "^1.3.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, - "optionalDependencies": { - "fsevents": "^2.3.3" + "engines": { + "node": ">= 0.4" } }, - "node_modules/jest-leak-detector": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.5.tgz", - "integrity": "sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "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, "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@jest/get-type": "30.0.1", - "pretty-format": "30.0.5" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/jest-matcher-utils": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", - "integrity": "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==", + "node_modules/eslint": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", + "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "jest-diff": "30.0.5", - "pretty-format": "30.0.5" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.33.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/jest-message-util": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.5.tgz", - "integrity": "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==", + "node_modules/eslint-plugin-chai-expect": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-chai-expect/-/eslint-plugin-chai-expect-3.1.0.tgz", + "integrity": "sha512-a9F8b38hhJsR7fgDEfyMxppZXCnCW6OOHj7cQfygsm9guXqdSzfpwrHX5FT93gSExDqD71HQglF1lLkGBwhJ+g==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.5", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.5", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "10.* || 12.* || || 14.* || 16.* || >= 18.*" + }, + "peerDependencies": { + "eslint": ">=2.0.0 <= 9.x" } }, - "node_modules/jest-mock": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", - "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", + "node_modules/eslint-plugin-chai-friendly": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-1.1.0.tgz", + "integrity": "sha512-+T1rClpDdXkgBAhC16vRQMI5umiWojVqkj9oUTdpma50+uByCZM/oBfxitZiOkjMRlm725mwFfz/RVgyDRvCKA==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/types": "30.0.5", - "@types/node": "*", - "jest-util": "30.0.5" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=3.0.0" } }, - "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==", + "node_modules/eslint-plugin-jest": { + "version": "29.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.0.1.tgz", + "integrity": "sha512-EE44T0OSMCeXhDrrdsbKAhprobKkPtJTbQz5yEktysNpHeDZTAL1SfDTNKmcFfJkY6yrQLtTKZALrD3j/Gpmiw==", "dev": true, "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.0.0" + }, "engines": { - "node": ">=6" + "node": "^20.12.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "jest-resolve": "*" + "@typescript-eslint/eslint-plugin": "^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "jest": "*" }, "peerDependenciesMeta": { - "jest-resolve": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { "optional": true } } }, - "node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "node_modules/eslint-plugin-mocha": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.1.0.tgz", + "integrity": "sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==", "dev": true, "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.1", + "globals": "^15.14.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0" } }, - "node_modules/jest-resolve": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.5.tgz", - "integrity": "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg==", + "node_modules/eslint-plugin-mocha/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "slash": "^3.0.0", - "unrs-resolver": "^1.7.11" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve-dependencies": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.5.tgz", - "integrity": "sha512-/xMvBR4MpwkrHW4ikZIWRttBBRZgWK4d6xt3xW1iRDSKt4tXzYkMkyPfBnSCgv96cpkrctfXs6gexeqMYqdEpw==", + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "jest-regex-util": "30.0.1", - "jest-snapshot": "30.0.5" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-runner": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.5.tgz", - "integrity": "sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw==", + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "30.0.5", - "@jest/environment": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.5", - "jest-haste-map": "30.0.5", - "jest-leak-detector": "30.0.5", - "jest-message-util": "30.0.5", - "jest-resolve": "30.0.5", - "jest-runtime": "30.0.5", - "jest-util": "30.0.5", - "jest-watcher": "30.0.5", - "jest-worker": "30.0.5", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-runtime": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.5.tgz", - "integrity": "sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A==", + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/fake-timers": "30.0.5", - "@jest/globals": "30.0.5", - "@jest/source-map": "30.0.1", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "chalk": "^4.1.2", - "cjs-module-lexer": "^2.1.0", - "collect-v8-coverage": "^1.0.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "jest-message-util": "30.0.5", - "jest-mock": "30.0.5", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-snapshot": "30.0.5", - "jest-util": "30.0.5", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-snapshot": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.5.tgz", - "integrity": "sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.0.5", - "@jest/get-type": "30.0.1", - "@jest/snapshot-utils": "30.0.5", - "@jest/transform": "30.0.5", - "@jest/types": "30.0.5", - "babel-preset-current-node-syntax": "^1.1.0", - "chalk": "^4.1.2", - "expect": "30.0.5", - "graceful-fs": "^4.2.11", - "jest-diff": "30.0.5", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-util": "30.0.5", - "pretty-format": "30.0.5", - "semver": "^7.7.2", - "synckit": "^0.11.8" + "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==", + "license": "BSD-2-Clause", + "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, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10" } }, - "node_modules/jest-util": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", - "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", + "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, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@jest/types": "30.0.5", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" + "estraverse": "^5.2.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=4.0" } }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "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, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=4.0" } }, - "node_modules/jest-validate": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.5.tgz", - "integrity": "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-4.0.0.tgz", + "integrity": "sha512-fvIkb9qZzdMxgZrEQDyll+9oJsyaVvY92I2Re+qK0qEJ+w5s0X3dtz+M0VAPOjP1gtU3iqWyjQ0G3nvd5CLZ2g==", "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", - "@jest/types": "30.0.5", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.0.5" + "eventsource-parser": "^3.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "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==", + "node_modules/eventsource-parser": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.5.tgz", + "integrity": "sha512-bSRG85ZrMdmWtm7qkF9He9TNRzc/Bm99gEJMaQoHJ9E6Kv9QBbsldh2oMj7iXmYNEAVvNgvv5vPorG6W+XtBhQ==", + "license": "MIT", + "engines": { + "node": ">=20.0.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, "license": "MIT", + "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/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/jest-watcher": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.5.tgz", - "integrity": "sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg==", + "node_modules/execa/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, + "license": "ISC" + }, + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/test-result": "30.0.5", - "@jest/types": "30.0.5", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "jest-util": "30.0.5", - "string-length": "^4.0.2" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.8.0" } }, - "node_modules/jest-worker": { + "node_modules/expect": { "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.5.tgz", - "integrity": "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ==", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.5.tgz", + "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.0.5", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" + "@jest/expect-utils": "30.0.5", + "@jest/get-type": "30.0.1", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "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, + "node_modules/expo-modules-autolinking": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.3.4.tgz", + "integrity": "sha512-Mu3CIMqEAI8aNM18U/l+7CCi+afU8dERrKjDDEx/Hu7XX3v3FcnnP+NuWDLY/e9/ETzwTJaqoRoBuzhawsuLWw==", "license": "MIT", + "optional": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "~5.0.0", + "fs-extra": "^9.1.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "node_modules/jimp-compact": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", - "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "node_modules/expo-modules-core": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.4.10.tgz", + "integrity": "sha512-uCZA3QzF0syRaHwYY99iaNhnye4vSQGsJ/y6IAiesXdbeVahWibX4G1KoKNPUyNsKXIM4tqA+4yByUSvJe4AAw==", "license": "MIT", "optional": true, - "peer": true + "dependencies": { + "compare-versions": "^3.4.0", + "invariant": "^2.2.4" + } }, - "node_modules/js-base64": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", - "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", - "license": "BSD-3-Clause" + "node_modules/expo-modules-core/node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "license": "MIT", + "optional": 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==", + "node_modules/expo-random": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-14.0.1.tgz", + "integrity": "sha512-gX2mtR9o+WelX21YizXUCD/y+a4ZL+RDthDmFkHxaYbdzjSYTn8u/igoje/l3WEO+/RYspmqUFa8w/ckNbt6Vg==", + "deprecated": "This package is now deprecated in favor of expo-crypto, which provides the same functionality. To migrate, replace all imports from expo-random with imports from expo-crypto.", + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "^1.3.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "dev": true, + "license": "Apache-2.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==", "license": "MIT" }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "devOptional": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=8.6.0" } }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", - "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", - "license": "0BSD", - "optional": true, - "peer": true - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "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==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "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, + "node_modules/fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", "license": "MIT" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", - "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "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==", + "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, "license": "MIT" }, - "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, + "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==", "license": "MIT" }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "license": "ISC" + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "license": "Apache-2.0" }, - "node_modules/json-text-sequence": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.3.0.tgz", - "integrity": "sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA==", - "license": "MIT", + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "devOptional": true, + "license": "ISC", "dependencies": { - "@sovpro/delimited-stream": "^1.1.0" - }, - "engines": { - "node": ">=10.18.0" + "reusify": "^1.0.4" } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" + "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, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" } }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/fetch-blob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", + "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", "license": "MIT", - "optional": true, - "dependencies": { - "universalify": "^2.0.0" + "engines": { + "node": "^10.17.0 || >=12.3.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "peerDependenciesMeta": { + "domexception": { + "optional": true + } } }, - "node_modules/jsonld": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", - "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", - "license": "BSD-3-Clause", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" + "flat-cache": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=16.0.0" } }, - "node_modules/jsonld-signatures": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz", - "integrity": "sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw==", - "license": "BSD-3-Clause", + "node_modules/filing-cabinet": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-5.0.3.tgz", + "integrity": "sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg==", + "dev": true, + "license": "MIT", "dependencies": { - "@digitalbazaar/security-context": "^1.0.0", - "jsonld": "^8.0.0", - "rdf-canonize": "^4.0.1", - "serialize-error": "^8.1.0" + "app-module-path": "^2.2.0", + "commander": "^12.1.0", + "enhanced-resolve": "^5.18.0", + "module-definition": "^6.0.1", + "module-lookup-amd": "^9.0.3", + "resolve": "^1.22.10", + "resolve-dependency-path": "^4.0.1", + "sass-lookup": "^6.1.0", + "stylus-lookup": "^6.1.0", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.7.3" }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jsonld-signatures/node_modules/rdf-canonize": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", - "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" + "bin": { + "filing-cabinet": "bin/cli.js" }, "engines": { "node": ">=18" } }, - "node_modules/jsonld/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonld/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/jwt-decode": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/filing-cabinet/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", - "dependencies": { - "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==", - "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/ky": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", - "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", + "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==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "to-regex-range": "^5.0.1" }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/ky-universal": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", - "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", + "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==", + "devOptional": true, "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "3.0.0-beta.9" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=10.17" + "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.17.0", - "web-streams-polyfill": ">=2.0.0" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lan-network": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/lan-network/-/lan-network-0.1.7.tgz", - "integrity": "sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==", - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "lan-network": "dist/lan-network-cli.js" + "node_modules/fix-esm": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-esm/-/fix-esm-1.0.1.tgz", + "integrity": "sha512-EZtb7wPXZS54GaGxaWxMlhd1DUDCnAg5srlYdu/1ZVeW+7wwR3Tp59nu52dXByFs3MBRq+SByx1wDOJpRvLEXw==", + "license": "WTFPL OR CC0-1.0", + "dependencies": { + "@babel/core": "^7.14.6", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5" } }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "^2.0.5" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": ">= 0.6.3" + "node": ">=16" } }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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==", - "devOptional": true, - "license": "MIT", + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=6" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/levn": { - "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, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 6" } }, - "node_modules/libphonenumber-js": { - "version": "1.12.13", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.13.tgz", - "integrity": "sha512-QZXnR/OGiDcBjF4hGk0wwVrPcZvbSSyzlvkjXv5LFfktj7O2VZDrt4Xs8SgR/vOFco+qk1i8J43ikMXZoTrtPw==", + "node_modules/format-util": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", + "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==", "license": "MIT" }, - "node_modules/libsodium-sumo": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.15.tgz", - "integrity": "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==", - "license": "ISC" - }, - "node_modules/libsodium-wrappers-sumo": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.15.tgz", - "integrity": "sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==", - "license": "ISC", + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", "dependencies": { - "libsodium-sumo": "^0.7.15" + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" } }, - "node_modules/license-checker": { - "version": "25.0.1", - "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", - "integrity": "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/formdata-polyfill/node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", "dependencies": { - "chalk": "^2.4.1", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "read-installed": "~4.0.3", - "semver": "^5.5.0", - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0", - "spdx-satisfies": "^4.0.0", - "treeify": "^1.1.0" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, - "bin": { - "license-checker": "bin/license-checker" + "engines": { + "node": "^12.20 || >= 14.13" } }, - "node_modules/license-checker/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==", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "license": "MIT", + "optional": true, "dependencies": { - "color-convert": "^1.9.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/license-checker/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==", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/license-checker/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==", + "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, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } + "license": "ISC" }, - "node_modules/license-checker/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==", + "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, - "license": "MIT" + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "node_modules/license-checker/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "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==", "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/license-checker/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, + "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==", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=6.9.0" } }, - "node_modules/license-checker/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==", + "node_modules/get-amd-module-type": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz", + "integrity": "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==", "dev": true, "license": "MIT", + "dependencies": { + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/license-checker/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "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, "license": "ISC", - "bin": { - "semver": "bin/semver" + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/license-checker/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, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" - } + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true, + "license": "ISC" }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/get-port": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", + "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/lightningcss": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.27.0.tgz", - "integrity": "sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==", - "license": "MPL-2.0", - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^1.0.3" - }, "engines": { - "node": ">= 12.0.0" + "node": ">=16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.27.0", - "lightningcss-darwin-x64": "1.27.0", - "lightningcss-freebsd-x64": "1.27.0", - "lightningcss-linux-arm-gnueabihf": "1.27.0", - "lightningcss-linux-arm64-gnu": "1.27.0", - "lightningcss-linux-arm64-musl": "1.27.0", - "lightningcss-linux-x64-gnu": "1.27.0", - "lightningcss-linux-x64-musl": "1.27.0", - "lightningcss-win32-arm64-msvc": "1.27.0", - "lightningcss-win32-x64-msvc": "1.27.0" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.27.0.tgz", - "integrity": "sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">= 0.4" } }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz", - "integrity": "sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, + "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, + "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz", - "integrity": "sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz", - "integrity": "sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==", - "cpu": [ - "arm" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">= 12.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz", - "integrity": "sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "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, + "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz", - "integrity": "sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" } }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz", - "integrity": "sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz", - "integrity": "sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "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==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, "engines": { - "node": ">= 12.0.0" + "node": ">=0.4.7" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz", - "integrity": "sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "peer": 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==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=8" } }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz", - "integrity": "sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "peer": true, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "devOptional": true, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dev": true, - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT", - "optional": true, - "peer": true + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "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==", + "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, "license": "MIT" }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", - "license": "MIT", - "optional": true, - "peer": true + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==", + "license": "ISC" + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "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, "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, "engines": { - "node": ">=8.0" + "node": ">=10.17.0" } }, - "node_modules/lokijs": { - "version": "1.5.12", - "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.12.tgz", - "integrity": "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==", - "license": "MIT" - }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "optional": true, "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lru_map": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", - "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", - "license": "MIT" - }, - "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==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/luxon": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.1.tgz", - "integrity": "sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==", + "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, "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 4" } }, - "node_modules/madge": { + "node_modules/ignore-walk": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/madge/-/madge-8.0.0.tgz", - "integrity": "sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "chalk": "^4.1.2", - "commander": "^7.2.0", - "commondir": "^1.0.1", - "debug": "^4.3.4", - "dependency-tree": "^11.0.0", - "ora": "^5.4.1", - "pluralize": "^8.0.0", - "pretty-ms": "^7.0.1", - "rc": "^1.2.8", - "stream-to-array": "^2.3.0", - "ts-graphviz": "^2.1.2", - "walkdir": "^0.4.1" + "minimatch": "^10.0.3" }, - "bin": { - "madge": "bin/cli.js" + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=18" + "node": "20 || >=22" }, "funding": { - "type": "individual", - "url": "https://www.paypal.me/pahen" - }, - "peerDependencies": { - "typescript": "^5.4.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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, "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", - "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.8.19" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "devOptional": true, - "license": "BSD-3-Clause", + "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, + "license": "ISC", "dependencies": { - "tmpl": "1.0.5" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/marky": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", - "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", - "license": "Apache-2.0", - "optional": true, - "peer": true - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", + "node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "license": "MIT", "optional": true, - "peer": true + "dependencies": { + "loose-envify": "^1.0.0" + } }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "dev": true, - "license": "MIT" - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 12" } }, - "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==", - "devOptional": 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, "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "devOptional": true, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/metro": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.82.5.tgz", - "integrity": "sha512-8oAXxL7do8QckID/WZEKaIFuQJFUTLzfVcC48ghkHhNK2RGuQq8Xvf4AVd+TUA0SZtX0q8TGNXZ/eba1ckeGCg==", + "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, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "@babel/types": "^7.25.2", - "accepts": "^1.3.7", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "error-stack-parser": "^2.0.6", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.29.1", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.82.5", - "metro-cache": "0.82.5", - "metro-cache-key": "0.82.5", - "metro-config": "0.82.5", - "metro-core": "0.82.5", - "metro-file-map": "0.82.5", - "metro-resolver": "0.82.5", - "metro-runtime": "0.82.5", - "metro-source-map": "0.82.5", - "metro-symbolicate": "0.82.5", - "metro-transform-plugins": "0.82.5", - "metro-transform-worker": "0.82.5", - "mime-types": "^2.1.27", - "nullthrows": "^1.1.1", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "throat": "^5.0.0", - "ws": "^7.5.10", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" - }, "engines": { - "node": ">=18.18" + "node": ">=8" } }, - "node_modules/metro-babel-transformer": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.82.5.tgz", - "integrity": "sha512-W/scFDnwJXSccJYnOFdGiYr9srhbHPdxX9TvvACOFsIXdLilh3XuxQl/wXW6jEJfgIb0jTvoTlwwrqvuwymr6Q==", + "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, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.29.1", - "nullthrows": "^1.1.1" - }, "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", - "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", - "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "hermes-estree": "0.29.1" + "node": ">=6" } }, - "node_modules/metro-cache": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.82.5.tgz", - "integrity": "sha512-AwHV9607xZpedu1NQcjUkua8v7HfOTKfftl6Vc9OGr/jbpiJX6Gpy8E/V9jo/U9UuVYX2PqSUcVNZmu+LTm71Q==", + "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==", + "devOptional": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "https-proxy-agent": "^7.0.5", - "metro-core": "0.82.5" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=18.18" + "node": ">=0.10.0" } }, - "node_modules/metro-cache-key": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.82.5.tgz", - "integrity": "sha512-qpVmPbDJuRLrT4kcGlUouyqLGssJnbTllVtvIgXfR7ZuzMKf0mGS+8WzcqzNK8+kCyakombQWR0uDd8qhWGJcA==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, "engines": { - "node": ">=18.18" + "node": ">=8" } }, - "node_modules/metro-config": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.82.5.tgz", - "integrity": "sha512-/r83VqE55l0WsBf8IhNmc/3z71y2zIPe5kRSuqA5tY/SL/ULzlHUJEMd1szztd0G45JozLwjvrhAzhDPJ/Qo/g==", + "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==", + "devOptional": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "flow-enums-runtime": "^0.0.6", - "jest-validate": "^29.7.0", - "metro": "0.82.5", - "metro-cache": "0.82.5", - "metro-core": "0.82.5", - "metro-runtime": "0.82.5" - }, "engines": { - "node": ">=18.18" + "node": ">=0.12.0" } }, - "node_modules/metro-config/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==", + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/metro-config/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==", + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": 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": ">=0.10.0" } }, - "node_modules/metro-config/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==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro-config/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==", + "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, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro-config/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { "node": ">=10" }, @@ -14960,1285 +8248,1189 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro-config/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==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@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": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true, + "license": "MIT" }, - "node_modules/metro-config/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==", + "node_modules/is-url-superb": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", + "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": 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/metro-core": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.82.5.tgz", - "integrity": "sha512-OJL18VbSw2RgtBm1f2P3J5kb892LCVJqMvslXxuxjAPex8OH7Eb8RBfgEo7VZSjgb/LOf4jhC4UFk5l5tAOHHA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.82.5" + "node": ">=10" }, - "engines": { - "node": ">=18.18" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/metro-file-map": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.82.5.tgz", - "integrity": "sha512-vpMDxkGIB+MTN8Af5hvSAanc6zXQipsAUO+XUx3PCQieKUfLwdoa8qaZ1WAQYRpaU+CJ8vhBcxtzzo3d9IsCIQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "^4.4.0", - "fb-watchman": "^2.0.0", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "engines": { - "node": ">=18.18" - } + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" }, - "node_modules/metro-file-map/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==", + "node_modules/iso-url": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", + "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/metro-file-map/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==", + "node_modules/isomorphic-webcrypto": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", + "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", "license": "MIT", - "optional": true, - "peer": 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" + "@peculiar/webcrypto": "^1.0.22", + "asmcrypto.js": "^0.22.0", + "b64-lite": "^1.3.1", + "b64u-lite": "^1.0.1", + "msrcrypto": "^1.5.6", + "str2buf": "^1.3.0", + "webcrypto-shim": "^0.1.4" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "optionalDependencies": { + "@unimodules/core": "*", + "@unimodules/react-native-adapter": "*", + "expo-random": "*", + "react-native-securerandom": "^0.1.1" } }, - "node_modules/metro-file-map/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==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro-file-map/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "optional": true, - "peer": 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, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, - "node_modules/metro-file-map/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==", - "license": "MIT", - "optional": true, - "peer": true, + "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, + "license": "BSD-3-Clause", "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" + "@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": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/metro-file-map/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==", - "license": "MIT", - "optional": true, - "peer": true, + "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, + "license": "BSD-3-Clause", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/metro-file-map/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "has-flag": "^4.0.0" + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/metro-minify-terser": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.82.5.tgz", - "integrity": "sha512-v6Nx7A4We6PqPu/ta1oGTqJ4Usz0P7c+3XNeBxW9kp8zayS3lHUKR0sY0wsCHInxZlNAEICx791x+uXytFUuwg==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "flow-enums-runtime": "^0.0.6", - "terser": "^5.15.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">=18.18" + "node": ">=8" } }, - "node_modules/metro-resolver": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.82.5.tgz", - "integrity": "sha512-kFowLnWACt3bEsuVsaRNgwplT8U7kETnaFHaZePlARz4Fg8tZtmRDUmjaD68CGAwc0rwdwNCkWizLYpnyVcs2g==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "flow-enums-runtime": "^0.0.6" + "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=18.18" + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/metro-runtime": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.82.5.tgz", - "integrity": "sha512-rQZDoCUf7k4Broyw3Ixxlq5ieIPiR1ULONdpcYpbJQ6yQ5GGEyYjtkztGD+OhHlw81LCR2SUAoPvtTus2WDK5g==", + "node_modules/jest": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.5.tgz", + "integrity": "sha512-y2mfcJywuTUkvLm2Lp1/pFX8kTgMO5yyQGq/Sk/n2mN7XWYp4JsCZ/QXW34M8YScgk8bPZlREH04f6blPnoHnQ==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" + "@jest/core": "30.0.5", + "@jest/types": "30.0.5", + "import-local": "^3.2.0", + "jest-cli": "30.0.5" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=18.18" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/metro-source-map": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.82.5.tgz", - "integrity": "sha512-wH+awTOQJVkbhn2SKyaw+0cd+RVSCZ3sHVgyqJFQXIee/yLs3dZqKjjeKKhhVeudgjXo7aE/vSu/zVfcQEcUfw==", + "node_modules/jest-changed-files": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", + "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/traverse": "^7.25.3", - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.82.5", - "nullthrows": "^1.1.1", - "ob1": "0.82.5", - "source-map": "^0.5.6", - "vlq": "^1.0.0" + "execa": "^5.1.1", + "jest-util": "30.0.5", + "p-limit": "^3.1.0" }, "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/metro-symbolicate": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.82.5.tgz", - "integrity": "sha512-1u+07gzrvYDJ/oNXuOG1EXSvXZka/0JSW1q2EYBWerVKMOhvv9JzDGyzmuV7hHbF2Hg3T3S2uiM36sLz1qKsiw==", + "node_modules/jest-circus": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.5.tgz", + "integrity": "sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.82.5", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" + "@jest/environment": "30.0.5", + "@jest/expect": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.0.5", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-runtime": "30.0.5", + "jest-snapshot": "30.0.5", + "jest-util": "30.0.5", + "p-limit": "^3.1.0", + "pretty-format": "30.0.5", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" }, "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-symbolicate/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/metro-transform-plugins": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.82.5.tgz", - "integrity": "sha512-57Bqf3rgq9nPqLrT2d9kf/2WVieTFqsQ6qWHpEng5naIUtc/Iiw9+0bfLLWSAw0GH40iJ4yMjFcFJDtNSYynMA==", + "node_modules/jest-cli": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.5.tgz", + "integrity": "sha512-Sa45PGMkBZzF94HMrlX4kUyPOwUpdZasaliKN3mifvDmkhLYqLLg8HQTzn6gq7vJGahFYMQjXgyJWfYImKZzOw==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "flow-enums-runtime": "^0.0.6", - "nullthrows": "^1.1.1" + "@jest/core": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=18.18" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/metro-transform-worker": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.82.5.tgz", - "integrity": "sha512-mx0grhAX7xe+XUQH6qoHHlWedI8fhSpDGsfga7CpkO9Lk9W+aPitNtJWNGrW8PfjKEWbT9Uz9O50dkI8bJqigw==", + "node_modules/jest-config": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.5.tgz", + "integrity": "sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "metro": "0.82.5", - "metro-babel-transformer": "0.82.5", - "metro-cache": "0.82.5", - "metro-cache-key": "0.82.5", - "metro-minify-terser": "0.82.5", - "metro-source-map": "0.82.5", - "metro-transform-plugins": "0.82.5", - "nullthrows": "^1.1.1" + "@babel/core": "^7.27.4", + "@jest/get-type": "30.0.1", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.0.5", + "@jest/types": "30.0.5", + "babel-jest": "30.0.5", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.0.5", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.5", + "jest-runner": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "micromatch": "^4.0.8", + "parse-json": "^5.2.0", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=18.18" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/metro/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==", + "node_modules/jest-diff": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.5.tgz", + "integrity": "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "pretty-format": "30.0.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/metro/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==", + "node_modules/jest-docblock": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", + "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": 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" + "detect-newline": "^3.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro/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==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", - "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", - "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "hermes-estree": "0.29.1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/metro/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==", + "node_modules/jest-each": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.5.tgz", + "integrity": "sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ==", + "dev": true, "license": "MIT", - "optional": 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" + "@jest/get-type": "30.0.1", + "@jest/types": "30.0.5", + "chalk": "^4.1.2", + "jest-util": "30.0.5", + "pretty-format": "30.0.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro/node_modules/jest-util/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/metro/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==", + "node_modules/jest-environment-node": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.5.tgz", + "integrity": "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { + "@jest/environment": "30.0.5", + "@jest/fake-timers": "30.0.5", + "@jest/types": "30.0.5", "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "jest-mock": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.0.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro/node_modules/serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/metro/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/jest-expect-message": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.1.3.tgz", + "integrity": "sha512-bTK77T4P+zto+XepAX3low8XVQxDgaEqh3jSTQOG8qvPpD69LsIdyJTa+RmnJh3HNSzJng62/44RPPc7OIlFxg==", + "dev": true, + "license": "MIT" }, - "node_modules/metro/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==", + "node_modules/jest-haste-map": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.5.tgz", + "integrity": "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "@jest/types": "30.0.5", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.5", + "jest-worker": "30.0.5", + "micromatch": "^4.0.8", + "walker": "^1.0.8" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/metro/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "optionalDependencies": { + "fsevents": "^2.3.3" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "devOptional": true, + "node_modules/jest-leak-detector": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.5.tgz", + "integrity": "sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==", + "dev": true, "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "@jest/get-type": "30.0.1", + "pretty-format": "30.0.5" }, "engines": { - "node": ">=8.6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/jest-matcher-utils": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", + "integrity": "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==", + "dev": true, "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "jest-diff": "30.0.5", + "pretty-format": "30.0.5" }, "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "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==", + "node_modules/jest-message-util": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.5.tgz", + "integrity": "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==", + "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.5", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" }, "engines": { - "node": ">= 0.6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/mime-types/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==", + "node_modules/jest-mock": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", + "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", + "dev": true, "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-util": "30.0.5" + }, "engines": { - "node": ">= 0.6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "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==", + "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, "license": "MIT", "engines": { "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "devOptional": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", + "node_modules/jest-regex-util": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "node_modules/jest-resolve": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.5.tgz", + "integrity": "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^7.0.3" + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.0.5", + "jest-validate": "30.0.5", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/minipass-fetch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", - "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "node_modules/jest-resolve-dependencies": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.5.tgz", + "integrity": "sha512-/xMvBR4MpwkrHW4ikZIWRttBBRZgWK4d6xt3xW1iRDSKt4tXzYkMkyPfBnSCgv96cpkrctfXs6gexeqMYqdEpw==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.0.5" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/jest-runner": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.5.tgz", + "integrity": "sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "@jest/console": "30.0.5", + "@jest/environment": "30.0.5", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.0.5", + "jest-haste-map": "30.0.5", + "jest-leak-detector": "30.0.5", + "jest-message-util": "30.0.5", + "jest-resolve": "30.0.5", + "jest-runtime": "30.0.5", + "jest-util": "30.0.5", + "jest-watcher": "30.0.5", + "jest-worker": "30.0.5", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">= 8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/jest-runtime": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.5.tgz", + "integrity": "sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@jest/environment": "30.0.5", + "@jest/fake-timers": "30.0.5", + "@jest/globals": "30.0.5", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.5", + "jest-message-util": "30.0.5", + "jest-mock": "30.0.5", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.5", + "jest-snapshot": "30.0.5", + "jest-util": "30.0.5", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/jest-snapshot": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.5.tgz", + "integrity": "sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.0.5", + "@jest/get-type": "30.0.1", + "@jest/snapshot-utils": "30.0.5", + "@jest/transform": "30.0.5", + "@jest/types": "30.0.5", + "babel-preset-current-node-syntax": "^1.1.0", + "chalk": "^4.1.2", + "expect": "30.0.5", + "graceful-fs": "^4.2.11", + "jest-diff": "30.0.5", + "jest-matcher-utils": "30.0.5", + "jest-message-util": "30.0.5", + "jest-util": "30.0.5", + "pretty-format": "30.0.5", + "semver": "^7.7.2", + "synckit": "^0.11.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/jest-util": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", + "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "@jest/types": "30.0.5", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/jest-util/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, - "license": "ISC", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.5.tgz", + "integrity": "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@jest/get-type": "30.0.1", + "@jest/types": "30.0.5", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.0.5" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "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, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "node_modules/jest-watcher": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.5.tgz", + "integrity": "sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "@jest/test-result": "30.0.5", + "@jest/types": "30.0.5", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.0.5", + "string-length": "^4.0.2" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/jest-worker": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.5.tgz", + "integrity": "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.0.5", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "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, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "license": "MIT", "dependencies": { - "minipass": "^7.1.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, + "node_modules/jose": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.0.13.tgz", + "integrity": "sha512-Yms4GpbmdANamS51kKK6w4hRlKx8KTxbWyAAKT/MhUMtqbIqh5mb2HjhTNUbk7TFL8/MBB5zWSDohL7ed4k/UA==", "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "funding": { + "url": "https://github.com/sponsors/panva" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, + "node_modules/js-base64": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "license": "BSD-3-Clause" + }, + "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==", "license": "MIT" }, - "node_modules/module-definition": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz", - "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { - "ast-module-types": "^6.0.1", - "node-source-walk": "^7.0.1" + "argparse": "^2.0.1" }, "bin": { - "module-definition": "bin/cli.js" - }, - "engines": { - "node": ">=18" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/module-lookup-amd": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-9.0.5.tgz", - "integrity": "sha512-Rs5FVpVcBYRHPLuhHOjgbRhosaQYLtEo3JIeDIbmNo7mSssi1CTzwMh8v36gAzpbzLGXI9wB/yHh+5+3fY1QVw==", - "dev": true, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "license": "MIT", - "dependencies": { - "commander": "^12.1.0", - "glob": "^7.2.3", - "requirejs": "^2.3.7", - "requirejs-config-file": "^4.0.0" - }, "bin": { - "lookup-amd": "bin/cli.js" + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/module-lookup-amd/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "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, - "license": "MIT", - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/module-lookup-amd/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/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", "dev": true, - "license": "ISC", - "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" - }, + "license": "MIT", "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mongodb": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.17.0.tgz", - "integrity": "sha512-neerUzg/8U26cgruLysKEjJvoNSXhyID3RvzvdcpsIi2COYM3FS3o9nlH7fxFtefTb942dX3W9i37oPfCVj4wA==", + "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, - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/saslprep": "^1.1.9", - "bson": "^6.10.4", - "mongodb-connection-string-url": "^3.0.0" - }, - "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } - } + "license": "MIT" }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", - "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "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, - "license": "Apache-2.0", - "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^14.1.0 || ^13.0.0" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/msrcrypto": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", - "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==", - "license": "Apache-2.0" - }, - "node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "license": "(Apache-2.0 AND MIT)" + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/json-text-sequence": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.3.0.tgz", + "integrity": "sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "@sovpro/delimited-stream": "^1.1.0" + }, + "engines": { + "node": ">=10.18.0" } }, - "node_modules/nan": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", - "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", - "dev": 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==", "license": "MIT", - "optional": true + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "optional": true, + "dependencies": { + "universalify": "^2.0.0" }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/napi-postinstall": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", - "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", - "dev": true, - "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" + "node_modules/jsonld": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", + "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=14" + } + }, + "node_modules/jsonld-signatures": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz", + "integrity": "sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/security-context": "^1.0.0", + "jsonld": "^8.0.0", + "rdf-canonize": "^4.0.1", + "serialize-error": "^8.1.0" }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" + "engines": { + "node": ">=18" } }, - "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, - "license": "MIT" + "node_modules/jsonld-signatures/node_modules/rdf-canonize": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", + "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", + "license": "BSD-3-Clause", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=18" + } }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, - "license": "MIT", + "node_modules/jsonld/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "node_modules/jsonld/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, + "engines": [ + "node >= 0.2.0" + ], "license": "MIT" }, - "node_modules/nested-error-stacks": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", - "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "license": "ISC" - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", "license": "MIT" }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10.5.0" + "dependencies": { + "json-buffer": "3.0.1" } }, - "node_modules/node-fetch": { - "version": "3.0.0-beta.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", - "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", + "node_modules/ky": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", + "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^2.1.1" - }, "engines": { - "node": "^10.17 || >=12.3" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "optional": true, - "peer": true, + "node_modules/ky-universal": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", + "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "3.0.0-beta.9" + }, "engines": { - "node": ">= 6.13.0" + "node": ">=10.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.17.0", + "web-streams-polyfill": ">=2.0.0" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } } }, - "node_modules/node-gyp": { - "version": "11.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.1.tgz", - "integrity": "sha512-GiVxQ1e4TdZSSVmFDYUn6uUsrEUP68pa8C/xBzCfL/FcLHa4reWrxxTP7tRGhNdviYrNsL5kRolBL5LNYEutCw==", + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "license": "MIT", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "tinyglobby": "^0.2.12", - "which": "^5.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "readable-stream": "^2.0.5" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node": ">= 0.6.3" } }, - "node_modules/node-gyp/node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "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, "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "node_modules/levn": { + "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, - "license": "ISC", + "license": "MIT", "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.8.0" } }, - "node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dev": true, + "node_modules/libphonenumber-js": { + "version": "1.12.13", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.13.tgz", + "integrity": "sha512-QZXnR/OGiDcBjF4hGk0wwVrPcZvbSSyzlvkjXv5LFfktj7O2VZDrt4Xs8SgR/vOFco+qk1i8J43ikMXZoTrtPw==", + "license": "MIT" + }, + "node_modules/libsodium-sumo": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.15.tgz", + "integrity": "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==", + "license": "ISC" + }, + "node_modules/libsodium-wrappers-sumo": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.15.tgz", + "integrity": "sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==", "license": "ISC", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" + "libsodium-sumo": "^0.7.15" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "node_modules/license-checker": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", + "integrity": "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "isexe": "^3.1.1" + "chalk": "^2.4.1", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "read-installed": "~4.0.3", + "semver": "^5.5.0", + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-satisfies": "^4.0.0", + "treeify": "^1.1.0" }, "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "license-checker": "bin/license-checker" } }, - "node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "node_modules/license-checker/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, - "license": "BlueOak-1.0.0", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "license": "MIT" - }, - "node_modules/node-source-walk": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz", - "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==", + "node_modules/license-checker/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, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.7" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "node_modules/license-checker/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, - "license": "ISC", + "license": "MIT", "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" + "color-name": "1.1.3" } }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/license-checker/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, - "license": "BSD-2-Clause", + "license": "MIT" + }, + "node_modules/license-checker/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "ms": "^2.1.1" } }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/license-checker/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, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/normalize-package-data/node_modules/semver": { + "node_modules/license-checker/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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/license-checker/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", @@ -16248,1590 +9440,1703 @@ "semver": "bin/semver" } }, - "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==", + "node_modules/license-checker/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, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "devOptional": true, "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-bundled": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", - "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-normalize-package-bin": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-check-updates": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-18.0.2.tgz", - "integrity": "sha512-9uVFZUCg5oDOcbzdsrJ4BEvq2gikd23tXuF5mqpl4mxVl051lzB00Xmd7ZVjVWY3XNUF3BQKWlN/qmyD8/bwrA==", + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", "dev": true, "license": "Apache-2.0", - "bin": { - "ncu": "build/cli.js", - "npm-check-updates": "build/cli.js" + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" }, "engines": { - "node": "^18.18.0 || >=20.0.0", - "npm": ">=8.12.1" + "node": ">=8.0" } }, - "node_modules/npm-install-checks": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz", - "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==", + "node_modules/lokijs": { + "version": "1.5.12", + "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.12.tgz", + "integrity": "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "dev": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "optional": true, "dependencies": { - "semver": "^7.1.1" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", - "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "node_modules/lru_map": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", + "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", + "license": "MIT" }, - "node_modules/npm-package-arg": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", - "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", - "dev": 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==", "license": "ISC", "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "yallist": "^3.0.2" } }, - "node_modules/npm-packlist": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.1.tgz", - "integrity": "sha512-vaC03b2PqJA6QqmwHi1jNU8fAPXEnnyv4j/W4PVfgm24C4/zZGSVut3z0YUeN0WIFCo1oGOL02+6LbvFK7JL4Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^8.0.0" - }, + "node_modules/luxon": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.1.tgz", + "integrity": "sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=12" } }, - "node_modules/npm-pick-manifest": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", - "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "node_modules/madge": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/madge/-/madge-8.0.0.tgz", + "integrity": "sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" + "chalk": "^4.1.2", + "commander": "^7.2.0", + "commondir": "^1.0.1", + "debug": "^4.3.4", + "dependency-tree": "^11.0.0", + "ora": "^5.4.1", + "pluralize": "^8.0.0", + "pretty-ms": "^7.0.1", + "rc": "^1.2.8", + "stream-to-array": "^2.3.0", + "ts-graphviz": "^2.1.2", + "walkdir": "^0.4.1" + }, + "bin": { + "madge": "bin/cli.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/pahen" + }, + "peerDependencies": { + "typescript": "^5.4.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/npm-registry-fetch": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", - "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "@jridgewell/sourcemap-codec": "^1.5.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==", + "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, "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "license": "MIT", - "optional": true, - "peer": true + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" }, - "node_modules/ob1": { - "version": "0.82.5", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.82.5.tgz", - "integrity": "sha512-QyQQ6e66f+Ut/qUVjEce0E/wux5nAGLXYZDn1jr15JWstHsCH3l6VVrg8NKDptW9NEiBXKOJeGF/ydxeSDF3IQ==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "dev": true, + "license": "ISC", "dependencies": { - "flow-enums-runtime": "^0.0.6" + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" }, "engines": { - "node": ">=18.18" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" + "tmpl": "1.0.5" } }, - "node_modules/on-headers": { + "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "license": "MIT", - "optional": true, - "peer": true, + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "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==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "dev": true, + "license": "MIT" }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "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, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "devOptional": true, "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "devOptional": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, + "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==", "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.6" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, + "node_modules/mime-types/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==", "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/ora/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/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, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/ora/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==", + "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, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "deprecated": "This package is no longer supported.", + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, "license": "ISC", "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/p-locate": { - "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==", - "devOptional": true, + "node_modules/minipass-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" }, - "funding": { - "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==", - "devOptional": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "devOptional": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pacote": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", - "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^10.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" + "yallist": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", - "license": "(MIT AND Zlib)" + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" }, - "node_modules/parent-module": { - "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==", + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "callsites": "^3.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "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==", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", + "license": "ISC", "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" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-json/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==", + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/parse-png": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", - "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", "dependencies": { - "pngjs": "^3.3.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, "engines": { - "node": ">= 0.8" + "node": ">= 18" } }, - "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==", - "devOptional": true, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/module-definition": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz", + "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==", + "dev": true, "license": "MIT", + "dependencies": { + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "bin": { + "module-definition": "bin/cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "devOptional": true, + "node_modules/module-lookup-amd": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-9.0.5.tgz", + "integrity": "sha512-Rs5FVpVcBYRHPLuhHOjgbRhosaQYLtEo3JIeDIbmNo7mSssi1CTzwMh8v36gAzpbzLGXI9wB/yHh+5+3fY1QVw==", + "dev": true, "license": "MIT", + "dependencies": { + "commander": "^12.1.0", + "glob": "^7.2.3", + "requirejs": "^2.3.7", + "requirejs-config-file": "^4.0.0" + }, + "bin": { + "lookup-amd": "bin/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "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==", - "devOptional": true, - "license": "MIT" + "node_modules/module-lookup-amd/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "devOptional": true, - "license": "BlueOak-1.0.0", + "node_modules/module-lookup-amd/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, + "license": "ISC", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "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": ">=16 || 14 >=14.18" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "node_modules/mongodb": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.17.0.tgz", + "integrity": "sha512-neerUzg/8U26cgruLysKEjJvoNSXhyID3RvzvdcpsIi2COYM3FS3o9nlH7fxFtefTb942dX3W9i37oPfCVj4wA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.4", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" + "node_modules/msrcrypto": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", + "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==", + "license": "Apache-2.0" }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, + "node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, + "node_modules/nan": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", + "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } + "optional": true }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "devOptional": true, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "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==", + "node_modules/napi-postinstall": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", + "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", "dev": true, "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" + "bin": { + "napi-postinstall": "lib/cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" } }, - "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==", + "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, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "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==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">=10.5.0" } }, - "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, + "node_modules/node-fetch": { + "version": "3.0.0-beta.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", + "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^2.1.1" }, "engines": { - "node": ">=6" + "node": "^10.17 || >=12.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "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==", + "node_modules/node-gyp": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.1.tgz", + "integrity": "sha512-GiVxQ1e4TdZSSVmFDYUn6uUsrEUP68pa8C/xBzCfL/FcLHa4reWrxxTP7tRGhNdviYrNsL5kRolBL5LNYEutCw==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/plist": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, + "node_modules/node-gyp/node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10.4.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=4.0.0" + "node": ">=16" } }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "node_modules/node-gyp/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/postcss-values-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", - "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", + "node_modules/node-gyp/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "dev": true, - "license": "MPL-2.0", + "license": "ISC", "dependencies": { - "color-name": "^1.1.4", - "is-url-superb": "^4.0.0", - "quote-unquote": "^1.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.2.9" + "node": ">=18" } }, - "node_modules/precinct": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz", - "integrity": "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==", + "node_modules/node-gyp/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@dependents/detective-less": "^5.0.1", - "commander": "^12.1.0", - "detective-amd": "^6.0.1", - "detective-cjs": "^6.0.1", - "detective-es6": "^5.0.1", - "detective-postcss": "^7.0.1", - "detective-sass": "^6.0.1", - "detective-scss": "^5.0.1", - "detective-stylus": "^5.0.1", - "detective-typescript": "^14.0.0", - "detective-vue2": "^2.2.0", - "module-definition": "^6.0.1", - "node-source-walk": "^7.0.1", - "postcss": "^8.5.1", - "typescript": "^5.7.3" + "isexe": "^3.1.1" }, "bin": { - "precinct": "bin/cli.js" + "node-which": "bin/which.js" }, "engines": { - "node": ">=18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/precinct/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "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, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } + "license": "MIT" }, - "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/node-source-walk": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz", + "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==", "dev": true, "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "@babel/parser": "^7.26.7" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "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, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/pretty-format": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", - "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", + "node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.17.0 || >=20.5.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==", + "node_modules/npm-check-updates": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-18.0.2.tgz", + "integrity": "sha512-9uVFZUCg5oDOcbzdsrJ4BEvq2gikd23tXuF5mqpl4mxVl051lzB00Xmd7ZVjVWY3XNUF3BQKWlN/qmyD8/bwrA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "license": "Apache-2.0", + "bin": { + "ncu": "build/cli.js", + "npm-check-updates": "build/cli.js" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "^18.18.0 || >=20.0.0", + "npm": ">=8.12.1" } }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "node_modules/npm-install-checks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz", + "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "parse-ms": "^2.1.0" + "semver": "^7.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/proc-log": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", - "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", "dev": true, "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, "engines": { - "node": ">= 0.6.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/npm-packlist": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.1.tgz", + "integrity": "sha512-vaC03b2PqJA6QqmwHi1jNU8fAPXEnnyv4j/W4PVfgm24C4/zZGSVut3z0YUeN0WIFCo1oGOL02+6LbvFK7JL4Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0" + }, "engines": { - "node": ">=0.4.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "dev": true, + "license": "ISC", "dependencies": { - "asap": "~2.0.6" + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "node_modules/npm-registry-fetch": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "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==", + "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, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "path-key": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/proper-lockfile/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==", + "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, - "license": "ISC" + "license": "ISC", + "dependencies": { + "wrappy": "1" + } }, - "node_modules/properties-reader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/properties-reader/-/properties-reader-2.3.0.tgz", - "integrity": "sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==", + "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, "license": "MIT", "dependencies": { - "mkdirp": "^1.0.4" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=14" + "node": ">=6" }, "funding": { - "type": "github", - "url": "https://github.com/steveukx/properties?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/properties-reader/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "hasInstallScript": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/ora/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, "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "node_modules/ora/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, "license": "MIT", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "devOptional": true, - "license": "MIT", + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/pure-rand": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/pvtsutils": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", - "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "license": "MIT", - "dependencies": { - "tslib": "^2.8.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/qrcode-terminal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", - "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", - "optional": true, - "peer": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "devOptional": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.1.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=0.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "node_modules/p-locate": { + "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==", + "devOptional": true, "license": "MIT", "dependencies": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "inherits": "~2.0.3" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quote-unquote": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", - "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", + "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, - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", + "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", + "dev": true, + "license": "ISC", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^10.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" }, "engines": { - "node": ">= 0.8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "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, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "callsites": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "devOptional": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "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, + "license": "MIT", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "@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" }, - "bin": { - "rc": "cli.js" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true, - "license": "ISC" + "node_modules/parse-json/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, + "license": "MIT" }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "devOptional": true, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/rdf-canonize": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", - "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, + "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==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/react": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", - "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/react-devtools-core": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.5.tgz", - "integrity": "sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", - "optional": 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, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "node": ">=8.6" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "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==", - "devOptional": true, - "license": "MIT" + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } }, - "node_modules/react-native": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.80.2.tgz", - "integrity": "sha512-6ySV4qTJo/To3lgpG/9Mcg/ZtvExqOVZuT7JVGcO5rS2Bjvl/yUAkQF0hTnbRb2Ch6T5MlKghrM4OeHX+KA9Pg==", + "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, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.80.2", - "@react-native/codegen": "0.80.2", - "@react-native/community-cli-plugin": "0.80.2", - "@react-native/gradle-plugin": "0.80.2", - "@react-native/js-polyfills": "0.80.2", - "@react-native/normalize-colors": "0.80.2", - "@react-native/virtualized-lists": "0.80.2", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "0.28.1", - "base64-js": "^1.5.1", - "chalk": "^4.0.0", - "commander": "^12.0.0", - "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jest-environment-node": "^29.7.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.82.2", - "metro-source-map": "^0.82.2", - "nullthrows": "^1.1.1", - "pretty-format": "^29.7.0", - "promise": "^8.3.0", - "react-devtools-core": "^6.1.1", - "react-refresh": "^0.14.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.26.0", - "semver": "^7.1.3", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.3", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" + "find-up": "^4.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^19.1.0", - "react": "^19.1.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=8" } }, - "node_modules/react-native-edge-to-edge": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/react-native-edge-to-edge/-/react-native-edge-to-edge-1.6.0.tgz", - "integrity": "sha512-2WCNdE3Qd6Fwg9+4BpbATUxCLcouF6YRY7K+J36KJ4l3y+tWN6XCqAC4DuoGblAAbb2sLkhEDp4FOlbOIot2Og==", + "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, "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "react": "*", - "react-native": "*" + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/react-native-securerandom": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", - "integrity": "sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw==", + "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, "license": "MIT", - "optional": true, "dependencies": { - "base64-js": "*" + "p-locate": "^4.1.0" }, - "peerDependencies": { - "react-native": "*" + "engines": { + "node": ">=8" } }, - "node_modules/react-native/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==", + "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, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "p-try": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-native/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==", + "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, "license": "MIT", - "optional": true, - "peer": 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" + "p-limit": "^2.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/react-native/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==", + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/react-native/node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "optional": true, - "peer": 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" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/react-native/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/postcss-values-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", + "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", + "dev": true, + "license": "MPL-2.0", "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" + "color-name": "^1.1.4", + "is-url-superb": "^4.0.0", + "quote-unquote": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.2.9" } }, - "node_modules/react-native/node_modules/@react-native/codegen": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.80.2.tgz", - "integrity": "sha512-eYad9ex9/RS6oFbbpu6LxsczktbhfJbJlTvtRlcWLJjJbFTeNr5Q7CgBT2/m5VtpxnJ/0YdmZ9vdazsJ2yp9kw==", + "node_modules/precinct": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz", + "integrity": "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "glob": "^7.1.1", - "hermes-parser": "0.28.1", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "yargs": "^17.6.2" + "@dependents/detective-less": "^5.0.1", + "commander": "^12.1.0", + "detective-amd": "^6.0.1", + "detective-cjs": "^6.0.1", + "detective-es6": "^5.0.1", + "detective-postcss": "^7.0.1", + "detective-sass": "^6.0.1", + "detective-scss": "^5.0.1", + "detective-stylus": "^5.0.1", + "detective-typescript": "^14.0.0", + "detective-vue2": "^2.2.0", + "module-definition": "^6.0.1", + "node-source-walk": "^7.0.1", + "postcss": "^8.5.1", + "typescript": "^5.7.3" + }, + "bin": { + "precinct": "bin/cli.js" }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" } }, - "node_modules/react-native/node_modules/@react-native/normalize-colors": { - "version": "0.80.2", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.80.2.tgz", - "integrity": "sha512-08Ax7554Z31NXi5SQ6h1GsiSrlZEOYHQNSC7u+x91Tdiq87IXldW8Ib1N3ThXoDcD8bjr+I+MdlabEJw36/fFg==", + "node_modules/precinct/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true + "engines": { + "node": ">=18" + } }, - "node_modules/react-native/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==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/react-native/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==", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/react-native/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/pretty-format": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", + "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/react-native/node_modules/ansi-styles": { + "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, "license": "MIT", - "optional": true, - "peer": true, "engines": { "node": ">=10" }, @@ -17839,399 +11144,305 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-native/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==", + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, "license": "MIT", - "optional": true, - "peer": 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" + "parse-ms": "^2.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/react-native/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==", - "license": "BSD-3-Clause", - "optional": true, - "peer": 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" + "node": ">=10" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-native/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==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "dev": true, + "license": "ISC", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/react-native/node_modules/babel-plugin-syntax-hermes-parser": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.28.1.tgz", - "integrity": "sha512-meT17DOuUElMNsL5LZN56d+KBp22hb0EfxWfuPUeoSi54e40v1W4C2V36P75FpsH9fVEfDKpw5Nnkahc8haSsQ==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "hermes-parser": "0.28.1" + "engines": { + "node": ">= 0.6.0" } }, - "node_modules/react-native/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==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=10" } }, - "node_modules/react-native/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" } }, - "node_modules/react-native/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } + "node_modules/proper-lockfile/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, + "license": "ISC" }, - "node_modules/react-native/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", - "license": "ISC", - "optional": true, - "peer": true, + "node_modules/properties-reader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/properties-reader/-/properties-reader-2.3.0.tgz", + "integrity": "sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==", + "dev": true, + "license": "MIT", "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" + "mkdirp": "^1.0.4" }, "engines": { - "node": "*" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/steveukx/properties?sponsor=1" } }, - "node_modules/react-native/node_modules/hermes-estree": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.28.1.tgz", - "integrity": "sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/react-native/node_modules/hermes-parser": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.28.1.tgz", - "integrity": "sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==", + "node_modules/properties-reader/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "hermes-estree": "0.28.1" + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/react-native/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==", + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "dev": true, + "hasInstallScript": true, "license": "BSD-3-Clause", - "optional": true, - "peer": 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" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, - "node_modules/react-native/node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, - "node_modules/react-native/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==", + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, "license": "MIT", - "optional": 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" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/react-native/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==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@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": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=6" } }, - "node_modules/react-native/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==", + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@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": "^14.15.0 || ^16.10.0 || >=18.0.0" + "tslib": "^2.8.1" } }, - "node_modules/react-native/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==", + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", "license": "MIT", - "optional": true, - "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "side-channel": "^1.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-native/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==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quote-unquote": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", + "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", + "dev": true, + "license": "MIT" }, - "node_modules/react-native/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "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" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "rc": "cli.js" } }, - "node_modules/react-native/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==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" }, - "node_modules/react-native/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==", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, "license": "MIT", - "optional": true, - "peer": 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": ">=0.10.0" } }, - "node_modules/react-native/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==", - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/react-native/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==", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", "dependencies": { - "has-flag": "^4.0.0" + "setimmediate": "^1.0.5" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=12" } }, - "node_modules/react-native/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==", - "license": "ISC", - "optional": 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/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, + "license": "MIT" }, - "node_modules/react-native/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "node_modules/react-native-securerandom": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", + "integrity": "sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw==", "license": "MIT", "optional": true, - "peer": true, "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "base64-js": "*" + }, + "peerDependencies": { + "react-native": "*" } }, "node_modules/read-installed": { @@ -18374,139 +11585,17 @@ "once": "^1.3.0" } }, - "node_modules/ref-array-di": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ref-array-di/-/ref-array-di-1.2.2.tgz", - "integrity": "sha512-jhCmhqWa7kvCVrWhR/d7RemkppqPUdxEil1CtTtm7FkZV8LcHHCK3Or9GinUiFP5WY3k0djUkMvhBhx49Jb2iA==", - "license": "MIT", - "dependencies": { - "array-index": "^1.0.0", - "debug": "^3.1.0" - } - }, - "node_modules/ref-array-di/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/ref-struct-di": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz", - "integrity": "sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g==", - "license": "MIT", - "dependencies": { - "debug": "^3.1.0" - } - }, - "node_modules/ref-struct-di/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "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==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -18521,32 +11610,6 @@ "node": ">=0.10.0" } }, - "node_modules/requireg": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", - "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", - "optional": true, - "peer": true, - "dependencies": { - "nested-error-stacks": "~2.0.1", - "rc": "~1.2.7", - "resolve": "~1.7.1" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/requireg/node_modules/resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "path-parse": "^1.0.5" - } - }, "node_modules/requirejs": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", @@ -18579,7 +11642,7 @@ "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", @@ -18639,25 +11702,6 @@ "node": ">=4" } }, - "node_modules/resolve-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz", - "integrity": "sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -18692,62 +11736,21 @@ "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "devOptional": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/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", - "license": "ISC", - "optional": 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" - }, + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "devOptional": true, + "license": "MIT", "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -18815,6 +11818,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true, "license": "MIT" }, "node_modules/sass-lookup": { @@ -18844,27 +11848,11 @@ "node": ">=18" } }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -18873,54 +11861,6 @@ "node": ">=10" } }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/serialize-error": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", @@ -18948,38 +11888,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "license": "MIT" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -18992,26 +11911,12 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -19088,7 +11993,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "devOptional": true, + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -19115,46 +12020,11 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/simple-plist": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", - "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bplist-creator": "0.1.0", - "bplist-parser": "0.3.1", - "plist": "^3.0.5" - } - }, - "node_modules/simple-plist/node_modules/bplist-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", - "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -19170,17 +12040,6 @@ "node": "*" } }, - "node_modules/slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -19236,7 +12095,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -19337,20 +12196,11 @@ "dev": true, "license": "ISC" }, - "node_modules/split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/ssh-remote-port-forward": { @@ -19410,7 +12260,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" @@ -19423,41 +12273,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/stacktrace-parser": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", - "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, "engines": { "node": ">=8" } @@ -19552,32 +12369,12 @@ "node": ">= 0.8.0" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/str2buf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz", "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==", "license": "MIT" }, - "node_modules/stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", - "license": "Unlicense", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -19652,15 +12449,6 @@ "bare-events": "^2.2.0" } }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -19711,7 +12499,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -19730,7 +12518,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -19745,7 +12533,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -19755,14 +12543,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -19790,7 +12578,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -19807,7 +12595,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -19820,7 +12608,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -19859,14 +12647,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/structured-headers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", - "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/stylus-lookup": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-6.1.0.tgz", @@ -19893,41 +12673,6 @@ "node": ">=18" } }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -19941,26 +12686,11 @@ "node": ">=8" } }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -20095,108 +12825,39 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.43.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", - "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", - "license": "BSD-2-Clause", - "optional": true, - "peer": true, + "license": "ISC", "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" + "yallist": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", "bin": { - "terser": "bin/terser" + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" }, "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==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", @@ -20212,7 +12873,7 @@ "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", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -20273,39 +12934,6 @@ "b4a": "^1.6.4" } }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/tinyglobby": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", @@ -20368,7 +12996,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { @@ -20384,15 +13012,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/tr46": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", @@ -20455,14 +13074,6 @@ "node": ">=18" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "license": "Apache-2.0", - "optional": true, - "peer": true - }, "node_modules/ts-jest": { "version": "29.4.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.1.tgz", @@ -20776,12 +13387,6 @@ "dev": true, "license": "Unlicense" }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "license": "ISC" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -20799,7 +13404,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -20809,7 +13414,7 @@ "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==", - "devOptional": true, + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -20818,19 +13423,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typescript": { "version": "5.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", @@ -20907,71 +13499,12 @@ "multiformats": "^9.4.2" } }, - "node_modules/undici": { - "version": "6.21.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18.17" - } - }, "node_modules/undici-types": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "license": "MIT" }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/unique-filename": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", @@ -20998,20 +13531,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -21022,15 +13541,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -21119,15 +13629,6 @@ "dev": true, "license": "MIT" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", @@ -21213,23 +13714,6 @@ "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", "license": "MIT" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/walkdir": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", @@ -21244,7 +13728,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" @@ -21254,7 +13738,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "defaults": "^1.0.3" @@ -21308,14 +13792,6 @@ "node": ">=12" } }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/whatwg-url": { "version": "14.2.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", @@ -21330,38 +13806,11 @@ "node": ">=18" } }, - "node_modules/whatwg-url-without-unicode": { - "version": "8.0.0-3", - "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", - "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.4.3", - "punycode": "^2.1.1", - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -21373,14 +13822,6 @@ "node": ">= 8" } }, - "node_modules/wonka": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/wonka/-/wonka-6.3.5.tgz", - "integrity": "sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -21401,7 +13842,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -21420,7 +13861,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -21438,7 +13879,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -21448,14 +13889,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -21470,7 +13911,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -21483,7 +13924,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -21496,7 +13937,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -21534,74 +13975,11 @@ } } }, - "node_modules/xcode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", - "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/xcode/node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/xml2js": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", - "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.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==", - "devOptional": true, + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -21630,7 +14008,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -21649,7 +14027,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "devOptional": true, + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -21659,7 +14037,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -21669,14 +14047,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/yargs/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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -21691,7 +14069,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -21811,7 +14189,6 @@ "dependencies": { "@credo-ts/askar": "v0.6.0-alpha-20250704130724", "@credo-ts/core": "v0.6.0-alpha-20250704130724", - "@credo-ts/node": "v0.6.0-alpha-20250704130724", "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", "@js-soft/docdb-querytranslator": "^1.1.5", "@js-soft/ts-serval": "2.0.13", @@ -21820,9 +14197,10 @@ "@nmshd/core-types": "*", "@nmshd/iql": "^1.0.3", "@nmshd/transport": "*", - "@openwallet-foundation/askar-nodejs": "^0.3.2", + "jose": "^6.0.13", "lodash": "^4.17.21", - "ts-simple-nameof": "^1.3.3" + "ts-simple-nameof": "^1.3.3", + "ws": "^8.18.3" }, "devDependencies": { "@js-soft/docdb-access-loki": "1.3.0", @@ -21881,6 +14259,7 @@ "ajv": "^8.17.1", "ajv-errors": "^3.0.0", "ajv-formats": "^3.0.1", + "https": "^1.0.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.21", "luxon": "^3.7.1", diff --git a/packages/consumption/package.json b/packages/consumption/package.json index 05b7b9971..7c2399bd5 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -59,6 +59,9 @@ } }, "dependencies": { + "@credo-ts/askar": "v0.6.0-alpha-20250704130724", + "@credo-ts/core": "v0.6.0-alpha-20250704130724", + "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", "@js-soft/docdb-querytranslator": "^1.1.5", "@js-soft/ts-serval": "2.0.13", "@js-soft/ts-utils": "2.3.4", @@ -66,13 +69,10 @@ "@nmshd/core-types": "*", "@nmshd/iql": "^1.0.3", "@nmshd/transport": "*", + "jose": "^6.0.13", "lodash": "^4.17.21", "ts-simple-nameof": "^1.3.3", - "@credo-ts/askar": "v0.6.0-alpha-20250704130724", - "@credo-ts/core": "v0.6.0-alpha-20250704130724", - "@credo-ts/node": "v0.6.0-alpha-20250704130724", - "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", - "@openwallet-foundation/askar-nodejs": "^0.3.2" + "ws": "^8.18.3" }, "devDependencies": { "@js-soft/docdb-access-loki": "1.3.0", From 0a04ae62fc7adc319b6af4ed16e62cd6092ee263 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Thu, 28 Aug 2025 09:34:49 +0200 Subject: [PATCH 14/75] feat: add mocks for some credo functionalities --- .../modules/openid4vc/local/FakeFileSystem.ts | 91 +++++++++ .../local/FakeKeyManagmentService.ts | 172 ++++++++++++++++++ .../openid4vc/local/FakeStorageService.ts | 60 ++++++ 3 files changed, 323 insertions(+) create mode 100644 packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts create mode 100644 packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts create mode 100644 packages/consumption/src/modules/openid4vc/local/FakeStorageService.ts diff --git a/packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts b/packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts new file mode 100644 index 000000000..521800cb0 --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts @@ -0,0 +1,91 @@ +import { DownloadToFileOptions, FileSystem } from "@credo-ts/core"; + +export class FakeFileSystem implements FileSystem { + public readonly dataPath: string; + + public readonly cachePath: string; + + public readonly tempPath: string; + + private readonly fileSystem: Map = new Map(); + + private readonly directories: Map = new Map(); + + public constructor() { + this.dataPath = "/data"; + this.cachePath = "/cache"; + this.tempPath = "/temp"; + + // initialize the directories map with the known paths + this.directories.set(this.dataPath, true); + this.directories.set(this.cachePath, true); + this.directories.set(this.tempPath, true); + } + + public exists(path: string): Promise { + if (this.directories.has(path) || this.fileSystem.has(path)) { + return Promise.resolve(true); + } + + return Promise.resolve(false); + } + + public createDirectory(path: string): Promise { + this.directories.set(path, true); + + return Promise.resolve(); + } + + public copyFile(sourcePath: string, destinationPath: string): Promise { + if (this.fileSystem.has(sourcePath)) { + this.fileSystem.set(destinationPath, this.fileSystem.get(sourcePath)!); + + return Promise.resolve(); + } + + return Promise.reject(new Error(`Source file ${sourcePath} does not exist`)); + } + + public write(path: string, data: string): Promise { + this.fileSystem.set(path, data); + + if (!this.directories.has(path)) { + this.directories.set(path, false); // mark as file + } + + return Promise.resolve(); + } + + public read(path: string): Promise { + if (!this.fileSystem.has(path)) { + return Promise.reject(new Error(`File ${path} does not exist`)); + } + + return Promise.resolve(this.fileSystem.get(path) ?? ""); + } + + public delete(path: string): Promise { + if (this.fileSystem.has(path)) { + this.fileSystem.delete(path); + } + + return Promise.resolve(); + } + + public downloadToFile(url: string, path: string, options?: DownloadToFileOptions): Promise { + // Simulate a download by writing a placeholder content + let content = `Downloaded content from ${url}`; + + if (options) { + if (options.verifyHash) { + // Here you would implement hash verification logic if needed + // eslint-disable-next-line prefer-template + content = content + ` with hash verification: ${options.verifyHash}`; + } + } + + this.fileSystem.set(path, content); + + return Promise.resolve(); + } +} diff --git a/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts new file mode 100644 index 000000000..17d3e6071 --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts @@ -0,0 +1,172 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { AgentContext } from "@credo-ts/core"; +import { + KeyManagementService, + KmsCreateKeyOptions, + KmsCreateKeyReturn, + KmsCreateKeyType, + KmsDecryptOptions, + KmsDecryptReturn, + KmsDeleteKeyOptions, + KmsEncryptOptions, + KmsEncryptReturn, + KmsImportKeyOptions, + KmsImportKeyReturn, + KmsJwkPrivate, + KmsJwkPublic, + KmsOperation, + KmsRandomBytesOptions, + KmsRandomBytesReturn, + KmsSignOptions, + KmsSignReturn, + KmsVerifyOptions, + KmsVerifyReturn +} from "@credo-ts/core/build/modules/kms"; + +export interface JwkKeyPair { + publicKey: JsonWebKey; + privateKey: JsonWebKey; +} + +export class FakeKeyManagmentService implements KeyManagementService { + public static readonly backend = "fakeKeyManagementService"; + public readonly backend = FakeKeyManagmentService.backend; + + // we use a global variable to store the keys - this is surely not save but ok for a prototype + public keystore: Map; + public constructor() { + if ((global as any).fakeKmsKeystore) { + this.keystore = (global as any).fakeKmsKeystore as Map; + } else { + this.keystore = new Map(); + (global as any).fakeKmsKeystore = this.keystore; + } + } + + public isOperationSupported(agentContext: AgentContext, operation: KmsOperation): boolean { + if (operation.operation === "createKey") { + return true; + } + if (operation.operation === "verify") { + return true; + } + if (operation.operation === "sign" && operation.algorithm === "ES256") { + return true; + } + return false; + } + public getPublicKey(agentContext: AgentContext, keyId: string): Promise { + const keyPair = this.keystore.get(keyId); + if (!keyPair) { + throw new Error(`Key with id ${keyId} not found`); + } + + return Promise.resolve((JSON.parse(keyPair) as JwkKeyPair).publicKey as KmsJwkPublic); + } + public async createKey(agentContext: AgentContext, options: KmsCreateKeyOptions): Promise> { + // check if a key-id is provided + options.keyId ??= crypto.randomUUID(); + + // we want to create a key pair using the web-crypto api and store the private key in our keystore + const keyPair = await crypto.subtle.generateKey( + { + name: "ECDSA", + namedCurve: "P-256" // ES256 + }, + true, + ["sign", "verify"] + ); + + // and return the public key as jwk + const publicKeyJwk = await crypto.subtle.exportKey("jwk", keyPair.publicKey); + const privateKeyJwk = await crypto.subtle.exportKey("jwk", keyPair.privateKey); + + const jwkKeyPair = { + publicKey: publicKeyJwk, + privateKey: privateKeyJwk + }; + + // store the key pair in the keystore + this.keystore.set(options.keyId, JSON.stringify(jwkKeyPair)); + + return await Promise.resolve({ + keyId: options.keyId, + publicJwk: publicKeyJwk as KmsJwkPublic + } as KmsCreateKeyReturn); + } + public importKey(agentContext: AgentContext, options: KmsImportKeyOptions): Promise> { + throw new Error("Method not implemented."); + } + public deleteKey(agentContext: AgentContext, options: KmsDeleteKeyOptions): Promise { + throw new Error("Method not implemented."); + } + public async sign(agentContext: AgentContext, options: KmsSignOptions): Promise { + // load key from keystore + const stringifiedKeyPair = this.keystore.get(options.keyId); + if (!stringifiedKeyPair) { + throw new Error(`Key with id ${options.keyId} not found`); + } + const privateKeyJwk = (JSON.parse(stringifiedKeyPair) as JwkKeyPair).privateKey; + const privateKey = await crypto.subtle.importKey( + "jwk", // format + privateKeyJwk, // the exported JWK object + { name: "ECDSA", namedCurve: "P-256" }, // algorithm + true, // extractable + ["sign"] // key usages + ); + + // load data from options + const data = options.data; + + // check if method is ES256 + if (options.algorithm !== "ES256") { + throw new Error(`Algorithm ${options.algorithm} not supported`); + } + + // transform the private key to a jwk + const signatureBuffer = await crypto.subtle.sign({ name: "ECDSA", hash: { name: "SHA-256" } }, privateKey, data); + return { + signature: new Uint8Array(signatureBuffer) + }; + } + + public async verify(agentContext: AgentContext, options: KmsVerifyOptions): Promise { + // load key from keystore + let publicKeyJwk: JsonWebKey; + if (!options.key.publicJwk) { + if (!options.key.keyId) { + throw new Error("Either publicJwk or keyId must be provided"); + } + const stringifiedKeyPair = this.keystore.get(options.key.keyId); + if (!stringifiedKeyPair) { + throw new Error(`Key with id ${options.key.keyId} not found`); + } + publicKeyJwk = (JSON.parse(stringifiedKeyPair) as JwkKeyPair).publicKey; + } else { + publicKeyJwk = options.key.publicJwk; + } + + // check algorithm + if (options.algorithm !== "ES256") { + throw new Error(`Algorithm ${options.algorithm} not supported`); + } + + // import the public key + const publicKey = await crypto.subtle.importKey("jwk", publicKeyJwk, { name: "ECDSA", namedCurve: "P-256" }, true, ["verify"]); + + // verify signature against data + const isValid = await crypto.subtle.verify({ name: "ECDSA", hash: { name: "SHA-256" } }, publicKey, options.signature, options.data); + return { + verified: isValid + } as KmsVerifyReturn; + } + public encrypt(agentContext: AgentContext, options: KmsEncryptOptions): Promise { + throw new Error("Method not implemented."); + } + public decrypt(agentContext: AgentContext, options: KmsDecryptOptions): Promise { + throw new Error("Method not implemented."); + } + public randomBytes(agentContext: AgentContext, options: KmsRandomBytesOptions): KmsRandomBytesReturn { + throw new Error("Method not implemented."); + } +} diff --git a/packages/consumption/src/modules/openid4vc/local/FakeStorageService.ts b/packages/consumption/src/modules/openid4vc/local/FakeStorageService.ts new file mode 100644 index 000000000..363cd77df --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/FakeStorageService.ts @@ -0,0 +1,60 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { AgentContext, BaseRecord, BaseRecordConstructor, injectable, JsonTransformer, Query, QueryOptions, StorageService } from "@credo-ts/core"; + +@injectable() +export class FakeStorageService implements StorageService { + public storrage: Map = new Map(); + + public async save(agentContext: AgentContext, record: T): Promise { + record.updatedAt = new Date(); + const value = JsonTransformer.serialize(record); + this.storrage.set(record.id, value); + return await Promise.resolve(); + } + + public async update(agentContext: AgentContext, record: T): Promise { + record.updatedAt = new Date(); + const value = JsonTransformer.serialize(record); + this.storrage.set(record.id, value); + return await Promise.resolve(); + } + public delete(agentContext: AgentContext, record: T): Promise { + this.storrage.delete(record.id); + return Promise.resolve(); + } + public deleteById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { + this.storrage.delete(id); + return Promise.resolve(); + } + public getById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { + const record = this.storrage.get(id); + if (!record) { + return Promise.reject(new Error(`Record with id ${id} not found`)); + } + return Promise.resolve(JsonTransformer.deserialize(record, recordClass)); + } + public getAll(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { + const records: T[] = []; + for (const record of this.storrage.values()) { + records.push(JsonTransformer.deserialize(record, recordClass)); + } + return Promise.resolve(records); + } + public findByQuery(agentContext: AgentContext, recordClass: BaseRecordConstructor, query: Query, queryOptions?: QueryOptions): Promise { + const records: T[] = []; + for (const record of this.storrage.values()) { + const deserializedRecord = JsonTransformer.deserialize(record, recordClass); + let match = true; + for (const [key, value] of Object.entries(query)) { + if ((deserializedRecord as any)[key] !== value) { + match = false; + break; + } + } + if (match) { + records.push(deserializedRecord); + } + } + return Promise.resolve(records); + } +} From 52e3c83ab4d11e3ba8257bc9a54adb7d73953031 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Thu, 28 Aug 2025 09:35:08 +0200 Subject: [PATCH 15/75] feat: make test fetch offer url on its own --- .../runtime/test/consumption/openid4vc.test.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index c1fe4dd66..0ec3bb539 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -13,11 +13,22 @@ afterAll(async () => await runtimeServiceProvider.stop()); describe("OpenID4VC", () => { test("should process a given credential offer", async () => { + // this should fetch its own credential offer url + const response = await fetch(`https://openid4vc-service.is.enmeshed.eu/issuance/credentialOffers`, { + method: "POST", + headers: { + // eslint-disable-next-line @typescript-eslint/naming-convention + "Content-Type": "application/json" + }, + body: JSON.stringify({ + credentialConfigurationIds: ["EmployeeIdCard-sdjwt"] + }) + }); + const data = await response.json(); const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ - credentialOfferUrl: - "openid-credential-offer://?credential_offer_uri=https%3A%2F%2Fopenid4vc-service.is.enmeshed.eu%2Foid4vci%2Fissuer123%2Foffers%2F989f2291-1957-4c71-ac5c-88db744916d7" + credentialOfferUrl: data.result.credentialOffer }); // @ts-expect-error expect(result._isSuccess).toBe(true); - }, 10000); + }, 10000000); }); From fef064929e459758bb2edba2b182c2fd6b22f339 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Thu, 28 Aug 2025 09:42:17 +0200 Subject: [PATCH 16/75] feat: change holder to work without node spcific code --- .../modules/openid4vc/OpenId4VcController.ts | 26 ++++--- .../src/modules/openid4vc/index.ts | 6 ++ .../src/modules/openid4vc/local/BaseAgent.ts | 77 +++++++++++++------ .../src/modules/openid4vc/local/Holder.ts | 13 +--- .../openid4vc/local/LocalAgentDependencies.ts | 17 ++++ 5 files changed, 97 insertions(+), 42 deletions(-) create mode 100644 packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 7f48c44f8..920223324 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,3 +1,4 @@ +import { IdentityAttribute } from "@nmshd/content"; import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; @@ -15,6 +16,7 @@ export class OpenId4VcController extends ConsumptionBaseController { this._log.error("Processing credential offer:", credentialOffer); const holder = new Holder(3000, "OpenId4VcHolder"); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOffer); this._log.error("Resolved credential offer:", res); @@ -24,15 +26,18 @@ export class OpenId4VcController extends ConsumptionBaseController { const attributes = []; for (const credential of credentials) { - const response = JSON.parse(JSON.stringify(credential)); - const attribute = await this._parent.attributes.createRepositoryAttribute({ - content: IdentityAttribute.from({ - value: { - "@type": "VerifiableCredential", - value: response - }, - owner: this.parent.accountController.identity.address - }) + const owner = this.parent.accountController.identity.address; + const identityAttribute = IdentityAttribute.from({ + value: { + "@type": "VerifiableCredential", + value: credential, + title: "Employee ID Card", + description: "An employee ID card credential" + }, + owner: owner + }); + const attribute = await this.parent.attributes.createRepositoryAttribute({ + content: identityAttribute }); this._log.error("Created attribute:", attribute); attributes.push(attribute); @@ -41,8 +46,7 @@ export class OpenId4VcController extends ConsumptionBaseController { return { status: "success", message: "Credential offer processed successfully", - data: credentialOfferm, - attributes: attributes + data: credentialOffer }; } } diff --git a/packages/consumption/src/modules/openid4vc/index.ts b/packages/consumption/src/modules/openid4vc/index.ts index 9eaad665e..51d77ee98 100644 --- a/packages/consumption/src/modules/openid4vc/index.ts +++ b/packages/consumption/src/modules/openid4vc/index.ts @@ -1 +1,7 @@ +export * from "./local/BaseAgent"; +export * from "./local/FakeFileSystem"; +export * from "./local/FakeKeyManagmentService"; +export * from "./local/FakeStorageService"; +export * from "./local/Holder"; +export * from "./local/LocalAgentDependencies"; export * from "./OpenId4VcController"; diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index 98b36e2f6..c2fc32b0e 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -1,6 +1,20 @@ -import { transformPrivateKeyToPrivateJwk } from "@credo-ts/askar"; -import { Agent, Buffer, ConsoleLogger, DidKey, LogLevel, type InitConfig, type KeyDidCreateOptions, type ModulesMap, type VerificationMethod } from "@credo-ts/core"; -import { agentDependencies } from "@credo-ts/node"; +import { + Agent, + ConsoleLogger, + DependencyManager, + DidKey, + InjectionSymbols, + KeyDidCreateOptions, + LogLevel, + type InitConfig, + type ModulesMap, + type VerificationMethod +} from "@credo-ts/core"; +import { KeyManagementModuleConfig } from "@credo-ts/core/build/modules/kms"; +import { JsonWebKey } from "crypto"; +import { FakeKeyManagmentService } from "./FakeKeyManagmentService"; +import { FakeStorageService } from "./FakeStorageService"; +import { agentDependencies } from "./LocalAgentDependencies"; export class BaseAgent { public port: number; @@ -11,6 +25,7 @@ export class BaseAgent { public didKey!: DidKey; public kid!: string; public verificationMethod!: VerificationMethod; + private readonly keyStorage: Map = new Map(); public constructor({ port, name, modules }: { port: number; name: string; modules: AgentModules }) { this.name = name; @@ -23,33 +38,51 @@ export class BaseAgent { } satisfies InitConfig; this.config = config; - - this.agent = new Agent({ - config, - dependencies: agentDependencies, - modules - }); + const dependencyManager = new DependencyManager(); + dependencyManager.registerInstance(InjectionSymbols.StorageService, new FakeStorageService()); + // dependencyManager.registerInstance(InjectionSymbols.StorageUpdateService, new FakeStorageService()); + if (!dependencyManager.isRegistered(InjectionSymbols.StorageService)) { + // eslint-disable-next-line no-console + console.log("StorageService not registered!!!"); + } + this.agent = new Agent( + { + config, + dependencies: agentDependencies, + modules + }, + dependencyManager + ); } - public async initializeAgent(secretPrivateKey: string): Promise { - await this.agent.initialize(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public async initializeAgent(privateKey: string): Promise { + // as we are not using askar we need to set the storage version + const storrage = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); + const versionRecord = { id: "STORAGE_VERSION_RECORD_ID", storageVersion: "0.5.0", value: "0.5.0" }; + await storrage.save(this.agent.context, versionRecord); + // as we are not using askar we need to setup our own key management service + const kmsConfig = this.agent.dependencyManager.resolve(KeyManagementModuleConfig); + // TODO: think about adding the local key storrage to the FakeKMS constructor + kmsConfig.registerBackend(new FakeKeyManagmentService()); - const { privateJwk } = transformPrivateKeyToPrivateJwk({ - type: { - crv: "Ed25519", - kty: "OKP" - }, - privateKey: Buffer.from(secretPrivateKey) - }); + if (kmsConfig.backends.length === 0) throw new Error("No KMS backend registered"); - const { keyId } = await this.agent.kms.importKey({ - privateJwk - }); + await this.agent.initialize(); + + // create a uuid based key id + const keyId = crypto.randomUUID(); const didCreateResult = await this.agent.dids.create({ method: "key", options: { - keyId + createKey: { + type: { + crv: "Ed25519", + kty: "OKP" + }, + keyId: keyId + } } }); diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 89d43b1e2..b03869b12 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -1,4 +1,3 @@ -import { AskarModule, AskarModuleConfigStoreOptions } from "@credo-ts/askar"; import { DidJwk, DidKey, JwkDidCreateOptions, KeyDidCreateOptions, Kms, Mdoc, W3cJsonLdVerifiableCredential, W3cJwtVerifiableCredential, X509Module } from "@credo-ts/core"; import { OpenId4VcHolderModule, @@ -9,17 +8,14 @@ import { type OpenId4VciResolvedCredentialOffer, type OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; -import { askar } from "@openwallet-foundation/askar-nodejs"; import { BaseAgent } from "./BaseAgent"; -function getOpenIdHolderModules(askarStorageConfig: AskarModuleConfigStoreOptions) { +function getOpenIdHolderModules() { return { - askar: new AskarModule({ askar, store: askarStorageConfig }), openId4VcHolder: new OpenId4VcHolderModule(), x509: new X509Module({ getTrustedCertificatesForVerification: (_agentContext, { certificateChain }) => { // console.log(greenText(`dyncamically trusting certificate ${certificateChain[0].getIssuerNameField("C")} for verification of ${verification.type}`, true)); - return [certificateChain[0].toString("pem")]; } }) @@ -36,14 +32,13 @@ export class Holder extends BaseAgent> super({ port, name, - modules: getOpenIdHolderModules({ - id: name, - key: name - }) + modules: getOpenIdHolderModules() }); } public static async build(): Promise { + // the faked storrage service needs to be dependency injected before the agent is initialized + const holder = new Holder(3000, `OpenId4VcHolder ${Math.random().toString()}`); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); diff --git a/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts b/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts new file mode 100644 index 000000000..8190b1abe --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts @@ -0,0 +1,17 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { AgentDependencies } from "@credo-ts/core"; +import { EventEmitter } from "events"; +import WebSocket from "ws"; +import { FakeFileSystem } from "./FakeFileSystem"; +// Example fetch implementation (using node-fetch or global fetch) +const fetchImpl = globalThis.fetch; + +// Example WebSocket implementation (using ws) +const webSocketImpl = WebSocket; + +export const agentDependencies: AgentDependencies = { + FileSystem: FakeFileSystem, + EventEmitterClass: EventEmitter, + fetch: fetchImpl, + WebSocketClass: webSocketImpl +}; From 2bd7039cc9a623b77f9c7a56a6062fa23d2a0c39 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Thu, 28 Aug 2025 10:04:32 +0200 Subject: [PATCH 17/75] fix: facade return type --- .../src/consumption/VerifiableCredentialDTO.ts | 5 +++++ packages/runtime-types/src/consumption/index.ts | 1 + packages/runtime/package.json | 1 + .../facades/consumption/OpenId4VcFacade.ts | 3 ++- .../consumption/openid4vc/ResolveCredentialOffer.ts | 10 +++++----- 5 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts diff --git a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts new file mode 100644 index 000000000..84c29f1b3 --- /dev/null +++ b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts @@ -0,0 +1,5 @@ +export interface VerifiableCredentialDTO { + status: string; + message: string; + data: string; +} diff --git a/packages/runtime-types/src/consumption/index.ts b/packages/runtime-types/src/consumption/index.ts index 5e0415a49..6ec020d3e 100644 --- a/packages/runtime-types/src/consumption/index.ts +++ b/packages/runtime-types/src/consumption/index.ts @@ -7,3 +7,4 @@ export * from "./LocalNotificationDTO"; export * from "./LocalRequestDTO"; export * from "./RequestValidationResultDTO"; export * from "./SettingDTO"; +export * from "./VerifiableCredentialDTO"; diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 2423011fb..a0e6dcb73 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -75,6 +75,7 @@ "ajv": "^8.17.1", "ajv-errors": "^3.0.0", "ajv-formats": "^3.0.1", + "https": "^1.0.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.21", "luxon": "^3.7.1", diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts index b05fd841e..03eeb3974 100644 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -1,11 +1,12 @@ import { ApplicationError, Result } from "@js-soft/ts-utils"; +import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { ResolveCredentialOfferRequest, ResolveCredentialOfferUseCase } from "../../../useCases"; export class OpenId4VcFacade { public constructor(@Inject private readonly resolveCredentialOfferUseCase: ResolveCredentialOfferUseCase) {} - public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { + public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { return await this.resolveCredentialOfferUseCase.execute(request); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts index 0bf9d6321..85b7d78e4 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts @@ -1,5 +1,6 @@ import { Result } from "@js-soft/ts-utils"; import { OpenId4VcController } from "@nmshd/consumption"; +import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; @@ -13,7 +14,7 @@ class Validator extends SchemaValidator { } } -export class ResolveCredentialOfferUseCase extends UseCase { +export class ResolveCredentialOfferUseCase extends UseCase { public constructor( @Inject private readonly openId4VcContoller: OpenId4VcController, @Inject validator: Validator @@ -21,9 +22,8 @@ export class ResolveCredentialOfferUseCase extends UseCase> { - return this.openId4VcContoller.processCredentialOffer(request.credentialOfferUrl).then(() => { - return Result.ok(undefined); - }); + protected override async executeInternal(request: ResolveCredentialOfferRequest): Promise> { + const result = await this.openId4VcContoller.processCredentialOffer(request.credentialOfferUrl); + return Result.ok({ status: result.status, message: result.message, data: result.data } as VerifiableCredentialDTO); } } From d05dd1b41d7533a3c1f1f8a6e40c519bf554c3ea Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Thu, 28 Aug 2025 10:08:43 +0200 Subject: [PATCH 18/75] fix: return value --- .../consumption/src/modules/openid4vc/OpenId4VcController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 920223324..afdf7fbd0 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -46,7 +46,7 @@ export class OpenId4VcController extends ConsumptionBaseController { return { status: "success", message: "Credential offer processed successfully", - data: credentialOffer + data: JSON.stringify(credentials) }; } } From 1b78e6cd8a101ea52e639a23674b06fcf727bf78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 28 Aug 2025 10:50:19 +0200 Subject: [PATCH 19/75] chore: update schemas --- .../runtime/src/useCases/common/Schemas.ts | 233 ++++++++++++++++++ 1 file changed, 233 insertions(+) diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index 499204204..efa1b9818 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -1778,6 +1778,9 @@ export const CanCreateOutgoingRequestRequest: any = { { "$ref": "#/definitions/SchematizedXMLJSON" }, + { + "$ref": "#/definitions/VerifiableCredentialJSON" + }, { "$ref": "#/definitions/StateJSON" }, @@ -2201,6 +2204,34 @@ export const CanCreateOutgoingRequestRequest: any = { ], "additionalProperties": false }, + "VerifiableCredentialJSON": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "VerifiableCredential" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": {} + }, + "required": [ + "@type", + "title", + "value" + ], + "additionalProperties": false + }, "StateJSON": { "type": "object", "properties": { @@ -2490,6 +2521,7 @@ export const CanCreateOutgoingRequestRequest: any = { "FaxNumber", "IdentityFileReference", "SchematizedXML", + "VerifiableCredential", "JobTitle", "Nationality", "PersonName", @@ -2521,6 +2553,7 @@ export const CanCreateOutgoingRequestRequest: any = { "HouseNumber", "MiddleName", "SchematizedXML", + "VerifiableCredential", "State", "Street", "Surname", @@ -4224,6 +4257,9 @@ export const CompleteOutgoingRequestRequest: any = { { "$ref": "#/definitions/SchematizedXMLJSON" }, + { + "$ref": "#/definitions/VerifiableCredentialJSON" + }, { "$ref": "#/definitions/StateJSON" }, @@ -4647,6 +4683,34 @@ export const CompleteOutgoingRequestRequest: any = { ], "additionalProperties": false }, + "VerifiableCredentialJSON": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "VerifiableCredential" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": {} + }, + "required": [ + "@type", + "title", + "value" + ], + "additionalProperties": false + }, "StateJSON": { "type": "object", "properties": { @@ -6669,6 +6733,9 @@ export const CreateAndCompleteOutgoingRequestFromRelationshipTemplateResponseReq { "$ref": "#/definitions/SchematizedXMLJSON" }, + { + "$ref": "#/definitions/VerifiableCredentialJSON" + }, { "$ref": "#/definitions/StateJSON" }, @@ -7092,6 +7159,34 @@ export const CreateAndCompleteOutgoingRequestFromRelationshipTemplateResponseReq ], "additionalProperties": false }, + "VerifiableCredentialJSON": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "VerifiableCredential" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": {} + }, + "required": [ + "@type", + "title", + "value" + ], + "additionalProperties": false + }, "StateJSON": { "type": "object", "properties": { @@ -9728,6 +9823,9 @@ export const CreateOutgoingRequestRequest: any = { { "$ref": "#/definitions/SchematizedXMLJSON" }, + { + "$ref": "#/definitions/VerifiableCredentialJSON" + }, { "$ref": "#/definitions/StateJSON" }, @@ -10151,6 +10249,34 @@ export const CreateOutgoingRequestRequest: any = { ], "additionalProperties": false }, + "VerifiableCredentialJSON": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "VerifiableCredential" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": {} + }, + "required": [ + "@type", + "title", + "value" + ], + "additionalProperties": false + }, "StateJSON": { "type": "object", "properties": { @@ -10440,6 +10566,7 @@ export const CreateOutgoingRequestRequest: any = { "FaxNumber", "IdentityFileReference", "SchematizedXML", + "VerifiableCredential", "JobTitle", "Nationality", "PersonName", @@ -10471,6 +10598,7 @@ export const CreateOutgoingRequestRequest: any = { "HouseNumber", "MiddleName", "SchematizedXML", + "VerifiableCredential", "State", "Street", "Surname", @@ -13177,6 +13305,9 @@ export const ReceivedIncomingRequestRequest: any = { { "$ref": "#/definitions/SchematizedXMLJSON" }, + { + "$ref": "#/definitions/VerifiableCredentialJSON" + }, { "$ref": "#/definitions/StateJSON" }, @@ -13600,6 +13731,34 @@ export const ReceivedIncomingRequestRequest: any = { ], "additionalProperties": false }, + "VerifiableCredentialJSON": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "VerifiableCredential" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": {} + }, + "required": [ + "@type", + "title", + "value" + ], + "additionalProperties": false + }, "StateJSON": { "type": "object", "properties": { @@ -13889,6 +14048,7 @@ export const ReceivedIncomingRequestRequest: any = { "FaxNumber", "IdentityFileReference", "SchematizedXML", + "VerifiableCredential", "JobTitle", "Nationality", "PersonName", @@ -13920,6 +14080,7 @@ export const ReceivedIncomingRequestRequest: any = { "HouseNumber", "MiddleName", "SchematizedXML", + "VerifiableCredential", "State", "Street", "Surname", @@ -15495,6 +15656,7 @@ export const ExecuteIdentityAttributeQueryRequest: any = { "FaxNumber", "IdentityFileReference", "SchematizedXML", + "VerifiableCredential", "JobTitle", "Nationality", "PersonName", @@ -15526,6 +15688,7 @@ export const ExecuteIdentityAttributeQueryRequest: any = { "HouseNumber", "MiddleName", "SchematizedXML", + "VerifiableCredential", "State", "Street", "Surname", @@ -15616,6 +15779,7 @@ export const ExecuteIQLQueryRequest: any = { "FaxNumber", "IdentityFileReference", "SchematizedXML", + "VerifiableCredential", "JobTitle", "Nationality", "PersonName", @@ -15647,6 +15811,7 @@ export const ExecuteIQLQueryRequest: any = { "HouseNumber", "MiddleName", "SchematizedXML", + "VerifiableCredential", "State", "Street", "Surname", @@ -18285,6 +18450,9 @@ export const SucceedRepositoryAttributeRequest: any = { { "$ref": "#/definitions/SchematizedXMLJSON" }, + { + "$ref": "#/definitions/VerifiableCredentialJSON" + }, { "$ref": "#/definitions/StateJSON" }, @@ -18708,6 +18876,34 @@ export const SucceedRepositoryAttributeRequest: any = { ], "additionalProperties": false }, + "VerifiableCredentialJSON": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "VerifiableCredential" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": {} + }, + "required": [ + "@type", + "title", + "value" + ], + "additionalProperties": false + }, "StateJSON": { "type": "object", "properties": { @@ -18888,6 +19084,7 @@ export const ValidateIQLQueryRequest: any = { "FaxNumber", "IdentityFileReference", "SchematizedXML", + "VerifiableCredential", "JobTitle", "Nationality", "PersonName", @@ -18919,6 +19116,7 @@ export const ValidateIQLQueryRequest: any = { "HouseNumber", "MiddleName", "SchematizedXML", + "VerifiableCredential", "State", "Street", "Surname", @@ -23884,4 +24082,39 @@ export const Sex: any = { "additionalProperties": false } } +} + +export const VerifiableCredential: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/VerifiableCredential", + "definitions": { + "VerifiableCredential": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "VerifiableCredential" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": {} + }, + "required": [ + "@type", + "title", + "value" + ], + "additionalProperties": false + } + } } \ No newline at end of file From afe4c14c75dc397e574313fa47bfbbb9f894a6eb Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Thu, 28 Aug 2025 16:15:51 +0200 Subject: [PATCH 20/75] fix: remove reference to global --- .../modules/openid4vc/local/FakeKeyManagmentService.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts index 17d3e6071..57f9b4066 100644 --- a/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts +++ b/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts @@ -32,15 +32,9 @@ export class FakeKeyManagmentService implements KeyManagementService { public static readonly backend = "fakeKeyManagementService"; public readonly backend = FakeKeyManagmentService.backend; - // we use a global variable to store the keys - this is surely not save but ok for a prototype public keystore: Map; public constructor() { - if ((global as any).fakeKmsKeystore) { - this.keystore = (global as any).fakeKmsKeystore as Map; - } else { - this.keystore = new Map(); - (global as any).fakeKmsKeystore = this.keystore; - } + this.keystore = new Map(); } public isOperationSupported(agentContext: AgentContext, operation: KmsOperation): boolean { From 4e31c47cc22e9e812d3c00870eed16973d959cf6 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Mon, 15 Sep 2025 15:45:30 +0200 Subject: [PATCH 21/75] WIP --- .vscode/settings.json | 22 +- package-lock.json | 109 ++++++++ package.json | 4 + packages/consumption/package.json | 3 +- .../modules/openid4vc/OpenId4VcController.ts | 111 +++++--- .../src/modules/openid4vc/local/BaseAgent.ts | 24 +- .../local/FakeKeyManagmentService.ts | 260 +++++++++++++----- .../src/modules/openid4vc/local/Holder.ts | 7 + .../consumption/FetchedCredentialOfferDTO.ts | 3 + .../src/consumption/FetchedProofRequestDTO.ts | 3 + .../runtime-types/src/consumption/index.ts | 2 + packages/runtime/package.json | 2 + .../facades/consumption/OpenId4VcFacade.ts | 31 ++- .../runtime/src/useCases/common/Schemas.ts | 47 ++++ .../openid4vc/AcceptProofRequestUseCase.ts | 0 .../openid4vc/FetchCredentialOfferUseCase.ts | 29 ++ .../openid4vc/FetchProofRequestUseCase.ts | 29 ++ ...er.ts => ResolveCredentialOfferUseCase.ts} | 0 .../ResolveFetchedCredentialUseCase.ts | 31 +++ .../useCases/consumption/openid4vc/index.ts | 5 +- .../test/consumption/openid4vc.test.ts | 72 ++++- 21 files changed, 674 insertions(+), 120 deletions(-) create mode 100644 packages/runtime-types/src/consumption/FetchedCredentialOfferDTO.ts create mode 100644 packages/runtime-types/src/consumption/FetchedProofRequestDTO.ts create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/FetchProofRequestUseCase.ts rename packages/runtime/src/useCases/consumption/openid4vc/{ResolveCredentialOffer.ts => ResolveCredentialOfferUseCase.ts} (100%) create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 6b81ef66c..9854f4675 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -52,5 +52,25 @@ "source.organizeImports": "always" }, "files.eol": "\n", - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib", + "workbench.colorCustomizations": { + "activityBar.activeBackground": "#fbed80", + "activityBar.background": "#fbed80", + "activityBar.foreground": "#15202b", + "activityBar.inactiveForeground": "#15202b99", + "activityBarBadge.background": "#06b9a5", + "activityBarBadge.foreground": "#15202b", + "commandCenter.border": "#15202b99", + "sash.hoverBorder": "#fbed80", + "statusBar.background": "#f9e64f", + "statusBar.foreground": "#15202b", + "statusBarItem.hoverBackground": "#f7df1e", + "statusBarItem.remoteBackground": "#f9e64f", + "statusBarItem.remoteForeground": "#15202b", + "titleBar.activeBackground": "#f9e64f", + "titleBar.activeForeground": "#15202b", + "titleBar.inactiveBackground": "#f9e64f99", + "titleBar.inactiveForeground": "#15202b99" + }, + "peacock.remoteColor": "#f9e64f" } diff --git a/package-lock.json b/package-lock.json index 6daf192f9..29602bdee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,10 +15,14 @@ "packages/runtime", "packages/app-runtime" ], + "dependencies": { + "libsodium-wrappers": "^0.7.15" + }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.3", "@js-soft/license-check": "^1.0.9", "@types/jest": "^30.0.0", + "@types/libsodium-wrappers": "^0.7.14", "@types/node": "^24.3.0", "enhanced-publish": "^1.1.5", "eslint": "^9.34.0", @@ -3668,6 +3672,16 @@ "@babel/types": "^7.28.2" } }, + "node_modules/@types/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/docker-modem": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", @@ -3691,6 +3705,16 @@ "@types/ssh2": "*" } }, + "node_modules/@types/elliptic": { + "version": "6.4.18", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.18.tgz", + "integrity": "sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bn.js": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -3750,6 +3774,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/libsodium-wrappers": { + "version": "0.7.14", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.14.tgz", + "integrity": "sha512-5Kv68fXuXK0iDuUir1WPGw2R9fOZUlYlSAa0ztMcL0s0BfIDTqg9GXz8K30VJpPP3sxWhbolnQma2x+/TfkzDQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", @@ -5215,6 +5246,12 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, "node_modules/borc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/borc/-/borc-3.0.0.tgz", @@ -5293,6 +5330,12 @@ "node": ">=8" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, "node_modules/browserslist": { "version": "4.25.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", @@ -6574,6 +6617,21 @@ "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==", "license": "ISC" }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -7860,6 +7918,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -7872,6 +7940,17 @@ "node": ">= 0.4" } }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/hosted-git-info": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", @@ -9318,12 +9397,27 @@ "integrity": "sha512-QZXnR/OGiDcBjF4hGk0wwVrPcZvbSSyzlvkjXv5LFfktj7O2VZDrt4Xs8SgR/vOFco+qk1i8J43ikMXZoTrtPw==", "license": "MIT" }, + "node_modules/libsodium": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.15.tgz", + "integrity": "sha512-sZwRknt/tUpE2AwzHq3jEyUU5uvIZHtSssktXq7owd++3CSgn8RGrv6UZJJBpP7+iBghBqe7Z06/2M31rI2NKw==", + "license": "ISC" + }, "node_modules/libsodium-sumo": { "version": "0.7.15", "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.15.tgz", "integrity": "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==", "license": "ISC" }, + "node_modules/libsodium-wrappers": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.15.tgz", + "integrity": "sha512-E4anqJQwcfiC6+Yrl01C1m8p99wEhLmJSs0VQqST66SbQXXBoaJY0pF4BNjRYa/sOQAxx6lXAaAFIlx+15tXJQ==", + "license": "ISC", + "dependencies": { + "libsodium": "^0.7.15" + } + }, "node_modules/libsodium-wrappers-sumo": { "version": "0.7.15", "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.15.tgz", @@ -9769,6 +9863,18 @@ "node": ">=6" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -14208,6 +14314,7 @@ "@js-soft/node-logger": "1.2.0", "@nmshd/crypto": "2.1.2", "@types/lodash": "^4.17.20", + "libsodium-wrappers": "^0.7.9", "ts-mockito": "^2.6.1" } }, @@ -14261,6 +14368,7 @@ "ajv": "^8.17.1", "ajv-errors": "^3.0.0", "ajv-formats": "^3.0.1", + "elliptic": "^6.6.1", "https": "^1.0.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.21", @@ -14272,6 +14380,7 @@ "@js-soft/docdb-access-loki": "1.3.0", "@js-soft/docdb-access-mongo": "1.3.0", "@js-soft/node-logger": "1.2.0", + "@types/elliptic": "^6.4.18", "@types/json-stringify-safe": "^5.0.3", "@types/lodash": "^4.17.20", "@types/luxon": "^3.7.1", diff --git a/package.json b/package.json index 6a59054a1..d44fd408b 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@js-soft/eslint-config-ts": "^2.0.3", "@js-soft/license-check": "^1.0.9", "@types/jest": "^30.0.0", + "@types/libsodium-wrappers": "^0.7.14", "@types/node": "^24.3.0", "enhanced-publish": "^1.1.5", "eslint": "^9.34.0", @@ -43,5 +44,8 @@ "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "typescript": "^5.9.2" + }, + "dependencies": { + "libsodium-wrappers": "^0.7.15" } } diff --git a/packages/consumption/package.json b/packages/consumption/package.json index 7c2399bd5..ccac9b621 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -80,7 +80,8 @@ "@js-soft/node-logger": "1.2.0", "@nmshd/crypto": "2.1.2", "@types/lodash": "^4.17.20", - "ts-mockito": "^2.6.1" + "ts-mockito": "^2.6.1", + "libsodium-wrappers": "^0.7.9" }, "publishConfig": { "access": "public", diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index afdf7fbd0..d396dca1d 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,4 +1,4 @@ -import { IdentityAttribute } from "@nmshd/content"; +/* eslint-disable no-console */ import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; @@ -9,44 +9,93 @@ export class OpenId4VcController extends ConsumptionBaseController { super(ConsumptionControllerName.OpenId4VcController, parent); } - public async processCredentialOffer(credentialOffer: string): Promise { - // This is a dummy implementation for the sake of example. - // In a real implementation, you would process the credential offer here. - - this._log.error("Processing credential offer:", credentialOffer); + public async fetchCredentialOffer(credentialOfferUrl: string): Promise { + const holder = new Holder(3000, "OpenId4VcHolder"); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + const res = await holder.resolveCredentialOffer(credentialOfferUrl); + console.log("Fetched credential offer:", res); + return { + data: JSON.stringify(res) + }; + } + public async fetchProofRequest(proofRequestUrl: string): Promise { const holder = new Holder(3000, "OpenId4VcHolder"); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const res = await holder.resolveCredentialOffer(credentialOffer); - this._log.error("Resolved credential offer:", res); - - const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); - this._log.error("Fetched credentials:", credentials); - - const attributes = []; - - for (const credential of credentials) { - const owner = this.parent.accountController.identity.address; - const identityAttribute = IdentityAttribute.from({ - value: { - "@type": "VerifiableCredential", - value: credential, - title: "Employee ID Card", - description: "An employee ID card credential" - }, - owner: owner - }); - const attribute = await this.parent.attributes.createRepositoryAttribute({ - content: identityAttribute - }); - this._log.error("Created attribute:", attribute); - attributes.push(attribute); - } + const res = await holder.resolveProofRequest(proofRequestUrl); + console.log("Fetched proof request:", res); + return { + data: JSON.stringify(res) + }; + } + public async processFetchedCredentialOffer(fetchedCredentialOffer: string, requestedCredentialOffers: string[], pinCode?: string): Promise { + const holder = new Holder(3000, "OpenId4VcHolder"); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + const credentialOffer = JSON.parse(fetchedCredentialOffer); + const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: requestedCredentialOffers, txCode: pinCode }); + console.log("Fetched credentials:", credentials); return { status: "success", message: "Credential offer processed successfully", data: JSON.stringify(credentials) }; } + + public async processCredentialOffer(credentialOffer: string): Promise { + try { + const holder = new Holder(3000, "OpenId4VcHolder"); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + const res = await holder.resolveCredentialOffer(credentialOffer); + const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); + console.log("Fetched credentials:", credentials); + + /* + const attributes = []; + + for (const credential of credentials) { + const owner = this.parent.accountController.identity.address; + + const identityAttribute = IdentityAttribute.from({ + value: { + "@type": "VerifiableCredential", + value: credential, + title: "Employee ID Card", + description: "An employee ID card credential" + }, + owner: owner + }); + const attribute = await this.parent.attributes.createRepositoryAttribute({ + content: identityAttribute + }); + this._log.error("Created attribute:", attribute); + attributes.push(attribute); + } + */ + + return { + status: "success", + message: "Credential offer processed successfully", + data: JSON.stringify(credentials) + }; + } catch (error) { + let errorMessage = "Unknown error"; + let errorStack = ""; + + if (error instanceof Error) { + errorMessage = error.message; + errorStack = error.stack ?? ""; + } else if (typeof error === "string") { + errorMessage = error; + } else { + errorMessage = JSON.stringify(error); + } + + return { + status: "error", + message: `Failed to process credential offer: ${errorMessage}`, + data: JSON.stringify(errorStack) + }; + } + } } diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index c2fc32b0e..55e6d7a9c 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -1,15 +1,4 @@ -import { - Agent, - ConsoleLogger, - DependencyManager, - DidKey, - InjectionSymbols, - KeyDidCreateOptions, - LogLevel, - type InitConfig, - type ModulesMap, - type VerificationMethod -} from "@credo-ts/core"; +import { Agent, ConsoleLogger, DependencyManager, DidKey, InjectionSymbols, LogLevel, type InitConfig, type ModulesMap, type VerificationMethod } from "@credo-ts/core"; import { KeyManagementModuleConfig } from "@credo-ts/core/build/modules/kms"; import { JsonWebKey } from "crypto"; import { FakeKeyManagmentService } from "./FakeKeyManagmentService"; @@ -70,9 +59,13 @@ export class BaseAgent { await this.agent.initialize(); - // create a uuid based key id - const keyId = crypto.randomUUID(); - + /* create a uuid based key id + const keyId = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { + const r = (Math.random() * 16) | 0; + const v = c === "x" ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); + const didCreateResult = await this.agent.dids.create({ method: "key", options: { @@ -93,6 +86,7 @@ export class BaseAgent { const verificationMethod = didCreateResult.didState.didDocument?.dereferenceKey(this.kid, ["authentication"]); if (!verificationMethod) throw new Error("No verification method found"); this.verificationMethod = verificationMethod; + */ } public async shutdown(): Promise { diff --git a/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts index 57f9b4066..522295342 100644 --- a/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts +++ b/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ /* eslint-disable @typescript-eslint/no-unused-vars */ import { AgentContext } from "@credo-ts/core"; import { @@ -22,6 +23,8 @@ import { KmsVerifyOptions, KmsVerifyReturn } from "@credo-ts/core/build/modules/kms"; +import { ec as EC } from "elliptic"; +import _sodium from "libsodium-wrappers"; export interface JwkKeyPair { publicKey: JsonWebKey; @@ -30,21 +33,32 @@ export interface JwkKeyPair { export class FakeKeyManagmentService implements KeyManagementService { public static readonly backend = "fakeKeyManagementService"; - public readonly backend = FakeKeyManagmentService.backend; + public readonly backend = FakeKeyManagmentService.backend; public keystore: Map; + public constructor() { this.keystore = new Map(); } public isOperationSupported(agentContext: AgentContext, operation: KmsOperation): boolean { if (operation.operation === "createKey") { + console.log("FKM: Trying to createKey for type", JSON.stringify(operation.type)); + if (operation.type.kty === "OKP") { + return true; + } + if (operation.type.kty === "EC" && operation.type.crv === "P-256") { + return true; + } + return false; + } + if (operation.operation === "verify" && operation.algorithm === "ES256") { return true; } - if (operation.operation === "verify") { + if (operation.operation === "sign" && (operation.algorithm === "EdDSA" || operation.algorithm === "ES256")) { return true; } - if (operation.operation === "sign" && operation.algorithm === "ES256") { + if (operation.operation === "randomBytes") { return true; } return false; @@ -58,26 +72,86 @@ export class FakeKeyManagmentService implements KeyManagementService { return Promise.resolve((JSON.parse(keyPair) as JwkKeyPair).publicKey as KmsJwkPublic); } public async createKey(agentContext: AgentContext, options: KmsCreateKeyOptions): Promise> { - // check if a key-id is provided - options.keyId ??= crypto.randomUUID(); - - // we want to create a key pair using the web-crypto api and store the private key in our keystore - const keyPair = await crypto.subtle.generateKey( - { - name: "ECDSA", - namedCurve: "P-256" // ES256 - }, - true, - ["sign", "verify"] - ); - - // and return the public key as jwk - const publicKeyJwk = await crypto.subtle.exportKey("jwk", keyPair.publicKey); - const privateKeyJwk = await crypto.subtle.exportKey("jwk", keyPair.privateKey); + options.keyId ??= "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { + // Use libsodium's randombytes_uniform for secure random number generation + const r = _sodium.randombytes_uniform(16); + const v = c === "x" ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); + + if (options.type.kty === "EC" && options.type.crv === "P-256") { + // Use P-256 (aka secp256r1) + const ec = new EC("p256"); + const key = ec.genKeyPair(); + + const b64url = (bytes: Uint8Array) => { + // Convert Uint8Array to string for btoa + let binary = ""; + for (const byte of bytes) { + binary += String.fromCharCode(byte); + } + return btoa(binary).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); + }; + + console.log("FKM: Created EC P-256 key pair", JSON.stringify(key)); + + // Public JWK + const publicJwk = { + kty: "EC", // Elliptic Curve + crv: "P-256", + x: b64url(new Uint8Array(key.getPublic().getX().toArray())), + y: b64url(new Uint8Array(key.getPublic().getY().toArray())) + }; + + // Private JWK + const privateJwk = { + ...publicJwk, + d: b64url(new Uint8Array(key.getPrivate().toArray())) + }; + + const jwkKeyPair = { + publicKey: publicJwk, + privateKey: privateJwk + }; + + console.log("FKM: created jwk-key pair:", JSON.stringify(jwkKeyPair)); + + // store the key pair in the keystore + this.keystore.set(options.keyId, JSON.stringify(jwkKeyPair)); + + return await Promise.resolve({ + keyId: options.keyId, + publicJwk: publicJwk as KmsJwkPublic + } as KmsCreateKeyReturn); + } + + await _sodium.ready; + const sodium = _sodium; + + const { keyType, publicKey, privateKey } = sodium.crypto_sign_keypair(); + + console.log("FKM: key type:", keyType); + console.log("FKM: options type:", JSON.stringify(options.type)); + const seed = privateKey.slice(0, sodium.crypto_sign_SEEDBYTES); + + const b64url = (bytes: Uint8Array) => sodium.to_base64(bytes, sodium.base64_variants.URLSAFE_NO_PADDING); + + // Public JWK + const publicJwk = { + kty: "OKP", // Octet Key Pair + crv: "Ed25519", + x: b64url(publicKey) + }; + + // Private JWK + const privateJwk = { + ...publicJwk, + d: b64url(seed) + }; const jwkKeyPair = { - publicKey: publicKeyJwk, - privateKey: privateKeyJwk + publicKey: publicJwk, + privateKey: privateJwk }; // store the key pair in the keystore @@ -85,7 +159,7 @@ export class FakeKeyManagmentService implements KeyManagementService { return await Promise.resolve({ keyId: options.keyId, - publicJwk: publicKeyJwk as KmsJwkPublic + publicJwk: publicJwk as KmsJwkPublic } as KmsCreateKeyReturn); } public importKey(agentContext: AgentContext, options: KmsImportKeyOptions): Promise> { @@ -100,60 +174,116 @@ export class FakeKeyManagmentService implements KeyManagementService { if (!stringifiedKeyPair) { throw new Error(`Key with id ${options.keyId} not found`); } - const privateKeyJwk = (JSON.parse(stringifiedKeyPair) as JwkKeyPair).privateKey; - const privateKey = await crypto.subtle.importKey( - "jwk", // format - privateKeyJwk, // the exported JWK object - { name: "ECDSA", namedCurve: "P-256" }, // algorithm - true, // extractable - ["sign"] // key usages - ); - - // load data from options - const data = options.data; - - // check if method is ES256 - if (options.algorithm !== "ES256") { - throw new Error(`Algorithm ${options.algorithm} not supported`); + + const { privateKey, publicKey } = JSON.parse(stringifiedKeyPair) as JwkKeyPair; + + if (options.algorithm === "ES256") { + // Use P-256 (aka secp256r1) + const ec = new EC("p256"); + if (!privateKey.d) { + throw new Error("Private JWK does not contain 'd' parameter"); + } + + const b64urlDecode = (b64url: string) => { + // remove url specific characters + const base64 = b64url.replace(/-/g, "+").replace(/_/g, "/"); + return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)); + }; + const i2hex = (bytes: Uint8Array) => { + return Array.from(bytes) + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + }; + const priv = i2hex(b64urlDecode(privateKey.d)); + const key = ec.keyFromPrivate(priv, "hex"); + + // we need to hash the data using SHA-256 + const dataHash = ec.hash().update(options.data).digest(); + const signature = key.sign(dataHash); + const r = new Uint8Array(signature.r.toArray()); + const s = new Uint8Array(signature.s.toArray()); + const signatureBytes = new Uint8Array(r.length + s.length); + signatureBytes.set(r); + signatureBytes.set(s, r.length); + + return await Promise.resolve({ + signature: signatureBytes + } as KmsSignReturn); + } + + await _sodium.ready; + const sodium = _sodium; + const decode = (bytes: string) => sodium.from_base64(bytes, sodium.base64_variants.URLSAFE_NO_PADDING); + // get the priavte key bytes + if (privateKey.d === undefined) { + throw new Error("Private key does not contain 'd' parameter"); } + const privateKeyBytes = decode(privateKey.d); + + // get the public key bytes + if (publicKey.x === undefined) { + throw new Error("Public key does not contain 'x' parameter"); + } + const publicKeyBytes = decode(publicKey.x); + + // combine the key bytes to a full private key + const fullPrivateKeyBytes = new Uint8Array(privateKeyBytes.length + publicKeyBytes.length); + fullPrivateKeyBytes.set(privateKeyBytes); + fullPrivateKeyBytes.set(publicKeyBytes, privateKeyBytes.length); + + // and use it to sign the data + const signature = sodium.crypto_sign_detached(options.data, fullPrivateKeyBytes); - // transform the private key to a jwk - const signatureBuffer = await crypto.subtle.sign({ name: "ECDSA", hash: { name: "SHA-256" } }, privateKey, data); return { - signature: new Uint8Array(signatureBuffer) + signature: signature }; } - public async verify(agentContext: AgentContext, options: KmsVerifyOptions): Promise { - // load key from keystore - let publicKeyJwk: JsonWebKey; + public verify(agentContext: AgentContext, options: KmsVerifyOptions): Promise { + console.log("FKM: verifying signature"); + // Use P-256 (aka secp256r1) + const ec = new EC("p256"); if (!options.key.publicJwk) { - if (!options.key.keyId) { - throw new Error("Either publicJwk or keyId must be provided"); - } - const stringifiedKeyPair = this.keystore.get(options.key.keyId); - if (!stringifiedKeyPair) { - throw new Error(`Key with id ${options.key.keyId} not found`); - } - publicKeyJwk = (JSON.parse(stringifiedKeyPair) as JwkKeyPair).publicKey; - } else { - publicKeyJwk = options.key.publicJwk; + throw new Error("Public JWK is undefined"); } - - // check algorithm - if (options.algorithm !== "ES256") { - throw new Error(`Algorithm ${options.algorithm} not supported`); + if (options.key.publicJwk.kty !== "EC") { + throw new Error("Public JWK does not contain 'x' or 'y' parameter"); } - // import the public key - const publicKey = await crypto.subtle.importKey("jwk", publicKeyJwk, { name: "ECDSA", namedCurve: "P-256" }, true, ["verify"]); + const x = options.key.publicJwk.x; + const y = options.key.publicJwk.y; - // verify signature against data - const isValid = await crypto.subtle.verify({ name: "ECDSA", hash: { name: "SHA-256" } }, publicKey, options.signature, options.data); - return { - verified: isValid - } as KmsVerifyReturn; + const b64urlDecode = (b64url: string) => { + // remove url specific characters + const base64 = b64url.replace(/-/g, "+").replace(/_/g, "/"); + return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)); + }; + + const i2hex = (bytes: Uint8Array) => { + return Array.from(bytes) + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + }; + + const pub = { x: i2hex(b64urlDecode(x)), y: i2hex(b64urlDecode(y)) }; + const key = ec.keyFromPublic(pub, "hex"); + + const signatureBytes = options.signature; + const r = signatureBytes.subarray(0, 32); + const s = signatureBytes.subarray(32, 64); + const signature = { r: i2hex(r), s: i2hex(s) }; + + // we need to hash the data using SHA-256 + const dataHash = ec.hash().update(options.data).digest(); + try { + const verified = key.verify(dataHash, signature); + return Promise.resolve({ verified: verified } as KmsVerifyReturn); + } catch (e) { + console.log("FKM: error during verification", e); + throw e; + } } + public encrypt(agentContext: AgentContext, options: KmsEncryptOptions): Promise { throw new Error("Method not implemented."); } @@ -161,6 +291,6 @@ export class FakeKeyManagmentService implements KeyManagementService { throw new Error("Method not implemented."); } public randomBytes(agentContext: AgentContext, options: KmsRandomBytesOptions): KmsRandomBytesReturn { - throw new Error("Method not implemented."); + return _sodium.randombytes_buf(options.length); // Uint8Array } } diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index b03869b12..853185f6a 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import { DidJwk, DidKey, JwkDidCreateOptions, KeyDidCreateOptions, Kms, Mdoc, W3cJsonLdVerifiableCredential, W3cJwtVerifiableCredential, X509Module } from "@credo-ts/core"; import { OpenId4VcHolderModule, @@ -112,6 +113,8 @@ export class Holder extends BaseAgent> } ); + console.log("Token response:", JSON.stringify(tokenResponse)); + const credentialResponse = await this.agent.modules.openId4VcHolder.requestCredentials({ resolvedCredentialOffer, clientId: options.clientId, @@ -160,6 +163,8 @@ export class Holder extends BaseAgent> ...tokenResponse }); + console.log("Credential response:", credentialResponse); + const storedCredentials = await Promise.all( credentialResponse.credentials.map((response) => { // TODO: handle batch issuance @@ -174,6 +179,8 @@ export class Holder extends BaseAgent> }) ); + console.log("Stored credentials:", storedCredentials); + return storedCredentials; } diff --git a/packages/runtime-types/src/consumption/FetchedCredentialOfferDTO.ts b/packages/runtime-types/src/consumption/FetchedCredentialOfferDTO.ts new file mode 100644 index 000000000..b669e51eb --- /dev/null +++ b/packages/runtime-types/src/consumption/FetchedCredentialOfferDTO.ts @@ -0,0 +1,3 @@ +export interface FetchedCredentialOfferDTO { + jsonRepresentation: string; +} diff --git a/packages/runtime-types/src/consumption/FetchedProofRequestDTO.ts b/packages/runtime-types/src/consumption/FetchedProofRequestDTO.ts new file mode 100644 index 000000000..a621a223b --- /dev/null +++ b/packages/runtime-types/src/consumption/FetchedProofRequestDTO.ts @@ -0,0 +1,3 @@ +export interface FetchedProofRequestDTO { + jsonRepresentation: string; +} diff --git a/packages/runtime-types/src/consumption/index.ts b/packages/runtime-types/src/consumption/index.ts index 6ec020d3e..28f1c4cb6 100644 --- a/packages/runtime-types/src/consumption/index.ts +++ b/packages/runtime-types/src/consumption/index.ts @@ -1,6 +1,8 @@ export * from "./AttributeTagCollectionDTO"; export * from "./CredentialOfferDTO"; export * from "./DraftDTO"; +export * from "./FetchedCredentialOfferDTO"; +export * from "./FetchedProofRequestDTO"; export * from "./IdentityMetadataDTO"; export * from "./LocalAttributeDTO"; export * from "./LocalNotificationDTO"; diff --git a/packages/runtime/package.json b/packages/runtime/package.json index a0e6dcb73..27ed96dee 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -75,6 +75,7 @@ "ajv": "^8.17.1", "ajv-errors": "^3.0.0", "ajv-formats": "^3.0.1", + "elliptic": "^6.6.1", "https": "^1.0.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.21", @@ -86,6 +87,7 @@ "@js-soft/docdb-access-loki": "1.3.0", "@js-soft/docdb-access-mongo": "1.3.0", "@js-soft/node-logger": "1.2.0", + "@types/elliptic": "^6.4.18", "@types/json-stringify-safe": "^5.0.3", "@types/lodash": "^4.17.20", "@types/luxon": "^3.7.1", diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts index 03eeb3974..89c964711 100644 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -1,12 +1,37 @@ import { ApplicationError, Result } from "@js-soft/ts-utils"; -import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { FetchedCredentialOfferDTO, FetchedProofRequestDTO, VerifiableCredentialDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; -import { ResolveCredentialOfferRequest, ResolveCredentialOfferUseCase } from "../../../useCases"; +import { + FetchCredentialOfferRequest, + FetchCredentialOfferUseCase, + FetchedCredentialOfferRequest, + FetchProofRequestUseCase, + ResolveCredentialOfferRequest, + ResolveCredentialOfferUseCase, + ResolveFetchedCredentialOfferUseCase +} from "../../../useCases"; export class OpenId4VcFacade { - public constructor(@Inject private readonly resolveCredentialOfferUseCase: ResolveCredentialOfferUseCase) {} + public constructor( + @Inject private readonly resolveCredentialOfferUseCase: ResolveCredentialOfferUseCase, + @Inject private readonly fetchOfferUseCase: FetchCredentialOfferUseCase, + @Inject private readonly resolveFetchedOfferUseCase: ResolveFetchedCredentialOfferUseCase, + @Inject private readonly fetchProofRequestUseCase: FetchProofRequestUseCase + ) {} public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { return await this.resolveCredentialOfferUseCase.execute(request); } + + public async fetchCredentialOffer(request: FetchCredentialOfferRequest): Promise> { + return await this.fetchOfferUseCase.execute(request); + } + + public async resolveFetchedCredentialOffer(request: FetchedCredentialOfferRequest): Promise> { + return await this.resolveFetchedOfferUseCase.execute(request); + } + + public async fetchProofRequest(request: FetchCredentialOfferRequest): Promise> { + return await this.fetchProofRequestUseCase.execute(request); + } } diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index efa1b9818..0e9c0064f 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -19482,6 +19482,53 @@ export const SentNotificationRequest: any = { } } +export const FetchedCredentialOfferRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/FetchedCredentialOfferRequest", + "definitions": { + "FetchedCredentialOfferRequest": { + "type": "object", + "properties": { + "data": { + "type": "string" + }, + "pinCode":{ + "type": "string" + }, + "requestedCredentials":{ + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "data" + ], + "additionalProperties": false + } + } +} + +export const FetchProofRequestRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/FetchedCredentialOfferRequest", + "definitions": { + "FetchedCredentialOfferRequest": { + "type": "object", + "properties": { + "proofRequestUrl": { + "type": "string" + } + }, + "required": [ + "proofRequestUrl" + ], + "additionalProperties": false + } + } +} + export const ResolveCredentialOfferRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/ResolveCredentialOfferRequest", diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts new file mode 100644 index 000000000..9396a7ab3 --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts @@ -0,0 +1,29 @@ +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { FetchedCredentialOfferDTO } from "@nmshd/runtime-types"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface FetchCredentialOfferRequest { + credentialOfferUrl: string; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("ResolveCredentialOfferRequest")); + } +} + +export class FetchCredentialOfferUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: FetchCredentialOfferRequest): Promise> { + const result = await this.openId4VcContoller.fetchCredentialOffer(request.credentialOfferUrl); + return Result.ok({ jsonRepresentation: result.data } as FetchedCredentialOfferDTO); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/FetchProofRequestUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/FetchProofRequestUseCase.ts new file mode 100644 index 000000000..9f64d80eb --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/FetchProofRequestUseCase.ts @@ -0,0 +1,29 @@ +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { FetchedProofRequestDTO } from "@nmshd/runtime-types"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface FetchProofRequestRequest { + proofRequestUrl: string; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("FetchProofRequestRequest")); + } +} + +export class FetchProofRequestUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: FetchProofRequestRequest): Promise> { + const result = await this.openId4VcContoller.fetchProofRequest(request.proofRequestUrl); + return Result.ok({ jsonRepresentation: result.data } as FetchedProofRequestDTO); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts similarity index 100% rename from packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts rename to packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts new file mode 100644 index 000000000..49289a53c --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts @@ -0,0 +1,31 @@ +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface FetchedCredentialOfferRequest { + data: string; + pinCode?: string; + requestedCredentials: string[]; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("FetchedCredentialOfferRequest")); + } +} + +export class ResolveFetchedCredentialOfferUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: FetchedCredentialOfferRequest): Promise> { + const result = await this.openId4VcContoller.processFetchedCredentialOffer(request.data, request.requestedCredentials, request.pinCode); + return Result.ok({ status: result.status, message: result.message, data: result.data } as VerifiableCredentialDTO); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/index.ts b/packages/runtime/src/useCases/consumption/openid4vc/index.ts index c23a310f7..d8f3e573d 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/index.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/index.ts @@ -1 +1,4 @@ -export * from "./ResolveCredentialOffer"; +export * from "./FetchCredentialOfferUseCase"; +export * from "./FetchProofRequestUseCase"; +export * from "./ResolveCredentialOfferUseCase"; +export * from "./ResolveFetchedCredentialUseCase"; diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 0ec3bb539..bc3cd8215 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import { ConsumptionServices } from "../../src"; import { RuntimeServiceProvider } from "../lib"; @@ -11,7 +12,7 @@ beforeAll(async () => { afterAll(async () => await runtimeServiceProvider.stop()); -describe("OpenID4VC", () => { +describe("OpenID4VCI", () => { test("should process a given credential offer", async () => { // this should fetch its own credential offer url const response = await fetch(`https://openid4vc-service.is.enmeshed.eu/issuance/credentialOffers`, { @@ -28,7 +29,72 @@ describe("OpenID4VC", () => { const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ credentialOfferUrl: data.result.credentialOffer }); - // @ts-expect-error - expect(result._isSuccess).toBe(true); + // the result will always be a success - it however has a status field in it's value - which is a JSON string + // that contains the actual status of the flow + const status = result.value.status; + expect(status).toBe("success"); + }, 10000000); +}); + +describe("OpenID4VCP", () => { + test("should be able tp process a given credential presentation", async () => { + // this should fetch its own credential offer url + const response = await fetch(`https://openid4vc-service.is.enmeshed.eu/presentation/presentationRequests`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + pex: { + id: "anId", + purpose: "To prove you work here", + input_descriptors: [ + { + id: "EmployeeIdCard", + format: { + "vc+sd-jwt": { + "sd-jwt_alg_values": [ + "RS256", + "PS256", + "HS256", + "ES256", + "ES256K", + "RS384", + "PS384", + "HS384", + "ES384", + "RS512", + "PS512", + "HS512", + "ES512", + "EdDSA" + ] + } + }, + constraints: { + fields: [ + { + path: ["$.vct"], + filter: { + type: "string", + pattern: "EmployeeIdCard" + } + } + ] + } + } + ] + }, + version: "v1.draft21" + }) + }); + const data = await response.json(); + const result = await consumptionServices.openId4Vc.fetchProofRequest({ + credentialOfferUrl: data.result.credentialOffer + }); + // the result will always be a success - it however has a status field in it's value - which is a JSON string + // that contains the actual status of the flow + const jsonRepresentation = result.value.jsonRepresentation; + expect(jsonRepresentation).not.toBe("success"); }, 10000000); }); From b9cf9da67e729c50828ca8ef991b7726dffd62c2 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Mon, 29 Sep 2025 17:24:40 +0200 Subject: [PATCH 22/75] chore: add noble cyphers --- package-lock.json | 28 ++++++++++++++++++++++++++++ packages/consumption/package.json | 7 +++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 84d985b74..41a52d976 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2349,6 +2349,15 @@ "reflect-metadata": "^0.2.2" } }, + "node_modules/@noble/ciphers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.2.0.tgz", + "integrity": "sha512-6YBxJDAapHSdd3bLDv6x2wRPwq4QFMUaB3HvljNBUTThDd12eSm7/3F+2lnfzx2jvM+S6Nsy0jEt9QbPqSwqRw==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@noble/curves": { "version": "1.9.7", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", @@ -3817,6 +3826,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/sjcl": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/@types/sjcl/-/sjcl-1.0.34.tgz", + "integrity": "sha512-bQHEeK5DTQRunIfQeUMgtpPsNNCcZyQ9MJuAfW1I7iN0LDunTc78Fu17STbLMd7KiEY/g2zHVApippa70h6HoQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/ssh2": { "version": "1.15.5", "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", @@ -12126,6 +12142,15 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/sjcl": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.8.tgz", + "integrity": "sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ==", + "license": "(BSD-2-Clause OR GPL-2.0-only)", + "engines": { + "node": "*" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -14303,8 +14328,10 @@ "@nmshd/core-types": "*", "@nmshd/iql": "^1.0.3", "@nmshd/transport": "*", + "@noble/ciphers": "^0.2.0", "jose": "^6.0.13", "lodash": "^4.17.21", + "sjcl": "^1.0.8", "ts-simple-nameof": "^1.3.3", "ws": "^8.18.3" }, @@ -14314,6 +14341,7 @@ "@js-soft/node-logger": "1.2.0", "@nmshd/crypto": "2.1.2", "@types/lodash": "^4.17.20", + "@types/sjcl": "^1.0.34", "libsodium-wrappers": "^0.7.9", "ts-mockito": "^2.6.1" } diff --git a/packages/consumption/package.json b/packages/consumption/package.json index ccac9b621..d738ff2c8 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -69,8 +69,10 @@ "@nmshd/core-types": "*", "@nmshd/iql": "^1.0.3", "@nmshd/transport": "*", + "@noble/ciphers": "^0.2.0", "jose": "^6.0.13", "lodash": "^4.17.21", + "sjcl": "^1.0.8", "ts-simple-nameof": "^1.3.3", "ws": "^8.18.3" }, @@ -80,8 +82,9 @@ "@js-soft/node-logger": "1.2.0", "@nmshd/crypto": "2.1.2", "@types/lodash": "^4.17.20", - "ts-mockito": "^2.6.1", - "libsodium-wrappers": "^0.7.9" + "@types/sjcl": "^1.0.34", + "libsodium-wrappers": "^0.7.9", + "ts-mockito": "^2.6.1" }, "publishConfig": { "access": "public", From 4273485f42772e8c1e70bddeea302c82667c28fb Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Mon, 29 Sep 2025 17:25:00 +0200 Subject: [PATCH 23/75] chore: rename storage --- .../src/modules/openid4vc/index.ts | 2 +- .../openid4vc/local/EnmeshedStorageService.ts | 181 ++++++++++++++++++ .../openid4vc/local/FakeStorageService.ts | 60 ------ 3 files changed, 182 insertions(+), 61 deletions(-) create mode 100644 packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts delete mode 100644 packages/consumption/src/modules/openid4vc/local/FakeStorageService.ts diff --git a/packages/consumption/src/modules/openid4vc/index.ts b/packages/consumption/src/modules/openid4vc/index.ts index 51d77ee98..569180318 100644 --- a/packages/consumption/src/modules/openid4vc/index.ts +++ b/packages/consumption/src/modules/openid4vc/index.ts @@ -1,7 +1,7 @@ export * from "./local/BaseAgent"; +export * from "./local/EnmeshedStorageService"; export * from "./local/FakeFileSystem"; export * from "./local/FakeKeyManagmentService"; -export * from "./local/FakeStorageService"; export * from "./local/Holder"; export * from "./local/LocalAgentDependencies"; export * from "./OpenId4VcController"; diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts new file mode 100644 index 000000000..2ace583f7 --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -0,0 +1,181 @@ +/* eslint-disable no-console */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { AgentContext, BaseRecord, BaseRecordConstructor, injectable, JsonTransformer, Query, QueryOptions, StorageService } from "@credo-ts/core"; + +import { IdentityAttribute } from "@nmshd/content"; +import { CoreId } from "@nmshd/core-types"; +import { AccountController } from "@nmshd/transport"; +import { AttributesController } from "../../attributes/AttributesController"; + +@injectable() +export class EnmeshedStorageService implements StorageService { + public storrage: Map = new Map(); + + public constructor( + public accountController: AccountController, + public attributeController: AttributesController + ) {} + + public async save(agentContext: AgentContext, record: T): Promise { + if (record.id === "STORAGE_VERSION_RECORD_ID") { + this.storrage.set(record.id, record); + return; + } + if (record.type === "DidRecord") { + this.storrage.set(record.id, record); + return; + } + + const value = JsonTransformer.serialize(record); + const owner = this.accountController.identity.address; + console.log("FFS: Saving record", record); + const identityAttribute = IdentityAttribute.from({ + value: { + "@type": "VerifiableCredential", + value: value, + title: "Employee ID Card", + description: "An employee ID card credential", + credoId: record.id, + type: typeof record + }, + owner: owner + }); + const result = await this.attributeController.createRepositoryAttribute({ + content: identityAttribute + }); + console.log("FFS: Saved record", JSON.stringify(result)); + return await Promise.resolve(); + } + + // TODO: remove coreid + public async update(agentContext: AgentContext, record: T): Promise { + console.log("FFS: Updating record", record); + const value = JsonTransformer.serialize(record); + const owner = this.accountController.identity.address; + const oldAttribute = await this.attributeController.getLocalAttribute(CoreId.from(record.id)); + if (!oldAttribute) throw new Error(`Attribute with id ${record.id} not found`); + + const identityAttribute = IdentityAttribute.from({ + value: { + "@type": "VerifiableCredential", + value: value, + title: "Employee ID Card", + description: "An employee ID card credential", + credoId: record.id + }, + owner: owner + }); + await this.attributeController.createRepositoryAttribute({ + content: identityAttribute, + id: CoreId.from(record.id) + }); + return await Promise.resolve(); + } + + public async delete(agentContext: AgentContext, record: T): Promise { + console.log("FFS: Deleting record", record); + const attribute = await this.attributeController.getLocalAttribute(CoreId.from(record.id)); + if (attribute === undefined) { + throw new Error(`Attribute with id ${record.id} not found`); + } + await this.attributeController.deleteAttribute(attribute); + } + + // TODO: remove coreid + public async deleteById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { + console.log("FFS: Deleting record by id", id); + const attribute = await this.attributeController.getLocalAttribute(CoreId.from(id)); + if (attribute === undefined) { + throw new Error(`Attribute with id ${id} not found`); + } + await this.attributeController.deleteAttribute(attribute); + } + + public async getById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { + if (this.storrage.has(id)) { + const record = this.storrage.get(id); + if (!record) throw new Error(`Record with id ${id} not found`); + return record; + } + + console.log("FFS: Getting record by id", id); + const attribute = await this.attributeController.getLocalAttribute(CoreId.from(id)); + // parse the value field of attribute as JSON into T + if (attribute === undefined) { + throw new Error(`Attribute with id ${id} not found`); + } + const record = JsonTransformer.deserialize((attribute.content.value as any).value, recordClass); + return record; + } + + public async getAll(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { + console.log("FFS: Getting all records"); + const records: T[] = []; + const attributes = await this.attributeController.getLocalAttributes(); + console.log(`FFS: Found ${attributes.length} local attributes`); + for (const attribute of attributes) { + console.log("FFS: Processing attribute", JsonTransformer.serialize(attribute)); + const record = JsonTransformer.deserialize((attribute.content.value as any).value, recordClass); + if (record.type !== "SdJwtVcRecord") { + continue; + } + records.push(record); + } + console.log(`FFS: Actually found ${attributes.length} local attributes`); + return records; + } + + public async findByQuery(agentContext: AgentContext, recordClass: BaseRecordConstructor, query: Query, queryOptions?: QueryOptions): Promise { + console.log("FFS: Finding records by query", query); + const records: T[] = []; + for (const record of await this.getAll(agentContext, recordClass)) { + let match = true; + for (const [key, value] of Object.entries(query)) { + if ((record as any)[key] !== value) { + match = false; + break; + } + } + if (match) { + records.push(record); + } + } + if (records.length === 0) { + // try to recover over local storrage - temporary fix + for (const record of this.storrage.values()) { + let match = true; + // there may be keys labeled with an $or - solve them accordingly + for (const [key, value] of Object.entries(query)) { + if (key === "$or" && Array.isArray(value)) { + let orMatch = false; + for (const orCondition of value) { + let conditionMatch = true; + for (const [orKey, orValue] of Object.entries(orCondition)) { + if ((record as any)[orKey] !== orValue) { + conditionMatch = false; + break; + } + } + if (conditionMatch) { + orMatch = true; + break; + } + } + if (!orMatch) { + match = false; + break; + } + } else if ((record as any)[key] !== value) { + match = false; + break; + } + } + if (match) { + records.push(record); + } + } + } + console.log(`FFS: Found ${records.length} records by query`); + return records; + } +} diff --git a/packages/consumption/src/modules/openid4vc/local/FakeStorageService.ts b/packages/consumption/src/modules/openid4vc/local/FakeStorageService.ts deleted file mode 100644 index 363cd77df..000000000 --- a/packages/consumption/src/modules/openid4vc/local/FakeStorageService.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { AgentContext, BaseRecord, BaseRecordConstructor, injectable, JsonTransformer, Query, QueryOptions, StorageService } from "@credo-ts/core"; - -@injectable() -export class FakeStorageService implements StorageService { - public storrage: Map = new Map(); - - public async save(agentContext: AgentContext, record: T): Promise { - record.updatedAt = new Date(); - const value = JsonTransformer.serialize(record); - this.storrage.set(record.id, value); - return await Promise.resolve(); - } - - public async update(agentContext: AgentContext, record: T): Promise { - record.updatedAt = new Date(); - const value = JsonTransformer.serialize(record); - this.storrage.set(record.id, value); - return await Promise.resolve(); - } - public delete(agentContext: AgentContext, record: T): Promise { - this.storrage.delete(record.id); - return Promise.resolve(); - } - public deleteById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { - this.storrage.delete(id); - return Promise.resolve(); - } - public getById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { - const record = this.storrage.get(id); - if (!record) { - return Promise.reject(new Error(`Record with id ${id} not found`)); - } - return Promise.resolve(JsonTransformer.deserialize(record, recordClass)); - } - public getAll(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { - const records: T[] = []; - for (const record of this.storrage.values()) { - records.push(JsonTransformer.deserialize(record, recordClass)); - } - return Promise.resolve(records); - } - public findByQuery(agentContext: AgentContext, recordClass: BaseRecordConstructor, query: Query, queryOptions?: QueryOptions): Promise { - const records: T[] = []; - for (const record of this.storrage.values()) { - const deserializedRecord = JsonTransformer.deserialize(record, recordClass); - let match = true; - for (const [key, value] of Object.entries(query)) { - if ((deserializedRecord as any)[key] !== value) { - match = false; - break; - } - } - if (match) { - records.push(deserializedRecord); - } - } - return Promise.resolve(records); - } -} From bb15883d3c848ae5a80a8e8cb367b46edd7bdc95 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Mon, 29 Sep 2025 17:26:24 +0200 Subject: [PATCH 24/75] feature: allow presentation using the runtime --- .../modules/openid4vc/OpenId4VcController.ts | 106 +++++--- .../src/modules/openid4vc/local/BaseAgent.ts | 40 ++- .../modules/openid4vc/local/FakeFileSystem.ts | 98 +++++-- .../local/FakeKeyManagmentService.ts | 254 ++++++++++++++---- .../src/modules/openid4vc/local/Holder.ts | 57 ++-- .../attributes/types/VerifiableCredential.ts | 11 +- .../consumption/AcceptedProofRequestDTO.ts | 4 + .../consumption/VerifiableCredentialDTO.ts | 1 + .../runtime-types/src/consumption/index.ts | 1 + .../facades/consumption/OpenId4VcFacade.ts | 14 +- .../runtime/src/useCases/common/Schemas.ts | 101 +++++-- .../openid4vc/AcceptProofRequestUseCase.ts | 29 ++ .../ResolveFetchedCredentialUseCase.ts | 2 +- .../useCases/consumption/openid4vc/index.ts | 1 + .../test/consumption/openid4vc.test.ts | 51 ++-- 15 files changed, 592 insertions(+), 178 deletions(-) create mode 100644 packages/runtime-types/src/consumption/AcceptedProofRequestDTO.ts diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index d396dca1d..cc4ce5c0d 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -10,7 +10,7 @@ export class OpenId4VcController extends ConsumptionBaseController { } public async fetchCredentialOffer(credentialOfferUrl: string): Promise { - const holder = new Holder(3000, "OpenId4VcHolder"); + const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOfferUrl); console.log("Fetched credential offer:", res); @@ -19,18 +19,8 @@ export class OpenId4VcController extends ConsumptionBaseController { }; } - public async fetchProofRequest(proofRequestUrl: string): Promise { - const holder = new Holder(3000, "OpenId4VcHolder"); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const res = await holder.resolveProofRequest(proofRequestUrl); - console.log("Fetched proof request:", res); - return { - data: JSON.stringify(res) - }; - } - public async processFetchedCredentialOffer(fetchedCredentialOffer: string, requestedCredentialOffers: string[], pinCode?: string): Promise { - const holder = new Holder(3000, "OpenId4VcHolder"); + const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const credentialOffer = JSON.parse(fetchedCredentialOffer); const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: requestedCredentialOffers, txCode: pinCode }); @@ -38,40 +28,17 @@ export class OpenId4VcController extends ConsumptionBaseController { return { status: "success", message: "Credential offer processed successfully", - data: JSON.stringify(credentials) + data: JSON.stringify(credentials), + id: credentials.length > 0 ? credentials[0].id : undefined }; } public async processCredentialOffer(credentialOffer: string): Promise { try { - const holder = new Holder(3000, "OpenId4VcHolder"); + const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOffer); const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); - console.log("Fetched credentials:", credentials); - - /* - const attributes = []; - - for (const credential of credentials) { - const owner = this.parent.accountController.identity.address; - - const identityAttribute = IdentityAttribute.from({ - value: { - "@type": "VerifiableCredential", - value: credential, - title: "Employee ID Card", - description: "An employee ID card credential" - }, - owner: owner - }); - const attribute = await this.parent.attributes.createRepositoryAttribute({ - content: identityAttribute - }); - this._log.error("Created attribute:", attribute); - attributes.push(attribute); - } - */ return { status: "success", @@ -98,4 +65,67 @@ export class OpenId4VcController extends ConsumptionBaseController { }; } } + + public async fetchProofRequest(proofRequestUrl: string): Promise { + try { + const holder = new Holder(this.parent.accountController, this.parent.attributes); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + const res = await holder.resolveProofRequest(proofRequestUrl); + console.log("Fetched proof request:", res); + return { + data: JSON.stringify(res) + }; + } catch (error) { + let errorMessage = "Unknown error"; + let errorStack = ""; + + if (error instanceof Error) { + errorMessage = error.message; + errorStack = error.stack ?? ""; + } else if (typeof error === "string") { + errorMessage = error; + } else { + errorMessage = JSON.stringify(error); + } + + return { + status: "error", + message: `Failed to fetch proof request: ${errorMessage}`, + data: JSON.stringify(errorStack) + }; + } + } + + public async acceptProofRequest(jsonEncodedRequest: string): Promise { + try { + const holder = new Holder(this.parent.accountController, this.parent.attributes); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + const fetchedRequest = JSON.parse(jsonEncodedRequest); + // parse the credential type to be sdjwt + + const serverResponse = await holder.acceptPresentationRequest(fetchedRequest); + console.log("Created proof:", JSON.stringify(serverResponse)); + return { + status: serverResponse.status, + message: serverResponse.body + }; + } catch (error) { + let errorMessage = "Unknown error"; + let errorStack = ""; + + if (error instanceof Error) { + errorMessage = error.message; + errorStack = error.stack ?? ""; + } else if (typeof error === "string") { + errorMessage = error; + } else { + errorMessage = JSON.stringify(error); + } + return { + status: "error", + message: `Failed to process proof request: ${errorMessage}`, + data: JSON.stringify(errorStack) + }; + } + } } diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index 55e6d7a9c..becfe0361 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -1,13 +1,24 @@ -import { Agent, ConsoleLogger, DependencyManager, DidKey, InjectionSymbols, LogLevel, type InitConfig, type ModulesMap, type VerificationMethod } from "@credo-ts/core"; +import { + Agent, + ConsoleLogger, + DependencyManager, + DidKey, + InjectionSymbols, + KeyDidCreateOptions, + LogLevel, + type InitConfig, + type ModulesMap, + type VerificationMethod +} from "@credo-ts/core"; import { KeyManagementModuleConfig } from "@credo-ts/core/build/modules/kms"; +import { AccountController } from "@nmshd/transport"; import { JsonWebKey } from "crypto"; +import { AttributesController } from "../../attributes"; +import { EnmeshedStorageService } from "./EnmeshedStorageService"; import { FakeKeyManagmentService } from "./FakeKeyManagmentService"; -import { FakeStorageService } from "./FakeStorageService"; import { agentDependencies } from "./LocalAgentDependencies"; export class BaseAgent { - public port: number; - public name: string; public config: InitConfig; public agent: Agent; public did!: string; @@ -16,7 +27,13 @@ export class BaseAgent { public verificationMethod!: VerificationMethod; private readonly keyStorage: Map = new Map(); - public constructor({ port, name, modules }: { port: number; name: string; modules: AgentModules }) { + public constructor( + public readonly port: number, + public readonly name: string, + public readonly modules: AgentModules, + public readonly accountController: AccountController, + public readonly attributeController: AttributesController + ) { this.name = name; this.port = port; @@ -27,8 +44,12 @@ export class BaseAgent { } satisfies InitConfig; this.config = config; + + this.accountController = accountController; + this.attributeController = attributeController; + const dependencyManager = new DependencyManager(); - dependencyManager.registerInstance(InjectionSymbols.StorageService, new FakeStorageService()); + dependencyManager.registerInstance(InjectionSymbols.StorageService, new EnmeshedStorageService(accountController, attributeController)); // dependencyManager.registerInstance(InjectionSymbols.StorageUpdateService, new FakeStorageService()); if (!dependencyManager.isRegistered(InjectionSymbols.StorageService)) { // eslint-disable-next-line no-console @@ -47,7 +68,7 @@ export class BaseAgent { // eslint-disable-next-line @typescript-eslint/no-unused-vars public async initializeAgent(privateKey: string): Promise { // as we are not using askar we need to set the storage version - const storrage = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); + const storrage = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); const versionRecord = { id: "STORAGE_VERSION_RECORD_ID", storageVersion: "0.5.0", value: "0.5.0" }; await storrage.save(this.agent.context, versionRecord); // as we are not using askar we need to setup our own key management service @@ -59,13 +80,13 @@ export class BaseAgent { await this.agent.initialize(); - /* create a uuid based key id + // create a uuid based key id const keyId = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { const r = (Math.random() * 16) | 0; const v = c === "x" ? r : (r & 0x3) | 0x8; return v.toString(16); }); - + const didCreateResult = await this.agent.dids.create({ method: "key", options: { @@ -86,7 +107,6 @@ export class BaseAgent { const verificationMethod = didCreateResult.didState.didDocument?.dereferenceKey(this.kid, ["authentication"]); if (!verificationMethod) throw new Error("No verification method found"); this.verificationMethod = verificationMethod; - */ } public async shutdown(): Promise { diff --git a/packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts b/packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts index 521800cb0..8a13784fb 100644 --- a/packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts +++ b/packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts @@ -1,28 +1,47 @@ +/* eslint-disable no-console */ import { DownloadToFileOptions, FileSystem } from "@credo-ts/core"; export class FakeFileSystem implements FileSystem { public readonly dataPath: string; - public readonly cachePath: string; - public readonly tempPath: string; private readonly fileSystem: Map = new Map(); - private readonly directories: Map = new Map(); public constructor() { - this.dataPath = "/data"; - this.cachePath = "/cache"; - this.tempPath = "/temp"; - - // initialize the directories map with the known paths - this.directories.set(this.dataPath, true); - this.directories.set(this.cachePath, true); - this.directories.set(this.tempPath, true); + // check if the globalThis object already knows a fake file system + if ((globalThis as any)._fakeFileSystem) { + console.log("FFS: Reusing existing FakeFileSystem"); + // if a fake file system already exists use its value to initialize this instance + const existingFs = (globalThis as any)._fakeFileSystem as FakeFileSystem; + this.fileSystem = existingFs.fileSystem; + this.directories = existingFs.directories; + + this.dataPath = existingFs.dataPath; + this.cachePath = existingFs.cachePath; + this.tempPath = existingFs.tempPath; + } else { + console.log("FFS: Initializing the FakeFileSystem"); + this.dataPath = "/data"; + this.cachePath = "/cache"; + this.tempPath = "/temp"; + + // initialize the directories map with the known paths + this.directories.set(this.dataPath, true); + this.directories.set(this.cachePath, true); + this.directories.set(this.tempPath, true); + // store this instance in the globalThis object + FakeFileSystem.updateGlobalInstance(this); + } + } + + public static updateGlobalInstance(toStore: FakeFileSystem): void { + (globalThis as any)._fakeFileSystem = toStore; } public exists(path: string): Promise { + console.log(`FFS: Checking existence of path ${path}`); if (this.directories.has(path) || this.fileSystem.has(path)) { return Promise.resolve(true); } @@ -31,48 +50,73 @@ export class FakeFileSystem implements FileSystem { } public createDirectory(path: string): Promise { + console.log(`FFS: Creating directory at path ${path}`); this.directories.set(path, true); - + FakeFileSystem.updateGlobalInstance(this); return Promise.resolve(); } - public copyFile(sourcePath: string, destinationPath: string): Promise { - if (this.fileSystem.has(sourcePath)) { - this.fileSystem.set(destinationPath, this.fileSystem.get(sourcePath)!); + public async copyFile(sourcePath: string, destinationPath: string): Promise { + console.log(`FFS: Copying file from ${sourcePath} to ${destinationPath}`); + const exists = await this.exists(sourcePath); + if (!exists) { + throw new Error(`Source file ${sourcePath} does not exist`); + } - return Promise.resolve(); + if (this.directories.get(sourcePath)) { + throw new Error(`Source path ${sourcePath} is a directory, not a file`); } - return Promise.reject(new Error(`Source file ${sourcePath} does not exist`)); + await this.write(destinationPath, this.fileSystem.get(sourcePath)!); + return; } public write(path: string, data: string): Promise { - this.fileSystem.set(path, data); - + console.log(`FFS: Writing data to path ${path}`); + // if the path doe not yet exist set it as a file if (!this.directories.has(path)) { this.directories.set(path, false); // mark as file } - + this.fileSystem.set(path, data); + FakeFileSystem.updateGlobalInstance(this); return Promise.resolve(); } - public read(path: string): Promise { - if (!this.fileSystem.has(path)) { - return Promise.reject(new Error(`File ${path} does not exist`)); + public async read(path: string): Promise { + console.log(`FFS: Reading data from path ${path}`); + const exists = await this.exists(path); + if (!exists) { + // eslint-disable-next-line no-console + console.log(`File ${path} does not exist`); } - return Promise.resolve(this.fileSystem.get(path) ?? ""); + if (this.directories.get(path)) { + throw new Error(`Path ${path} is a directory, not a file`); + } + + return this.fileSystem.get(path) ?? ""; } - public delete(path: string): Promise { + public async delete(path: string): Promise { + console.log(`FFS: Deleting path ${path}`); + if (!(await this.exists(path))) { + throw new Error(`Path ${path} does not exist`); + } + if (this.directories.get(path)) { + throw new Error(`Path ${path} is a directory, not a file`); + } + if (this.fileSystem.has(path)) { this.fileSystem.delete(path); + this.directories.delete(path); } - - return Promise.resolve(); + FakeFileSystem.updateGlobalInstance(this); + return; } public downloadToFile(url: string, path: string, options?: DownloadToFileOptions): Promise { + console.log(`FFS: Downloading from ${url} to ${path}`); + // Simulate a download by writing a placeholder content let content = `Downloaded content from ${url}`; diff --git a/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts index 522295342..67072ce9d 100644 --- a/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts +++ b/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts @@ -25,10 +25,12 @@ import { } from "@credo-ts/core/build/modules/kms"; import { ec as EC } from "elliptic"; import _sodium from "libsodium-wrappers"; +import sjcl from "sjcl"; export interface JwkKeyPair { publicKey: JsonWebKey; privateKey: JsonWebKey; + keyType?: string; } export class FakeKeyManagmentService implements KeyManagementService { @@ -37,8 +39,37 @@ export class FakeKeyManagmentService implements KeyManagementService { public readonly backend = FakeKeyManagmentService.backend; public keystore: Map; + private readonly b64url = (bytes: Uint8Array) => _sodium.to_base64(bytes, _sodium.base64_variants.URLSAFE_NO_PADDING); + private readonly b64urlDecode = (b64url: string) => _sodium.from_base64(b64url, _sodium.base64_variants.URLSAFE_NO_PADDING); + + // please note: we cannot use buffer here - because it is not available in the browser + // and yes it could be pollyfilled but that extends the bundle size for no good reason + private readonly buf2hex = (bytes: Uint8Array) => { + return Array.from(bytes) + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + }; + private readonly hex2buf = (hex: string) => { + const bytes = new Uint8Array(hex.length / 2); + for (let i = 0; i < bytes.length; i++) { + bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16); + } + return bytes; + }; + public constructor() { - this.keystore = new Map(); + if ((globalThis as any).fakeKeyStorage) { + this.keystore = (globalThis as any).fakeKeyStorage; + } else { + this.keystore = new Map(); + } + this.updateGlobalInstance(this.keystore); + } + + public updateGlobalInstance(storrage: Map): void { + // console.log(`FKM: updating global instance ${JSON.stringify(Array.from(storrage.entries()))}`); + (globalThis as any).fakeKeyStorage = storrage; + // console.log(`FKM: global instance state ${JSON.stringify(Array.from((globalThis as any).fakeKeyStorage.entries()))}`); } public isOperationSupported(agentContext: AgentContext, operation: KmsOperation): boolean { @@ -61,11 +92,20 @@ export class FakeKeyManagmentService implements KeyManagementService { if (operation.operation === "randomBytes") { return true; } + if (operation.operation === "deleteKey") { + return true; + } + if (operation.operation === "encrypt") { + console.log(`FKM: encrypt is supported for algorithm: ${operation.encryption.algorithm.toString()}`); + return true; + } return false; } public getPublicKey(agentContext: AgentContext, keyId: string): Promise { const keyPair = this.keystore.get(keyId); + console.log("FKM: getPublicKey for ID:", keyId, " keypair:", keyPair ? "found" : "not found"); if (!keyPair) { + console.log(`FKM: Key with id ${keyId} not found`); throw new Error(`Key with id ${keyId} not found`); } @@ -79,39 +119,31 @@ export class FakeKeyManagmentService implements KeyManagementService { return v.toString(16); }); + console.log("FKM: creating key for ID:", JSON.stringify(options.keyId)); + if (options.type.kty === "EC" && options.type.crv === "P-256") { // Use P-256 (aka secp256r1) const ec = new EC("p256"); const key = ec.genKeyPair(); - const b64url = (bytes: Uint8Array) => { - // Convert Uint8Array to string for btoa - let binary = ""; - for (const byte of bytes) { - binary += String.fromCharCode(byte); - } - return btoa(binary).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); - }; - - console.log("FKM: Created EC P-256 key pair", JSON.stringify(key)); - // Public JWK const publicJwk = { kty: "EC", // Elliptic Curve crv: "P-256", - x: b64url(new Uint8Array(key.getPublic().getX().toArray())), - y: b64url(new Uint8Array(key.getPublic().getY().toArray())) + x: this.b64url(new Uint8Array(key.getPublic().getX().toArray())), + y: this.b64url(new Uint8Array(key.getPublic().getY().toArray())) }; // Private JWK const privateJwk = { ...publicJwk, - d: b64url(new Uint8Array(key.getPrivate().toArray())) + d: this.b64url(new Uint8Array(key.getPrivate().toArray())) }; const jwkKeyPair = { publicKey: publicJwk, - privateKey: privateJwk + privateKey: privateJwk, + keyType: "EC" }; console.log("FKM: created jwk-key pair:", JSON.stringify(jwkKeyPair)); @@ -119,6 +151,7 @@ export class FakeKeyManagmentService implements KeyManagementService { // store the key pair in the keystore this.keystore.set(options.keyId, JSON.stringify(jwkKeyPair)); + this.updateGlobalInstance(this.keystore); return await Promise.resolve({ keyId: options.keyId, publicJwk: publicJwk as KmsJwkPublic @@ -134,29 +167,28 @@ export class FakeKeyManagmentService implements KeyManagementService { console.log("FKM: options type:", JSON.stringify(options.type)); const seed = privateKey.slice(0, sodium.crypto_sign_SEEDBYTES); - const b64url = (bytes: Uint8Array) => sodium.to_base64(bytes, sodium.base64_variants.URLSAFE_NO_PADDING); - // Public JWK const publicJwk = { kty: "OKP", // Octet Key Pair crv: "Ed25519", - x: b64url(publicKey) + x: this.b64url(publicKey) }; // Private JWK const privateJwk = { ...publicJwk, - d: b64url(seed) + d: this.b64url(seed) }; const jwkKeyPair = { publicKey: publicJwk, - privateKey: privateJwk + privateKey: privateJwk, + keyType: "OKP" }; // store the key pair in the keystore this.keystore.set(options.keyId, JSON.stringify(jwkKeyPair)); - + this.updateGlobalInstance(this.keystore); return await Promise.resolve({ keyId: options.keyId, publicJwk: publicJwk as KmsJwkPublic @@ -166,7 +198,12 @@ export class FakeKeyManagmentService implements KeyManagementService { throw new Error("Method not implemented."); } public deleteKey(agentContext: AgentContext, options: KmsDeleteKeyOptions): Promise { - throw new Error("Method not implemented."); + if (this.keystore.has(options.keyId)) { + this.keystore.delete(options.keyId); + this.updateGlobalInstance(this.keystore); + return Promise.resolve(true); + } + throw new Error(`key with id ${options.keyId} not found. and cannot be deleted`); } public async sign(agentContext: AgentContext, options: KmsSignOptions): Promise { // load key from keystore @@ -184,17 +221,7 @@ export class FakeKeyManagmentService implements KeyManagementService { throw new Error("Private JWK does not contain 'd' parameter"); } - const b64urlDecode = (b64url: string) => { - // remove url specific characters - const base64 = b64url.replace(/-/g, "+").replace(/_/g, "/"); - return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)); - }; - const i2hex = (bytes: Uint8Array) => { - return Array.from(bytes) - .map((b) => b.toString(16).padStart(2, "0")) - .join(""); - }; - const priv = i2hex(b64urlDecode(privateKey.d)); + const priv = this.buf2hex(this.b64urlDecode(privateKey.d)); const key = ec.keyFromPrivate(priv, "hex"); // we need to hash the data using SHA-256 @@ -253,25 +280,13 @@ export class FakeKeyManagmentService implements KeyManagementService { const x = options.key.publicJwk.x; const y = options.key.publicJwk.y; - const b64urlDecode = (b64url: string) => { - // remove url specific characters - const base64 = b64url.replace(/-/g, "+").replace(/_/g, "/"); - return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)); - }; - - const i2hex = (bytes: Uint8Array) => { - return Array.from(bytes) - .map((b) => b.toString(16).padStart(2, "0")) - .join(""); - }; - - const pub = { x: i2hex(b64urlDecode(x)), y: i2hex(b64urlDecode(y)) }; + const pub = { x: this.buf2hex(this.b64urlDecode(x)), y: this.buf2hex(this.b64urlDecode(y)) }; const key = ec.keyFromPublic(pub, "hex"); const signatureBytes = options.signature; const r = signatureBytes.subarray(0, 32); const s = signatureBytes.subarray(32, 64); - const signature = { r: i2hex(r), s: i2hex(s) }; + const signature = { r: this.buf2hex(r), s: this.buf2hex(s) }; // we need to hash the data using SHA-256 const dataHash = ec.hash().update(options.data).digest(); @@ -284,9 +299,150 @@ export class FakeKeyManagmentService implements KeyManagementService { } } + private ecdhEs(localKeyId: string, remotePublicJWK: any): Uint8Array { + const keyPairString = this.keystore.get(localKeyId); + if (!keyPairString) { + throw new Error(`Key with id ${localKeyId} not found`); + } + + const localKeyPair = JSON.parse(keyPairString) as JwkKeyPair; + if (localKeyPair.keyType !== "EC") { + throw new Error("Key type is not EC"); + } + + const ec = new EC("p256"); + + if (localKeyPair.privateKey.d === undefined) { + throw new Error("Local private key does not contain 'd' parameter"); + } + const localPriv = ec.keyFromPrivate(this.buf2hex(this.b64urlDecode(localKeyPair.privateKey.d)), "hex"); + // the remote jwk is base64url encoded - we again decode and transform to hex to receive a fitting public key + const remoteBasePoint = ec.keyFromPublic( + { + x: this.buf2hex(this.b64urlDecode(remotePublicJWK.x)), + y: this.buf2hex(this.b64urlDecode(remotePublicJWK.y)) + }, + "hex" + ); + + const sharedSecret = localPriv.derive(remoteBasePoint.getPublic()); + const sharedBytes = new Uint8Array(sharedSecret.toArray("be")); + return sharedBytes; + } + + // UTF-8 encode helper + private utf8(str: string): Uint8Array { + return new TextEncoder().encode(str); + } + + // Concat Uint8Arrays + private concat(...arrays: Uint8Array[]): Uint8Array { + const total = arrays.reduce((sum, a) => sum + a.length, 0); + const out = new Uint8Array(total); + let offset = 0; + for (const a of arrays) { + out.set(a, offset); + offset += a.length; + } + return out; + } + + // Encode a 32-bit big-endian length prefix + private lenPrefix(data: Uint8Array): Uint8Array { + const buf = new Uint8Array(4 + data.length); + const view = new DataView(buf.buffer); + view.setUint32(0, data.length, false); // big-endian + buf.set(data, 4); + return buf; + } + + private concatKdf(sharedSecret: Uint8Array, keyLength: number, algorithmDescriptor: string, keyAgreement: any): Uint8Array { + if (keyAgreement.apu === undefined) { + throw new Error("Key agreement apu is undefined"); + } + if (keyAgreement.apv === undefined) { + throw new Error("Key agreement apv is undefined"); + } + + const algId = this.lenPrefix(this.utf8(algorithmDescriptor)); + const partyU = this.lenPrefix(keyAgreement.apu); + const partyV = this.lenPrefix(keyAgreement.apv); + + const suppPubInfo = new Uint8Array(4); + new DataView(suppPubInfo.buffer).setUint32(0, keyLength, false); + const suppPrivInfo = new Uint8Array(0); + const otherInfo = this.concat(algId, partyU, partyV, suppPubInfo, suppPrivInfo); + const counter = new Uint8Array([0, 0, 0, 1]); + const input = this.concat(counter, sharedSecret, otherInfo); + + // Hash with SHA-256 (SJCL) + const inputHex = this.buf2hex(input); + const inputBits = sjcl.codec.hex.toBits(inputHex); + const hashBits = sjcl.hash.sha256.hash(inputBits); + const hashHex = sjcl.codec.hex.fromBits(hashBits); + const hashBuf = this.hex2buf(hashHex); + + // Truncate to desired key length + return hashBuf.subarray(0, keyLength / 8); + } + public encrypt(agentContext: AgentContext, options: KmsEncryptOptions): Promise { - throw new Error("Method not implemented."); + try { + // encryption via A-256-GCM + // we will call the services side bob and the incoming side alice + if (options.key.keyAgreement === undefined) { + throw new Error("Key agreement is undefined"); + } + if (options.key.keyAgreement.keyId === undefined) { + throw new Error("Key agreement keyId is undefined"); + } + + // 1. derive the shared secret via ECDH-ES + const sharedSecret = this.ecdhEs(options.key.keyAgreement.keyId, options.key.keyAgreement.externalPublicJwk); + console.log("FKM: shared secret", this.buf2hex(sharedSecret)); + + // 2. Concat KDF to form the final key + const derivedKey = this.concatKdf(sharedSecret, 256, "A256GCM", options.key.keyAgreement); + // 3. Encrypt the data via AES-256-GCM using libsodium + + // create nonce + const iv = crypto.getRandomValues(new Uint8Array(12)); + // transform to bit arrays for sjcl + const keyBits = sjcl.codec.hex.toBits(this.buf2hex(derivedKey)); + const dataBits = sjcl.codec.hex.toBits(this.buf2hex(options.data)); + const ivBits = sjcl.codec.hex.toBits(this.buf2hex(iv)); + // do not forget to add the additional authenticated data + const aadBits = "aad" in options.encryption && options.encryption.aad ? sjcl.codec.hex.toBits(this.buf2hex(options.encryption.aad)) : []; + // setup aes + const aes = new sjcl.cipher.aes(keyBits); + // encrypt + const cyphertextBits = sjcl.mode.gcm.encrypt(aes, dataBits, ivBits, aadBits, 128); + + // transform back to byte array + const cyphertextBuf = this.hex2buf(sjcl.codec.hex.fromBits(cyphertextBits)); + // In SJCL, GCM output = ciphertext || tag + const cyphertext = cyphertextBuf.subarray(0, cyphertextBuf.length - 16); + const tag = cyphertextBuf.subarray(cyphertextBuf.length - 16); + + const returnValue = { + encrypted: cyphertext, + iv: iv, + tag: tag + }; + + console.log(`FKM key(hex):${this.buf2hex(derivedKey)}`); + console.log(`FKM iv(hex):${this.buf2hex(iv)}`); + console.log(`FKM ciphertext(hex):${this.buf2hex(cyphertext)}`); + console.log(`FKM tag(hex):${this.buf2hex(tag)}`); + console.log(`FKM aad(hex):${"aad" in options.encryption && options.encryption.aad ? this.buf2hex(options.encryption.aad) : ""}`); + + return Promise.resolve(returnValue); + } catch (e) { + console.log("FKM: error during encryption", e); + throw e; + } } + public decrypt(agentContext: AgentContext, options: KmsDecryptOptions): Promise { throw new Error("Method not implemented."); } diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 853185f6a..0431a1451 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -1,5 +1,16 @@ /* eslint-disable no-console */ -import { DidJwk, DidKey, JwkDidCreateOptions, KeyDidCreateOptions, Kms, Mdoc, W3cJsonLdVerifiableCredential, W3cJwtVerifiableCredential, X509Module } from "@credo-ts/core"; +import { + DidJwk, + DidKey, + JwkDidCreateOptions, + KeyDidCreateOptions, + Kms, + Mdoc, + SdJwtVcRecord, + W3cJsonLdVerifiableCredential, + W3cJwtVerifiableCredential, + X509Module +} from "@credo-ts/core"; import { OpenId4VcHolderModule, OpenId4VciAuthorizationFlow, @@ -9,6 +20,8 @@ import { type OpenId4VciResolvedCredentialOffer, type OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; +import { AccountController } from "@nmshd/transport"; +import { AttributesController } from "../../attributes"; import { BaseAgent } from "./BaseAgent"; function getOpenIdHolderModules() { @@ -29,21 +42,8 @@ export class Holder extends BaseAgent> redirectUri: "http://localhost:3000/redirect" }; - public constructor(port: number, name: string) { - super({ - port, - name, - modules: getOpenIdHolderModules() - }); - } - - public static async build(): Promise { - // the faked storrage service needs to be dependency injected before the agent is initialized - - const holder = new Holder(3000, `OpenId4VcHolder ${Math.random().toString()}`); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - - return holder; + public constructor(accountController: AccountController, attributeController: AttributesController) { + super(3000, `OpenId4VcHolder ${Math.random().toString()}`, getOpenIdHolderModules(), accountController, attributeController); } public async resolveCredentialOffer(credentialOffer: string): Promise { @@ -194,7 +194,32 @@ export class Holder extends BaseAgent> if (!resolvedPresentationRequest.presentationExchange && !resolvedPresentationRequest.dcql) { throw new Error("Missing presentation exchange or dcql on resolved authorization request"); } + // TODO: This is but a temporary fix... it shall not remain ... but be handled prroperly in this step + if (resolvedPresentationRequest.presentationExchange) { + console.log("Hunt1"); + console.log( + JSON.stringify(resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord) + ); + // cast the credentialRecord to be a SdJwtVcRecord + const record123 = resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0] + .credentialRecord as SdJwtVcRecord; + + const record = new SdJwtVcRecord({ + id: record123.id, + createdAt: record123.createdAt, + compactSdJwtVc: record123.compactSdJwtVc + // ...other required fields + }); + console.log("Hunt2"); + resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord = record; + + console.log(typeof resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord); + console.log( + resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord.encoded + ); + } + console.log("Hunt3"); const submissionResult = await this.agent.modules.openId4VcHolder.acceptOpenId4VpAuthorizationRequest({ authorizationRequestPayload: resolvedPresentationRequest.authorizationRequestPayload, presentationExchange: resolvedPresentationRequest.presentationExchange diff --git a/packages/content/src/attributes/types/VerifiableCredential.ts b/packages/content/src/attributes/types/VerifiableCredential.ts index 37d39ae34..e38d3edde 100644 --- a/packages/content/src/attributes/types/VerifiableCredential.ts +++ b/packages/content/src/attributes/types/VerifiableCredential.ts @@ -7,12 +7,14 @@ export interface VerifiableCredentialJSON extends AbstractAttributeValueJSON { "@type": "VerifiableCredential"; title: string; description?: string; + credoId: string; value: unknown; } export interface IVerifiableCredential extends IAbstractAttributeValue { title: string; description?: string; + credoId: string; value: unknown; } @@ -22,6 +24,10 @@ export class VerifiableCredential extends AbstractAttributeValue { @validate({ max: PROPRIETARY_ATTRIBUTE_MAX_TITLE_LENGTH }) public title: string; + @serialize() + @validate({ max: PROPRIETARY_ATTRIBUTE_MAX_TITLE_LENGTH }) + public credoId: string; + @serialize() @validate({ nullable: true, max: PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH }) public description?: string; @@ -53,8 +59,9 @@ export class VerifiableCredential extends AbstractAttributeValue { function validateValue(value: any) { try { const string = JSON.stringify(value); - if (string.length > 4096) { - return "stringified value must not be longer than 4096 characters"; + // the length correspondes to 50MB - maybe this needs to be restricted further in the future + if (string.length > 52428800) { + return "stringified value must not be longer than 52428800 characters"; } } catch (e) { if (e instanceof SyntaxError) { diff --git a/packages/runtime-types/src/consumption/AcceptedProofRequestDTO.ts b/packages/runtime-types/src/consumption/AcceptedProofRequestDTO.ts new file mode 100644 index 000000000..b5098ce9b --- /dev/null +++ b/packages/runtime-types/src/consumption/AcceptedProofRequestDTO.ts @@ -0,0 +1,4 @@ +export interface AcceptProofRequestDTO { + status: number; + message: string; +} diff --git a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts index 84c29f1b3..82d301e99 100644 --- a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts +++ b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts @@ -2,4 +2,5 @@ export interface VerifiableCredentialDTO { status: string; message: string; data: string; + id: string; } diff --git a/packages/runtime-types/src/consumption/index.ts b/packages/runtime-types/src/consumption/index.ts index 28f1c4cb6..5f3cdd785 100644 --- a/packages/runtime-types/src/consumption/index.ts +++ b/packages/runtime-types/src/consumption/index.ts @@ -1,3 +1,4 @@ +export * from "./AcceptedProofRequestDTO"; export * from "./AttributeTagCollectionDTO"; export * from "./CredentialOfferDTO"; export * from "./DraftDTO"; diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts index 89c964711..74999f084 100644 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -1,10 +1,13 @@ import { ApplicationError, Result } from "@js-soft/ts-utils"; -import { FetchedCredentialOfferDTO, FetchedProofRequestDTO, VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { AcceptProofRequestDTO, FetchedCredentialOfferDTO, FetchedProofRequestDTO, VerifiableCredentialDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { + AcceptProofRequestRequest, + AcceptProofRequestUseCase, FetchCredentialOfferRequest, FetchCredentialOfferUseCase, FetchedCredentialOfferRequest, + FetchProofRequestRequest, FetchProofRequestUseCase, ResolveCredentialOfferRequest, ResolveCredentialOfferUseCase, @@ -16,7 +19,8 @@ export class OpenId4VcFacade { @Inject private readonly resolveCredentialOfferUseCase: ResolveCredentialOfferUseCase, @Inject private readonly fetchOfferUseCase: FetchCredentialOfferUseCase, @Inject private readonly resolveFetchedOfferUseCase: ResolveFetchedCredentialOfferUseCase, - @Inject private readonly fetchProofRequestUseCase: FetchProofRequestUseCase + @Inject private readonly fetchProofRequestUseCase: FetchProofRequestUseCase, + @Inject private readonly accepProofRequestUseCase: AcceptProofRequestUseCase ) {} public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { @@ -31,7 +35,11 @@ export class OpenId4VcFacade { return await this.resolveFetchedOfferUseCase.execute(request); } - public async fetchProofRequest(request: FetchCredentialOfferRequest): Promise> { + public async fetchProofRequest(request: FetchProofRequestRequest): Promise> { return await this.fetchProofRequestUseCase.execute(request); } + + public async acceptProofRequest(request: AcceptProofRequestRequest): Promise> { + return await this.accepProofRequestUseCase.execute(request); + } } diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index 0f553e097..9ad69376e 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -2223,10 +2223,14 @@ export const CanCreateOutgoingRequestRequest: any = { "description": { "type": "string" }, + "credoId": { + "type": "string" + }, "value": {} }, "required": [ "@type", + "credoId", "title", "value" ], @@ -4702,10 +4706,14 @@ export const CompleteOutgoingRequestRequest: any = { "description": { "type": "string" }, + "credoId": { + "type": "string" + }, "value": {} }, "required": [ "@type", + "credoId", "title", "value" ], @@ -7178,10 +7186,14 @@ export const CreateAndCompleteOutgoingRequestFromRelationshipTemplateResponseReq "description": { "type": "string" }, + "credoId": { + "type": "string" + }, "value": {} }, "required": [ "@type", + "credoId", "title", "value" ], @@ -10268,10 +10280,14 @@ export const CreateOutgoingRequestRequest: any = { "description": { "type": "string" }, + "credoId": { + "type": "string" + }, "value": {} }, "required": [ "@type", + "credoId", "title", "value" ], @@ -13750,10 +13766,14 @@ export const ReceivedIncomingRequestRequest: any = { "description": { "type": "string" }, + "credoId": { + "type": "string" + }, "value": {} }, "required": [ "@type", + "credoId", "title", "value" ], @@ -18895,10 +18915,14 @@ export const SucceedRepositoryAttributeRequest: any = { "description": { "type": "string" }, + "credoId": { + "type": "string" + }, "value": {} }, "required": [ "@type", + "credoId", "title", "value" ], @@ -19482,28 +19506,19 @@ export const SentNotificationRequest: any = { } } -export const FetchedCredentialOfferRequest: any = { +export const FetchCredentialOfferRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/FetchedCredentialOfferRequest", + "$ref": "#/definitions/FetchCredentialOfferRequest", "definitions": { - "FetchedCredentialOfferRequest": { + "FetchCredentialOfferRequest": { "type": "object", "properties": { - "data": { - "type": "string" - }, - "pinCode":{ + "credentialOfferUrl": { "type": "string" - }, - "requestedCredentials":{ - "type": "array", - "items": { - "type": "string" - } } }, "required": [ - "data" + "credentialOfferUrl" ], "additionalProperties": false } @@ -19512,9 +19527,9 @@ export const FetchedCredentialOfferRequest: any = { export const FetchProofRequestRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/FetchedCredentialOfferRequest", + "$ref": "#/definitions/FetchProofRequestRequest", "definitions": { - "FetchedCredentialOfferRequest": { + "FetchProofRequestRequest": { "type": "object", "properties": { "proofRequestUrl": { @@ -19548,6 +19563,56 @@ export const ResolveCredentialOfferRequest: any = { } } +export const FetchedCredentialOfferRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/FetchedCredentialOfferRequest", + "definitions": { + "FetchedCredentialOfferRequest": { + "type": "object", + "properties": { + "data": { + "type": "string" + }, + "pinCode": { + "type": "string" + }, + "requestedCredentials": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "data", + "requestedCredentials" + ], + "additionalProperties": false + } + } +} + +export const AcceptProofRequestRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/AcceptProofRequestRequest", + "definitions": { + "AcceptProofRequestRequest": { + "type": "object", + "properties": { + "jsonEncodedRequest": { + "type": "string" + }, + }, + "required": [ + "jsonEncodedRequest" + ], + "additionalProperties": false + } + } +} + + + export const CreateSettingRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/CreateSettingRequest", @@ -24213,10 +24278,14 @@ export const VerifiableCredential: any = { "description": { "type": "string" }, + "credoId": { + "type": "string" + }, "value": {} }, "required": [ "@type", + "credoId", "title", "value" ], diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts index e69de29bb..590488332 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts @@ -0,0 +1,29 @@ +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { AcceptProofRequestDTO } from "@nmshd/runtime-types"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface AcceptProofRequestRequest { + jsonEncodedRequest: string; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("AcceptProofRequestRequest")); + } +} + +export class AcceptProofRequestUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: AcceptProofRequestRequest): Promise> { + const result = await this.openId4VcContoller.acceptProofRequest(request.jsonEncodedRequest); + return Result.ok({ status: result.status, message: result.success } as AcceptProofRequestDTO); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts index 49289a53c..4a8f542b9 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts @@ -26,6 +26,6 @@ export class ResolveFetchedCredentialOfferUseCase extends UseCase> { const result = await this.openId4VcContoller.processFetchedCredentialOffer(request.data, request.requestedCredentials, request.pinCode); - return Result.ok({ status: result.status, message: result.message, data: result.data } as VerifiableCredentialDTO); + return Result.ok({ status: result.status, message: result.message, data: result.data, id: result.id } as VerifiableCredentialDTO); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/index.ts b/packages/runtime/src/useCases/consumption/openid4vc/index.ts index d8f3e573d..63fac8183 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/index.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/index.ts @@ -1,3 +1,4 @@ +export * from "./AcceptProofRequestUseCase"; export * from "./FetchCredentialOfferUseCase"; export * from "./FetchProofRequestUseCase"; export * from "./ResolveCredentialOfferUseCase"; diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index bc3cd8215..c0ac4944d 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -12,13 +12,13 @@ beforeAll(async () => { afterAll(async () => await runtimeServiceProvider.stop()); -describe("OpenID4VCI", () => { +describe("OpenID4VCI and OpenID4VCP", () => { + let credentialOfferUrl: string; + test("should process a given credential offer", async () => { - // this should fetch its own credential offer url const response = await fetch(`https://openid4vc-service.is.enmeshed.eu/issuance/credentialOffers`, { method: "POST", headers: { - // eslint-disable-next-line @typescript-eslint/naming-convention "Content-Type": "application/json" }, body: JSON.stringify({ @@ -26,19 +26,36 @@ describe("OpenID4VCI", () => { }) }); const data = await response.json(); - const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ - credentialOfferUrl: data.result.credentialOffer + credentialOfferUrl = data.result.credentialOffer; + const result = await consumptionServices.openId4Vc.fetchCredentialOffer({ + credentialOfferUrl + }); + + // analogously to the app code all presented credentials are accepted + const jsonRepresentation = result.value.jsonRepresentation; + const credentialOfferDecoded = JSON.parse(jsonRepresentation); + let requestedCredentials = []; + // determine which credentials to pick from the offer for all supported types of offers + + if (credentialOfferDecoded["credentialOfferPayload"]["credentials"] !== undefined) { + requestedCredentials = credentialOfferDecoded["credentialOfferPayload"]["credentials"]; + } else if (credentialOfferDecoded["credentialOfferPayload"]["credential_configuration_ids"] !== undefined) { + requestedCredentials = credentialOfferDecoded["credentialOfferPayload"]["credential_configuration_ids"]; + } + + const acceptanceResult = await consumptionServices.openId4Vc.resolveFetchedCredentialOffer({ + data: jsonRepresentation, + requestedCredentials: requestedCredentials }); - // the result will always be a success - it however has a status field in it's value - which is a JSON string - // that contains the actual status of the flow - const status = result.value.status; + + const status = acceptanceResult.value.status; expect(status).toBe("success"); }, 10000000); -}); -describe("OpenID4VCP", () => { - test("should be able tp process a given credential presentation", async () => { - // this should fetch its own credential offer url + test("should be able to process a given credential presentation", async () => { + // Ensure the first test has completed and credentialOfferUrl is set + expect(credentialOfferUrl).toBeDefined(); + const response = await fetch(`https://openid4vc-service.is.enmeshed.eu/presentation/presentationRequests`, { method: "POST", headers: { @@ -90,11 +107,13 @@ describe("OpenID4VCP", () => { }); const data = await response.json(); const result = await consumptionServices.openId4Vc.fetchProofRequest({ - credentialOfferUrl: data.result.credentialOffer + proofRequestUrl: data.result.presentationRequest }); - // the result will always be a success - it however has a status field in it's value - which is a JSON string - // that contains the actual status of the flow const jsonRepresentation = result.value.jsonRepresentation; - expect(jsonRepresentation).not.toBe("success"); + + const presentationResult = await consumptionServices.openId4Vc.acceptProofRequest({ + jsonEncodedRequest: jsonRepresentation + }); + expect(presentationResult.value.status).toBe(200); }, 10000000); }); From 8689dfc1089d0abbe1da0e0f9afa5ff3f98b04a2 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Mon, 29 Sep 2025 17:28:40 +0200 Subject: [PATCH 25/75] chore remove peackock styling --- .vscode/settings.json | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 9854f4675..6b81ef66c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -52,25 +52,5 @@ "source.organizeImports": "always" }, "files.eol": "\n", - "typescript.tsdk": "node_modules/typescript/lib", - "workbench.colorCustomizations": { - "activityBar.activeBackground": "#fbed80", - "activityBar.background": "#fbed80", - "activityBar.foreground": "#15202b", - "activityBar.inactiveForeground": "#15202b99", - "activityBarBadge.background": "#06b9a5", - "activityBarBadge.foreground": "#15202b", - "commandCenter.border": "#15202b99", - "sash.hoverBorder": "#fbed80", - "statusBar.background": "#f9e64f", - "statusBar.foreground": "#15202b", - "statusBarItem.hoverBackground": "#f7df1e", - "statusBarItem.remoteBackground": "#f9e64f", - "statusBarItem.remoteForeground": "#15202b", - "titleBar.activeBackground": "#f9e64f", - "titleBar.activeForeground": "#15202b", - "titleBar.inactiveBackground": "#f9e64f99", - "titleBar.inactiveForeground": "#15202b99" - }, - "peacock.remoteColor": "#f9e64f" + "typescript.tsdk": "node_modules/typescript/lib" } From 958be897591455186531a96abc871ef10cfaac52 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 1 Oct 2025 11:50:54 +0200 Subject: [PATCH 26/75] chore: credo version bump + automatic patch --- package-lock.json | 543 +++++++++++++----- package.json | 10 +- packages/consumption/package.json | 6 +- ...vc+oauth2+0.3.0-alpha-20250825150235.patch | 45 ++ 4 files changed, 446 insertions(+), 158 deletions(-) create mode 100644 patches/@openid4vc+oauth2+0.3.0-alpha-20250825150235.patch diff --git a/package-lock.json b/package-lock.json index 41a52d976..57cf25db5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "packages": { "": { "name": "monorepo", + "hasInstallScript": true, "license": "MIT", "workspaces": [ "packages/core-types", @@ -15,9 +16,6 @@ "packages/runtime", "packages/app-runtime" ], - "dependencies": { - "libsodium-wrappers": "^0.7.15" - }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.3", "@js-soft/license-check": "^1.0.9", @@ -30,6 +28,7 @@ "jest-expect-message": "^1.1.3", "madge": "^8.0.0", "npm-check-updates": "^18.0.3", + "patch-package": "^8.0.1", "prettier": "^3.6.2", "ts-jest": "^29.4.1", "ts-node": "^10.9.2", @@ -728,26 +727,10 @@ "dev": true, "license": "MIT" }, - "node_modules/@credo-ts/askar": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/askar/-/askar-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-AgeiLbW3wdV5PWUnMFEIRJ1Xrrom+pTNdxNkk4j774f0yAswi2jBYrVpzSr8UmspdSiVIjbxZe/q/WUAn6NQ/Q==", - "license": "Apache-2.0", - "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "rxjs": "^7.8.2", - "tsyringe": "^4.10.0" - }, - "peerDependencies": { - "@openwallet-foundation/askar-shared": "^0.3.2" - } - }, "node_modules/@credo-ts/core": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-vqNYnQa6Kn8g2Ay5rGxm6zqMqepV4jdSHLpAgXQJ1zvaBIVZ4zU7zjxccILhruCFlvlUreKtSqcEI8SAMUigUQ==", + "version": "0.6.0-alpha-20250919145226", + "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20250919145226.tgz", + "integrity": "sha512-4DTA4viwWiS8v+vjS1gOWbKCDRMi8hmPYMnNzTkxb4LRHNSqxqRuK//YYwVWRNBBSrWgY3oaMf+wayljSY9OIA==", "license": "Apache-2.0", "dependencies": { "@animo-id/mdoc": "^0.5.2", @@ -763,7 +746,7 @@ "@peculiar/asn1-rsa": "^2.3.15", "@peculiar/asn1-schema": "^2.3.15", "@peculiar/asn1-x509": "^2.3.15", - "@peculiar/x509": "^1.12.1", + "@peculiar/x509": "^1.13.0", "@sd-jwt/core": "^0.10.0", "@sd-jwt/decode": "^0.10.0", "@sd-jwt/jwt-status-list": "^0.10.0", @@ -779,7 +762,7 @@ "buffer": "^6.0.3", "class-transformer": "0.5.1", "class-validator": "0.14.1", - "dcql": "^0.3.0", + "dcql": "2.0.0-alpha-20250916080434", "did-resolver": "^4.1.0", "ec-compression": "0.0.1-alpha.12", "lru_map": "^0.4.1", @@ -820,16 +803,16 @@ } }, "node_modules/@credo-ts/openid4vc": { - "version": "0.6.0-alpha-20250704130724", - "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20250704130724.tgz", - "integrity": "sha512-+9BwT0tbo1B4++DcVXBEcoNAmkI5LNpacDDnUYdVumlSYYmmdE1WAAxCvM052ipBFke82w4kPOyo5YSZvZ7IFA==", + "version": "0.6.0-alpha-20250919145226", + "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20250919145226.tgz", + "integrity": "sha512-Qp2hMym1etHSURtdBvcTu3yqXrBhaZHU44ZkAOJlAQ0kyqsjOznrczVFx8SaXgq0TuW94Wy0uhwD4M/fFsvErQ==", "license": "Apache-2.0", "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250704130724", - "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", - "@openid4vc/openid4vci": "0.3.0-alpha-20250602121005", - "@openid4vc/openid4vp": "0.3.0-alpha-20250602121005", - "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "@credo-ts/core": "0.6.0-alpha-20250919145226", + "@openid4vc/oauth2": "0.3.0-alpha-20250825150235", + "@openid4vc/openid4vci": "0.3.0-alpha-20250825150235", + "@openid4vc/openid4vp": "0.3.0-alpha-20250825150235", + "@openid4vc/utils": "0.3.0-alpha-20250825150235", "class-transformer": "0.5.1", "rxjs": "^7.8.2", "zod": "^3.25.56" @@ -2653,41 +2636,41 @@ } }, "node_modules/@openid4vc/oauth2": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-BRY43zVD8fNEfQlOzYdaGxIUM9GcBubiJcqXpDCzGB+hc7g8LToAuNaAeNe0ZJmeN5Fn+iaL9tnmlz6Lq6A+Dw==", + "version": "0.3.0-alpha-20250825150235", + "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20250825150235.tgz", + "integrity": "sha512-BZZ5rnUvjtDg+5fVLkzwj+WQ7Ph4OjzfuWCVk9kHfO/ystF+K+2pE80bGIfEzwPn0CVn5dVktxWCQZs2BfkbOw==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "@openid4vc/utils": "0.3.0-alpha-20250825150235", "zod": "^3.24.2" } }, "node_modules/@openid4vc/openid4vci": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-7F4E6qigwhqHXIg5pRPQ8O79mVzIsHA+M5UzUwy86btLQIalJOBJK9Td6BX4H9TROeXWoPM/cWsw1s0WZsrIeA==", + "version": "0.3.0-alpha-20250825150235", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20250825150235.tgz", + "integrity": "sha512-5JCjyHod9ycrKYtPaLk/TMFEYwt7EWnW/5pzTEXx4tyrsLzjhkwKzPnnkbRt/pNci5Yu9nkP2GMgVLVyV715lw==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", - "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "@openid4vc/oauth2": "0.3.0-alpha-20250825150235", + "@openid4vc/utils": "0.3.0-alpha-20250825150235", "zod": "^3.24.2" } }, "node_modules/@openid4vc/openid4vp": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-n45JxZFTJyOlJFjW/y4bXxDYwDfm4F61RCt+qy8lDPp+DtCnw9pFGHndk6IZtP4t33/e88ntKvV2lUgIrJLLpw==", + "version": "0.3.0-alpha-20250825150235", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20250825150235.tgz", + "integrity": "sha512-UPEimJYvCSsdLkxavQ5Hh9DnmL/FsethK2IT9JZlYoWTGnNc8KnYb5kKbDAGyGWpusZSZ3WuqQz8uHlLiaig+A==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20250602121005", - "@openid4vc/utils": "0.3.0-alpha-20250602121005", + "@openid4vc/oauth2": "0.3.0-alpha-20250825150235", + "@openid4vc/utils": "0.3.0-alpha-20250825150235", "zod": "^3.24.2" } }, "node_modules/@openid4vc/utils": { - "version": "0.3.0-alpha-20250602121005", - "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20250602121005.tgz", - "integrity": "sha512-68lU8pqqGrqIjhb+/y+UjYFgbzluljIhTAEan5LyW0IKOMO0slFHfEzjn85Cv8bN1En/SuNT+U/McX/krlSSwg==", + "version": "0.3.0-alpha-20250825150235", + "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20250825150235.tgz", + "integrity": "sha512-lxm+PTGPB3g8ZObEned2wIX3mzBjoj/UIsv0xRGZGKsf9Z3Z+T4ukje05oj8HYn0d7sApPw5v1cJaBC+uzdjFg==", "license": "Apache-2.0", "dependencies": { "buffer": "^6.0.3", @@ -2718,96 +2701,6 @@ "ieee754": "^1.2.1" } }, - "node_modules/@openwallet-foundation/askar-shared": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-shared/-/askar-shared-0.3.2.tgz", - "integrity": "sha512-WQSHM5+5Vy1QMUpUTj0DpwFKYdciNcksWsft/iD6Ff+AdDERKo5Mjv/4JSIZIzXUEyq7kqqNbejl4a3TDGeU3A==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "buffer": "^6.0.3", - "tar": "^7.4.3" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "license": "MIT", - "peer": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "license": "ISC", - "peer": true, - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@openwallet-foundation/askar-shared/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "peer": true, - "engines": { - "node": ">=18" - } - }, "node_modules/@peculiar/asn1-cms": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.4.0.tgz", @@ -4551,6 +4444,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -5564,6 +5464,25 @@ "node": ">=18" } }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -6184,9 +6103,9 @@ } }, "node_modules/dcql": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dcql/-/dcql-0.3.0.tgz", - "integrity": "sha512-Q/yEf1itIpAYpLbGJsdGMj5Q2Ug0/NMYmyYiJWlKjk7LQOkDJ5Qh6ebLbiZBQ7gsvNBGWiOhtL306j5WdXcOcA==", + "version": "2.0.0-alpha-20250916080434", + "resolved": "https://registry.npmjs.org/dcql/-/dcql-2.0.0-alpha-20250916080434.tgz", + "integrity": "sha512-l/dN05fpAA350jknqN8km2BdUTnYWLi6wUty9w86K0MdYEHyXz/CGnHAlFr6EfhaobTCL0INYoSXMahXCGh3mg==", "license": "MIT", "dependencies": { "valibot": "1.0.0-beta.8" @@ -6274,6 +6193,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -7454,6 +7391,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, "node_modules/fix-esm": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fix-esm/-/fix-esm-1.0.1.tgz", @@ -7907,6 +7854,19 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -8234,6 +8194,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8363,6 +8339,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -9164,6 +9153,26 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stable-stringify": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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", @@ -9171,6 +9180,13 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stable-stringify/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -9205,8 +9221,8 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "devOptional": true, "license": "MIT", - "optional": true, "dependencies": { "universalify": "^2.0.0" }, @@ -9214,6 +9230,16 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/jsonld": { "version": "8.3.3", "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", @@ -9300,6 +9326,16 @@ "json-buffer": "3.0.1" } }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, "node_modules/ky": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", @@ -9417,6 +9453,7 @@ "version": "0.7.15", "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.15.tgz", "integrity": "sha512-sZwRknt/tUpE2AwzHq3jEyUU5uvIZHtSssktXq7owd++3CSgn8RGrv6UZJJBpP7+iBghBqe7Z06/2M31rI2NKw==", + "dev": true, "license": "ISC" }, "node_modules/libsodium-sumo": { @@ -9429,6 +9466,7 @@ "version": "0.7.15", "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.15.tgz", "integrity": "sha512-E4anqJQwcfiC6+Yrl01C1m8p99wEhLmJSs0VQqST66SbQXXBoaJY0pF4BNjRYa/sOQAxx6lXAaAFIlx+15tXJQ==", + "dev": true, "license": "ISC", "dependencies": { "libsodium": "^0.7.15" @@ -10054,9 +10092,9 @@ "license": "ISC" }, "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -10684,6 +10722,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -10710,6 +10758,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "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", @@ -10956,6 +11021,77 @@ "node": ">=6" } }, + "node_modules/patch-package": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^10.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.2.4", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/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" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -12010,6 +12146,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -13666,8 +13820,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "devOptional": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 10.0.0" } @@ -14318,9 +14472,9 @@ "name": "@nmshd/consumption", "license": "MIT", "dependencies": { - "@credo-ts/askar": "v0.6.0-alpha-20250704130724", - "@credo-ts/core": "v0.6.0-alpha-20250704130724", - "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", + "@credo-ts/askar": "v0.6.0-alpha-20250919145226", + "@credo-ts/core": "v0.6.0-alpha-20250919145226", + "@credo-ts/openid4vc": "v0.6.0-alpha-20250919145226", "@js-soft/docdb-querytranslator": "^1.1.5", "@js-soft/ts-serval": "2.0.13", "@js-soft/ts-utils": "2.3.4", @@ -14346,6 +14500,95 @@ "ts-mockito": "^2.6.1" } }, + "packages/consumption/node_modules/@credo-ts/askar": { + "version": "0.6.0-alpha-20250919145226", + "resolved": "https://registry.npmjs.org/@credo-ts/askar/-/askar-0.6.0-alpha-20250919145226.tgz", + "integrity": "sha512-25ZLSi7QnbosKOfbKvjpPimSFbWDmspDEAkW+s272Bb2JRCQiFhKszgGBlcuWivlbLMh7wr8lmcDf5QPhZapfg==", + "license": "Apache-2.0", + "dependencies": { + "@credo-ts/core": "0.6.0-alpha-20250919145226", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "rxjs": "^7.8.2", + "tsyringe": "^4.10.0" + }, + "peerDependencies": { + "@openwallet-foundation/askar-shared": "^0.4.0" + } + }, + "packages/consumption/node_modules/@openwallet-foundation/askar-shared": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-shared/-/askar-shared-0.4.1.tgz", + "integrity": "sha512-r9xF68R+xYkalG0+6L+fcywo/87l29RuU1AtCSLFj3w0nKlzmxaK0HbJ4zvJjfVqvd+qglvn3HTFdUuKC/Pwrg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "buffer": "^6.0.3", + "tar": "^7.4.3" + } + }, + "packages/consumption/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "packages/consumption/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "packages/consumption/node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "license": "ISC", + "peer": true, + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "packages/consumption/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=18" + } + }, "packages/content": { "name": "@nmshd/content", "license": "MIT", diff --git a/package.json b/package.json index 062178c00..c3658f407 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "pull:backbone": "docker compose -p runtime-test-backbone -f .dev/compose.backbone.yml pull", "start:backbone": "docker compose -p runtime-test-backbone -f .dev/compose.backbone.yml up -d", "teardown:backbone": "docker compose -p runtime-test-backbone -f .dev/compose.backbone.yml down -v", - "test:teardown": "docker compose -f .dev/compose.yml down -fsv" + "test:teardown": "docker compose -f .dev/compose.yml down -fsv", + "postinstall": "patch-package && echo 'Postinstall done.'" }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.3", @@ -43,9 +44,8 @@ "ts-jest": "^29.4.1", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.9.2" + "typescript": "^5.9.2", + "patch-package": "^8.0.1" }, - "dependencies": { - "libsodium-wrappers": "^0.7.15" - } + "dependencies": {} } diff --git a/packages/consumption/package.json b/packages/consumption/package.json index d738ff2c8..2af3b7c81 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -59,9 +59,9 @@ } }, "dependencies": { - "@credo-ts/askar": "v0.6.0-alpha-20250704130724", - "@credo-ts/core": "v0.6.0-alpha-20250704130724", - "@credo-ts/openid4vc": "v0.6.0-alpha-20250704130724", + "@credo-ts/askar": "v0.6.0-alpha-20250919145226", + "@credo-ts/core": "v0.6.0-alpha-20250919145226", + "@credo-ts/openid4vc": "v0.6.0-alpha-20250919145226", "@js-soft/docdb-querytranslator": "^1.1.5", "@js-soft/ts-serval": "2.0.13", "@js-soft/ts-utils": "2.3.4", diff --git a/patches/@openid4vc+oauth2+0.3.0-alpha-20250825150235.patch b/patches/@openid4vc+oauth2+0.3.0-alpha-20250825150235.patch new file mode 100644 index 000000000..73ee573da --- /dev/null +++ b/patches/@openid4vc+oauth2+0.3.0-alpha-20250825150235.patch @@ -0,0 +1,45 @@ +diff --git a/node_modules/@openid4vc/oauth2/dist/index.js b/node_modules/@openid4vc/oauth2/dist/index.js +index 51abb78..a2a6941 100644 +--- a/node_modules/@openid4vc/oauth2/dist/index.js ++++ b/node_modules/@openid4vc/oauth2/dist/index.js +@@ -956,21 +956,27 @@ ${formattedError}`; + // src/metadata/fetch-well-known-metadata.ts + async function fetchWellKnownMetadata(wellKnownMetadataUrl, schema, fetch) { + const fetcher = (0, import_utils10.createZodFetcher)(fetch); +- const { result, response } = await fetcher(schema, import_utils10.ContentType.Json, wellKnownMetadataUrl); +- if (response.status === 404) { ++ try{ ++ const { result, response } = await fetcher(schema, import_utils10.ContentType.Json, wellKnownMetadataUrl); ++ ++ if (response.status === 404) { ++ return null; ++ } ++ if (!response.ok) { ++ throw new import_utils11.InvalidFetchResponseError( ++ `Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessfull response with status '${response.status}'.`, ++ await response.clone().text(), ++ response ++ ); ++ } ++ if (!result?.success) { ++ throw new ValidationError(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); ++ } ++ return result.data; ++ }catch(e){ ++ console.log('Changed By JS-SOFT: Error can probably be ignored', e); + return null; + } +- if (!response.ok) { +- throw new import_utils11.InvalidFetchResponseError( +- `Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessful response with status '${response.status}'.`, +- await response.clone().text(), +- response +- ); +- } +- if (!result?.success) { +- throw new ValidationError(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); +- } +- return result.data; + } + + // src/metadata/authorization-server/z-authorization-server-metadata.ts From 90d352af1d9a416c56114c9823746adc116958c8 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 1 Oct 2025 11:57:34 +0200 Subject: [PATCH 27/75] chore: cleanup + renaming --- .../src/modules/openid4vc/index.ts | 4 +- ...eSystem.ts => EnmeshedHolderFileSystem.ts} | 48 +++++-------------- ...s => EnmeshedHolderKeyManagmentService.ts} | 43 +++++++---------- .../openid4vc/local/EnmeshedStorageService.ts | 47 +++++------------- .../openid4vc/local/LocalAgentDependencies.ts | 8 ++-- 5 files changed, 46 insertions(+), 104 deletions(-) rename packages/consumption/src/modules/openid4vc/local/{FakeFileSystem.ts => EnmeshedHolderFileSystem.ts} (65%) rename packages/consumption/src/modules/openid4vc/local/{FakeKeyManagmentService.ts => EnmeshedHolderKeyManagmentService.ts} (90%) diff --git a/packages/consumption/src/modules/openid4vc/index.ts b/packages/consumption/src/modules/openid4vc/index.ts index 569180318..84f71eb01 100644 --- a/packages/consumption/src/modules/openid4vc/index.ts +++ b/packages/consumption/src/modules/openid4vc/index.ts @@ -1,7 +1,7 @@ export * from "./local/BaseAgent"; +export * from "./local/EnmeshedHolderFileSystem"; +export * from "./local/EnmeshedHolderKeyManagmentService"; export * from "./local/EnmeshedStorageService"; -export * from "./local/FakeFileSystem"; -export * from "./local/FakeKeyManagmentService"; export * from "./local/Holder"; export * from "./local/LocalAgentDependencies"; export * from "./OpenId4VcController"; diff --git a/packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderFileSystem.ts similarity index 65% rename from packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts rename to packages/consumption/src/modules/openid4vc/local/EnmeshedHolderFileSystem.ts index 8a13784fb..faab98a6d 100644 --- a/packages/consumption/src/modules/openid4vc/local/FakeFileSystem.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderFileSystem.ts @@ -1,7 +1,6 @@ -/* eslint-disable no-console */ import { DownloadToFileOptions, FileSystem } from "@credo-ts/core"; -export class FakeFileSystem implements FileSystem { +export class EnmeshedHolderFileSystem implements FileSystem { public readonly dataPath: string; public readonly cachePath: string; public readonly tempPath: string; @@ -11,10 +10,9 @@ export class FakeFileSystem implements FileSystem { public constructor() { // check if the globalThis object already knows a fake file system - if ((globalThis as any)._fakeFileSystem) { - console.log("FFS: Reusing existing FakeFileSystem"); + if ((globalThis as any).enmeshedFileSystem) { // if a fake file system already exists use its value to initialize this instance - const existingFs = (globalThis as any)._fakeFileSystem as FakeFileSystem; + const existingFs = (globalThis as any).enmeshedFileSystem as EnmeshedHolderFileSystem; this.fileSystem = existingFs.fileSystem; this.directories = existingFs.directories; @@ -22,7 +20,6 @@ export class FakeFileSystem implements FileSystem { this.cachePath = existingFs.cachePath; this.tempPath = existingFs.tempPath; } else { - console.log("FFS: Initializing the FakeFileSystem"); this.dataPath = "/data"; this.cachePath = "/cache"; this.tempPath = "/temp"; @@ -32,16 +29,15 @@ export class FakeFileSystem implements FileSystem { this.directories.set(this.cachePath, true); this.directories.set(this.tempPath, true); // store this instance in the globalThis object - FakeFileSystem.updateGlobalInstance(this); + EnmeshedHolderFileSystem.updateGlobalInstance(this); } } - public static updateGlobalInstance(toStore: FakeFileSystem): void { - (globalThis as any)._fakeFileSystem = toStore; + public static updateGlobalInstance(toStore: EnmeshedHolderFileSystem): void { + (globalThis as any).enmeshedFileSystem = toStore; } public exists(path: string): Promise { - console.log(`FFS: Checking existence of path ${path}`); if (this.directories.has(path) || this.fileSystem.has(path)) { return Promise.resolve(true); } @@ -50,14 +46,12 @@ export class FakeFileSystem implements FileSystem { } public createDirectory(path: string): Promise { - console.log(`FFS: Creating directory at path ${path}`); this.directories.set(path, true); - FakeFileSystem.updateGlobalInstance(this); + EnmeshedHolderFileSystem.updateGlobalInstance(this); return Promise.resolve(); } public async copyFile(sourcePath: string, destinationPath: string): Promise { - console.log(`FFS: Copying file from ${sourcePath} to ${destinationPath}`); const exists = await this.exists(sourcePath); if (!exists) { throw new Error(`Source file ${sourcePath} does not exist`); @@ -72,22 +66,19 @@ export class FakeFileSystem implements FileSystem { } public write(path: string, data: string): Promise { - console.log(`FFS: Writing data to path ${path}`); // if the path doe not yet exist set it as a file if (!this.directories.has(path)) { this.directories.set(path, false); // mark as file } this.fileSystem.set(path, data); - FakeFileSystem.updateGlobalInstance(this); + EnmeshedHolderFileSystem.updateGlobalInstance(this); return Promise.resolve(); } public async read(path: string): Promise { - console.log(`FFS: Reading data from path ${path}`); const exists = await this.exists(path); if (!exists) { - // eslint-disable-next-line no-console - console.log(`File ${path} does not exist`); + throw new Error(`Path ${path} does not exist`); } if (this.directories.get(path)) { @@ -98,7 +89,6 @@ export class FakeFileSystem implements FileSystem { } public async delete(path: string): Promise { - console.log(`FFS: Deleting path ${path}`); if (!(await this.exists(path))) { throw new Error(`Path ${path} does not exist`); } @@ -110,26 +100,12 @@ export class FakeFileSystem implements FileSystem { this.fileSystem.delete(path); this.directories.delete(path); } - FakeFileSystem.updateGlobalInstance(this); + EnmeshedHolderFileSystem.updateGlobalInstance(this); return; } + // eslint-disable-next-line @typescript-eslint/no-unused-vars public downloadToFile(url: string, path: string, options?: DownloadToFileOptions): Promise { - console.log(`FFS: Downloading from ${url} to ${path}`); - - // Simulate a download by writing a placeholder content - let content = `Downloaded content from ${url}`; - - if (options) { - if (options.verifyHash) { - // Here you would implement hash verification logic if needed - // eslint-disable-next-line prefer-template - content = content + ` with hash verification: ${options.verifyHash}`; - } - } - - this.fileSystem.set(path, content); - - return Promise.resolve(); + throw new Error("Method not implemented."); } } diff --git a/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts similarity index 90% rename from packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts rename to packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts index 67072ce9d..269d0cdf4 100644 --- a/packages/consumption/src/modules/openid4vc/local/FakeKeyManagmentService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts @@ -1,5 +1,3 @@ -/* eslint-disable no-console */ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { AgentContext } from "@credo-ts/core"; import { KeyManagementService, @@ -33,10 +31,10 @@ export interface JwkKeyPair { keyType?: string; } -export class FakeKeyManagmentService implements KeyManagementService { +export class EnmshedHolderKeyManagmentService implements KeyManagementService { public static readonly backend = "fakeKeyManagementService"; - public readonly backend = FakeKeyManagmentService.backend; + public readonly backend = EnmshedHolderKeyManagmentService.backend; public keystore: Map; private readonly b64url = (bytes: Uint8Array) => _sodium.to_base64(bytes, _sodium.base64_variants.URLSAFE_NO_PADDING); @@ -73,8 +71,8 @@ export class FakeKeyManagmentService implements KeyManagementService { } public isOperationSupported(agentContext: AgentContext, operation: KmsOperation): boolean { + agentContext.config.logger.debug(`EKM: Checking if operation is supported: ${JSON.stringify(operation)}`); if (operation.operation === "createKey") { - console.log("FKM: Trying to createKey for type", JSON.stringify(operation.type)); if (operation.type.kty === "OKP") { return true; } @@ -96,16 +94,14 @@ export class FakeKeyManagmentService implements KeyManagementService { return true; } if (operation.operation === "encrypt") { - console.log(`FKM: encrypt is supported for algorithm: ${operation.encryption.algorithm.toString()}`); return true; } return false; } public getPublicKey(agentContext: AgentContext, keyId: string): Promise { const keyPair = this.keystore.get(keyId); - console.log("FKM: getPublicKey for ID:", keyId, " keypair:", keyPair ? "found" : "not found"); if (!keyPair) { - console.log(`FKM: Key with id ${keyId} not found`); + agentContext.config.logger.error(`EKM: Key with id ${keyId} not found`); throw new Error(`Key with id ${keyId} not found`); } @@ -119,7 +115,7 @@ export class FakeKeyManagmentService implements KeyManagementService { return v.toString(16); }); - console.log("FKM: creating key for ID:", JSON.stringify(options.keyId)); + agentContext.config.logger.debug(`EKM: Creating key with id ${options.keyId} and type ${JSON.stringify(options.type)}`); if (options.type.kty === "EC" && options.type.crv === "P-256") { // Use P-256 (aka secp256r1) @@ -146,8 +142,7 @@ export class FakeKeyManagmentService implements KeyManagementService { keyType: "EC" }; - console.log("FKM: created jwk-key pair:", JSON.stringify(jwkKeyPair)); - + agentContext.config.logger.debug(`EKM: Created EC key pair with id ${options.keyId}`); // store the key pair in the keystore this.keystore.set(options.keyId, JSON.stringify(jwkKeyPair)); @@ -162,9 +157,7 @@ export class FakeKeyManagmentService implements KeyManagementService { const sodium = _sodium; const { keyType, publicKey, privateKey } = sodium.crypto_sign_keypair(); - - console.log("FKM: key type:", keyType); - console.log("FKM: options type:", JSON.stringify(options.type)); + agentContext.config.logger.debug(`EKM: Created OKP key pair with id ${options.keyId} and keyType ${keyType}`); const seed = privateKey.slice(0, sodium.crypto_sign_SEEDBYTES); // Public JWK @@ -195,10 +188,12 @@ export class FakeKeyManagmentService implements KeyManagementService { } as KmsCreateKeyReturn); } public importKey(agentContext: AgentContext, options: KmsImportKeyOptions): Promise> { + agentContext.config.logger.debug(`EKM: Importing key with ${JSON.stringify(options)}`); throw new Error("Method not implemented."); } public deleteKey(agentContext: AgentContext, options: KmsDeleteKeyOptions): Promise { if (this.keystore.has(options.keyId)) { + agentContext.config.logger.debug(`EKM: Deleting key with id ${options.keyId}`); this.keystore.delete(options.keyId); this.updateGlobalInstance(this.keystore); return Promise.resolve(true); @@ -206,7 +201,8 @@ export class FakeKeyManagmentService implements KeyManagementService { throw new Error(`key with id ${options.keyId} not found. and cannot be deleted`); } public async sign(agentContext: AgentContext, options: KmsSignOptions): Promise { - // load key from keystore + agentContext.config.logger.debug(`EKM: Signing data with key id ${options.keyId} using algorithm ${options.algorithm}`); + const stringifiedKeyPair = this.keystore.get(options.keyId); if (!stringifiedKeyPair) { throw new Error(`Key with id ${options.keyId} not found`); @@ -267,7 +263,7 @@ export class FakeKeyManagmentService implements KeyManagementService { } public verify(agentContext: AgentContext, options: KmsVerifyOptions): Promise { - console.log("FKM: verifying signature"); + agentContext.config.logger.debug(`EKM: Verifying signature with key id ${options.key.keyId} using algorithm ${options.algorithm}`); // Use P-256 (aka secp256r1) const ec = new EC("p256"); if (!options.key.publicJwk) { @@ -294,7 +290,7 @@ export class FakeKeyManagmentService implements KeyManagementService { const verified = key.verify(dataHash, signature); return Promise.resolve({ verified: verified } as KmsVerifyReturn); } catch (e) { - console.log("FKM: error during verification", e); + agentContext.config.logger.error(`EKM: Error during signature verification: ${e}`); throw e; } } @@ -399,8 +395,7 @@ export class FakeKeyManagmentService implements KeyManagementService { // 1. derive the shared secret via ECDH-ES const sharedSecret = this.ecdhEs(options.key.keyAgreement.keyId, options.key.keyAgreement.externalPublicJwk); - console.log("FKM: shared secret", this.buf2hex(sharedSecret)); - + agentContext.config.logger.debug(`EKM: Derived shared secret for encryption using ECDH-ES`); // 2. Concat KDF to form the final key const derivedKey = this.concatKdf(sharedSecret, 256, "A256GCM", options.key.keyAgreement); // 3. Encrypt the data via AES-256-GCM using libsodium @@ -430,23 +425,19 @@ export class FakeKeyManagmentService implements KeyManagementService { tag: tag }; - console.log(`FKM key(hex):${this.buf2hex(derivedKey)}`); - console.log(`FKM iv(hex):${this.buf2hex(iv)}`); - console.log(`FKM ciphertext(hex):${this.buf2hex(cyphertext)}`); - console.log(`FKM tag(hex):${this.buf2hex(tag)}`); - console.log(`FKM aad(hex):${"aad" in options.encryption && options.encryption.aad ? this.buf2hex(options.encryption.aad) : ""}`); - return Promise.resolve(returnValue); } catch (e) { - console.log("FKM: error during encryption", e); + agentContext.config.logger.error(`EKM: Error during encryption: ${e}`); throw e; } } public decrypt(agentContext: AgentContext, options: KmsDecryptOptions): Promise { + agentContext.config.logger.debug(`EKM: Decrypting data with key id ${options.key.keyId} using options ${options}`); throw new Error("Method not implemented."); } public randomBytes(agentContext: AgentContext, options: KmsRandomBytesOptions): KmsRandomBytesReturn { + agentContext.config.logger.debug(`EKM: Generating ${options.length} random bytes`); return _sodium.randombytes_buf(options.length); // Uint8Array } } diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 2ace583f7..847178696 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -1,7 +1,4 @@ -/* eslint-disable no-console */ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { AgentContext, BaseRecord, BaseRecordConstructor, injectable, JsonTransformer, Query, QueryOptions, StorageService } from "@credo-ts/core"; - import { IdentityAttribute } from "@nmshd/content"; import { CoreId } from "@nmshd/core-types"; import { AccountController } from "@nmshd/transport"; @@ -28,7 +25,8 @@ export class EnmeshedStorageService implements StorageServ const value = JsonTransformer.serialize(record); const owner = this.accountController.identity.address; - console.log("FFS: Saving record", record); + agentContext.config.logger.debug(`Saving record with id ${record.id} and value ${value}`); + // TODO: remove hard coded components const identityAttribute = IdentityAttribute.from({ value: { "@type": "VerifiableCredential", @@ -43,13 +41,13 @@ export class EnmeshedStorageService implements StorageServ const result = await this.attributeController.createRepositoryAttribute({ content: identityAttribute }); - console.log("FFS: Saved record", JSON.stringify(result)); + agentContext.config.logger.debug(`Saved record: ${JSON.stringify(result)}`); return await Promise.resolve(); } // TODO: remove coreid public async update(agentContext: AgentContext, record: T): Promise { - console.log("FFS: Updating record", record); + agentContext.config.logger.debug(`Updating record with id ${record.id}`); const value = JsonTransformer.serialize(record); const owner = this.accountController.identity.address; const oldAttribute = await this.attributeController.getLocalAttribute(CoreId.from(record.id)); @@ -73,7 +71,7 @@ export class EnmeshedStorageService implements StorageServ } public async delete(agentContext: AgentContext, record: T): Promise { - console.log("FFS: Deleting record", record); + agentContext.config.logger.debug(`Deleting record with id ${record.id}`); const attribute = await this.attributeController.getLocalAttribute(CoreId.from(record.id)); if (attribute === undefined) { throw new Error(`Attribute with id ${record.id} not found`); @@ -83,7 +81,7 @@ export class EnmeshedStorageService implements StorageServ // TODO: remove coreid public async deleteById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { - console.log("FFS: Deleting record by id", id); + agentContext.config.logger.debug(`Deleting record with id ${id} - with record class ${recordClass.name}`); const attribute = await this.attributeController.getLocalAttribute(CoreId.from(id)); if (attribute === undefined) { throw new Error(`Attribute with id ${id} not found`); @@ -98,7 +96,7 @@ export class EnmeshedStorageService implements StorageServ return record; } - console.log("FFS: Getting record by id", id); + agentContext.config.logger.debug(`Getting record with id ${id}`); const attribute = await this.attributeController.getLocalAttribute(CoreId.from(id)); // parse the value field of attribute as JSON into T if (attribute === undefined) { @@ -109,24 +107,22 @@ export class EnmeshedStorageService implements StorageServ } public async getAll(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { - console.log("FFS: Getting all records"); const records: T[] = []; const attributes = await this.attributeController.getLocalAttributes(); - console.log(`FFS: Found ${attributes.length} local attributes`); + agentContext.config.logger.debug(`Getting all records, found ${attributes.length} attributes`); for (const attribute of attributes) { - console.log("FFS: Processing attribute", JsonTransformer.serialize(attribute)); const record = JsonTransformer.deserialize((attribute.content.value as any).value, recordClass); + // ToDo: think about how to handle this for different record types if (record.type !== "SdJwtVcRecord") { continue; } records.push(record); } - console.log(`FFS: Actually found ${attributes.length} local attributes`); return records; } public async findByQuery(agentContext: AgentContext, recordClass: BaseRecordConstructor, query: Query, queryOptions?: QueryOptions): Promise { - console.log("FFS: Finding records by query", query); + agentContext.config.logger.debug(`Finding records by query ${JSON.stringify(query)} and options ${JSON.stringify(queryOptions)}`); const records: T[] = []; for (const record of await this.getAll(agentContext, recordClass)) { let match = true; @@ -145,27 +141,9 @@ export class EnmeshedStorageService implements StorageServ for (const record of this.storrage.values()) { let match = true; // there may be keys labeled with an $or - solve them accordingly + // TODO: update this to handle $or and other operators for (const [key, value] of Object.entries(query)) { - if (key === "$or" && Array.isArray(value)) { - let orMatch = false; - for (const orCondition of value) { - let conditionMatch = true; - for (const [orKey, orValue] of Object.entries(orCondition)) { - if ((record as any)[orKey] !== orValue) { - conditionMatch = false; - break; - } - } - if (conditionMatch) { - orMatch = true; - break; - } - } - if (!orMatch) { - match = false; - break; - } - } else if ((record as any)[key] !== value) { + if ((record as any)[key] !== value) { match = false; break; } @@ -175,7 +153,6 @@ export class EnmeshedStorageService implements StorageServ } } } - console.log(`FFS: Found ${records.length} records by query`); return records; } } diff --git a/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts b/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts index 8190b1abe..c558b18aa 100644 --- a/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts +++ b/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts @@ -2,15 +2,13 @@ import { AgentDependencies } from "@credo-ts/core"; import { EventEmitter } from "events"; import WebSocket from "ws"; -import { FakeFileSystem } from "./FakeFileSystem"; -// Example fetch implementation (using node-fetch or global fetch) -const fetchImpl = globalThis.fetch; +import { EnmeshedHolderFileSystem } from "./EnmeshedHolderFileSystem"; -// Example WebSocket implementation (using ws) +const fetchImpl = globalThis.fetch; const webSocketImpl = WebSocket; export const agentDependencies: AgentDependencies = { - FileSystem: FakeFileSystem, + FileSystem: EnmeshedHolderFileSystem, EventEmitterClass: EventEmitter, fetch: fetchImpl, WebSocketClass: webSocketImpl From 1df498aa57f9af6251d952feff2b295c13710075 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 1 Oct 2025 11:58:43 +0200 Subject: [PATCH 28/75] chore: additional cleanup please adapt holder and baseAgent to credo version bump --- .../modules/openid4vc/OpenId4VcController.ts | 113 ++++-------------- .../src/modules/openid4vc/local/BaseAgent.ts | 30 ++--- .../src/modules/openid4vc/local/Holder.ts | 106 ++++++++-------- 3 files changed, 84 insertions(+), 165 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index cc4ce5c0d..1a09ff0b3 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; @@ -13,7 +12,6 @@ export class OpenId4VcController extends ConsumptionBaseController { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOfferUrl); - console.log("Fetched credential offer:", res); return { data: JSON.stringify(res) }; @@ -24,108 +22,47 @@ export class OpenId4VcController extends ConsumptionBaseController { await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const credentialOffer = JSON.parse(fetchedCredentialOffer); const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: requestedCredentialOffers, txCode: pinCode }); - console.log("Fetched credentials:", credentials); return { status: "success", message: "Credential offer processed successfully", data: JSON.stringify(credentials), + // multi credentials not supported yet id: credentials.length > 0 ? credentials[0].id : undefined }; } public async processCredentialOffer(credentialOffer: string): Promise { - try { - const holder = new Holder(this.parent.accountController, this.parent.attributes); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const res = await holder.resolveCredentialOffer(credentialOffer); - const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); - - return { - status: "success", - message: "Credential offer processed successfully", - data: JSON.stringify(credentials) - }; - } catch (error) { - let errorMessage = "Unknown error"; - let errorStack = ""; - - if (error instanceof Error) { - errorMessage = error.message; - errorStack = error.stack ?? ""; - } else if (typeof error === "string") { - errorMessage = error; - } else { - errorMessage = JSON.stringify(error); - } + const holder = new Holder(this.parent.accountController, this.parent.attributes); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + const res = await holder.resolveCredentialOffer(credentialOffer); + const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); - return { - status: "error", - message: `Failed to process credential offer: ${errorMessage}`, - data: JSON.stringify(errorStack) - }; - } + return { + status: "success", + message: "Credential offer processed successfully", + data: JSON.stringify(credentials) + }; } public async fetchProofRequest(proofRequestUrl: string): Promise { - try { - const holder = new Holder(this.parent.accountController, this.parent.attributes); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const res = await holder.resolveProofRequest(proofRequestUrl); - console.log("Fetched proof request:", res); - return { - data: JSON.stringify(res) - }; - } catch (error) { - let errorMessage = "Unknown error"; - let errorStack = ""; - - if (error instanceof Error) { - errorMessage = error.message; - errorStack = error.stack ?? ""; - } else if (typeof error === "string") { - errorMessage = error; - } else { - errorMessage = JSON.stringify(error); - } - - return { - status: "error", - message: `Failed to fetch proof request: ${errorMessage}`, - data: JSON.stringify(errorStack) - }; - } + const holder = new Holder(this.parent.accountController, this.parent.attributes); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + const res = await holder.resolveProofRequest(proofRequestUrl); + return { + data: JSON.stringify(res) + }; } public async acceptProofRequest(jsonEncodedRequest: string): Promise { - try { - const holder = new Holder(this.parent.accountController, this.parent.attributes); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const fetchedRequest = JSON.parse(jsonEncodedRequest); - // parse the credential type to be sdjwt - - const serverResponse = await holder.acceptPresentationRequest(fetchedRequest); - console.log("Created proof:", JSON.stringify(serverResponse)); - return { - status: serverResponse.status, - message: serverResponse.body - }; - } catch (error) { - let errorMessage = "Unknown error"; - let errorStack = ""; + const holder = new Holder(this.parent.accountController, this.parent.attributes); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + const fetchedRequest = JSON.parse(jsonEncodedRequest); + // parse the credential type to be sdjwt - if (error instanceof Error) { - errorMessage = error.message; - errorStack = error.stack ?? ""; - } else if (typeof error === "string") { - errorMessage = error; - } else { - errorMessage = JSON.stringify(error); - } - return { - status: "error", - message: `Failed to process proof request: ${errorMessage}`, - data: JSON.stringify(errorStack) - }; - } + const serverResponse = await holder.acceptPresentationRequest(fetchedRequest); + return { + status: serverResponse.status, + message: serverResponse.body + }; } } diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index becfe0361..fb9a5f7d6 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -1,21 +1,21 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars import { Agent, ConsoleLogger, DependencyManager, DidKey, InjectionSymbols, - KeyDidCreateOptions, LogLevel, type InitConfig, + type KeyDidCreateOptions, type ModulesMap, type VerificationMethod } from "@credo-ts/core"; import { KeyManagementModuleConfig } from "@credo-ts/core/build/modules/kms"; import { AccountController } from "@nmshd/transport"; -import { JsonWebKey } from "crypto"; import { AttributesController } from "../../attributes"; +import { EnmshedHolderKeyManagmentService } from "./EnmeshedHolderKeyManagmentService"; import { EnmeshedStorageService } from "./EnmeshedStorageService"; -import { FakeKeyManagmentService } from "./FakeKeyManagmentService"; import { agentDependencies } from "./LocalAgentDependencies"; export class BaseAgent { @@ -25,7 +25,6 @@ export class BaseAgent { public didKey!: DidKey; public kid!: string; public verificationMethod!: VerificationMethod; - private readonly keyStorage: Map = new Map(); public constructor( public readonly port: number, @@ -38,7 +37,6 @@ export class BaseAgent { this.port = port; const config = { - label: name, allowInsecureHttpUrls: true, logger: new ConsoleLogger(LogLevel.off) } satisfies InitConfig; @@ -47,14 +45,8 @@ export class BaseAgent { this.accountController = accountController; this.attributeController = attributeController; - const dependencyManager = new DependencyManager(); dependencyManager.registerInstance(InjectionSymbols.StorageService, new EnmeshedStorageService(accountController, attributeController)); - // dependencyManager.registerInstance(InjectionSymbols.StorageUpdateService, new FakeStorageService()); - if (!dependencyManager.isRegistered(InjectionSymbols.StorageService)) { - // eslint-disable-next-line no-console - console.log("StorageService not registered!!!"); - } this.agent = new Agent( { config, @@ -63,30 +55,24 @@ export class BaseAgent { }, dependencyManager ); + // only register the storrage service after the agent has been created + this.agent.dependencyManager.registerInstance(InjectionSymbols.StorageService, new EnmeshedStorageService(accountController, attributeController)); } - // eslint-disable-next-line @typescript-eslint/no-unused-vars public async initializeAgent(privateKey: string): Promise { // as we are not using askar we need to set the storage version const storrage = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); const versionRecord = { id: "STORAGE_VERSION_RECORD_ID", storageVersion: "0.5.0", value: "0.5.0" }; await storrage.save(this.agent.context, versionRecord); - // as we are not using askar we need to setup our own key management service + const kmsConfig = this.agent.dependencyManager.resolve(KeyManagementModuleConfig); - // TODO: think about adding the local key storrage to the FakeKMS constructor - kmsConfig.registerBackend(new FakeKeyManagmentService()); + kmsConfig.registerBackend(new EnmshedHolderKeyManagmentService()); if (kmsConfig.backends.length === 0) throw new Error("No KMS backend registered"); await this.agent.initialize(); - // create a uuid based key id - const keyId = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { - const r = (Math.random() * 16) | 0; - const v = c === "x" ? r : (r & 0x3) | 0x8; - return v.toString(16); - }); - + const keyId = privateKey; const didCreateResult = await this.agent.dids.create({ method: "key", options: { diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 0431a1451..cf39957f2 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -1,18 +1,7 @@ /* eslint-disable no-console */ +import { ClaimFormat, DidJwk, DidKey, JwkDidCreateOptions, KeyDidCreateOptions, Kms, Mdoc, MdocRecord, SdJwtVcRecord, X509Module } from "@credo-ts/core"; import { - DidJwk, - DidKey, - JwkDidCreateOptions, - KeyDidCreateOptions, - Kms, - Mdoc, - SdJwtVcRecord, - W3cJsonLdVerifiableCredential, - W3cJwtVerifiableCredential, - X509Module -} from "@credo-ts/core"; -import { - OpenId4VcHolderModule, + OpenId4VcModule, OpenId4VciAuthorizationFlow, authorizationCodeGrantIdentifier, preAuthorizedCodeGrantIdentifier, @@ -26,10 +15,10 @@ import { BaseAgent } from "./BaseAgent"; function getOpenIdHolderModules() { return { - openId4VcHolder: new OpenId4VcHolderModule(), + openid4vc: new OpenId4VcModule(), x509: new X509Module({ - getTrustedCertificatesForVerification: (_agentContext, { certificateChain }) => { - // console.log(greenText(`dyncamically trusting certificate ${certificateChain[0].getIssuerNameField("C")} for verification of ${verification.type}`, true)); + getTrustedCertificatesForVerification: (_agentContext, { certificateChain, verification }) => { + console.log(`dyncamically trusting certificate ${certificateChain[0].getIssuerNameField("C")} for verification of ${verification.type}`); return [certificateChain[0].toString("pem")]; } }) @@ -47,11 +36,11 @@ export class Holder extends BaseAgent> } public async resolveCredentialOffer(credentialOffer: string): Promise { - return await this.agent.modules.openId4VcHolder.resolveCredentialOffer(credentialOffer); + return await this.agent.openid4vc.holder.resolveCredentialOffer(credentialOffer); } public async resolveIssuerMetadata(credentialIssuer: string): Promise { - return await this.agent.modules.openId4VcHolder.resolveIssuerMetadata(credentialIssuer); + return await this.agent.openid4vc.holder.resolveIssuerMetadata(credentialIssuer); } public async initiateAuthorization(resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, credentialsToRequest: string[]): Promise { @@ -64,7 +53,7 @@ export class Holder extends BaseAgent> } as const; } if (resolvedCredentialOffer.credentialOfferPayload.grants?.[authorizationCodeGrantIdentifier]) { - const resolvedAuthorizationRequest = await this.agent.modules.openId4VcHolder.resolveOpenId4VciAuthorizationRequest(resolvedCredentialOffer, { + const resolvedAuthorizationRequest = await this.agent.openid4vc.holder.resolveOpenId4VciAuthorizationRequest(resolvedCredentialOffer, { clientId: this.client.clientId, redirectUri: this.client.redirectUri, scope: Object.entries(resolvedCredentialOffer.offeredCredentialConfigurations) @@ -98,7 +87,7 @@ export class Holder extends BaseAgent> txCode?: string; } ): Promise { - const tokenResponse = await this.agent.modules.openId4VcHolder.requestToken( + const tokenResponse = await this.agent.openid4vc.holder.requestToken( options.code && options.clientId ? { resolvedCredentialOffer, @@ -115,7 +104,7 @@ export class Holder extends BaseAgent> console.log("Token response:", JSON.stringify(tokenResponse)); - const credentialResponse = await this.agent.modules.openId4VcHolder.requestCredentials({ + const credentialResponse = await this.agent.openid4vc.holder.requestCredentials({ resolvedCredentialOffer, clientId: options.clientId, credentialConfigurationIds: options.credentialsToRequest, @@ -167,15 +156,15 @@ export class Holder extends BaseAgent> const storedCredentials = await Promise.all( credentialResponse.credentials.map((response) => { - // TODO: handle batch issuance + // TODO: batch issuance not yet supported const credential = response.credentials[0]; - if (credential instanceof W3cJwtVerifiableCredential || credential instanceof W3cJsonLdVerifiableCredential) { - return this.agent.w3cCredentials.storeCredential({ credential }); + if (credential.claimFormat === ClaimFormat.MsoMdoc) { + return this.agent.mdoc.store(Mdoc.fromBase64Url(credential.base64Url)); } - if (credential instanceof Mdoc) { - return this.agent.mdoc.store(credential); + if (credential.claimFormat === ClaimFormat.SdJwtDc) { + return this.agent.sdJwtVc.store(credential.compact); } - return this.agent.sdJwtVc.store(credential.compact); + throw new Error("Unsupported credential format"); }) ); @@ -185,7 +174,7 @@ export class Holder extends BaseAgent> } public async resolveProofRequest(proofRequest: string): Promise { - const resolvedProofRequest = await this.agent.modules.openId4VcHolder.resolveOpenId4VpAuthorizationRequest(proofRequest); + const resolvedProofRequest = await this.agent.openid4vc.holder.resolveOpenId4VpAuthorizationRequest(proofRequest); return resolvedProofRequest; } @@ -194,44 +183,51 @@ export class Holder extends BaseAgent> if (!resolvedPresentationRequest.presentationExchange && !resolvedPresentationRequest.dcql) { throw new Error("Missing presentation exchange or dcql on resolved authorization request"); } - // TODO: This is but a temporary fix... it shall not remain ... but be handled prroperly in this step - if (resolvedPresentationRequest.presentationExchange) { - console.log("Hunt1"); - console.log( - JSON.stringify(resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord) - ); - // cast the credentialRecord to be a SdJwtVcRecord - const record123 = resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0] - .credentialRecord as SdJwtVcRecord; - - const record = new SdJwtVcRecord({ - id: record123.id, - createdAt: record123.createdAt, - compactSdJwtVc: record123.compactSdJwtVc - // ...other required fields - }); - console.log("Hunt2"); - resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord = record; - - console.log(typeof resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord); - console.log( - resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord.encoded - ); + // This fix ensures that the credential records which have been loaded here actually do provide the encoded() method + // this issue arises as the records are loaded and then communicated to the app as a json object, losing the class prototype + if (resolvedPresentationRequest.presentationExchange) { + for (const requirementKey in resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements) { + const requirement = resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[requirementKey]; + for (const submissionEntry of requirement.submissionEntry) { + for (const vc of submissionEntry.verifiableCredentials) { + if (vc.claimFormat === ClaimFormat.SdJwtDc) { + const recordUncast = vc.credentialRecord; + const record = new SdJwtVcRecord({ + id: recordUncast.id, + createdAt: recordUncast.createdAt, + compactSdJwtVc: recordUncast.compactSdJwtVc + }); + vc.credentialRecord = record; + } else if (vc.claimFormat === ClaimFormat.MsoMdoc) { + const recordUncast = vc.credentialRecord; + const record = new MdocRecord({ + id: recordUncast.id, + createdAt: recordUncast.createdAt, + mdoc: Mdoc.fromBase64Url(recordUncast.base64Url) + }); + vc.credentialRecord = record; + } else { + // eslint-disable-next-line no-console + console.log("Unsupported credential format in demo app, only sd-jwt-vc is supported at the moment"); + } + } + } + } } - console.log("Hunt3"); - const submissionResult = await this.agent.modules.openId4VcHolder.acceptOpenId4VpAuthorizationRequest({ + + const submissionResult = await this.agent.openid4vc.holder.acceptOpenId4VpAuthorizationRequest({ authorizationRequestPayload: resolvedPresentationRequest.authorizationRequestPayload, presentationExchange: resolvedPresentationRequest.presentationExchange ? { - credentials: this.agent.modules.openId4VcHolder.selectCredentialsForPresentationExchangeRequest( + credentials: this.agent.openid4vc.holder.selectCredentialsForPresentationExchangeRequest( resolvedPresentationRequest.presentationExchange.credentialsForRequest ) } : undefined, dcql: resolvedPresentationRequest.dcql ? { - credentials: this.agent.modules.openId4VcHolder.selectCredentialsForDcqlRequest(resolvedPresentationRequest.dcql.queryResult) + credentials: this.agent.openid4vc.holder.selectCredentialsForDcqlRequest(resolvedPresentationRequest.dcql.queryResult) } : undefined }); From bc3975f6eb6e43d1e4f0ff64de017b6a244f08e9 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 1 Oct 2025 12:46:41 +0200 Subject: [PATCH 29/75] feat: remove hard coded information from --- .../modules/openid4vc/local/EnmeshedStorageService.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 847178696..7e91f4a82 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -18,6 +18,7 @@ export class EnmeshedStorageService implements StorageServ this.storrage.set(record.id, record); return; } + // TODO: add loading and storing like for the keystore if (record.type === "DidRecord") { this.storrage.set(record.id, record); return; @@ -26,13 +27,13 @@ export class EnmeshedStorageService implements StorageServ const value = JsonTransformer.serialize(record); const owner = this.accountController.identity.address; agentContext.config.logger.debug(`Saving record with id ${record.id} and value ${value}`); - // TODO: remove hard coded components + const identityAttribute = IdentityAttribute.from({ value: { "@type": "VerifiableCredential", value: value, - title: "Employee ID Card", - description: "An employee ID card credential", + title: (record as any).credential?.payload?.vct ?? "Credential", + description: JSON.stringify((record as any).credential?.payload ?? "No description"), credoId: record.id, type: typeof record }, @@ -45,7 +46,6 @@ export class EnmeshedStorageService implements StorageServ return await Promise.resolve(); } - // TODO: remove coreid public async update(agentContext: AgentContext, record: T): Promise { agentContext.config.logger.debug(`Updating record with id ${record.id}`); const value = JsonTransformer.serialize(record); @@ -141,7 +141,7 @@ export class EnmeshedStorageService implements StorageServ for (const record of this.storrage.values()) { let match = true; // there may be keys labeled with an $or - solve them accordingly - // TODO: update this to handle $or and other operators + // TODO: $or and other operators not yet supported for (const [key, value] of Object.entries(query)) { if ((record as any)[key] !== value) { match = false; From 3a0a753be66fddedee821c52a0159645cae22398 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 1 Oct 2025 12:50:23 +0200 Subject: [PATCH 30/75] fix: comments --- .../src/modules/openid4vc/local/EnmeshedStorageService.ts | 3 +-- packages/consumption/src/modules/openid4vc/local/Holder.ts | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 7e91f4a82..7878e70ac 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -18,7 +18,7 @@ export class EnmeshedStorageService implements StorageServ this.storrage.set(record.id, record); return; } - // TODO: add loading and storing like for the keystore + if (record.type === "DidRecord") { this.storrage.set(record.id, record); return; @@ -79,7 +79,6 @@ export class EnmeshedStorageService implements StorageServ await this.attributeController.deleteAttribute(attribute); } - // TODO: remove coreid public async deleteById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { agentContext.config.logger.debug(`Deleting record with id ${id} - with record class ${recordClass.name}`); const attribute = await this.attributeController.getLocalAttribute(CoreId.from(id)); diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index cf39957f2..95c78ca23 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -45,7 +45,6 @@ export class Holder extends BaseAgent> public async initiateAuthorization(resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, credentialsToRequest: string[]): Promise { const grants = resolvedCredentialOffer.credentialOfferPayload.grants; - // TODO: extend iniateAuthorization in oid4vci lib? Or not? if (grants?.[preAuthorizedCodeGrantIdentifier]) { return { authorizationFlow: "PreAuthorized", From 1e3b8ccf4b8d42db3f743a1352712947443d3caf Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 1 Oct 2025 13:23:47 +0200 Subject: [PATCH 31/75] chore: update npm version --- package-lock.json | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 57cf25db5..fd9dc901e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -206,6 +206,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -920,6 +921,7 @@ "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", "license": "MIT", + "peer": true, "engines": { "node": ">=14.16" }, @@ -2096,7 +2098,8 @@ "version": "5.6.3", "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.3.tgz", "integrity": "sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==", - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/@js-joda/timezone": { "version": "2.3.0", @@ -3708,6 +3711,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.10.0" } @@ -3832,6 +3836,7 @@ "integrity": "sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.40.0", @@ -3872,6 +3877,7 @@ "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.40.0", "@typescript-eslint/types": "8.40.0", @@ -4476,6 +4482,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5271,6 +5278,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001735", "electron-to-chromium": "^1.5.204", @@ -6605,16 +6613,6 @@ "dev": true, "license": "MIT" }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -6787,6 +6785,7 @@ "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -8489,6 +8488,7 @@ "integrity": "sha512-Ry+p2+NLk6u8Agh5yVqELfUJvRfV51hhVBRIB5yZPY7mU0DGBmOuFG5GebZbMbm86cdQNK0fhJuDX8/1YorISQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "30.1.3", "@jest/types": "30.0.5", @@ -9341,6 +9341,7 @@ "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -11281,6 +11282,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -12342,6 +12344,7 @@ "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" @@ -13260,6 +13263,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -13557,6 +13561,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -13714,6 +13719,7 @@ "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13750,7 +13756,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/typescript-logging/-/typescript-logging-2.2.0.tgz", "integrity": "sha512-mPKFGAgGJmeCqrzA6B64Lqoz6vLPtxa8yCd7sWAnfrz9opuNlxqW57VxjtEOL0OOoQeTdc/kBjGUh8sieBXa8A==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/typescript-logging-log4ts-style": { "version": "2.2.0", @@ -14546,7 +14553,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -14557,7 +14563,6 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "license": "BlueOak-1.0.0", - "peer": true, "engines": { "node": ">=18" } @@ -14567,7 +14572,6 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", "license": "ISC", - "peer": true, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -14584,7 +14588,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "license": "BlueOak-1.0.0", - "peer": true, "engines": { "node": ">=18" } @@ -14667,6 +14670,7 @@ "packages/runtime/node_modules/ajv": { "version": "8.17.1", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", From a816ba891286ffd89f96431c47848db5666678f4 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Wed, 1 Oct 2025 15:25:54 +0200 Subject: [PATCH 32/75] chore: remove credoId from verifiable credentialId --- package-lock.json | 104 +----------------- packages/consumption/package.json | 1 - .../openid4vc/local/EnmeshedStorageService.ts | 4 +- .../attributes/types/VerifiableCredential.ts | 6 - .../runtime/src/useCases/common/Schemas.ts | 28 ----- 5 files changed, 5 insertions(+), 138 deletions(-) diff --git a/package-lock.json b/package-lock.json index fd9dc901e..1ac6bace7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1592,6 +1592,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.4" @@ -8003,19 +8004,6 @@ "node": ">=10.17.0" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -9957,6 +9945,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -10096,6 +10085,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -12078,7 +12068,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/sass-lookup": { @@ -14479,7 +14469,6 @@ "name": "@nmshd/consumption", "license": "MIT", "dependencies": { - "@credo-ts/askar": "v0.6.0-alpha-20250919145226", "@credo-ts/core": "v0.6.0-alpha-20250919145226", "@credo-ts/openid4vc": "v0.6.0-alpha-20250919145226", "@js-soft/docdb-querytranslator": "^1.1.5", @@ -14507,91 +14496,6 @@ "ts-mockito": "^2.6.1" } }, - "packages/consumption/node_modules/@credo-ts/askar": { - "version": "0.6.0-alpha-20250919145226", - "resolved": "https://registry.npmjs.org/@credo-ts/askar/-/askar-0.6.0-alpha-20250919145226.tgz", - "integrity": "sha512-25ZLSi7QnbosKOfbKvjpPimSFbWDmspDEAkW+s272Bb2JRCQiFhKszgGBlcuWivlbLMh7wr8lmcDf5QPhZapfg==", - "license": "Apache-2.0", - "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250919145226", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "rxjs": "^7.8.2", - "tsyringe": "^4.10.0" - }, - "peerDependencies": { - "@openwallet-foundation/askar-shared": "^0.4.0" - } - }, - "packages/consumption/node_modules/@openwallet-foundation/askar-shared": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@openwallet-foundation/askar-shared/-/askar-shared-0.4.1.tgz", - "integrity": "sha512-r9xF68R+xYkalG0+6L+fcywo/87l29RuU1AtCSLFj3w0nKlzmxaK0HbJ4zvJjfVqvd+qglvn3HTFdUuKC/Pwrg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "buffer": "^6.0.3", - "tar": "^7.4.3" - } - }, - "packages/consumption/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "packages/consumption/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "packages/consumption/node_modules/tar": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", - "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "packages/consumption/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, "packages/content": { "name": "@nmshd/content", "license": "MIT", diff --git a/packages/consumption/package.json b/packages/consumption/package.json index 2af3b7c81..bb523a87f 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -59,7 +59,6 @@ } }, "dependencies": { - "@credo-ts/askar": "v0.6.0-alpha-20250919145226", "@credo-ts/core": "v0.6.0-alpha-20250919145226", "@credo-ts/openid4vc": "v0.6.0-alpha-20250919145226", "@js-soft/docdb-querytranslator": "^1.1.5", diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 7878e70ac..f1d46596c 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -34,7 +34,6 @@ export class EnmeshedStorageService implements StorageServ value: value, title: (record as any).credential?.payload?.vct ?? "Credential", description: JSON.stringify((record as any).credential?.payload ?? "No description"), - credoId: record.id, type: typeof record }, owner: owner @@ -58,8 +57,7 @@ export class EnmeshedStorageService implements StorageServ "@type": "VerifiableCredential", value: value, title: "Employee ID Card", - description: "An employee ID card credential", - credoId: record.id + description: "An employee ID card credential" }, owner: owner }); diff --git a/packages/content/src/attributes/types/VerifiableCredential.ts b/packages/content/src/attributes/types/VerifiableCredential.ts index e38d3edde..14c89eef3 100644 --- a/packages/content/src/attributes/types/VerifiableCredential.ts +++ b/packages/content/src/attributes/types/VerifiableCredential.ts @@ -7,14 +7,12 @@ export interface VerifiableCredentialJSON extends AbstractAttributeValueJSON { "@type": "VerifiableCredential"; title: string; description?: string; - credoId: string; value: unknown; } export interface IVerifiableCredential extends IAbstractAttributeValue { title: string; description?: string; - credoId: string; value: unknown; } @@ -24,10 +22,6 @@ export class VerifiableCredential extends AbstractAttributeValue { @validate({ max: PROPRIETARY_ATTRIBUTE_MAX_TITLE_LENGTH }) public title: string; - @serialize() - @validate({ max: PROPRIETARY_ATTRIBUTE_MAX_TITLE_LENGTH }) - public credoId: string; - @serialize() @validate({ nullable: true, max: PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH }) public description?: string; diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index 9ad69376e..24be566d0 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -2223,14 +2223,10 @@ export const CanCreateOutgoingRequestRequest: any = { "description": { "type": "string" }, - "credoId": { - "type": "string" - }, "value": {} }, "required": [ "@type", - "credoId", "title", "value" ], @@ -4706,14 +4702,10 @@ export const CompleteOutgoingRequestRequest: any = { "description": { "type": "string" }, - "credoId": { - "type": "string" - }, "value": {} }, "required": [ "@type", - "credoId", "title", "value" ], @@ -7186,14 +7178,10 @@ export const CreateAndCompleteOutgoingRequestFromRelationshipTemplateResponseReq "description": { "type": "string" }, - "credoId": { - "type": "string" - }, "value": {} }, "required": [ "@type", - "credoId", "title", "value" ], @@ -10280,14 +10268,10 @@ export const CreateOutgoingRequestRequest: any = { "description": { "type": "string" }, - "credoId": { - "type": "string" - }, "value": {} }, "required": [ "@type", - "credoId", "title", "value" ], @@ -13766,14 +13750,10 @@ export const ReceivedIncomingRequestRequest: any = { "description": { "type": "string" }, - "credoId": { - "type": "string" - }, "value": {} }, "required": [ "@type", - "credoId", "title", "value" ], @@ -18915,14 +18895,10 @@ export const SucceedRepositoryAttributeRequest: any = { "description": { "type": "string" }, - "credoId": { - "type": "string" - }, "value": {} }, "required": [ "@type", - "credoId", "title", "value" ], @@ -24278,14 +24254,10 @@ export const VerifiableCredential: any = { "description": { "type": "string" }, - "credoId": { - "type": "string" - }, "value": {} }, "required": [ "@type", - "credoId", "title", "value" ], From 43ec5e4b30a84cab8770e6014c522599e4349681 Mon Sep 17 00:00:00 2001 From: mkuhn Date: Thu, 2 Oct 2025 09:16:04 +0200 Subject: [PATCH 33/75] fix: make libsodium-wrappers a dependency --- package-lock.json | 4 +--- packages/consumption/package.json | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ac6bace7..01e89799b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9442,7 +9442,6 @@ "version": "0.7.15", "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.15.tgz", "integrity": "sha512-sZwRknt/tUpE2AwzHq3jEyUU5uvIZHtSssktXq7owd++3CSgn8RGrv6UZJJBpP7+iBghBqe7Z06/2M31rI2NKw==", - "dev": true, "license": "ISC" }, "node_modules/libsodium-sumo": { @@ -9455,7 +9454,6 @@ "version": "0.7.15", "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.15.tgz", "integrity": "sha512-E4anqJQwcfiC6+Yrl01C1m8p99wEhLmJSs0VQqST66SbQXXBoaJY0pF4BNjRYa/sOQAxx6lXAaAFIlx+15tXJQ==", - "dev": true, "license": "ISC", "dependencies": { "libsodium": "^0.7.15" @@ -14480,6 +14478,7 @@ "@nmshd/transport": "*", "@noble/ciphers": "^0.2.0", "jose": "^6.0.13", + "libsodium-wrappers": "^0.7.15", "lodash": "^4.17.21", "sjcl": "^1.0.8", "ts-simple-nameof": "^1.3.3", @@ -14492,7 +14491,6 @@ "@nmshd/crypto": "2.1.2", "@types/lodash": "^4.17.20", "@types/sjcl": "^1.0.34", - "libsodium-wrappers": "^0.7.9", "ts-mockito": "^2.6.1" } }, diff --git a/packages/consumption/package.json b/packages/consumption/package.json index bb523a87f..cbb485ebf 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -82,7 +82,6 @@ "@nmshd/crypto": "2.1.2", "@types/lodash": "^4.17.20", "@types/sjcl": "^1.0.34", - "libsodium-wrappers": "^0.7.9", "ts-mockito": "^2.6.1" }, "publishConfig": { From 6aae56d68811e3774cacc7a593d936f1ac95b5c2 Mon Sep 17 00:00:00 2001 From: mkuhn Date: Thu, 2 Oct 2025 11:35:08 +0200 Subject: [PATCH 34/75] fix: complete previous commit --- packages/consumption/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/consumption/package.json b/packages/consumption/package.json index cbb485ebf..a6dbf270e 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -70,6 +70,7 @@ "@nmshd/transport": "*", "@noble/ciphers": "^0.2.0", "jose": "^6.0.13", + "libsodium-wrappers": "^0.7.15", "lodash": "^4.17.21", "sjcl": "^1.0.8", "ts-simple-nameof": "^1.3.3", From 5aed849fdc43425e8c4bb06679a8ec40fe2814df Mon Sep 17 00:00:00 2001 From: mkuhn Date: Thu, 2 Oct 2025 13:41:09 +0200 Subject: [PATCH 35/75] chore: make tarballs --- .../nmshd-consumption-7.0.0-oid4vc.1.tgz | Bin 0 -> 227267 bytes .../content/nmshd-content-7.0.0-oid4vc.1.tgz | Bin 0 -> 138873 bytes .../runtime/nmshd-runtime-7.0.0-oid4vc.1.tgz | Bin 0 -> 352119 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/consumption/nmshd-consumption-7.0.0-oid4vc.1.tgz create mode 100644 packages/content/nmshd-content-7.0.0-oid4vc.1.tgz create mode 100644 packages/runtime/nmshd-runtime-7.0.0-oid4vc.1.tgz diff --git a/packages/consumption/nmshd-consumption-7.0.0-oid4vc.1.tgz b/packages/consumption/nmshd-consumption-7.0.0-oid4vc.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..54d8671687c4c5672c70e256204858f0d165b1be GIT binary patch literal 227267 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�P|(*I!U`rf#G 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 literal 0 HcmV?d00001 diff --git a/packages/content/nmshd-content-7.0.0-oid4vc.1.tgz b/packages/content/nmshd-content-7.0.0-oid4vc.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..0e195ce111b8ee4d729df1ff2ad03265ce78ed5c GIT binary patch literal 138873 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 IDFC7v00rGBA^-pY literal 0 HcmV?d00001 diff --git a/packages/runtime/nmshd-runtime-7.0.0-oid4vc.1.tgz b/packages/runtime/nmshd-runtime-7.0.0-oid4vc.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..cea3641513cfbd6df79de4d114861bf02fb350b6 GIT binary patch literal 352119 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ⅅ;?z|hc0{_ZrK;<+u;TVJcMr27yB7$=f0 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

~Ox(ruvlD9VlYXect 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�P|(*I!U`rf#G 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 diff --git a/packages/content/nmshd-content-7.0.0-oid4vc.1.tgz b/packages/content/nmshd-content-7.0.0-oid4vc.1.tgz deleted file mode 100644 index 0e195ce111b8ee4d729df1ff2ad03265ce78ed5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138873 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 IDFC7v00rGBA^-pY diff --git a/packages/runtime/nmshd-runtime-7.0.0-oid4vc.1.tgz b/packages/runtime/nmshd-runtime-7.0.0-oid4vc.1.tgz deleted file mode 100644 index cea3641513cfbd6df79de4d114861bf02fb350b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352119 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ⅅ;?z|hc0{_ZrK;<+u;TVJcMr27yB7$=f0 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

~Ox(ruvlD9VlYXect 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 Toz<&L0KT2L(;h}!3g-U+{?+;N From c676529660a9f8d78b8afd4622e16606a738f64e Mon Sep 17 00:00:00 2001 From: Timo Notheisen <65653426+tnotheis@users.noreply.github.com> Date: Tue, 11 Nov 2025 16:25:12 +0100 Subject: [PATCH 46/75] Run OID4VC tests on testcontainers instead of publicly available oid4vc-service instance (#832) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: Julian König --- .dev/compose.openid4vc.yml | 51 +++++ .dev/service-config.json | 23 +++ .github/workflows/test.yml | 12 ++ package-lock.json | 15 +- package.json | 4 +- packages/consumption/package.json | 4 +- .../openid4vc/local/LocalAgentDependencies.ts | 21 ++- packages/runtime/package.json | 2 +- .../test/consumption/openid4vc.test.ts | 175 +++++++++++------- packages/runtime/test/customMatchers.ts | 5 +- 10 files changed, 224 insertions(+), 88 deletions(-) create mode 100644 .dev/compose.openid4vc.yml create mode 100644 .dev/service-config.json diff --git a/.dev/compose.openid4vc.yml b/.dev/compose.openid4vc.yml new file mode 100644 index 000000000..9c43b6f9b --- /dev/null +++ b/.dev/compose.openid4vc.yml @@ -0,0 +1,51 @@ +name: runtime-oid4vc-tests + +services: + oid4vc-service: + image: ghcr.io/js-soft/openid4vc-service:1.1.14@sha256:d8601d031769f2ce850bcfcea32da839c0d444ed90ad6d345d85d9d864f1620a + ports: + - "9000:9000" + platform: linux/amd64 + environment: + authServer__baseUrl: "https://kc-openid4vc.is.enmeshed.eu/realms/enmeshed-openid4vci" + volumes: + - ./service-config.json:/usr/app/config.json + extra_hosts: + - "host.docker.internal:host-gateway" + depends_on: + - mongodb + networks: + - default + + connector: + image: ghcr.io/nmshd/connector:7.1.0-openid4vc.2@sha256:b8458560fa85b190485aa544d9db34ab7d0b6b7b88129eda487b723e201734f8 + environment: + CUSTOM_CONFIG_LOCATION: "/config.json" + transportLibrary__baseUrl: "http://consumer-api:8080" + transportLibrary__platformClientId: test + transportLibrary__platformClientSecret: test + transportLibrary__addressGenerationHostnameOverride: localhost + database__connectionString: mongodb://root:example@mongodb:27017 + infrastructure__httpServer__authentication__apiKey__keys__default__key: aVeryCoolApiKeyWith30CharactersOr+ + extra_hosts: + - "host.docker.internal:host-gateway" + depends_on: + - mongodb + networks: + - default + - local-test-backbone + + mongodb: + image: mongo@sha256:c23684919810f0341e58744987e4b1c510fb8becdae850217d2d04b6fa7605e7 + environment: + MONGO_INITDB_ROOT_USERNAME: root + MONGO_INITDB_ROOT_PASSWORD: example + networks: + - default + +networks: + default: + name: runtime-oid4vc-tests-network + local-test-backbone: + name: local-test-backbone + external: true diff --git a/.dev/service-config.json b/.dev/service-config.json new file mode 100644 index 000000000..b5757fa96 --- /dev/null +++ b/.dev/service-config.json @@ -0,0 +1,23 @@ +{ + "port": 9000, + "baseUrl": "http://127.0.0.1:9000", + "mongodb": { + "host": "mongodb", + "port": 27017, + "user": "root", + "password": "example" + }, + "connector": { + "baseUrl": "http://connector:80", + "apiKey": "aVeryCoolApiKeyWith30CharactersOr+" + }, + "customizing": { + "organization": { + "displayName": "js-soft AG", + "logoUrl": "http://127.0.0.1:9000/ui/img/js_soft.png" + } + }, + "cors": { + "origin": "*" + } +} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f5b65d675..09a35516d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -119,6 +119,12 @@ jobs: - uses: actions/checkout@v5 - name: Start Backbone run: npm run start:backbone + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_USER_FOR_OID4VC_SERVICE_PULL }} + password: ${{ secrets.GHCR_PAT_FOR_OID4VC_SERVICE_PULL }} - uses: actions/setup-node@v6 with: node-version: current @@ -141,6 +147,12 @@ jobs: - uses: actions/checkout@v5 - name: Start Backbone run: npm run start:backbone + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_USER_FOR_OID4VC_SERVICE_PULL }} + password: ${{ secrets.GHCR_PAT_FOR_OID4VC_SERVICE_PULL }} - uses: actions/setup-node@v6 with: node-version: current diff --git a/package-lock.json b/package-lock.json index ed750e103..45e0ace52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2259,8 +2259,13 @@ } }, "node_modules/@noble/ciphers": { - "version": "0.2.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-2.0.1.tgz", + "integrity": "sha512-xHK3XHPUW8DTAobU+G0XT+/w+JLM7/8k1UFdB5xg/zTFPnFCobhftzw8wl4Lw2aq/Rvir5pxfZV5fEazmeCJ2g==", "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, "funding": { "url": "https://paulmillr.com/funding/" } @@ -8452,7 +8457,9 @@ } }, "node_modules/jose": { - "version": "6.0.13", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.1.tgz", + "integrity": "sha512-GWSqjfOPf4cWOkBzw5THBjtGPhXKqYnfRBzh4Ni+ArTrQQ9unvmsA3oFLqaYKoKe5sjWmGu5wVKg9Ft1i+LQfg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -13219,8 +13226,8 @@ "@nmshd/core-types": "*", "@nmshd/iql": "^1.0.4", "@nmshd/transport": "*", - "@noble/ciphers": "^0.2.0", - "jose": "^6.0.13", + "@noble/ciphers": "^2.0.1", + "jose": "^6.1.1", "libsodium-wrappers": "^0.7.15", "lodash": "^4.17.21", "sjcl": "^1.0.8", diff --git a/package.json b/package.json index 5ed3a394e..2a1a6379e 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,10 @@ "lint:prettier": "prettier --check .", "lint:tsc": "npm run --workspaces lint:tsc", "outdated": "ncu -i && ncu -i --workspaces", - "start:backbone": "docker compose -f .dev/compose.backbone.yml up -d", + "start:backbone": "docker compose -f .dev/compose.backbone.yml up -d --wait", + "start:openid4vc": "docker compose -f .dev/compose.openid4vc.yml up -d --wait", "teardown:backbone": "docker compose -f .dev/compose.backbone.yml down -v", + "teardown:openid4vc": "docker compose -f .dev/compose.openid4vc.yml down -v", "test:teardown": "docker compose -f .dev/compose.yml down -fsv", "postinstall": "patch-package && echo 'Postinstall done.'" }, diff --git a/packages/consumption/package.json b/packages/consumption/package.json index 2539f7f25..356c5f6fc 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -68,8 +68,8 @@ "@nmshd/core-types": "*", "@nmshd/iql": "^1.0.4", "@nmshd/transport": "*", - "@noble/ciphers": "^0.2.0", - "jose": "^6.0.13", + "@noble/ciphers": "^2.0.1", + "jose": "^6.1.1", "libsodium-wrappers": "^0.7.15", "lodash": "^4.17.21", "sjcl": "^1.0.8", diff --git a/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts b/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts index c558b18aa..bbe2f0140 100644 --- a/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts +++ b/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts @@ -1,15 +1,22 @@ -/* eslint-disable @typescript-eslint/naming-convention */ import { AgentDependencies } from "@credo-ts/core"; import { EventEmitter } from "events"; -import WebSocket from "ws"; +import { Agent, fetch as undiciFetch } from "undici"; +import webSocket from "ws"; import { EnmeshedHolderFileSystem } from "./EnmeshedHolderFileSystem"; -const fetchImpl = globalThis.fetch; -const webSocketImpl = WebSocket; - export const agentDependencies: AgentDependencies = { + // eslint-disable-next-line @typescript-eslint/naming-convention FileSystem: EnmeshedHolderFileSystem, + // eslint-disable-next-line @typescript-eslint/naming-convention EventEmitterClass: EventEmitter, - fetch: fetchImpl, - WebSocketClass: webSocketImpl + fetch: (async (input, init) => { + const response = await undiciFetch(input as any, { + ...(init as any), + dispatcher: new Agent({}) + }); + + return response; + }) as typeof fetch, + // eslint-disable-next-line @typescript-eslint/naming-convention + WebSocketClass: webSocket }; diff --git a/packages/runtime/package.json b/packages/runtime/package.json index c68777e3b..6ae5b82e4 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -25,7 +25,7 @@ "test:ci:lokijs": "USE_LOKIJS=true jest -i --coverage", "test:ci:mongodb": "jest -i --coverage", "test:local:ferretdb": "npm run test:local:start:ferretdb && CONNECTION_STRING='mongodb://root:example@localhost:27022' jest", - "test:local:lokijs": "USE_LOKIJS=true jest -- openid4vc.test.ts", + "test:local:lokijs": "USE_LOKIJS=true jest", "test:local:mongodb": "npm run test:local:start:mongodb && CONNECTION_STRING='mongodb://root:example@localhost:27021' jest", "test:local:start:ferretdb": "docker compose -f ../../.dev/compose.yml up -d runtime-ferret", "test:local:start:mongodb": "docker compose -f ../../.dev/compose.yml up -d runtime-mongo", diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 4308c7b8e..9be73d6fd 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -1,36 +1,56 @@ -/* eslint-disable @typescript-eslint/naming-convention */ +import axios, { AxiosInstance } from "axios"; +import path from "path"; +import { DockerComposeEnvironment, StartedDockerComposeEnvironment, Wait } from "testcontainers"; import { ConsumptionServices } from "../../src"; import { RuntimeServiceProvider } from "../lib"; const runtimeServiceProvider = new RuntimeServiceProvider(); let consumptionServices: ConsumptionServices; +let axiosInstance: AxiosInstance; +let dockerComposeStack: StartedDockerComposeEnvironment | undefined; beforeAll(async () => { const runtimeServices = await runtimeServiceProvider.launch(1); consumptionServices = runtimeServices[0].consumption; -}, 30000); -afterAll(async () => await runtimeServiceProvider.stop()); + let oid4vcServiceBaseUrl = process.env.OPENID4VC_SERVICE_BASEURL!; + if (!oid4vcServiceBaseUrl) { + dockerComposeStack = await startOid4VcComposeStack(); + const mappedPort = dockerComposeStack.getContainer("oid4vc-service-1").getMappedPort(9000); + oid4vcServiceBaseUrl = `http://localhost:${mappedPort}`; + } + + axiosInstance = axios.create({ + baseURL: oid4vcServiceBaseUrl, + headers: { + "Content-Type": "application/json" // eslint-disable-line @typescript-eslint/naming-convention + } + }); +}, 120000); + +afterAll(async () => { + await runtimeServiceProvider.stop(); + if (dockerComposeStack) await dockerComposeStack.down(); +}); describe("OpenID4VCI and OpenID4VCP", () => { let credentialOfferUrl: string; test("should process a given credential offer", async () => { - const response = await fetch(`https://openid4vc-service.is.enmeshed.eu/issuance/credentialOffers`, { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - credentialConfigurationIds: ["EmployeeIdCard-sdjwt"] - }) + const response = await axiosInstance.post("/issuance/credentialOffers", { + credentialConfigurationIds: ["EmployeeIdCard-sdjwt"] }); - const data = await response.json(); - credentialOfferUrl = data.result.credentialOffer; + expect(response.status).toBe(200); + const responseData = await response.data; + + credentialOfferUrl = responseData.result.credentialOffer; + const result = await consumptionServices.openId4Vc.fetchCredentialOffer({ credentialOfferUrl }); + expect(result).toBeSuccessful(); + // analogously to the app code all presented credentials are accepted const jsonRepresentation = result.value.jsonRepresentation; const credentialOfferDecoded = JSON.parse(jsonRepresentation); @@ -47,99 +67,110 @@ describe("OpenID4VCI and OpenID4VCP", () => { data: jsonRepresentation, requestedCredentials: requestedCredentials }); - - const status = acceptanceResult.isSuccess; - expect(status).toBe(true); + expect(acceptanceResult).toBeSuccessful(); expect(typeof acceptanceResult.value.id).toBe("string"); }, 10000000); test("should be able to process a given credential presentation", async () => { - // Ensure the first test has completed and credentialOfferUrl is set + // Ensure the first test has completed expect(credentialOfferUrl).toBeDefined(); - const response = await fetch(`https://openid4vc-service.is.enmeshed.eu/presentation/presentationRequests`, { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - pex: { - id: "anId", - purpose: "To prove you work here", - input_descriptors: [ - { - id: "EmployeeIdCard", - format: { - "vc+sd-jwt": { - "sd-jwt_alg_values": [ - "RS256", - "PS256", - "HS256", - "ES256", - "ES256K", - "RS384", - "PS384", - "HS384", - "ES384", - "RS512", - "PS512", - "HS512", - "ES512", - "EdDSA" - ] - } - }, - constraints: { - fields: [ - { - path: ["$.vct"], - filter: { - type: "string", - pattern: "EmployeeIdCard" - } - } - ] + const response = await axiosInstance.post("/presentation/presentationRequests", { + pex: { + id: "anId", + purpose: "To prove you work here", + // eslint-disable-next-line @typescript-eslint/naming-convention + input_descriptors: [ + { + id: "EmployeeIdCard", + format: { + // eslint-disable-next-line @typescript-eslint/naming-convention + "vc+sd-jwt": { + // eslint-disable-next-line @typescript-eslint/naming-convention + "sd-jwt_alg_values": ["RS256", "PS256", "HS256", "ES256", "ES256K", "RS384", "PS384", "HS384", "ES384", "RS512", "PS512", "HS512", "ES512", "EdDSA"] } + }, + constraints: { + fields: [ + { + path: ["$.vct"], + filter: { + type: "string", + pattern: "EmployeeIdCard" + } + } + ] } - ] - }, - version: "v1.draft21" - }) + } + ] + }, + version: "v1.draft21" }); - const data = await response.json(); + expect(response.status).toBe(200); + const responseData = await response.data; + const result = await consumptionServices.openId4Vc.fetchProofRequest({ - proofRequestUrl: data.result.presentationRequest + proofRequestUrl: responseData.result.presentationRequest }); const jsonRepresentation = result.value.jsonRepresentation; - // parse json and determine if requirements Satisfied is true const proofRequest = JSON.parse(jsonRepresentation); expect(proofRequest.presentationExchange.credentialsForRequest.areRequirementsSatisfied).toBe(true); const presentationResult = await consumptionServices.openId4Vc.acceptProofRequest({ jsonEncodedRequest: jsonRepresentation }); + expect(presentationResult).toBeSuccessful(); expect(presentationResult.value.status).toBe(200); }, 10000000); test("getting all verifiable credentials should not return an empy list", async () => { - // Ensure the first test has completed and credentialOfferUrl is set + // Ensure the first test has completed expect(credentialOfferUrl).toBeDefined(); + const acceptanceResult = await consumptionServices.openId4Vc.getVerifiableCredentials(undefined); - expect(acceptanceResult.isError).toBe(false); + + expect(acceptanceResult).toBeSuccessful(); expect(acceptanceResult.value.length).toBeGreaterThan(0); }, 10000000); - test("getting the eralier created verifiable credential by id should return exactly one credential", async () => { - // Ensure the first test has completed and credentialOfferUrl is set + test("getting the earlier created verifiable credential by id should return exactly one credential", async () => { + // Ensure the first test has completed expect(credentialOfferUrl).toBeDefined(); + const allCredentialsResult = await consumptionServices.openId4Vc.getVerifiableCredentials(undefined); - expect(allCredentialsResult.isError).toBe(false); + expect(allCredentialsResult).toBeSuccessful(); expect(allCredentialsResult.value.length).toBeGreaterThan(0); + const firstCredentialId = allCredentialsResult.value[0].id; const singleCredentialResult = await consumptionServices.openId4Vc.getVerifiableCredentials([firstCredentialId]); - expect(singleCredentialResult.isError).toBe(false); + expect(singleCredentialResult).toBeSuccessful(); expect(singleCredentialResult.value).toHaveLength(1); expect(singleCredentialResult.value[0].id).toBe(firstCredentialId); }, 10000000); }); + +async function startOid4VcComposeStack() { + let baseUrl = process.env.NMSHD_TEST_BASEURL!; + let addressGenerationHostnameOverride: string | undefined; + + if (baseUrl.includes("localhost")) { + addressGenerationHostnameOverride = "localhost"; + baseUrl = baseUrl.replace("localhost", "host.docker.internal"); + } + + const composeFolder = path.resolve(path.join(__dirname, "..", "..", "..", "..", ".dev")); + const composeStack = await new DockerComposeEnvironment(composeFolder, "compose.openid4vc.yml") + .withProjectName("runtime-oid4vc-tests") + .withEnvironment({ + // eslint-disable-next-line @typescript-eslint/naming-convention + NMSHD_TEST_BASEURL: baseUrl, + // eslint-disable-next-line @typescript-eslint/naming-convention + NMSHD_TEST_ADDRESSGENERATIONHOSTNAMEOVERRIDE: addressGenerationHostnameOverride + } as Record) + .withStartupTimeout(60000) + .withWaitStrategy("oid4vc-service", Wait.forHealthCheck()) + .up(); + + return composeStack; +} diff --git a/packages/runtime/test/customMatchers.ts b/packages/runtime/test/customMatchers.ts index 7c003837a..fcc3f1015 100644 --- a/packages/runtime/test/customMatchers.ts +++ b/packages/runtime/test/customMatchers.ts @@ -9,7 +9,10 @@ expect.extend({ return { pass: actual.isSuccess, - message: () => `expected a successful result; got an error result with the error message '${actual.error.message}'.` + message: () => + actual.error.data + ? `expected a successful result; got an error result with the error code '${actual.error.code}', the error message '${actual.error.message}', and the following data: ${JSON.stringify(actual.error.data, null, 2)}.` + : `expected a successful result; got an error result with the error code '${actual.error.code}' and the error message '${actual.error.message}'.` }; }, From 4eb54e9477c765e9e826a7156f1f4771f9aab173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Tue, 11 Nov 2025 16:53:27 +0100 Subject: [PATCH 47/75] Cleanup package jsons (#840) * chore: undo changing to only test openid4vc tests locally * chore: remove added https package * chore: move @types declaration to package * chore: sort pjsons --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- package-lock.json | 9 +++------ package.json | 9 ++++----- packages/consumption/package.json | 1 + packages/runtime/package.json | 3 +-- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 45e0ace52..56eca46e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,6 @@ "@js-soft/eslint-config-ts": "^2.0.4", "@js-soft/license-check": "^1.0.10", "@types/jest": "^30.0.0", - "@types/libsodium-wrappers": "^0.7.14", "@types/node": "^24.10.0", "enhanced-publish": "^1.1.6", "eslint": "^9.39.1", @@ -3579,6 +3578,8 @@ }, "node_modules/@types/libsodium-wrappers": { "version": "0.7.14", + "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.14.tgz", + "integrity": "sha512-5Kv68fXuXK0iDuUir1WPGw2R9fOZUlYlSAa0ztMcL0s0BfIDTqg9GXz8K30VJpPP3sxWhbolnQma2x+/TfkzDQ==", "dev": true, "license": "MIT" }, @@ -7417,10 +7418,6 @@ "node": ">= 14" } }, - "node_modules/https": { - "version": "1.0.0", - "license": "ISC" - }, "node_modules/https-proxy-agent": { "version": "7.0.6", "dev": true, @@ -13239,6 +13236,7 @@ "@js-soft/docdb-access-mongo": "1.3.1", "@js-soft/node-logger": "1.2.1", "@nmshd/crypto": "2.1.3", + "@types/libsodium-wrappers": "^0.7.14", "@types/lodash": "^4.17.20", "@types/sjcl": "^1.0.34", "ts-mockito": "^2.6.1" @@ -13295,7 +13293,6 @@ "ajv-errors": "^3.0.0", "ajv-formats": "^3.0.1", "elliptic": "^6.6.1", - "https": "^1.0.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.21", "luxon": "^3.7.2", diff --git a/package.json b/package.json index 2a1a6379e..dbfc215c0 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "scripts": { "build:node": "tsc --build", "build:watch": "tsc --build -w", + "postinstall": "patch-package && echo 'Postinstall done.'", "lint": "npm run lint:eslint && npm run lint:prettier && npm run lint:tsc", "lint:eslint": "eslint", "lint:prettier": "prettier --check .", @@ -26,14 +27,12 @@ "start:openid4vc": "docker compose -f .dev/compose.openid4vc.yml up -d --wait", "teardown:backbone": "docker compose -f .dev/compose.backbone.yml down -v", "teardown:openid4vc": "docker compose -f .dev/compose.openid4vc.yml down -v", - "test:teardown": "docker compose -f .dev/compose.yml down -fsv", - "postinstall": "patch-package && echo 'Postinstall done.'" + "test:teardown": "docker compose -f .dev/compose.yml down -fsv" }, "devDependencies": { "@js-soft/eslint-config-ts": "^2.0.4", "@js-soft/license-check": "^1.0.10", "@types/jest": "^30.0.0", - "@types/libsodium-wrappers": "^0.7.14", "@types/node": "^24.10.0", "enhanced-publish": "^1.1.6", "eslint": "^9.39.1", @@ -41,11 +40,11 @@ "jest-expect-message": "^1.1.3", "madge": "^8.0.0", "npm-check-updates": "^19.1.2", + "patch-package": "^8.0.1", "prettier": "^3.6.2", "ts-jest": "^29.4.5", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.9.3", - "patch-package": "^8.0.1" + "typescript": "^5.9.3" } } diff --git a/packages/consumption/package.json b/packages/consumption/package.json index 356c5f6fc..b4c663df6 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -81,6 +81,7 @@ "@js-soft/docdb-access-mongo": "1.3.1", "@js-soft/node-logger": "1.2.1", "@nmshd/crypto": "2.1.3", + "@types/libsodium-wrappers": "^0.7.14", "@types/lodash": "^4.17.20", "@types/sjcl": "^1.0.34", "ts-mockito": "^2.6.1" diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 6ae5b82e4..9c0375a02 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -76,7 +76,6 @@ "ajv-errors": "^3.0.0", "ajv-formats": "^3.0.1", "elliptic": "^6.6.1", - "https": "^1.0.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.21", "luxon": "^3.7.2", @@ -84,10 +83,10 @@ "ts-simple-nameof": "^1.3.3" }, "devDependencies": { - "@types/elliptic": "^6.4.18", "@js-soft/docdb-access-loki": "1.3.1", "@js-soft/docdb-access-mongo": "1.3.1", "@js-soft/node-logger": "1.2.1", + "@types/elliptic": "^6.4.18", "@types/json-stringify-safe": "^5.0.3", "@types/lodash": "^4.17.20", "@types/luxon": "^3.7.1", From 16f10fe0f6450bb3786c9d644b3dd94645439dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Mon, 17 Nov 2025 12:34:54 +0100 Subject: [PATCH 48/75] Update naming and parameters of authorization requests (#848) * refactor: update runtime types * refactor: update consumption * refactor: update runtime * test: add tests for new behavior * refactor: change almost anything --- .../modules/openid4vc/OpenId4VcController.ts | 51 ++++++++++------ .../openid4vc/local/EnmeshedStorageService.ts | 4 +- .../src/modules/openid4vc/local/Holder.ts | 29 +++++---- .../AcceptedAuthorizationRequestDTO.ts | 4 ++ .../consumption/AcceptedProofRequestDTO.ts | 4 -- .../FetchedAuthorizationRequestDTO.ts | 6 ++ .../src/consumption/FetchedProofRequestDTO.ts | 3 - .../consumption/VerifiableCredentialDTO.ts | 2 +- .../runtime-types/src/consumption/index.ts | 4 +- .../facades/consumption/OpenId4VcFacade.ts | 26 ++++---- .../runtime/src/useCases/common/Schemas.ts | 60 +++++++++---------- .../openid4vc/AcceptAuthorizationRequest.ts | 30 ++++++++++ .../openid4vc/AcceptProofRequestUseCase.ts | 29 --------- ...fferUseCase.ts => FetchCredentialOffer.ts} | 0 .../openid4vc/FetchProofRequestUseCase.ts | 29 --------- ...UseCase.ts => GetVerifiableCredentials.ts} | 2 +- .../openid4vc/ResolveAuthorizationRequest.ts | 30 ++++++++++ ...erUseCase.ts => ResolveCredentialOffer.ts} | 0 ...UseCase.ts => ResolveFetchedCredential.ts} | 0 .../useCases/consumption/openid4vc/index.ts | 11 ++-- .../test/consumption/openid4vc.test.ts | 29 ++++----- 21 files changed, 186 insertions(+), 167 deletions(-) create mode 100644 packages/runtime-types/src/consumption/AcceptedAuthorizationRequestDTO.ts delete mode 100644 packages/runtime-types/src/consumption/AcceptedProofRequestDTO.ts create mode 100644 packages/runtime-types/src/consumption/FetchedAuthorizationRequestDTO.ts delete mode 100644 packages/runtime-types/src/consumption/FetchedProofRequestDTO.ts create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts delete mode 100644 packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts rename packages/runtime/src/useCases/consumption/openid4vc/{FetchCredentialOfferUseCase.ts => FetchCredentialOffer.ts} (100%) delete mode 100644 packages/runtime/src/useCases/consumption/openid4vc/FetchProofRequestUseCase.ts rename packages/runtime/src/useCases/consumption/openid4vc/{GetVerifiableCredentialsUseCase.ts => GetVerifiableCredentials.ts} (94%) create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts rename packages/runtime/src/useCases/consumption/openid4vc/{ResolveCredentialOfferUseCase.ts => ResolveCredentialOffer.ts} (100%) rename packages/runtime/src/useCases/consumption/openid4vc/{ResolveFetchedCredentialUseCase.ts => ResolveFetchedCredential.ts} (100%) diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 3ed6bd2a0..5049ba53e 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,3 +1,5 @@ +import { ClaimFormat } from "@credo-ts/core"; +import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { VerifiableCredential } from "@nmshd/content"; import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; @@ -58,41 +60,56 @@ export class OpenId4VcController extends ConsumptionBaseController { }; } - public async fetchProofRequest(proofRequestUrl: string): Promise<{ data: string }> { + public async resolveAuthorizationRequest( + requestUrl: string + ): Promise<{ authorizationRequest: OpenId4VpResolvedAuthorizationRequest; usedCredentials: { id: string; data: string; type: string; displayInformation?: string }[] }> { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const res = await holder.resolveProofRequest(proofRequestUrl); + const authorizationRequest = await holder.resolveAuthorizationRequest(requestUrl); + + // TODO: extract DTOs + + const matchedCredentialsSdJwtVc = authorizationRequest.presentationExchange?.credentialsForRequest.requirements + .map((entry) => + entry.submissionEntry + .map((subEntry) => subEntry.verifiableCredentials.filter((vc) => vc.claimFormat === ClaimFormat.SdJwtDc).map((vc) => vc.credentialRecord.compactSdJwtVc)) + .flat() + ) + .flat(); + + const allCredentials = await this.getVerifiableCredentials(); + + const usedCredentials = allCredentials.filter((credential) => matchedCredentialsSdJwtVc?.includes(credential.data)); + return { - data: JSON.stringify(res) + authorizationRequest, + usedCredentials }; } - public async acceptProofRequest(jsonEncodedRequest: string): Promise<{ status: number; message: string | Record | null }> { + public async acceptAuthorizationRequest( + authorizationRequest: OpenId4VpResolvedAuthorizationRequest + ): Promise<{ status: number; message: string | Record | null }> { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const fetchedRequest = JSON.parse(jsonEncodedRequest); // parse the credential type to be sdjwt - const serverResponse = await holder.acceptPresentationRequest(fetchedRequest); + const serverResponse = await holder.acceptAuthorizationRequest(authorizationRequest); if (!serverResponse) throw new Error("No response from server"); return { status: serverResponse.status, message: serverResponse.body }; } - public async getVerifiableCredentials(ids: string[] | undefined): Promise { + public async getVerifiableCredentials(ids?: string[]): Promise<{ id: string; data: string; type: string; displayInformation?: string }[]> { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const credentials = await holder.getVerifiableCredentials(ids); - const result = []; - for (const credential of credentials) { - result.push({ - id: credential.id.toString(), - data: credential.content.value.value.toString(), - displayInformation: credential.content.value.displayInformation ?? undefined, - type: credential.content.value.type ?? undefined - }); - } - return result; + + return credentials.map((credential) => { + const value = credential.content.value as VerifiableCredential; + + return { id: credential.id.toString(), data: value.value, type: value.type, displayInformation: value.displayInformation }; + }); } } diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 80af38f70..a47a8f63e 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -184,10 +184,10 @@ export class EnmeshedStorageService implements StorageServ } // should only be used for exporting data out of the credo environment - public async getAllAsAttributes(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { + public async getAllAsAttributes(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { agentContext.config.logger.debug(`Getting all records of type ${recordClass.name}`); const attributes = await this.attributeController.getLocalAttributes({ "@type": "OwnIdentityAttribute", "content.value.@type": "VerifiableCredential" }); - return attributes; + return attributes as OwnIdentityAttribute[]; } public async findByQuery(agentContext: AgentContext, recordClass: BaseRecordConstructor, query: Query, queryOptions?: QueryOptions): Promise { diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index fac99f5f6..633d908c9 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -50,7 +50,7 @@ export class Holder extends BaseAgent> super(3000, `OpenId4VcHolder ${Math.random().toString()}`, getOpenIdHolderModules(), accountController, attributeController); } - public async getVerifiableCredentials(ids: string[] | undefined): Promise { + public async getVerifiableCredentials(ids: string[] | undefined): Promise { // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion const storageService = this.agent.dependencyManager.resolve(InjectionSymbols.StorageService) as EnmeshedStorageService; const allCredentials = await storageService.getAllAsAttributes(this.agent.context, SdJwtVcRecord); @@ -255,13 +255,12 @@ export class Holder extends BaseAgent> return storedCredentials; } - public async resolveProofRequest(proofRequest: string): Promise { - const resolvedProofRequest = await this.agent.openid4vc.holder.resolveOpenId4VpAuthorizationRequest(proofRequest); - - return resolvedProofRequest; + public async resolveAuthorizationRequest(request: string): Promise { + const resolvedRequest = await this.agent.openid4vc.holder.resolveOpenId4VpAuthorizationRequest(request); + return resolvedRequest; } - public async acceptPresentationRequest(resolvedPresentationRequest: OpenId4VpResolvedAuthorizationRequest): Promise< + public async acceptAuthorizationRequest(resolvedAuthenticationRequest: OpenId4VpResolvedAuthorizationRequest): Promise< | { readonly status: number; readonly body: string | Record | null; @@ -272,15 +271,15 @@ export class Holder extends BaseAgent> } | undefined > { - if (!resolvedPresentationRequest.presentationExchange && !resolvedPresentationRequest.dcql) { + if (!resolvedAuthenticationRequest.presentationExchange && !resolvedAuthenticationRequest.dcql) { throw new Error("Missing presentation exchange or dcql on resolved authorization request"); } // This fix ensures that the credential records which have been loaded here actually do provide the encoded() method // this issue arises as the records are loaded and then communicated to the app as a json object, losing the class prototype - if (resolvedPresentationRequest.presentationExchange) { - for (const requirementKey in resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements) { - const requirement = resolvedPresentationRequest.presentationExchange.credentialsForRequest.requirements[requirementKey]; + if (resolvedAuthenticationRequest.presentationExchange) { + for (const requirementKey in resolvedAuthenticationRequest.presentationExchange.credentialsForRequest.requirements) { + const requirement = resolvedAuthenticationRequest.presentationExchange.credentialsForRequest.requirements[requirementKey]; for (const submissionEntry of requirement.submissionEntry) { for (const vc of submissionEntry.verifiableCredentials) { if (vc.claimFormat === ClaimFormat.SdJwtDc) { @@ -309,17 +308,17 @@ export class Holder extends BaseAgent> } const submissionResult = await this.agent.openid4vc.holder.acceptOpenId4VpAuthorizationRequest({ - authorizationRequestPayload: resolvedPresentationRequest.authorizationRequestPayload, - presentationExchange: resolvedPresentationRequest.presentationExchange + authorizationRequestPayload: resolvedAuthenticationRequest.authorizationRequestPayload, + presentationExchange: resolvedAuthenticationRequest.presentationExchange ? { credentials: this.agent.openid4vc.holder.selectCredentialsForPresentationExchangeRequest( - resolvedPresentationRequest.presentationExchange.credentialsForRequest + resolvedAuthenticationRequest.presentationExchange.credentialsForRequest ) } : undefined, - dcql: resolvedPresentationRequest.dcql + dcql: resolvedAuthenticationRequest.dcql ? { - credentials: this.agent.openid4vc.holder.selectCredentialsForDcqlRequest(resolvedPresentationRequest.dcql.queryResult) + credentials: this.agent.openid4vc.holder.selectCredentialsForDcqlRequest(resolvedAuthenticationRequest.dcql.queryResult) } : undefined }); diff --git a/packages/runtime-types/src/consumption/AcceptedAuthorizationRequestDTO.ts b/packages/runtime-types/src/consumption/AcceptedAuthorizationRequestDTO.ts new file mode 100644 index 000000000..f7fada0e1 --- /dev/null +++ b/packages/runtime-types/src/consumption/AcceptedAuthorizationRequestDTO.ts @@ -0,0 +1,4 @@ +export interface AcceptAuthorizationRequestDTO { + status: number; + message: string; +} diff --git a/packages/runtime-types/src/consumption/AcceptedProofRequestDTO.ts b/packages/runtime-types/src/consumption/AcceptedProofRequestDTO.ts deleted file mode 100644 index b5098ce9b..000000000 --- a/packages/runtime-types/src/consumption/AcceptedProofRequestDTO.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface AcceptProofRequestDTO { - status: number; - message: string; -} diff --git a/packages/runtime-types/src/consumption/FetchedAuthorizationRequestDTO.ts b/packages/runtime-types/src/consumption/FetchedAuthorizationRequestDTO.ts new file mode 100644 index 000000000..ce97265ea --- /dev/null +++ b/packages/runtime-types/src/consumption/FetchedAuthorizationRequestDTO.ts @@ -0,0 +1,6 @@ +import { VerifiableCredentialDTO } from "./VerifiableCredentialDTO"; + +export interface FetchedAuthorizationRequestDTO { + authorizationRequest: Record; + usedCredentials: VerifiableCredentialDTO[]; +} diff --git a/packages/runtime-types/src/consumption/FetchedProofRequestDTO.ts b/packages/runtime-types/src/consumption/FetchedProofRequestDTO.ts deleted file mode 100644 index a621a223b..000000000 --- a/packages/runtime-types/src/consumption/FetchedProofRequestDTO.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface FetchedProofRequestDTO { - jsonRepresentation: string; -} diff --git a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts index ff4fe7e2d..aa9042a93 100644 --- a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts +++ b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts @@ -1,6 +1,6 @@ export interface VerifiableCredentialDTO { - data: string; id: string; + data: string; type: string; displayInformation?: string; key?: string; diff --git a/packages/runtime-types/src/consumption/index.ts b/packages/runtime-types/src/consumption/index.ts index 5a1f6bd76..c9fb6f886 100644 --- a/packages/runtime-types/src/consumption/index.ts +++ b/packages/runtime-types/src/consumption/index.ts @@ -1,9 +1,9 @@ -export * from "./AcceptedProofRequestDTO"; +export * from "./AcceptedAuthorizationRequestDTO"; export * from "./AttributeTagCollectionDTO"; export * from "./CredentialOfferDTO"; export * from "./DraftDTO"; +export * from "./FetchedAuthorizationRequestDTO"; export * from "./FetchedCredentialOfferDTO"; -export * from "./FetchedProofRequestDTO"; export * from "./IdentityMetadataDTO"; export * from "./LocalAttributeDeletionInfoDTO"; export * from "./LocalAttributeDTO"; diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts index 13e24589c..29d796111 100644 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -1,27 +1,27 @@ import { ApplicationError, Result } from "@js-soft/ts-utils"; -import { AcceptProofRequestDTO, FetchedCredentialOfferDTO, FetchedProofRequestDTO, VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { AcceptAuthorizationRequestDTO, FetchedAuthorizationRequestDTO, FetchedCredentialOfferDTO, VerifiableCredentialDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { - AcceptProofRequestRequest, - AcceptProofRequestUseCase, + AcceptAuthorizationRequestRequest, + AcceptAuthorizationRequestUseCase, FetchCredentialOfferRequest, FetchCredentialOfferUseCase, FetchedCredentialOfferRequest, - FetchProofRequestRequest, - FetchProofRequestUseCase, + GetVerifiableCredentialsUseCase, + ResolveAuthorizationRequestRequest, + ResolveAuthorizationRequestUseCase, ResolveCredentialOfferRequest, ResolveCredentialOfferUseCase, ResolveFetchedCredentialOfferUseCase } from "../../../useCases"; -import { GetVerifiableCredentialsUseCase } from "../../../useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase"; export class OpenId4VcFacade { public constructor( @Inject private readonly resolveCredentialOfferUseCase: ResolveCredentialOfferUseCase, @Inject private readonly fetchOfferUseCase: FetchCredentialOfferUseCase, @Inject private readonly resolveFetchedOfferUseCase: ResolveFetchedCredentialOfferUseCase, - @Inject private readonly fetchProofRequestUseCase: FetchProofRequestUseCase, - @Inject private readonly accepProofRequestUseCase: AcceptProofRequestUseCase, + @Inject private readonly resolveAuthorizationRequestUseCase: ResolveAuthorizationRequestUseCase, + @Inject private readonly acceptAuthorizationRequestUseCase: AcceptAuthorizationRequestUseCase, @Inject private readonly getVerifiableCredentialsUseCase: GetVerifiableCredentialsUseCase ) {} @@ -37,15 +37,15 @@ export class OpenId4VcFacade { return await this.resolveFetchedOfferUseCase.execute(request); } - public async fetchProofRequest(request: FetchProofRequestRequest): Promise> { - return await this.fetchProofRequestUseCase.execute(request); + public async resolveAuthorizationRequest(request: ResolveAuthorizationRequestRequest): Promise> { + return await this.resolveAuthorizationRequestUseCase.execute(request); } - public async acceptProofRequest(request: AcceptProofRequestRequest): Promise> { - return await this.accepProofRequestUseCase.execute(request); + public async acceptAuthorizationRequest(request: AcceptAuthorizationRequestRequest): Promise> { + return await this.acceptAuthorizationRequestUseCase.execute(request); } - public async getVerifiableCredentials(ids: string[] | undefined): Promise> { + public async getVerifiableCredentials(ids?: string[]): Promise> { return await this.getVerifiableCredentialsUseCase.execute({ ids }); } } diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index 2525d180f..ec57ad2ee 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -16699,19 +16699,19 @@ export const SentNotificationRequest: any = { } } -export const AcceptProofRequestRequest: any = { +export const AcceptAuthorizationRequestRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/AcceptProofRequestRequest", + "$ref": "#/definitions/AcceptAuthorizationRequestRequest", "definitions": { - "AcceptProofRequestRequest": { + "AcceptAuthorizationRequestRequest": { "type": "object", "properties": { - "jsonEncodedRequest": { - "type": "string" + "authorizationRequest": { + "type": "object" } }, "required": [ - "jsonEncodedRequest" + "authorizationRequest" ], "additionalProperties": false } @@ -16737,19 +16737,38 @@ export const FetchCredentialOfferRequest: any = { } } -export const FetchProofRequestRequest: any = { +export const GetVerifiableCredentialsRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/GetVerifiableCredentialsRequest", + "definitions": { + "GetVerifiableCredentialsRequest": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + } +} + +export const ResolveAuthorizationRequestRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/FetchProofRequestRequest", + "$ref": "#/definitions/ResolveAuthorizationRequestRequest", "definitions": { - "FetchProofRequestRequest": { + "ResolveAuthorizationRequestRequest": { "type": "object", "properties": { - "proofRequestUrl": { + "requestUrl": { "type": "string" } }, "required": [ - "proofRequestUrl" + "requestUrl" ], "additionalProperties": false } @@ -19996,25 +20015,6 @@ export const LoadPeerTokenRequest: any = { } } -export const GetVerifiableCredentialsRequest: any = { - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/GetVerifiableCredentialsRequest", - "definitions": { - "GetVerifiableCredentialsRequest": { - "type": "object", - "properties": { - "ids": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - } - } -} - export const CommunicationLanguage: any = { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/CommunicationLanguage", diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts new file mode 100644 index 000000000..95b1bed56 --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts @@ -0,0 +1,30 @@ +import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { AcceptAuthorizationRequestDTO } from "@nmshd/runtime-types"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface AcceptAuthorizationRequestRequest { + authorizationRequest: Record; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("AcceptAuthorizationRequestRequest")); + } +} + +export class AcceptAuthorizationRequestUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: AcceptAuthorizationRequestRequest): Promise> { + const result = await this.openId4VcContoller.acceptAuthorizationRequest(request.authorizationRequest as OpenId4VpResolvedAuthorizationRequest); + return Result.ok({ status: result.status, message: JSON.stringify(result.message) }); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts deleted file mode 100644 index bba2b291d..000000000 --- a/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Result } from "@js-soft/ts-utils"; -import { OpenId4VcController } from "@nmshd/consumption"; -import { AcceptProofRequestDTO } from "@nmshd/runtime-types"; -import { Inject } from "@nmshd/typescript-ioc"; -import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; - -export interface AcceptProofRequestRequest { - jsonEncodedRequest: string; -} - -class Validator extends SchemaValidator { - public constructor(@Inject schemaRepository: SchemaRepository) { - super(schemaRepository.getSchema("AcceptProofRequestRequest")); - } -} - -export class AcceptProofRequestUseCase extends UseCase { - public constructor( - @Inject private readonly openId4VcContoller: OpenId4VcController, - @Inject validator: Validator - ) { - super(validator); - } - - protected override async executeInternal(request: AcceptProofRequestRequest): Promise> { - const result = await this.openId4VcContoller.acceptProofRequest(request.jsonEncodedRequest); - return Result.ok({ status: result.status, message: JSON.stringify(result.message) } as AcceptProofRequestDTO); - } -} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOffer.ts similarity index 100% rename from packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts rename to packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOffer.ts diff --git a/packages/runtime/src/useCases/consumption/openid4vc/FetchProofRequestUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/FetchProofRequestUseCase.ts deleted file mode 100644 index 9f64d80eb..000000000 --- a/packages/runtime/src/useCases/consumption/openid4vc/FetchProofRequestUseCase.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Result } from "@js-soft/ts-utils"; -import { OpenId4VcController } from "@nmshd/consumption"; -import { FetchedProofRequestDTO } from "@nmshd/runtime-types"; -import { Inject } from "@nmshd/typescript-ioc"; -import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; - -export interface FetchProofRequestRequest { - proofRequestUrl: string; -} - -class Validator extends SchemaValidator { - public constructor(@Inject schemaRepository: SchemaRepository) { - super(schemaRepository.getSchema("FetchProofRequestRequest")); - } -} - -export class FetchProofRequestUseCase extends UseCase { - public constructor( - @Inject private readonly openId4VcContoller: OpenId4VcController, - @Inject validator: Validator - ) { - super(validator); - } - - protected override async executeInternal(request: FetchProofRequestRequest): Promise> { - const result = await this.openId4VcContoller.fetchProofRequest(request.proofRequestUrl); - return Result.ok({ jsonRepresentation: result.data } as FetchedProofRequestDTO); - } -} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts similarity index 94% rename from packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts rename to packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts index 725d55578..55beb77d7 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts @@ -24,6 +24,6 @@ export class GetVerifiableCredentialsUseCase extends UseCase> { const credentials = await this.openId4VcContoller.getVerifiableCredentials(request.ids); - return Result.ok(credentials as VerifiableCredentialDTO[]); + return Result.ok(credentials); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts new file mode 100644 index 000000000..fd2b07e80 --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts @@ -0,0 +1,30 @@ +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { FetchedAuthorizationRequestDTO } from "@nmshd/runtime-types"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface ResolveAuthorizationRequestRequest { + requestUrl: string; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("ResolveAuthorizationRequestRequest")); + } +} + +export class ResolveAuthorizationRequestUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: ResolveAuthorizationRequestRequest): Promise> { + const result = await this.openId4VcContoller.resolveAuthorizationRequest(request.requestUrl); + + return Result.ok({ authorizationRequest: result.authorizationRequest, usedCredentials: result.usedCredentials }); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts similarity index 100% rename from packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts rename to packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredential.ts similarity index 100% rename from packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts rename to packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredential.ts diff --git a/packages/runtime/src/useCases/consumption/openid4vc/index.ts b/packages/runtime/src/useCases/consumption/openid4vc/index.ts index 63fac8183..9d19e641b 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/index.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/index.ts @@ -1,5 +1,6 @@ -export * from "./AcceptProofRequestUseCase"; -export * from "./FetchCredentialOfferUseCase"; -export * from "./FetchProofRequestUseCase"; -export * from "./ResolveCredentialOfferUseCase"; -export * from "./ResolveFetchedCredentialUseCase"; +export * from "./AcceptAuthorizationRequest"; +export * from "./FetchCredentialOffer"; +export * from "./GetVerifiableCredentials"; +export * from "./ResolveAuthorizationRequest"; +export * from "./ResolveCredentialOffer"; +export * from "./ResolveFetchedCredential"; diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 9be73d6fd..92b9acbb4 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -1,3 +1,4 @@ +import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import axios, { AxiosInstance } from "axios"; import path from "path"; import { DockerComposeEnvironment, StartedDockerComposeEnvironment, Wait } from "testcontainers"; @@ -69,7 +70,7 @@ describe("OpenID4VCI and OpenID4VCP", () => { }); expect(acceptanceResult).toBeSuccessful(); expect(typeof acceptanceResult.value.id).toBe("string"); - }, 10000000); + }); test("should be able to process a given credential presentation", async () => { // Ensure the first test has completed @@ -109,36 +110,32 @@ describe("OpenID4VCI and OpenID4VCP", () => { expect(response.status).toBe(200); const responseData = await response.data; - const result = await consumptionServices.openId4Vc.fetchProofRequest({ - proofRequestUrl: responseData.result.presentationRequest - }); - const jsonRepresentation = result.value.jsonRepresentation; + const result = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ requestUrl: responseData.result.presentationRequest }); + expect(result.value.usedCredentials).toHaveLength(1); - const proofRequest = JSON.parse(jsonRepresentation); - expect(proofRequest.presentationExchange.credentialsForRequest.areRequirementsSatisfied).toBe(true); + const request = result.value.authorizationRequest as OpenId4VpResolvedAuthorizationRequest; + expect(request.presentationExchange!.credentialsForRequest.areRequirementsSatisfied).toBe(true); - const presentationResult = await consumptionServices.openId4Vc.acceptProofRequest({ - jsonEncodedRequest: jsonRepresentation - }); + const presentationResult = await consumptionServices.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); expect(presentationResult).toBeSuccessful(); expect(presentationResult.value.status).toBe(200); - }, 10000000); + }); - test("getting all verifiable credentials should not return an empy list", async () => { + test("getting all verifiable credentials should not return an empty list", async () => { // Ensure the first test has completed expect(credentialOfferUrl).toBeDefined(); - const acceptanceResult = await consumptionServices.openId4Vc.getVerifiableCredentials(undefined); + const acceptanceResult = await consumptionServices.openId4Vc.getVerifiableCredentials(); expect(acceptanceResult).toBeSuccessful(); expect(acceptanceResult.value.length).toBeGreaterThan(0); - }, 10000000); + }); test("getting the earlier created verifiable credential by id should return exactly one credential", async () => { // Ensure the first test has completed expect(credentialOfferUrl).toBeDefined(); - const allCredentialsResult = await consumptionServices.openId4Vc.getVerifiableCredentials(undefined); + const allCredentialsResult = await consumptionServices.openId4Vc.getVerifiableCredentials(); expect(allCredentialsResult).toBeSuccessful(); expect(allCredentialsResult.value.length).toBeGreaterThan(0); @@ -147,7 +144,7 @@ describe("OpenID4VCI and OpenID4VCP", () => { expect(singleCredentialResult).toBeSuccessful(); expect(singleCredentialResult.value).toHaveLength(1); expect(singleCredentialResult.value[0].id).toBe(firstCredentialId); - }, 10000000); + }); }); async function startOid4VcComposeStack() { From 2c1d9bdb0c7ff348f96f76fb4cfff97a555b56bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:44:38 +0100 Subject: [PATCH 49/75] Web bundle is not possible anymore (#849) * fix: remove default dependency in Transport.ts * fix: do not use undici in consumption * chore: undo change * fix: remove export * fix: add node logger --- .../src/consumption/ConsumptionConfig.ts | 1 + .../modules/openid4vc/OpenId4VcController.ts | 16 +++++++++----- .../src/modules/openid4vc/index.ts | 1 - .../src/modules/openid4vc/local/BaseAgent.ts | 17 +++++++++++--- .../src/modules/openid4vc/local/Holder.ts | 4 ++-- .../openid4vc/local/LocalAgentDependencies.ts | 22 ------------------- .../requests/RequestsIntegrationTest.ts | 21 ++++++++++++++++++ .../test/consumption/openid4vc.test.ts | 8 ++++++- .../test/lib/RuntimeServiceProvider.ts | 5 ++++- packages/transport/src/core/Transport.ts | 22 +------------------ 10 files changed, 60 insertions(+), 57 deletions(-) delete mode 100644 packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts diff --git a/packages/consumption/src/consumption/ConsumptionConfig.ts b/packages/consumption/src/consumption/ConsumptionConfig.ts index e0cad820b..586bd4c2d 100644 --- a/packages/consumption/src/consumption/ConsumptionConfig.ts +++ b/packages/consumption/src/consumption/ConsumptionConfig.ts @@ -1,3 +1,4 @@ export interface ConsumptionConfig { setDefaultOwnIdentityAttributes: boolean; + fetchInstance?: typeof fetch; } diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 5049ba53e..78424427f 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -11,8 +11,12 @@ export class OpenId4VcController extends ConsumptionBaseController { super(ConsumptionControllerName.OpenId4VcController, parent); } + private get fetchInstance(): typeof fetch { + return this.parent.consumptionConfig.fetchInstance ?? fetch; + } + public async fetchCredentialOffer(credentialOfferUrl: string): Promise<{ data: string }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes); + const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOfferUrl); return { @@ -25,7 +29,7 @@ export class OpenId4VcController extends ConsumptionBaseController { requestedCredentialOffers: string[], pinCode?: string ): Promise<{ data: string; id: string; type: string; displayInformation: string | undefined }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes); + const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const credentialOffer = JSON.parse(fetchedCredentialOffer); const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: requestedCredentialOffers, txCode: pinCode }); @@ -43,7 +47,7 @@ export class OpenId4VcController extends ConsumptionBaseController { } public async processCredentialOffer(credentialOffer: string): Promise<{ data: string; id: string; type: string; displayInformation: string | undefined }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes); + const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOffer); const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: Object.keys(res.offeredCredentialConfigurations) }); @@ -63,7 +67,7 @@ export class OpenId4VcController extends ConsumptionBaseController { public async resolveAuthorizationRequest( requestUrl: string ): Promise<{ authorizationRequest: OpenId4VpResolvedAuthorizationRequest; usedCredentials: { id: string; data: string; type: string; displayInformation?: string }[] }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes); + const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const authorizationRequest = await holder.resolveAuthorizationRequest(requestUrl); @@ -90,7 +94,7 @@ export class OpenId4VcController extends ConsumptionBaseController { public async acceptAuthorizationRequest( authorizationRequest: OpenId4VpResolvedAuthorizationRequest ): Promise<{ status: number; message: string | Record | null }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes); + const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); // parse the credential type to be sdjwt @@ -101,7 +105,7 @@ export class OpenId4VcController extends ConsumptionBaseController { } public async getVerifiableCredentials(ids?: string[]): Promise<{ id: string; data: string; type: string; displayInformation?: string }[]> { - const holder = new Holder(this.parent.accountController, this.parent.attributes); + const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const credentials = await holder.getVerifiableCredentials(ids); diff --git a/packages/consumption/src/modules/openid4vc/index.ts b/packages/consumption/src/modules/openid4vc/index.ts index 84f71eb01..1f9d59bac 100644 --- a/packages/consumption/src/modules/openid4vc/index.ts +++ b/packages/consumption/src/modules/openid4vc/index.ts @@ -3,5 +3,4 @@ export * from "./local/EnmeshedHolderFileSystem"; export * from "./local/EnmeshedHolderKeyManagmentService"; export * from "./local/EnmeshedStorageService"; export * from "./local/Holder"; -export * from "./local/LocalAgentDependencies"; export * from "./OpenId4VcController"; diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index 8188c87ea..0b565f9a1 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -12,10 +12,12 @@ import { } from "@credo-ts/core"; import { KeyManagementModuleConfig } from "@credo-ts/core/build/modules/kms"; import { AccountController } from "@nmshd/transport"; +import { EventEmitter } from "events"; +import webSocket from "ws"; import { AttributesController } from "../../attributes"; +import { EnmeshedHolderFileSystem } from "./EnmeshedHolderFileSystem"; import { EnmshedHolderKeyManagmentService } from "./EnmeshedHolderKeyManagmentService"; import { EnmeshedStorageService } from "./EnmeshedStorageService"; -import { agentDependencies } from "./LocalAgentDependencies"; export class BaseAgent { public config: InitConfig; @@ -30,7 +32,8 @@ export class BaseAgent { public readonly name: string, public readonly modules: AgentModules, public readonly accountController: AccountController, - public readonly attributeController: AttributesController + public readonly attributeController: AttributesController, + fetchInstance: typeof fetch ) { this.name = name; this.port = port; @@ -49,7 +52,15 @@ export class BaseAgent { this.agent = new Agent( { config, - dependencies: agentDependencies, + dependencies: { + // eslint-disable-next-line @typescript-eslint/naming-convention + FileSystem: EnmeshedHolderFileSystem, + // eslint-disable-next-line @typescript-eslint/naming-convention + EventEmitterClass: EventEmitter, + fetch: fetchInstance, + // eslint-disable-next-line @typescript-eslint/naming-convention + WebSocketClass: webSocket + }, modules }, dependencyManager diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 633d908c9..53a0d1406 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -46,8 +46,8 @@ export class Holder extends BaseAgent> redirectUri: "http://localhost:3000/redirect" }; - public constructor(accountController: AccountController, attributeController: AttributesController) { - super(3000, `OpenId4VcHolder ${Math.random().toString()}`, getOpenIdHolderModules(), accountController, attributeController); + public constructor(accountController: AccountController, attributeController: AttributesController, fetchInstance: typeof fetch) { + super(3000, `OpenId4VcHolder ${Math.random().toString()}`, getOpenIdHolderModules(), accountController, attributeController, fetchInstance); } public async getVerifiableCredentials(ids: string[] | undefined): Promise { diff --git a/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts b/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts deleted file mode 100644 index bbe2f0140..000000000 --- a/packages/consumption/src/modules/openid4vc/local/LocalAgentDependencies.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AgentDependencies } from "@credo-ts/core"; -import { EventEmitter } from "events"; -import { Agent, fetch as undiciFetch } from "undici"; -import webSocket from "ws"; -import { EnmeshedHolderFileSystem } from "./EnmeshedHolderFileSystem"; - -export const agentDependencies: AgentDependencies = { - // eslint-disable-next-line @typescript-eslint/naming-convention - FileSystem: EnmeshedHolderFileSystem, - // eslint-disable-next-line @typescript-eslint/naming-convention - EventEmitterClass: EventEmitter, - fetch: (async (input, init) => { - const response = await undiciFetch(input as any, { - ...(init as any), - dispatcher: new Agent({}) - }); - - return response; - }) as typeof fetch, - // eslint-disable-next-line @typescript-eslint/naming-convention - WebSocketClass: webSocket -}; diff --git a/packages/consumption/test/modules/requests/RequestsIntegrationTest.ts b/packages/consumption/test/modules/requests/RequestsIntegrationTest.ts index d2d2c7945..665e9214c 100644 --- a/packages/consumption/test/modules/requests/RequestsIntegrationTest.ts +++ b/packages/consumption/test/modules/requests/RequestsIntegrationTest.ts @@ -50,6 +50,7 @@ import { ValidationResult } from "../../../src"; +import { NodeLoggerFactory } from "@js-soft/node-logger"; import { TestUtil } from "../../core/TestUtil"; import { MockEventBus } from "../MockEventBus"; import { TestObjectFactory } from "./testHelpers/TestObjectFactory"; @@ -78,6 +79,26 @@ export class RequestsTestsContext { config, new EventEmitter2EventBus(() => { // noop + }), + new NodeLoggerFactory({ + appenders: { + consoleAppender: { + type: "stdout", + layout: { type: "pattern", pattern: "%[[%p] %c - %m%]" } + }, + console: { + type: "logLevelFilter", + level: "Warn", + appender: "consoleAppender" + } + }, + + categories: { + default: { + appenders: ["console"], + level: "TRACE" + } + } }) ).init(); diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 92b9acbb4..651b2fa31 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -2,10 +2,16 @@ import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import axios, { AxiosInstance } from "axios"; import path from "path"; import { DockerComposeEnvironment, StartedDockerComposeEnvironment, Wait } from "testcontainers"; +import { Agent as UndiciAgent, fetch as undiciFetch } from "undici"; import { ConsumptionServices } from "../../src"; import { RuntimeServiceProvider } from "../lib"; -const runtimeServiceProvider = new RuntimeServiceProvider(); +const fetchInstance: typeof fetch = (async (input, init) => { + const response = await undiciFetch(input as any, { ...(init as any), dispatcher: new UndiciAgent({}) }); + return response; +}) as typeof fetch; + +const runtimeServiceProvider = new RuntimeServiceProvider(fetchInstance); let consumptionServices: ConsumptionServices; let axiosInstance: AxiosInstance; let dockerComposeStack: StartedDockerComposeEnvironment | undefined; diff --git a/packages/runtime/test/lib/RuntimeServiceProvider.ts b/packages/runtime/test/lib/RuntimeServiceProvider.ts index c0b4b79cd..d0791894b 100644 --- a/packages/runtime/test/lib/RuntimeServiceProvider.ts +++ b/packages/runtime/test/lib/RuntimeServiceProvider.ts @@ -24,6 +24,8 @@ export interface LaunchConfiguration { } export class RuntimeServiceProvider { + public constructor(private readonly fetchInstance?: typeof fetch) {} + private readonly runtimes: TestRuntime[] = []; public static get transportConfig(): Omit { @@ -75,7 +77,8 @@ export class RuntimeServiceProvider { const runtime = new TestRuntime( config, { - setDefaultOwnIdentityAttributes: launchConfiguration.enableDefaultOwnIdentityAttributes ?? false + setDefaultOwnIdentityAttributes: launchConfiguration.enableDefaultOwnIdentityAttributes ?? false, + fetchInstance: this.fetchInstance }, launchConfiguration.useCorrelator ? correlator : undefined ); diff --git a/packages/transport/src/core/Transport.ts b/packages/transport/src/core/Transport.ts index 1f122a702..8356dc372 100644 --- a/packages/transport/src/core/Transport.ts +++ b/packages/transport/src/core/Transport.ts @@ -1,5 +1,4 @@ import { ILogger, ILoggerFactory } from "@js-soft/logging-abstractions"; -import { NodeLoggerFactory } from "@js-soft/node-logger"; import { EventBus } from "@js-soft/ts-utils"; import { SodiumWrapper } from "@nmshd/crypto"; import { AgentOptions } from "http"; @@ -85,26 +84,7 @@ export class Transport { public constructor( customConfig: IConfigOverwrite, public readonly eventBus: EventBus, - loggerFactory: ILoggerFactory = new NodeLoggerFactory({ - appenders: { - consoleAppender: { - type: "stdout", - layout: { type: "pattern", pattern: "%[[%p] %c - %m%]" } - }, - console: { - type: "logLevelFilter", - level: "Warn", - appender: "consoleAppender" - } - }, - - categories: { - default: { - appenders: ["console"], - level: "TRACE" - } - } - }), + loggerFactory: ILoggerFactory, public readonly correlator?: ICorrelator ) { this._config = _.defaultsDeep({}, customConfig, Transport.defaultConfig); From 1a31c1cb65f57f5c9e70ccc2a953b08e5e4d28b2 Mon Sep 17 00:00:00 2001 From: Timo Notheisen <65653426+tnotheis@users.noreply.github.com> Date: Tue, 18 Nov 2025 14:49:48 +0100 Subject: [PATCH 50/75] Add EUDIPLO tests (#831) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: mkuhn Co-authored-by: Julian König <33655937+jkoenig134@users.noreply.github.com> Co-authored-by: Magnus Kuhn <127854942+Magnus-Kuhn@users.noreply.github.com> --- .dev/eudiplo-assets/service.db | Bin 0 -> 274432 bytes .../6749e992-9ee7-4794-b79d-bd895d115b4b | Bin 0 -> 16125 bytes package-lock.json | 3393 ++++++++++++----- package.json | 2 + packages/app-runtime/package.json | 7 +- packages/app-runtime/test/tsconfig.json | 3 +- packages/consumption/package.json | 11 +- .../src/modules/openid4vc/local/BaseAgent.ts | 8 +- .../EnmeshedHolderKeyManagmentService.ts | 68 +- .../openid4vc/local/EnmeshedStorageService.ts | 29 +- packages/consumption/test/tsconfig.json | 3 +- packages/runtime/package.json | 7 +- .../test/consumption/openid4vc.test.ts | 213 +- packages/runtime/test/tsconfig.json | 3 +- ...vc+oauth2+0.3.0-alpha-20250825150235.patch | 45 - ...vc+oauth2+0.3.0-alpha-20251110130103.patch | 50 + ...penid4vci+0.3.0-alpha-20251110130103.patch | 24 + ...openid4vp+0.3.0-alpha-20250825150235.patch | 21 - ...3.0-alpha-20251110130103+001+initial.patch | 37 + ...4vc+utils+0.3.0-alpha-20251110130103.patch | 24 + patches/dcql+2.0.0.patch | 20 + 21 files changed, 2900 insertions(+), 1068 deletions(-) create mode 100644 .dev/eudiplo-assets/service.db create mode 100644 .dev/eudiplo-assets/uploads/6749e992-9ee7-4794-b79d-bd895d115b4b delete mode 100644 patches/@openid4vc+oauth2+0.3.0-alpha-20250825150235.patch create mode 100644 patches/@openid4vc+oauth2+0.3.0-alpha-20251110130103.patch create mode 100644 patches/@openid4vc+openid4vci+0.3.0-alpha-20251110130103.patch delete mode 100644 patches/@openid4vc+openid4vp+0.3.0-alpha-20250825150235.patch create mode 100644 patches/@openid4vc+openid4vp+0.3.0-alpha-20251110130103+001+initial.patch create mode 100644 patches/@openid4vc+utils+0.3.0-alpha-20251110130103.patch create mode 100644 patches/dcql+2.0.0.patch diff --git a/.dev/eudiplo-assets/service.db b/.dev/eudiplo-assets/service.db new file mode 100644 index 0000000000000000000000000000000000000000..38cbf8ecfc36b7f7b8ac24d2ebf9c3a1fb104521 GIT binary patch literal 274432 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 r=@)1BZeP4#o_$z;b?=!Tyg%d{Ga~{K{jhz literal 0 HcmV?d00001 diff --git a/.dev/eudiplo-assets/uploads/6749e992-9ee7-4794-b79d-bd895d115b4b b/.dev/eudiplo-assets/uploads/6749e992-9ee7-4794-b79d-bd895d115b4b new file mode 100644 index 0000000000000000000000000000000000000000..c714a201037df4f79025370f456118e50926a801 GIT binary patch literal 16125 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 literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index 4c2a1677e..59f4a0e00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,8 @@ "packages/app-runtime" ], "devDependencies": { + "@babel/preset-env": "^7.28.5", + "@babel/preset-typescript": "^7.28.5", "@js-soft/eslint-config-ts": "^2.0.4", "@js-soft/license-check": "^1.0.10", "@types/jest": "^30.0.0", @@ -37,6 +39,7 @@ }, "node_modules/@ampproject/remapping": { "version": "2.3.0", + "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -157,6 +160,7 @@ }, "node_modules/@babel/code-frame": { "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -168,7 +172,10 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.0", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -176,6 +183,7 @@ }, "node_modules/@babel/core": { "version": "7.28.3", + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -205,17 +213,21 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.28.3", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -224,8 +236,22 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", @@ -240,20 +266,114 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -265,6 +385,7 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.28.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -278,22 +399,90 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.27.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -301,28 +490,48 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helpers": { + "node_modules/@babel/helper-wrap-function": { "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/parser": { + "node_modules/@babel/helpers": { "version": "7.28.3", + "dev": true, "license": "MIT", "dependencies": { + "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -330,13 +539,96 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -391,11 +683,17 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -563,431 +861,1286 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/template": { - "version": "7.27.2", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse": { - "version": "7.28.3", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.3", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2", - "debug": "^4.3.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/types": { - "version": "7.28.2", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "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==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@credo-ts/core": { - "version": "0.6.0-alpha-20250919145226", - "license": "Apache-2.0", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "dev": true, + "license": "MIT", "dependencies": { - "@animo-id/mdoc": "^0.5.2", - "@animo-id/pex": "^6.1.0", - "@astronautlabs/jsonpath": "^1.1.2", - "@digitalcredentials/jsonld": "^6.0.0", - "@digitalcredentials/jsonld-signatures": "^9.4.0", - "@digitalcredentials/vc": "^6.0.1", - "@multiformats/base-x": "^4.0.1", - "@noble/curves": "^1.9.2", - "@noble/hashes": "^1.8.0", - "@peculiar/asn1-ecc": "^2.3.15", - "@peculiar/asn1-rsa": "^2.3.15", - "@peculiar/asn1-schema": "^2.3.15", - "@peculiar/asn1-x509": "^2.3.15", - "@peculiar/x509": "^1.13.0", - "@sd-jwt/core": "^0.10.0", - "@sd-jwt/decode": "^0.10.0", - "@sd-jwt/jwt-status-list": "^0.10.0", - "@sd-jwt/present": "^0.10.0", - "@sd-jwt/sd-jwt-vc": "^0.10.0", - "@sd-jwt/types": "^0.10.0", - "@sd-jwt/utils": "^0.10.0", - "@sphereon/pex-models": "^2.3.2", - "@sphereon/ssi-types": "0.33.0", - "@stablelib/ed25519": "^1.0.3", - "@types/ws": "^8.18.1", - "borc": "^3.0.0", - "buffer": "^6.0.3", - "class-transformer": "0.5.1", - "class-validator": "0.14.1", - "dcql": "2.0.0-alpha-20250916080434", - "did-resolver": "^4.1.0", - "ec-compression": "0.0.1-alpha.12", - "lru_map": "^0.4.1", - "make-error": "^1.3.6", - "object-inspect": "^1.13.4", - "reflect-metadata": "^0.2.2", - "rxjs": "^7.8.2", - "tsyringe": "^4.10.0", - "uuid": "^11.1.0", - "varint": "^6.0.0", - "web-did-resolver": "^2.0.21", - "webcrypto-core": "^1.8.1", - "zod": "^3.25.56" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@credo-ts/core/node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "dev": true, "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "node_modules/@credo-ts/openid4vc": { - "version": "0.6.0-alpha-20250919145226", - "license": "Apache-2.0", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "dev": true, + "license": "MIT", "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20250919145226", - "@openid4vc/oauth2": "0.3.0-alpha-20250825150235", - "@openid4vc/openid4vci": "0.3.0-alpha-20250825150235", - "@openid4vc/openid4vp": "0.3.0-alpha-20250825150235", - "@openid4vc/utils": "0.3.0-alpha-20250825150235", - "class-transformer": "0.5.1", - "rxjs": "^7.8.2", - "zod": "^3.25.56" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@dependents/detective-less": { - "version": "5.0.1", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dev": true, "license": "MIT", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.1" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/bitstring": { - "version": "3.1.0", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", "dependencies": { - "base64url-universal": "^2.0.0", - "pako": "^2.0.4" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=16" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client": { - "version": "3.4.1", - "license": "BSD-3-Clause", + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "dev": true, + "license": "MIT", "dependencies": { - "ky": "^0.33.3", - "ky-universal": "^0.11.0", - "undici": "^5.21.2" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=14.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/data-uri-to-buffer": { - "version": "4.0.1", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">= 12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/fetch-blob": { - "version": "3.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "dev": true, "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" }, "engines": { - "node": "^12.20 || >= 14.13" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/ky": { - "version": "0.33.3", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", + "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=14.16" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/ky-universal": { - "version": "0.11.0", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "^3.2.10" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": ">=14.16" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "ky": ">=0.31.4", - "web-streams-polyfill": ">=3.2.1" + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@digitalbazaar/http-client/node_modules/node-fetch": { - "version": "3.3.2", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", + "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", + "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.5", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.4", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.28.5", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.4", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.4", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/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, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "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, + "license": "MIT" + }, + "node_modules/@credo-ts/core": { + "version": "0.6.0-alpha-20251110135447", + "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20251110135447.tgz", + "integrity": "sha512-prkezpQV8W9z30DG9ksoEYKa8SvaFj5Jt+8SD6BR4A8TGCrALCRh3AimbK9Jeyl40kTeBWm29eC3hOwLyz6x+Q==", + "license": "Apache-2.0", + "dependencies": { + "@animo-id/mdoc": "^0.5.2", + "@animo-id/pex": "^6.1.1", + "@astronautlabs/jsonpath": "^1.1.2", + "@digitalcredentials/jsonld": "^9.0.0", + "@digitalcredentials/jsonld-signatures": "^12.0.1", + "@digitalcredentials/vc": "^10.0.1", + "@multiformats/base-x": "^4.0.1", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1", + "@peculiar/asn1-ecc": "^2.5.0", + "@peculiar/asn1-rsa": "^2.5.0", + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/x509": "~1.13.0", + "@sd-jwt/core": "^0.16.0", + "@sd-jwt/decode": "^0.16.0", + "@sd-jwt/jwt-status-list": "^0.16.0", + "@sd-jwt/present": "^0.16.0", + "@sd-jwt/sd-jwt-vc": "^0.16.0", + "@sd-jwt/types": "^0.16.0", + "@sd-jwt/utils": "^0.16.0", + "@sphereon/pex-models": "^2.3.2", + "@sphereon/ssi-types": "0.33.0", + "@stablelib/ed25519": "^2.0.2", + "@types/ws": "^8.18.1", + "borc": "^3.0.0", + "buffer": "^6.0.3", + "class-transformer": "0.5.1", + "class-validator": "0.14.1", + "dcql": "^2.0.0", + "did-resolver": "^4.1.0", + "ec-compression": "0.0.1-alpha.12", + "lru_map": "^0.4.1", + "make-error": "^1.3.6", + "object-inspect": "^1.13.4", + "reflect-metadata": "0.2.2", + "rxjs": "^7.8.2", + "tsyringe": "^4.10.0", + "uuid": "^13.0.0", + "varint": "^6.0.0", + "web-did-resolver": "^2.0.30", + "webcrypto-core": "^1.8.1", + "zod": "^3.25.74" + } + }, + "node_modules/@credo-ts/core/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@digitalbazaar/http-client/node_modules/undici": { - "version": "5.29.0", + "node_modules/@credo-ts/core/node_modules/uuid": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" + "bin": { + "uuid": "dist-node/bin/uuid" } }, - "node_modules/@digitalbazaar/security-context": { - "version": "1.0.1", - "license": "BSD-3-Clause" - }, - "node_modules/@digitalbazaar/vc": { - "version": "5.0.0", - "license": "BSD-3-Clause", + "node_modules/@credo-ts/openid4vc": { + "version": "0.6.0-alpha-20251110135447", + "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20251110135447.tgz", + "integrity": "sha512-0oTip5PBPEPM8CNI4QdU4il72MZ9JL4s5n0A/MouqkN4BuzbnmcdOJpPmVFRTa2XkzIAIkEYfHlAXV+emRxxcg==", + "license": "Apache-2.0", "dependencies": { - "credentials-context": "^2.0.0", - "jsonld": "^8.0.0", - "jsonld-signatures": "^11.0.0" - }, - "engines": { - "node": ">=14" + "@credo-ts/core": "0.6.0-alpha-20251110135447", + "@openid4vc/oauth2": "0.3.0-alpha-20251110130103", + "@openid4vc/openid4vci": "0.3.0-alpha-20251110130103", + "@openid4vc/openid4vp": "0.3.0-alpha-20251110130103", + "@openid4vc/utils": "0.3.0-alpha-20251110130103", + "@types/express": "^5.0.3", + "class-transformer": "0.5.1", + "express": "^5.1.0", + "rxjs": "^7.8.2", + "zod": "^3.25.74" } }, - "node_modules/@digitalbazaar/vc-status-list": { - "version": "7.1.0", - "license": "BSD-3-Clause", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "@digitalbazaar/bitstring": "^3.0.0", - "@digitalbazaar/vc": "^5.0.0", - "@digitalbazaar/vc-status-list-context": "^3.0.1", - "credentials-context": "^2.0.0" + "@jridgewell/trace-mapping": "0.3.9" }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@digitalbazaar/vc-status-list-context": { - "version": "3.1.1", - "license": "BSD-3-Clause" - }, - "node_modules/@digitalcredentials/base58-universal": { - "version": "1.0.1", - "license": "BSD-3-Clause", "engines": { "node": ">=12" } }, - "node_modules/@digitalcredentials/base64url-universal": { - "version": "2.0.6", - "license": "BSD-3-Clause", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", "dependencies": { - "base64url": "^3.0.1" - }, - "engines": { - "node": ">=14" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@digitalcredentials/bitstring": { - "version": "2.0.1", - "license": "BSD-3-Clause", + "node_modules/@dependents/detective-less": { + "version": "5.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@digitalcredentials/base64url-universal": "^2.0.2", - "pako": "^2.0.4" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" }, "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/@digitalcredentials/ed25519-signature-2020": { - "version": "3.0.2", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalcredentials/base58-universal": "^1.0.1", - "@digitalcredentials/ed25519-verification-key-2020": "^3.1.1", - "@digitalcredentials/jsonld-signatures": "^9.3.1", - "ed25519-signature-2018-context": "^1.1.0", - "ed25519-signature-2020-context": "^1.0.1" - }, - "engines": { - "node": ">=14" - } + "node_modules/@digitalbazaar/security-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", + "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", + "license": "BSD-3-Clause" }, - "node_modules/@digitalcredentials/ed25519-verification-key-2020": { - "version": "3.2.2", + "node_modules/@digitalcredentials/credentials-v2-context": { + "version": "0.0.1-beta.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/credentials-v2-context/-/credentials-v2-context-0.0.1-beta.0.tgz", + "integrity": "sha512-i0AQXFnMeOqf2uKNBUcnN78mO8L9H91QKMdpDqsgDYzTIKGLnNCOOxbRbrJOimhR+soYO64xn54U8/R7Qx0nyA==", "license": "BSD-3-Clause", - "dependencies": { - "@digitalcredentials/base58-universal": "^1.0.1", - "@stablelib/ed25519": "^1.0.1", - "base64url-universal": "^1.1.0", - "crypto-ld": "^6.0.0" - }, "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/@digitalcredentials/ed25519-verification-key-2020/node_modules/base64url-universal": { - "version": "1.1.0", + "node_modules/@digitalcredentials/http-client": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-5.0.4.tgz", + "integrity": "sha512-TbbfFauhd5fUAcZ/6TDenTuYqkzqdEhxYk1Rqicxcz33B9rzvJcmT+/81KF9DrUXmu6gpoqCranT2UkZftsxZA==", "license": "BSD-3-Clause", "dependencies": { - "base64url": "^3.0.0" + "ky": "^1.0.1", + "undici": "^6.6.2" }, "engines": { - "node": ">=8.3.0" + "node": ">=18.0" } }, - "node_modules/@digitalcredentials/http-client": { - "version": "1.2.2", - "license": "BSD-3-Clause", - "dependencies": { - "ky": "^0.25.1", - "ky-universal": "^0.8.2" - }, + "node_modules/@digitalcredentials/http-client/node_modules/undici": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=18.17" } }, "node_modules/@digitalcredentials/jsonld": { - "version": "6.0.0", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-9.0.0.tgz", + "integrity": "sha512-lWVpg65xQbi4lvXWs3BezCwPrGDAllFjHwTBUWJCoKsfGzxtxTwbRNXpfhii5psQ2vvpjPXSI+y0uyRNOzr4cw==", "license": "BSD-3-Clause", "dependencies": { - "@digitalcredentials/http-client": "^1.0.0", - "@digitalcredentials/rdf-canonize": "^1.0.0", + "@digitalcredentials/http-client": "^5.0.1", "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0" + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/@digitalcredentials/jsonld-signatures": { - "version": "9.4.0", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-12.0.1.tgz", + "integrity": "sha512-KdyE7Bex+boqKRbvxofRyuI09BD6/8hQGSC5qbrXEmHd0oSLqePqKBM2pu9UZnzjxMZrN9sB3RqHxpijYEFh/w==", "license": "BSD-3-Clause", "dependencies": { "@digitalbazaar/security-context": "^1.0.0", - "@digitalcredentials/jsonld": "^6.0.0", + "@digitalcredentials/jsonld": "^9.0.0", "fast-text-encoding": "^1.0.3", - "isomorphic-webcrypto": "^2.3.8", "serialize-error": "^8.0.1" }, "engines": { @@ -996,6 +2149,8 @@ }, "node_modules/@digitalcredentials/jsonld/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -1006,92 +2161,33 @@ }, "node_modules/@digitalcredentials/jsonld/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, "node_modules/@digitalcredentials/open-badges-context": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/open-badges-context/-/open-badges-context-2.1.0.tgz", + "integrity": "sha512-VK7X5u6OoBFxkyIFplNqUPVbo+8vFSAEoam8tSozpj05KPfcGw41Tp5p9fqMnY38oPfwtZR2yDNSctj/slrE0A==", "license": "MIT" }, - "node_modules/@digitalcredentials/rdf-canonize": { - "version": "1.0.0", - "license": "BSD-3-Clause", - "dependencies": { - "fast-text-encoding": "^1.0.3", - "isomorphic-webcrypto": "^2.3.8" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@digitalcredentials/vc": { - "version": "6.0.1", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-10.0.1.tgz", + "integrity": "sha512-p8pfyB0lV+yGfyy13RaZWvxL22TeEXu3xR7VGEEiyj9aF1P05xUI0L8TDRINnvGbGgPiFHB3x2zUew0wAXSyPA==", "license": "BSD-3-Clause", "dependencies": { - "@digitalbazaar/vc-status-list": "^7.0.0", - "@digitalcredentials/ed25519-signature-2020": "^3.0.2", - "@digitalcredentials/jsonld": "^6.0.0", - "@digitalcredentials/jsonld-signatures": "^9.3.2", + "@digitalcredentials/credentials-v2-context": "^0.0.1-beta.0", + "@digitalcredentials/jsonld": "^9.0.0", + "@digitalcredentials/jsonld-signatures": "^12.0.1", "@digitalcredentials/open-badges-context": "^2.1.0", - "@digitalcredentials/vc-status-list": "^5.0.2", "credentials-context": "^2.0.0", - "fix-esm": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalcredentials/vc-status-list": { - "version": "5.0.2", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/vc-status-list-context": "^3.0.1", - "@digitalcredentials/bitstring": "^2.0.1", - "@digitalcredentials/vc": "^4.1.1", - "credentials-context": "^2.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/jsonld": { - "version": "5.2.2", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalcredentials/http-client": "^1.0.0", - "@digitalcredentials/rdf-canonize": "^1.0.0", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/@digitalcredentials/vc": { - "version": "4.2.0", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalcredentials/jsonld": "^5.2.1", - "@digitalcredentials/jsonld-signatures": "^9.3.1", - "credentials-context": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "ed25519-signature-2018-context": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/@digitalcredentials/vc-status-list/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/@emnapi/core": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", @@ -1264,13 +2360,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, "node_modules/@grpc/grpc-js": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", @@ -1913,6 +3002,7 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -1921,6 +3011,7 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1928,10 +3019,12 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.30", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2258,23 +3351,27 @@ } }, "node_modules/@noble/curves": { - "version": "1.9.7", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz", + "integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.8.0" + "@noble/hashes": "2.0.1" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { - "version": "1.8.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -2282,7 +3379,7 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -2294,7 +3391,7 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -2302,7 +3399,7 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -2604,41 +3701,78 @@ } }, "node_modules/@openid4vc/oauth2": { - "version": "0.3.0-alpha-20250825150235", + "version": "0.3.0-alpha-20251110130103", + "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20251110130103.tgz", + "integrity": "sha512-B7flK9sgev8Acd4Z9VfMJRrcCa+ksyWGarwvHblodxKSYhy9WFr22Vc0Hzik33uEaHxxBxXTnQojTuwiRi6ILA==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/utils": "0.3.0-alpha-20250825150235", - "zod": "^3.24.2" + "@openid4vc/utils": "0.3.0-alpha-20251110130103", + "zod": "^4.1.12" + } + }, + "node_modules/@openid4vc/oauth2/node_modules/zod": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", + "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/@openid4vc/openid4vci": { - "version": "0.3.0-alpha-20250825150235", + "version": "0.3.0-alpha-20251110130103", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20251110130103.tgz", + "integrity": "sha512-sOcFM7VWxD1jFZQMNp+ivxXMrJyaYfX3KR8tLDPpiGbTididpiZlujHQUj/DtfqDlLARvERX/PVPlCFwnsgpow==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20250825150235", - "@openid4vc/utils": "0.3.0-alpha-20250825150235", - "zod": "^3.24.2" + "@openid4vc/oauth2": "0.3.0-alpha-20251110130103", + "@openid4vc/utils": "0.3.0-alpha-20251110130103", + "zod": "^4.1.12" + } + }, + "node_modules/@openid4vc/openid4vci/node_modules/zod": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", + "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/@openid4vc/openid4vp": { - "version": "0.3.0-alpha-20250825150235", + "version": "0.3.0-alpha-20251110130103", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20251110130103.tgz", + "integrity": "sha512-noBCIU8eBFTHtNipQwcNYCsZZ6zF7vXiLsxkSbIxYYAikfKM/tkGYYghbm4g1faXCw8Nt9Om/dnmAXWASx6mzA==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20250825150235", - "@openid4vc/utils": "0.3.0-alpha-20250825150235", - "zod": "^3.24.2" + "@openid4vc/oauth2": "0.3.0-alpha-20251110130103", + "@openid4vc/utils": "0.3.0-alpha-20251110130103", + "zod": "^4.1.12" + } + }, + "node_modules/@openid4vc/openid4vp/node_modules/zod": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", + "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/@openid4vc/utils": { - "version": "0.3.0-alpha-20250825150235", + "version": "0.3.0-alpha-20251110130103", + "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20251110130103.tgz", + "integrity": "sha512-c1Yl03UvY+flYJMDiBLucvjK3gp0pFdmUE9jL2xUXNfm7E/OuVoHdqQKqGXdDK30w55EvyhhXLT0+56C2l3vXA==", "license": "Apache-2.0", "dependencies": { "buffer": "^6.0.3", - "zod": "^3.24.2" + "zod": "^4.1.12" } }, "node_modules/@openid4vc/utils/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -2659,6 +3793,15 @@ "ieee754": "^1.2.1" } }, + "node_modules/@openid4vc/utils/node_modules/zod": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", + "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@peculiar/asn1-cms": { "version": "2.4.0", "license": "MIT", @@ -2681,11 +3824,13 @@ } }, "node_modules/@peculiar/asn1-ecc": { - "version": "2.4.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.5.0.tgz", + "integrity": "sha512-t4eYGNhXtLRxaP50h3sfO6aJebUCDGQACoeexcelL4roMFRRVgB20yBIu2LxsPh/tdW9I282gNgMOyg3ywg/mg==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } @@ -2727,17 +3872,21 @@ } }, "node_modules/@peculiar/asn1-rsa": { - "version": "2.4.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.5.0.tgz", + "integrity": "sha512-qMZ/vweiTHy9syrkkqWFvbT3eLoedvamcUdnnvwyyUNv5FgFXA3KP8td+ATibnlZ0EANW5PYRm8E6MJzEB/72Q==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.4.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.5.0.tgz", + "integrity": "sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==", "license": "MIT", "dependencies": { "asn1js": "^3.0.6", @@ -2746,10 +3895,12 @@ } }, "node_modules/@peculiar/asn1-x509": { - "version": "2.4.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.5.0.tgz", + "integrity": "sha512-CpwtMCTJvfvYTFMuiME5IH+8qmDe3yEWzKHe7OOADbGfq7ohxeLaXwQo0q4du3qs0AII3UbLCvb9NF/6q0oTKQ==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-schema": "^2.5.0", "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" @@ -2775,20 +3926,6 @@ "node": ">=8.0.0" } }, - "node_modules/@peculiar/webcrypto": { - "version": "1.5.0", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2", - "webcrypto-core": "^1.8.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/@peculiar/x509": { "version": "1.13.0", "license": "MIT", @@ -2903,69 +4040,81 @@ "license": "BSD-3-Clause" }, "node_modules/@sd-jwt/core": { - "version": "0.10.0", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/core/-/core-0.16.0.tgz", + "integrity": "sha512-3rZCIxepMPmN7BGVHeDNpA5Leer3tSHsGkfaTVDXjqWryefNbhevb/jAb0EDkaMiIaM+DtS7HUXPiWuOsxEx7Q==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/decode": "0.10.0", - "@sd-jwt/present": "0.10.0", - "@sd-jwt/types": "0.10.0", - "@sd-jwt/utils": "0.10.0" + "@sd-jwt/decode": "0.16.0", + "@sd-jwt/present": "0.16.0", + "@sd-jwt/types": "0.16.0", + "@sd-jwt/utils": "0.16.0" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@sd-jwt/decode": { - "version": "0.10.0", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.16.0.tgz", + "integrity": "sha512-BFj5l3Xz+PrDBwh4bAgjBIgdauPup5ITdbmQ7wFDaAyQOaRSHCucA+uLIOm82CI4ioBboEkFiliNC4IbWvMUBA==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/types": "0.10.0", - "@sd-jwt/utils": "0.10.0" + "@sd-jwt/types": "0.16.0", + "@sd-jwt/utils": "0.16.0" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@sd-jwt/jwt-status-list": { - "version": "0.10.0", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/jwt-status-list/-/jwt-status-list-0.16.0.tgz", + "integrity": "sha512-3ElpfGJkDM7x2fZLPCGM/NZ70zR52iFVeMbbdcHoi2wnIAI66iCkNfVx2kwmiw1TviJQ0sm3jZWuHfnPzZ6nVw==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/types": "0.10.0", + "@sd-jwt/types": "0.16.0", "base64url": "^3.0.1", "pako": "^2.1.0" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@sd-jwt/present": { - "version": "0.10.0", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.16.0.tgz", + "integrity": "sha512-Z97N3CPDXW5xm+vZLTJeMSlD7BudDL/qIzZHGkttbiQMxERrBf8zHgl70BS7bpEIjoUInf6GoGSvF7o2rNJyBQ==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/decode": "0.10.0", - "@sd-jwt/types": "0.10.0", - "@sd-jwt/utils": "0.10.0" + "@sd-jwt/decode": "0.16.0", + "@sd-jwt/types": "0.16.0", + "@sd-jwt/utils": "0.16.0" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@sd-jwt/sd-jwt-vc": { - "version": "0.10.0", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.16.0.tgz", + "integrity": "sha512-nRkFNjREwEMU6KTu/F8Qegqm1102b+/CsgX3sI75lQIH2YjMvTRzHgmiA4TlZZwEN3ItgP1sZMK6lMW+hu/eMg==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/core": "0.10.0", - "@sd-jwt/jwt-status-list": "0.10.0", - "@sd-jwt/utils": "0.10.0", + "@sd-jwt/core": "0.16.0", + "@sd-jwt/jwt-status-list": "0.16.0", + "@sd-jwt/utils": "0.16.0", "ajv": "^8.17.1", "ajv-formats": "^3.0.1" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@sd-jwt/sd-jwt-vc/node_modules/ajv": { "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2980,24 +4129,30 @@ }, "node_modules/@sd-jwt/sd-jwt-vc/node_modules/json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/@sd-jwt/types": { - "version": "0.10.0", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.16.0.tgz", + "integrity": "sha512-nt7rxBXaFVUWUVIrhAi9tJ4P0hBeDP+0Tgn054QWpkAfZ+ruFT5jZ5qjfR/Ks8+hX53UhRdQgba6/3OZ02LsBw==", "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@sd-jwt/utils": { - "version": "0.10.0", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.16.0.tgz", + "integrity": "sha512-iF4bEvH4ipFRWsTymStU4CZeGAyNrE402+/sdnz2Tw2bcsOSLYNq24uJcHBwFGnzFpEDIN92vo9QsxGqR8z9gQ==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/types": "0.10.0", - "js-base64": "^3.7.6" + "@sd-jwt/types": "0.16.0", + "js-base64": "^3.7.8" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@sigstore/bundle": { @@ -3234,48 +4389,62 @@ } }, "node_modules/@stablelib/binary": { - "version": "1.0.1", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-2.0.1.tgz", + "integrity": "sha512-U9iAO8lXgEDONsA0zPPSgcf3HUBNAqHiJmSHgZz62OvC3Hi2Bhc5kTnQ3S1/L+sthDTHtCMhcEiklmIly6uQ3w==", "license": "MIT", "dependencies": { - "@stablelib/int": "^1.0.1" + "@stablelib/int": "^2.0.1" } }, "node_modules/@stablelib/ed25519": { - "version": "1.0.3", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-2.0.2.tgz", + "integrity": "sha512-d/lJ5sgzhtmpMIbKFWfev+i6WebBdIzzBpMzXtZdvUijoksjXosYFNqytoMj7cRshNj+/XTLYnnVMdZfd+penw==", "license": "MIT", "dependencies": { - "@stablelib/random": "^1.0.2", - "@stablelib/sha512": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "@stablelib/random": "^2.0.1", + "@stablelib/sha512": "^2.0.1", + "@stablelib/wipe": "^2.0.1" } }, "node_modules/@stablelib/hash": { - "version": "1.0.1", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-2.0.0.tgz", + "integrity": "sha512-u3WPSqGido8lwJuMcrBgM5K54LrPGhkWAdtsyccf7dGsLixAZUds77zOAbu7bvKPwQlmoByH0txBi5rTmEKuHg==", "license": "MIT" }, "node_modules/@stablelib/int": { - "version": "1.0.1", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-2.0.1.tgz", + "integrity": "sha512-Ht63fQp3wz/F8U4AlXEPb7hfJOIILs8Lq55jgtD7KueWtyjhVuzcsGLSTAWtZs3XJDZYdF1WcSKn+kBtbzupww==", "license": "MIT" }, "node_modules/@stablelib/random": { - "version": "1.0.2", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-2.0.1.tgz", + "integrity": "sha512-W6GAtXEEs7r+dSbuBsvoFmlyL3gLxle41tQkjKu17dDWtDdjhVUbtRfRCQcCUeczwkgjQxMPopgwYEvxXtHXGw==", "license": "MIT", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "@stablelib/binary": "^2.0.1", + "@stablelib/wipe": "^2.0.1" } }, "node_modules/@stablelib/sha512": { - "version": "1.0.1", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-2.0.1.tgz", + "integrity": "sha512-DUNe5cbnoH3sSIN+MG04RvTCLXtkbyy/SnQxiNO+GgF/KSXkkUSlF6mUVvCUdZBZ2X3NgogR+tAvaRSn8wxnLw==", "license": "MIT", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "@stablelib/binary": "^2.0.1", + "@stablelib/hash": "^2.0.0", + "@stablelib/wipe": "^2.0.1" } }, "node_modules/@stablelib/wipe": { - "version": "1.0.1", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-2.0.1.tgz", + "integrity": "sha512-1eU2K9EgOcV4qc9jcP6G72xxZxEm5PfeI5H55l08W95b4oRJaqhmlWRc4xZAm6IVSKhVNxMi66V67hCzzuMTAg==", "license": "MIT" }, "node_modules/@ts-graphviz/adapter": { @@ -3488,6 +4657,25 @@ "@types/node": "*" } }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/docker-modem": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", @@ -3516,12 +4704,41 @@ "dev": true, "license": "MIT", "dependencies": { - "@types/bn.js": "*" + "@types/bn.js": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.5.tgz", + "integrity": "sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", + "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/@types/estree": { - "version": "1.0.8", - "dev": true, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { @@ -3585,6 +4802,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "24.10.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", @@ -3597,9 +4820,44 @@ }, "node_modules/@types/qs": { "version": "6.14.0", - "dev": true, "license": "MIT" }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@types/sjcl": { "version": "1.0.34", "dev": true, @@ -3952,23 +5210,6 @@ "dev": true, "license": "ISC" }, - "node_modules/@unimodules/core": { - "version": "7.2.0", - "license": "MIT", - "optional": true, - "dependencies": { - "expo-modules-core": "~0.4.0" - } - }, - "node_modules/@unimodules/react-native-adapter": { - "version": "6.5.0", - "license": "MIT", - "optional": true, - "dependencies": { - "expo-modules-autolinking": "^0.3.2", - "expo-modules-core": "~0.4.0" - } - }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", @@ -4301,6 +5542,7 @@ }, "node_modules/abort-controller": { "version": "3.0.0", + "dev": true, "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" @@ -4309,6 +5551,31 @@ "node": ">=6.5" } }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.15.0", "dev": true, @@ -4425,7 +5692,7 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -4592,10 +5859,6 @@ "dev": true, "license": "MIT" }, - "node_modules/asmcrypto.js": { - "version": "0.22.0", - "license": "MIT" - }, "node_modules/asn1": { "version": "0.2.6", "dev": true, @@ -4638,14 +5901,6 @@ "version": "0.4.0", "license": "MIT" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "license": "ISC", - "optional": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/axios": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", @@ -4662,20 +5917,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/b64-lite": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "base-64": "^0.1.0" - } - }, - "node_modules/b64u-lite": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "b64-lite": "^1.4.0" - } - }, "node_modules/babel-jest": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", @@ -4731,6 +5972,58 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/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, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.2.0", "dev": true, @@ -4866,9 +6159,6 @@ "bare-path": "^3.0.0" } }, - "node_modules/base-64": { - "version": "0.1.0" - }, "node_modules/base64-js": { "version": "1.5.1", "funding": [ @@ -4889,19 +6179,21 @@ }, "node_modules/base64url": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", "license": "MIT", "engines": { "node": ">=6.0.0" } }, - "node_modules/base64url-universal": { - "version": "2.0.0", - "license": "BSD-3-Clause", - "dependencies": { - "base64url": "^3.0.1" - }, - "engines": { - "node": ">=14" + "node_modules/baseline-browser-mapping": { + "version": "2.8.26", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.26.tgz", + "integrity": "sha512-73lC1ugzwoaWCLJ1LvOgrR5xsMLTqSKIEoMHVtL9E/HNk0PXtTM76ZIm84856/SF7Nv8mPZxKoBsgpm0tR1u1Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" } }, "node_modules/bcrypt-pbkdf": { @@ -4933,6 +6225,26 @@ "version": "4.12.2", "license": "MIT" }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/borc": { "version": "3.0.0", "license": "MIT", @@ -4992,7 +6304,7 @@ }, "node_modules/braces": { "version": "3.0.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -5006,7 +6318,10 @@ "license": "MIT" }, "node_modules/browserslist": { - "version": "4.25.3", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5024,10 +6339,11 @@ "license": "MIT", "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001735", - "electron-to-chromium": "^1.5.204", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" @@ -5117,6 +6433,15 @@ "node": ">=0.10.0" } }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cacache": { "version": "20.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.1.tgz", @@ -5284,7 +6609,10 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001736", + "version": "1.0.30001754", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz", + "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5303,11 +6631,13 @@ }, "node_modules/canonicalize": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", "license": "Apache-2.0" }, "node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -5490,7 +6820,7 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5501,7 +6831,7 @@ }, "node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -5516,7 +6846,7 @@ }, "node_modules/commander": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 10" @@ -5589,10 +6919,64 @@ "dev": true, "license": "MIT" }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", + "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.26.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "dev": true, @@ -5687,6 +7071,8 @@ }, "node_modules/credentials-context": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz", + "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==", "license": "SEE LICENSE IN LICENSE.md" }, "node_modules/cross-fetch": { @@ -5743,20 +7129,6 @@ "node": ">= 8" } }, - "node_modules/crypto-ld": { - "version": "6.0.0", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/date-format": { "version": "4.0.14", "dev": true, @@ -5766,10 +7138,12 @@ } }, "node_modules/dcql": { - "version": "2.0.0-alpha-20250916080434", - "license": "MIT", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dcql/-/dcql-2.0.0.tgz", + "integrity": "sha512-+axocPnkCZfvmt9gT8RnVuQ2YTe/g3Wkycql5SubTnr17WqaE5vwa9pMmDcoAH3hdYGwM859z4WjGKkigzMRLQ==", + "license": "Apache-2.0", "dependencies": { - "valibot": "1.0.0-beta.8" + "valibot": "1.1.0" } }, "node_modules/debug": { @@ -5868,6 +7242,15 @@ "node": ">=0.4.0" } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/dependency-tree": { "version": "11.2.0", "dev": true, @@ -6168,14 +7551,21 @@ }, "node_modules/ed25519-signature-2018-context": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", + "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", "license": "BSD-3-Clause" }, - "node_modules/ed25519-signature-2020-context": { - "version": "1.1.0", - "license": "BSD-3-Clause" + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.207", + "version": "1.5.250", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.250.tgz", + "integrity": "sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==", + "dev": true, "license": "ISC" }, "node_modules/elliptic": { @@ -6209,6 +7599,15 @@ "dev": true, "license": "MIT" }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -6317,11 +7716,18 @@ }, "node_modules/escalade": { "version": "3.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "dev": true, @@ -6580,8 +7986,18 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6674,46 +8090,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/expo-modules-autolinking": { - "version": "0.3.4", - "license": "MIT", - "optional": true, - "dependencies": { - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "~5.0.0", - "fs-extra": "^9.1.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" - } - }, - "node_modules/expo-modules-core": { - "version": "0.4.10", - "license": "MIT", - "optional": true, - "dependencies": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" - } - }, - "node_modules/expo-modules-core/node_modules/compare-versions": { - "version": "3.6.0", - "license": "MIT", - "optional": true - }, - "node_modules/expo-random": { - "version": "14.0.1", - "license": "MIT", - "optional": true, - "dependencies": { - "base64-js": "^1.3.0" - }, - "peerDependencies": { - "expo": "*" - } - }, "node_modules/exponential-backoff": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", @@ -6721,6 +8097,60 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "license": "MIT" @@ -6732,7 +8162,7 @@ }, "node_modules/fast-glob": { "version": "3.3.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6747,7 +8177,7 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -6771,6 +8201,8 @@ }, "node_modules/fast-text-encoding": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", "license": "Apache-2.0" }, "node_modules/fast-uri": { @@ -6789,7 +8221,7 @@ }, "node_modules/fastq": { "version": "1.19.1", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -6803,18 +8235,6 @@ "bser": "2.1.1" } }, - "node_modules/fetch-blob": { - "version": "2.1.2", - "license": "MIT", - "engines": { - "node": "^10.17.0 || >=12.3.0" - }, - "peerDependenciesMeta": { - "domexception": { - "optional": true - } - } - }, "node_modules/file-entry-cache": { "version": "8.0.0", "dev": true, @@ -6860,7 +8280,7 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -6869,9 +8289,26 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/find-up": { "version": "5.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -6892,15 +8329,6 @@ "micromatch": "^4.0.2" } }, - "node_modules/fix-esm": { - "version": "1.0.1", - "license": "WTFPL OR CC0-1.0", - "dependencies": { - "@babel/core": "^7.14.6", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5" - } - }, "node_modules/flat-cache": { "version": "4.0.1", "dev": true, @@ -6973,35 +8401,22 @@ "version": "1.0.5", "license": "MIT" }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", - "dependencies": { - "fetch-blob": "^3.1.2" - }, "engines": { - "node": ">=12.20.0" + "node": ">= 0.6" } }, - "node_modules/formdata-polyfill/node_modules/fetch-blob": { - "version": "3.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, "engines": { - "node": "^12.20 || >= 14.13" + "node": ">= 0.8" } }, "node_modules/fs-constants": { @@ -7011,20 +8426,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fs-extra": { - "version": "9.1.0", - "license": "MIT", - "optional": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fs-minipass": { "version": "3.0.3", "dev": true, @@ -7065,6 +8466,7 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -7266,7 +8668,7 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -7296,7 +8698,7 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7398,6 +8800,31 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/http-proxy-agent": { "version": "7.0.2", "dev": true, @@ -7437,7 +8864,6 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", - "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7564,14 +8990,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/invariant": { - "version": "2.2.4", - "license": "MIT", - "optional": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/ip-address": { "version": "10.0.1", "dev": true, @@ -7580,6 +8998,15 @@ "node": ">= 12" } }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7617,7 +9044,7 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7643,7 +9070,7 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -7662,7 +9089,7 @@ }, "node_modules/is-number": { "version": "7.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -7676,6 +9103,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/is-regexp": { "version": "1.0.0", "dev": true, @@ -7750,25 +9183,6 @@ "node": ">=12" } }, - "node_modules/isomorphic-webcrypto": { - "version": "2.3.8", - "license": "MIT", - "dependencies": { - "@peculiar/webcrypto": "^1.0.22", - "asmcrypto.js": "^0.22.0", - "b64-lite": "^1.3.1", - "b64u-lite": "^1.0.1", - "msrcrypto": "^1.5.6", - "str2buf": "^1.3.0", - "webcrypto-shim": "^0.1.4" - }, - "optionalDependencies": { - "@unimodules/core": "*", - "@unimodules/react-native-adapter": "*", - "expo-random": "*", - "react-native-securerandom": "^0.1.1" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "dev": true, @@ -8460,6 +9874,7 @@ }, "node_modules/js-tokens": { "version": "4.0.0", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -8477,6 +9892,7 @@ }, "node_modules/jsesc": { "version": "3.1.0", + "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -8547,6 +9963,7 @@ }, "node_modules/json5": { "version": "2.2.3", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -8557,7 +9974,7 @@ }, "node_modules/jsonfile": { "version": "6.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -8574,56 +9991,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsonld": { - "version": "8.3.3", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/jsonld-signatures": { - "version": "11.5.0", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/security-context": "^1.0.0", - "jsonld": "^8.0.0", - "rdf-canonize": "^4.0.1", - "serialize-error": "^8.1.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jsonld-signatures/node_modules/rdf-canonize": { - "version": "4.0.1", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jsonld/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonld/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/jsonparse": { "version": "1.3.1", "dev": true, @@ -8653,39 +10020,17 @@ } }, "node_modules/ky": { - "version": "0.25.1", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.0.tgz", + "integrity": "sha512-Rczb6FMM6JT0lvrOlP5WUOCB7s9XKxzwgErzhKlKde1bEV90FXplV1o87fpt4PU/asJFiqjYJxAJyzJhcrxOsQ==", "license": "MIT", - "peer": true, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/ky-universal": { - "version": "0.8.2", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "3.0.0-beta.9" - }, - "engines": { - "node": ">=10.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.17.0", - "web-streams-polyfill": ">=2.0.0" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } - } - }, "node_modules/lazystream": { "version": "1.0.1", "dev": true, @@ -8881,7 +10226,7 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -8904,6 +10249,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "dev": true, @@ -8955,23 +10307,13 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "optional": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lru_map": { "version": "0.4.1", "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -9118,6 +10460,15 @@ "node": ">= 0.4" } }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", @@ -9125,6 +10476,18 @@ "dev": true, "license": "MIT" }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "dev": true, @@ -9132,7 +10495,7 @@ }, "node_modules/merge2": { "version": "1.4.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -9140,7 +10503,7 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -9150,6 +10513,15 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mime-types": { "version": "2.1.35", "license": "MIT", @@ -9468,10 +10840,6 @@ "version": "2.1.3", "license": "MIT" }, - "node_modules/msrcrypto": { - "version": "1.5.8", - "license": "Apache-2.0" - }, "node_modules/multiformats": { "version": "9.9.0", "license": "(Apache-2.0 AND MIT)" @@ -9505,65 +10873,32 @@ "dev": true, "license": "MIT", "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.0.0-beta.9", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^2.1.1" + "napi-postinstall": "lib/cli.js" }, "engines": { - "node": "^10.17 || >=12.3" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, "node_modules/node-gyp": { "version": "11.5.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", @@ -9639,7 +10974,10 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.19", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, "license": "MIT" }, "node_modules/node-source-walk": { @@ -9891,9 +11229,20 @@ "node": ">= 0.4" } }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -10012,7 +11361,7 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -10026,7 +11375,7 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -10098,6 +11447,8 @@ }, "node_modules/pako": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { @@ -10145,6 +11496,15 @@ "node": ">=6" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/patch-package": { "version": "8.0.1", "dev": true, @@ -10210,7 +11570,7 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10257,13 +11617,24 @@ "dev": true, "license": "ISC" }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/picocolors": { "version": "1.1.1", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -10598,6 +11969,19 @@ "node": ">=12.0.0" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "license": "MIT" @@ -10667,7 +12051,7 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -10689,6 +12073,46 @@ "dev": true, "license": "MIT" }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/rc": { "version": "1.2.8", "dev": true, @@ -10718,6 +12142,8 @@ }, "node_modules/rdf-canonize": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", "license": "BSD-3-Clause", "dependencies": { "setimmediate": "^1.0.5" @@ -10731,17 +12157,6 @@ "dev": true, "license": "MIT" }, - "node_modules/react-native-securerandom": { - "version": "0.1.1", - "license": "MIT", - "optional": true, - "dependencies": { - "base64-js": "*" - }, - "peerDependencies": { - "react-native": "*" - } - }, "node_modules/read-installed": { "version": "4.0.3", "dev": true, @@ -10860,6 +12275,64 @@ "version": "0.2.2", "license": "Apache-2.0" }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, "node_modules/require-directory": { "version": "2.1.1", "dev": true, @@ -10984,7 +12457,7 @@ }, "node_modules/reusify": { "version": "1.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -10996,9 +12469,25 @@ "dev": true, "license": "MIT" }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/run-parallel": { "version": "1.2.0", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -11053,7 +12542,6 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "devOptional": true, "license": "MIT" }, "node_modules/sass-lookup": { @@ -11092,8 +12580,44 @@ "node": ">=10" } }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/send/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serialize-error": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -11107,6 +12631,8 @@ }, "node_modules/serialize-error/node_modules/type-fest": { "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==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -11115,6 +12641,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "dev": true, @@ -11133,8 +12674,16 @@ }, "node_modules/setimmediate": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "license": "MIT" }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, "node_modules/shebang-command": { "version": "2.0.0", "dev": true, @@ -11550,9 +13099,14 @@ "node": ">= 0.8.0" } }, - "node_modules/str2buf": { - "version": "1.3.0", - "license": "MIT" + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, "node_modules/stream-to-array": { "version": "2.3.0", @@ -11816,7 +13370,7 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12045,7 +13599,7 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -12054,6 +13608,15 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tr46": { "version": "5.1.1", "dev": true, @@ -12476,6 +14039,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -12550,6 +14139,50 @@ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT" }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/unique-filename": { "version": "4.0.0", "dev": true, @@ -12574,12 +14207,21 @@ }, "node_modules/universalify": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -12616,7 +14258,10 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, "funding": [ { "type": "opencollective", @@ -12692,7 +14337,9 @@ } }, "node_modules/valibot": { - "version": "1.0.0-beta.8", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.1.0.tgz", + "integrity": "sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==", "license": "MIT", "peerDependencies": { "typescript": ">=5" @@ -12735,6 +14382,15 @@ "version": "6.0.0", "license": "MIT" }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/walkdir": { "version": "0.4.1", "dev": true, @@ -12767,13 +14423,6 @@ "did-resolver": "^4.1.0" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/webcrypto-core": { "version": "1.8.1", "license": "MIT", @@ -12785,10 +14434,6 @@ "tslib": "^2.7.0" } }, - "node_modules/webcrypto-shim": { - "version": "0.1.7", - "license": "MIT" - }, "node_modules/webidl-conversions": { "version": "7.0.0", "dev": true, @@ -12984,7 +14629,6 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -13028,6 +14672,7 @@ }, "node_modules/yallist": { "version": "3.1.1", + "dev": true, "license": "ISC" }, "node_modules/yaml": { @@ -13113,7 +14758,7 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -13200,8 +14845,8 @@ "name": "@nmshd/consumption", "license": "AGPL-3.0-or-later", "dependencies": { - "@credo-ts/core": "v0.6.0-alpha-20250919145226", - "@credo-ts/openid4vc": "v0.6.0-alpha-20250919145226", + "@credo-ts/core": "v0.6.0-alpha-20251110135447", + "@credo-ts/openid4vc": "v0.6.0-alpha-20251110135447", "@js-soft/docdb-querytranslator": "^1.1.6", "@js-soft/ts-serval": "2.0.14", "@js-soft/ts-utils": "2.3.5", diff --git a/package.json b/package.json index 295ccf898..6c3431cff 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,8 @@ "test:teardown": "docker compose -f .dev/compose.yml down -fsv" }, "devDependencies": { + "@babel/preset-env": "^7.28.5", + "@babel/preset-typescript": "^7.28.5", "@js-soft/eslint-config-ts": "^2.0.4", "@js-soft/license-check": "^1.0.10", "@types/jest": "^30.0.0", diff --git a/packages/app-runtime/package.json b/packages/app-runtime/package.json index 95a49be03..42244e124 100644 --- a/packages/app-runtime/package.json +++ b/packages/app-runtime/package.json @@ -43,13 +43,16 @@ "testEnvironment": "node", "testTimeout": 60000, "transform": { - "^.+\\.ts$": [ + "^.+\\.(t|j)s$": [ "ts-jest", { "tsconfig": "test/tsconfig.json" } ] - } + }, + "transformIgnorePatterns": [ + "/node_modules/(?!(@noble|@stablelib|@credo\\-ts/core/node_modules/uuid)/)" + ] }, "dependencies": { "@js-soft/docdb-access-loki": "^1.3.1", diff --git a/packages/app-runtime/test/tsconfig.json b/packages/app-runtime/test/tsconfig.json index db9a0d1ee..3bbf071a7 100644 --- a/packages/app-runtime/test/tsconfig.json +++ b/packages/app-runtime/test/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "baseUrl": "../", "noEmit": true, - "composite": false + "composite": false, + "allowJs": true // we want to use the ts compiler to compile ESM node modules into CJS which is understood by jest. This is required since those node modules are javascript. }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], "include": ["**/*.ts", "../src/**/*.ts"], diff --git a/packages/consumption/package.json b/packages/consumption/package.json index b4c663df6..b1e08d986 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -50,17 +50,20 @@ "testEnvironment": "node", "testTimeout": 60000, "transform": { - "^.+\\.ts$": [ + "^.+\\.(t|j)s$": [ "ts-jest", { "tsconfig": "test/tsconfig.json" } ] - } + }, + "transformIgnorePatterns": [ + "/node_modules/(?!(@noble|@stablelib|@credo\\-ts/core/node_modules/uuid)/)" + ] }, "dependencies": { - "@credo-ts/core": "v0.6.0-alpha-20250919145226", - "@credo-ts/openid4vc": "v0.6.0-alpha-20250919145226", + "@credo-ts/core": "v0.6.0-alpha-20251110135447", + "@credo-ts/openid4vc": "v0.6.0-alpha-20251110135447", "@js-soft/docdb-querytranslator": "^1.1.6", "@js-soft/ts-serval": "2.0.14", "@js-soft/ts-utils": "2.3.5", diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index 0b565f9a1..f846a0d08 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -4,13 +4,14 @@ import { DependencyManager, DidKey, InjectionSymbols, + Kms, LogLevel, + StorageVersionRecord, type InitConfig, type KeyDidCreateOptions, type ModulesMap, type VerificationMethod } from "@credo-ts/core"; -import { KeyManagementModuleConfig } from "@credo-ts/core/build/modules/kms"; import { AccountController } from "@nmshd/transport"; import { EventEmitter } from "events"; import webSocket from "ws"; @@ -70,10 +71,9 @@ export class BaseAgent { public async initializeAgent(privateKey: string): Promise { // as we are not using askar we need to set the storage version const storage = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); - const versionRecord = { id: "STORAGE_VERSION_RECORD_ID", storageVersion: "0.5.0", value: "0.5.0" }; - await storage.save(this.agent.context, versionRecord); + await storage.save(this.agent.context, new StorageVersionRecord({ storageVersion: "0.5.0" })); - const kmsConfig = this.agent.dependencyManager.resolve(KeyManagementModuleConfig); + const kmsConfig = this.agent.dependencyManager.resolve(Kms.KeyManagementModuleConfig); kmsConfig.registerBackend(new EnmshedHolderKeyManagmentService()); if (kmsConfig.backends.length === 0) throw new Error("No KMS backend registered"); diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts index bce63ae53..84439303d 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts @@ -1,26 +1,4 @@ -import { AgentContext } from "@credo-ts/core"; -import { - KeyManagementService, - KmsCreateKeyOptions, - KmsCreateKeyReturn, - KmsCreateKeyType, - KmsDecryptOptions, - KmsDecryptReturn, - KmsDeleteKeyOptions, - KmsEncryptOptions, - KmsEncryptReturn, - KmsImportKeyOptions, - KmsImportKeyReturn, - KmsJwkPrivate, - KmsJwkPublic, - KmsOperation, - KmsRandomBytesOptions, - KmsRandomBytesReturn, - KmsSignOptions, - KmsSignReturn, - KmsVerifyOptions, - KmsVerifyReturn -} from "@credo-ts/core/build/modules/kms"; +import { AgentContext, Kms } from "@credo-ts/core"; import { ec as EC } from "elliptic"; import _sodium from "libsodium-wrappers"; import sjcl from "sjcl"; @@ -31,7 +9,7 @@ export interface JwkKeyPair { keyType?: string; } -export class EnmshedHolderKeyManagmentService implements KeyManagementService { +export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementService { public static readonly backend = "fakeKeyManagementService"; public readonly backend = EnmshedHolderKeyManagmentService.backend; @@ -70,7 +48,7 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { // console.log(`FKM: global instance state ${JSON.stringify(Array.from((globalThis as any).fakeKeyStorage.entries()))}`); } - public isOperationSupported(agentContext: AgentContext, operation: KmsOperation): boolean { + public isOperationSupported(agentContext: AgentContext, operation: Kms.KmsOperation): boolean { agentContext.config.logger.debug(`EKM: Checking if operation is supported: ${JSON.stringify(operation)}`); if (operation.operation === "createKey") { if (operation.type.kty === "OKP") { @@ -98,18 +76,16 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { } return false; } - - public getPublicKey(agentContext: AgentContext, keyId: string): Promise { + public getPublicKey(agentContext: AgentContext, keyId: string): Promise { const keyPair = this.keystore.get(keyId); if (!keyPair) { agentContext.config.logger.error(`EKM: Key with id ${keyId} not found`); throw new Error(`Key with id ${keyId} not found`); } - return Promise.resolve((JSON.parse(keyPair) as JwkKeyPair).publicKey as KmsJwkPublic); + return Promise.resolve((JSON.parse(keyPair) as JwkKeyPair).publicKey as Kms.KmsJwkPublic); } - - public async createKey(agentContext: AgentContext, options: KmsCreateKeyOptions): Promise> { + public async createKey(agentContext: AgentContext, options: Kms.KmsCreateKeyOptions): Promise> { options.keyId ??= "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { // Use libsodium's randombytes_uniform for secure random number generation const r = _sodium.randombytes_uniform(16); @@ -151,8 +127,8 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { this.updateGlobalInstance(this.keystore); return await Promise.resolve({ keyId: options.keyId, - publicJwk: publicJwk as KmsJwkPublic - } as KmsCreateKeyReturn); + publicJwk: publicJwk as Kms.KmsJwkPublic + } as Kms.KmsCreateKeyReturn); } await _sodium.ready; @@ -186,16 +162,14 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { this.updateGlobalInstance(this.keystore); return await Promise.resolve({ keyId: options.keyId, - publicJwk: publicJwk as KmsJwkPublic - } as KmsCreateKeyReturn); + publicJwk: publicJwk as Kms.KmsJwkPublic + } as Kms.KmsCreateKeyReturn); } - - public importKey(agentContext: AgentContext, options: KmsImportKeyOptions): Promise> { + public importKey(agentContext: AgentContext, options: Kms.KmsImportKeyOptions): Promise> { agentContext.config.logger.debug(`EKM: Importing key with ${JSON.stringify(options)}`); throw new Error("Method not implemented."); } - - public deleteKey(agentContext: AgentContext, options: KmsDeleteKeyOptions): Promise { + public deleteKey(agentContext: AgentContext, options: Kms.KmsDeleteKeyOptions): Promise { if (this.keystore.has(options.keyId)) { agentContext.config.logger.debug(`EKM: Deleting key with id ${options.keyId}`); this.keystore.delete(options.keyId); @@ -204,8 +178,7 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { } throw new Error(`key with id ${options.keyId} not found. and cannot be deleted`); } - - public async sign(agentContext: AgentContext, options: KmsSignOptions): Promise { + public async sign(agentContext: AgentContext, options: Kms.KmsSignOptions): Promise { agentContext.config.logger.debug(`EKM: Signing data with key id ${options.keyId} using algorithm ${options.algorithm}`); const stringifiedKeyPair = this.keystore.get(options.keyId); @@ -236,7 +209,7 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { return await Promise.resolve({ signature: signatureBytes - } as KmsSignReturn); + } as Kms.KmsSignReturn); } await _sodium.ready; @@ -263,11 +236,11 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { const signature = sodium.crypto_sign_detached(options.data, fullPrivateKeyBytes); return { - signature: signature + signature: signature as Uint8Array // I hope this cast doesn't paper over something }; } - public verify(agentContext: AgentContext, options: KmsVerifyOptions): Promise { + public verify(agentContext: AgentContext, options: Kms.KmsVerifyOptions): Promise { agentContext.config.logger.debug(`EKM: Verifying signature with key id ${options.key.keyId} using algorithm ${options.algorithm}`); // Use P-256 (aka secp256r1) const ec = new EC("p256"); @@ -293,7 +266,7 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { const dataHash = ec.hash().update(options.data).digest(); try { const verified = key.verify(dataHash, signature); - return Promise.resolve({ verified: verified } as KmsVerifyReturn); + return Promise.resolve({ verified: verified } as Kms.KmsVerifyReturn); } catch (e) { agentContext.config.logger.error(`EKM: Error during signature verification: ${e}`); throw e; @@ -387,7 +360,7 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { return hashBuf.subarray(0, keyLength / 8); } - public encrypt(agentContext: AgentContext, options: KmsEncryptOptions): Promise { + public encrypt(agentContext: AgentContext, options: Kms.KmsEncryptOptions): Promise { try { // encryption via A-256-GCM // we will call the services side bob and the incoming side alice @@ -437,12 +410,11 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { } } - public decrypt(agentContext: AgentContext, options: KmsDecryptOptions): Promise { + public decrypt(agentContext: AgentContext, options: Kms.KmsDecryptOptions): Promise { agentContext.config.logger.debug(`EKM: Decrypting data with key id ${options.key.keyId} using options ${options}`); throw new Error("Method not implemented."); } - - public randomBytes(agentContext: AgentContext, options: KmsRandomBytesOptions): KmsRandomBytesReturn { + public randomBytes(agentContext: AgentContext, options: Kms.KmsRandomBytesOptions): Kms.KmsRandomBytesReturn { agentContext.config.logger.debug(`EKM: Generating ${options.length} random bytes`); return _sodium.randombytes_buf(options.length); // Uint8Array } diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index a47a8f63e..413104851 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -194,34 +194,27 @@ export class EnmeshedStorageService implements StorageServ agentContext.config.logger.debug(`Finding records by query ${JSON.stringify(query)} and options ${JSON.stringify(queryOptions)}`); const records: T[] = []; for (const record of await this.getAll(agentContext, recordClass)) { - let match = true; - for (const [key, value] of Object.entries(query)) { - if ((record as any)[key] !== value) { - match = false; - break; - } - } - if (match) { + if (this.matchesQuery(record, query)) { records.push(record); } } if (records.length === 0) { // try to recover over local storage - temporary fix for (const record of this.storage.values()) { - let match = true; - // there may be keys labeled with an $or - solve them accordingly - // TODO: $or and other operators not yet supported - for (const [key, value] of Object.entries(query)) { - if ((record as any)[key] !== value) { - match = false; - break; - } - } - if (match) { + if (this.matchesQuery(record, query)) { records.push(record); } } } return records; } + + private matchesQuery(record: BaseRecord, query: Query): boolean { + return Object.entries(query).every(([key, value]) => { + if (key === "$or") { + return (value as any[]).some((subquery) => this.matchesQuery(record, subquery)); + } + return record.getTags()[key] === value; + }); + } } diff --git a/packages/consumption/test/tsconfig.json b/packages/consumption/test/tsconfig.json index db9a0d1ee..3bbf071a7 100644 --- a/packages/consumption/test/tsconfig.json +++ b/packages/consumption/test/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "baseUrl": "../", "noEmit": true, - "composite": false + "composite": false, + "allowJs": true // we want to use the ts compiler to compile ESM node modules into CJS which is understood by jest. This is required since those node modules are javascript. }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], "include": ["**/*.ts", "../src/**/*.ts"], diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 9c0375a02..641e66146 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -51,13 +51,16 @@ "testEnvironment": "node", "testTimeout": 60000, "transform": { - "^.+\\.ts$": [ + "^.+\\.(t|j)s$": [ "ts-jest", { "tsconfig": "test/tsconfig.json" } ] - } + }, + "transformIgnorePatterns": [ + "/node_modules/(?!(@noble|@stablelib|@credo\\-ts/core/node_modules/uuid)/)" + ] }, "dependencies": { "@js-soft/docdb-querytranslator": "^1.1.6", diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 651b2fa31..0c32424eb 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -1,7 +1,7 @@ import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import axios, { AxiosInstance } from "axios"; import path from "path"; -import { DockerComposeEnvironment, StartedDockerComposeEnvironment, Wait } from "testcontainers"; +import { DockerComposeEnvironment, GenericContainer, StartedDockerComposeEnvironment, StartedTestContainer, Wait } from "testcontainers"; import { Agent as UndiciAgent, fetch as undiciFetch } from "undici"; import { ConsumptionServices } from "../../src"; import { RuntimeServiceProvider } from "../lib"; @@ -11,36 +11,38 @@ const fetchInstance: typeof fetch = (async (input, init) => { return response; }) as typeof fetch; -const runtimeServiceProvider = new RuntimeServiceProvider(fetchInstance); -let consumptionServices: ConsumptionServices; -let axiosInstance: AxiosInstance; -let dockerComposeStack: StartedDockerComposeEnvironment | undefined; +describe("custom openid4vc service", () => { + const runtimeServiceProvider = new RuntimeServiceProvider(fetchInstance); + let consumptionServices: ConsumptionServices; -beforeAll(async () => { - const runtimeServices = await runtimeServiceProvider.launch(1); - consumptionServices = runtimeServices[0].consumption; + let axiosInstance: AxiosInstance; + let dockerComposeStack: StartedDockerComposeEnvironment | undefined; - let oid4vcServiceBaseUrl = process.env.OPENID4VC_SERVICE_BASEURL!; - if (!oid4vcServiceBaseUrl) { - dockerComposeStack = await startOid4VcComposeStack(); - const mappedPort = dockerComposeStack.getContainer("oid4vc-service-1").getMappedPort(9000); - oid4vcServiceBaseUrl = `http://localhost:${mappedPort}`; - } + beforeAll(async () => { + const runtimeServices = await runtimeServiceProvider.launch(1); + consumptionServices = runtimeServices[0].consumption; - axiosInstance = axios.create({ - baseURL: oid4vcServiceBaseUrl, - headers: { - "Content-Type": "application/json" // eslint-disable-line @typescript-eslint/naming-convention + let oid4vcServiceBaseUrl = process.env.OPENID4VC_SERVICE_BASEURL!; + if (!oid4vcServiceBaseUrl) { + dockerComposeStack = await startOid4VcComposeStack(); + const mappedPort = dockerComposeStack.getContainer("oid4vc-service-1").getMappedPort(9000); + oid4vcServiceBaseUrl = `http://localhost:${mappedPort}`; } - }); -}, 120000); -afterAll(async () => { - await runtimeServiceProvider.stop(); - if (dockerComposeStack) await dockerComposeStack.down(); -}); + axiosInstance = axios.create({ + baseURL: oid4vcServiceBaseUrl, + headers: { + // eslint-disable-next-line @typescript-eslint/naming-convention + "Content-Type": "application/json" + } + }); + }, 120000); + + afterAll(async () => { + await runtimeServiceProvider.stop(); + if (dockerComposeStack) await dockerComposeStack.down(); + }); -describe("OpenID4VCI and OpenID4VCP", () => { let credentialOfferUrl: string; test("should process a given credential offer", async () => { @@ -86,6 +88,7 @@ describe("OpenID4VCI and OpenID4VCP", () => { pex: { id: "anId", purpose: "To prove you work here", + // eslint-disable-next-line @typescript-eslint/naming-convention input_descriptors: [ { @@ -151,29 +154,145 @@ describe("OpenID4VCI and OpenID4VCP", () => { expect(singleCredentialResult.value).toHaveLength(1); expect(singleCredentialResult.value[0].id).toBe(firstCredentialId); }); -}); -async function startOid4VcComposeStack() { - let baseUrl = process.env.NMSHD_TEST_BASEURL!; - let addressGenerationHostnameOverride: string | undefined; + async function startOid4VcComposeStack() { + let baseUrl = process.env.NMSHD_TEST_BASEURL!; + let addressGenerationHostnameOverride: string | undefined; - if (baseUrl.includes("localhost")) { - addressGenerationHostnameOverride = "localhost"; - baseUrl = baseUrl.replace("localhost", "host.docker.internal"); + if (baseUrl.includes("localhost")) { + addressGenerationHostnameOverride = "localhost"; + baseUrl = baseUrl.replace("localhost", "host.docker.internal"); + } + + const composeFolder = path.resolve(path.join(__dirname, "..", "..", "..", "..", ".dev")); + const composeStack = await new DockerComposeEnvironment(composeFolder, "compose.openid4vc.yml") + .withProjectName("runtime-oid4vc-tests") + .withEnvironment({ + // eslint-disable-next-line @typescript-eslint/naming-convention + NMSHD_TEST_BASEURL: baseUrl, + + // eslint-disable-next-line @typescript-eslint/naming-convention + NMSHD_TEST_ADDRESSGENERATIONHOSTNAMEOVERRIDE: addressGenerationHostnameOverride + } as Record) + .withStartupTimeout(60000) + .withWaitStrategy("oid4vc-service", Wait.forHealthCheck()) + .up(); + + return composeStack; } +}); + +describe("EUDIPLO", () => { + const eudiploUser = "test-admin"; + const eudiploPassword = "test"; + const eudiploIssuanceConfigurationId = "Employee ID Card"; + const eudiploPresentationConfigurationId = "Employee ID Card"; + const eudiploCredentialIdInConfiguration = "EmployeeIdCard"; + const eudiploPort = 3000; // CAUTION: don't change this. The DCQL query has this port hardcoded in its configuration. The presentation test will fail if we change this. + + const runtimeServiceProvider = new RuntimeServiceProvider(fetchInstance); + let consumptionServices: ConsumptionServices; + + let eudiploContainer: StartedTestContainer | undefined; + let axiosInstance: AxiosInstance; + + beforeAll(async () => { + eudiploContainer = await startEudiplo(); + + const baseUrl = `http://localhost:${eudiploPort}`; + + const accessTokenResponse = await axios.post( + `${baseUrl}/oauth2/token`, + { + grant_type: "client_credentials" // eslint-disable-line @typescript-eslint/naming-convention + }, + { + headers: { + "Content-Type": "application/json" // eslint-disable-line @typescript-eslint/naming-convention + }, + auth: { + username: eudiploUser, + password: eudiploPassword + } + } + ); - const composeFolder = path.resolve(path.join(__dirname, "..", "..", "..", "..", ".dev")); - const composeStack = await new DockerComposeEnvironment(composeFolder, "compose.openid4vc.yml") - .withProjectName("runtime-oid4vc-tests") - .withEnvironment({ - // eslint-disable-next-line @typescript-eslint/naming-convention - NMSHD_TEST_BASEURL: baseUrl, - // eslint-disable-next-line @typescript-eslint/naming-convention - NMSHD_TEST_ADDRESSGENERATIONHOSTNAMEOVERRIDE: addressGenerationHostnameOverride - } as Record) - .withStartupTimeout(60000) - .withWaitStrategy("oid4vc-service", Wait.forHealthCheck()) - .up(); - - return composeStack; -} + const accessToken = accessTokenResponse.data.access_token; + + axiosInstance = axios.create({ + baseURL: baseUrl, + headers: { + "Content-Type": "application/json", // eslint-disable-line @typescript-eslint/naming-convention + Authorization: `Bearer ${accessToken}` // eslint-disable-line @typescript-eslint/naming-convention + } + }); + + const runtimeServices = await runtimeServiceProvider.launch(1); + consumptionServices = runtimeServices[0].consumption; + }); + + afterAll(async () => { + await eudiploContainer?.stop(); + + await runtimeServiceProvider.stop(); + }); + + test("issuance", async () => { + const credentialOfferUrl = ( + await axiosInstance.post("/issuer-management/offer", { + response_type: "uri", // eslint-disable-line @typescript-eslint/naming-convention + issuanceId: eudiploIssuanceConfigurationId + }) + ).data.uri; + + const loadResult = await consumptionServices.openId4Vc.fetchCredentialOffer({ credentialOfferUrl }); + expect(loadResult).toBeSuccessful(); + + const resolveResult = await consumptionServices.openId4Vc.resolveFetchedCredentialOffer({ + data: loadResult.value.jsonRepresentation, + requestedCredentials: [eudiploCredentialIdInConfiguration] + }); + expect(resolveResult).toBeSuccessful(); + }); + + test("presentation", async () => { + const requestUrl = ( + await axiosInstance.post(`/presentation-management/request`, { + response_type: "uri", // eslint-disable-line @typescript-eslint/naming-convention + requestId: eudiploPresentationConfigurationId + }) + ).data.uri; + + const loadResult = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ requestUrl }); + expect(loadResult).toBeSuccessful(); + + const queryResult = loadResult.value.authorizationRequest.dcql.queryResult; + expect(queryResult.can_be_satisfied).toBe(true); + + const credentialMatches = queryResult.credential_matches["EmployeeIdCard-vc-sd-jwt"]; + expect(credentialMatches.valid_credentials).toHaveLength(1); + + // TODO: send the presentation with a manually selected credential + }); + + function startEudiplo() { + const eudiploContainer = new GenericContainer("ghcr.io/openwallet-foundation-labs/eudiplo:1.9") + .withCopyDirectoriesToContainer([ + { + source: path.resolve(path.join(__dirname, "..", "..", "..", "..", ".dev", "eudiplo-assets")), + target: "/app/config" + } + ]) + .withEnvironment({ + JWT_SECRET: "OgwrDcgVQQ2yZwcFt7kPxQm3nUF+X3etF6MdLTstZAY=", // eslint-disable-line @typescript-eslint/naming-convention + AUTH_CLIENT_ID: "root", // eslint-disable-line @typescript-eslint/naming-convention + AUTH_CLIENT_SECRET: "test", // eslint-disable-line @typescript-eslint/naming-convention + PUBLIC_URL: `http://localhost:${eudiploPort}`, // eslint-disable-line @typescript-eslint/naming-convention + PORT: eudiploPort.toString() // eslint-disable-line @typescript-eslint/naming-convention + }) + .withExposedPorts({ container: eudiploPort, host: eudiploPort }) + .start(); + + return eudiploContainer; + } +}); diff --git a/packages/runtime/test/tsconfig.json b/packages/runtime/test/tsconfig.json index db9a0d1ee..3bbf071a7 100644 --- a/packages/runtime/test/tsconfig.json +++ b/packages/runtime/test/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "baseUrl": "../", "noEmit": true, - "composite": false + "composite": false, + "allowJs": true // we want to use the ts compiler to compile ESM node modules into CJS which is understood by jest. This is required since those node modules are javascript. }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], "include": ["**/*.ts", "../src/**/*.ts"], diff --git a/patches/@openid4vc+oauth2+0.3.0-alpha-20250825150235.patch b/patches/@openid4vc+oauth2+0.3.0-alpha-20250825150235.patch deleted file mode 100644 index 73ee573da..000000000 --- a/patches/@openid4vc+oauth2+0.3.0-alpha-20250825150235.patch +++ /dev/null @@ -1,45 +0,0 @@ -diff --git a/node_modules/@openid4vc/oauth2/dist/index.js b/node_modules/@openid4vc/oauth2/dist/index.js -index 51abb78..a2a6941 100644 ---- a/node_modules/@openid4vc/oauth2/dist/index.js -+++ b/node_modules/@openid4vc/oauth2/dist/index.js -@@ -956,21 +956,27 @@ ${formattedError}`; - // src/metadata/fetch-well-known-metadata.ts - async function fetchWellKnownMetadata(wellKnownMetadataUrl, schema, fetch) { - const fetcher = (0, import_utils10.createZodFetcher)(fetch); -- const { result, response } = await fetcher(schema, import_utils10.ContentType.Json, wellKnownMetadataUrl); -- if (response.status === 404) { -+ try{ -+ const { result, response } = await fetcher(schema, import_utils10.ContentType.Json, wellKnownMetadataUrl); -+ -+ if (response.status === 404) { -+ return null; -+ } -+ if (!response.ok) { -+ throw new import_utils11.InvalidFetchResponseError( -+ `Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessfull response with status '${response.status}'.`, -+ await response.clone().text(), -+ response -+ ); -+ } -+ if (!result?.success) { -+ throw new ValidationError(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); -+ } -+ return result.data; -+ }catch(e){ -+ console.log('Changed By JS-SOFT: Error can probably be ignored', e); - return null; - } -- if (!response.ok) { -- throw new import_utils11.InvalidFetchResponseError( -- `Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessful response with status '${response.status}'.`, -- await response.clone().text(), -- response -- ); -- } -- if (!result?.success) { -- throw new ValidationError(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); -- } -- return result.data; - } - - // src/metadata/authorization-server/z-authorization-server-metadata.ts diff --git a/patches/@openid4vc+oauth2+0.3.0-alpha-20251110130103.patch b/patches/@openid4vc+oauth2+0.3.0-alpha-20251110130103.patch new file mode 100644 index 000000000..3f907dc9e --- /dev/null +++ b/patches/@openid4vc+oauth2+0.3.0-alpha-20251110130103.patch @@ -0,0 +1,50 @@ +diff --git a/node_modules/@openid4vc/oauth2/dist/index.cjs b/node_modules/@openid4vc/oauth2/dist/index.cjs +index 618d066..d826d04 100644 +--- a/node_modules/@openid4vc/oauth2/dist/index.cjs ++++ b/node_modules/@openid4vc/oauth2/dist/index.cjs +@@ -1419,11 +1419,16 @@ async function createJarAuthorizationRequest(options) { + * @throws {Error} if parsing json from response fails + */ + async function fetchWellKnownMetadata(wellKnownMetadataUrl, schema, options) { +- const { result, response } = await (0, __openid4vc_utils.createZodFetcher)(options?.fetch)(schema, options?.acceptedContentType ?? [__openid4vc_utils.ContentType.Json], wellKnownMetadataUrl); +- if (response.status === 404) return null; +- if (!response.ok) throw new __openid4vc_utils.InvalidFetchResponseError(`Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessful response with status '${response.status}'.`, await response.clone().text(), response); +- if (!result?.success) throw new ValidationError$1(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); +- return result.data; ++ try { ++ const { result, response } = await (0, __openid4vc_utils.createZodFetcher)(options?.fetch)(schema, options?.acceptedContentType ?? [__openid4vc_utils.ContentType.Json], wellKnownMetadataUrl); ++ if (response.status === 404) return null; ++ if (!response.ok) throw new __openid4vc_utils.InvalidFetchResponseError(`Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessful response with status '${response.status}'.`, await response.clone().text(), response); ++ if (!result?.success) throw new ValidationError$1(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); ++ return result.data; ++ } catch(e) { ++ console.log('Changed By JS-SOFT: Error can probably be ignored', e); ++ return null; ++ } + } + + //#endregion +diff --git a/node_modules/@openid4vc/oauth2/package.json b/node_modules/@openid4vc/oauth2/package.json +index ac34772..79816b0 100644 +--- a/node_modules/@openid4vc/oauth2/package.json ++++ b/node_modules/@openid4vc/oauth2/package.json +@@ -8,7 +8,7 @@ + "exports": { + ".": { + "import": "./dist/index.mjs", +- "require": "./dist/index.js", ++ "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" + }, + "./package.json": "./package.json" +@@ -29,7 +29,7 @@ + "scripts": { + "build": "tsdown src/index.ts --format cjs,esm --dts --sourcemap" + }, +- "main": "./dist/index.js", ++ "main": "./dist/index.cjs", + "module": "./dist/index.mjs", +- "types": "./dist/index.d.ts" ++ "types": "./dist/index.d.cts" + } +\ No newline at end of file diff --git a/patches/@openid4vc+openid4vci+0.3.0-alpha-20251110130103.patch b/patches/@openid4vc+openid4vci+0.3.0-alpha-20251110130103.patch new file mode 100644 index 000000000..cc9c1f9f5 --- /dev/null +++ b/patches/@openid4vc+openid4vci+0.3.0-alpha-20251110130103.patch @@ -0,0 +1,24 @@ +diff --git a/node_modules/@openid4vc/openid4vci/package.json b/node_modules/@openid4vc/openid4vci/package.json +index 9c7c62d..6f85994 100644 +--- a/node_modules/@openid4vc/openid4vci/package.json ++++ b/node_modules/@openid4vc/openid4vci/package.json +@@ -8,7 +8,7 @@ + "exports": { + ".": { + "import": "./dist/index.mjs", +- "require": "./dist/index.js", ++ "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" + }, + "./package.json": "./package.json" +@@ -30,7 +30,7 @@ + "scripts": { + "build": "tsdown src/index.ts --format cjs,esm --dts --sourcemap" + }, +- "main": "./dist/index.js", ++ "main": "./dist/index.cjs", + "module": "./dist/index.mjs", +- "types": "./dist/index.d.ts" ++ "types": "./dist/index.d.cts" + } +\ No newline at end of file diff --git a/patches/@openid4vc+openid4vp+0.3.0-alpha-20250825150235.patch b/patches/@openid4vc+openid4vp+0.3.0-alpha-20250825150235.patch deleted file mode 100644 index c8b0ff0bc..000000000 --- a/patches/@openid4vc+openid4vp+0.3.0-alpha-20250825150235.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/node_modules/@openid4vc/openid4vp/dist/index.js b/node_modules/@openid4vc/openid4vp/dist/index.js -index 575e4fd..78bdf6b 100644 ---- a/node_modules/@openid4vc/openid4vp/dist/index.js -+++ b/node_modules/@openid4vc/openid4vp/dist/index.js -@@ -599,10 +599,12 @@ async function validateOpenid4vpClientId(options, parserConfig) { - if (!isOpenid4vpAuthorizationRequestDcApi(authorizationRequestPayload)) { - const uri = authorizationRequestPayload.redirect_uri ?? authorizationRequestPayload.response_uri; - if (!uri || new import_utils5.URL(uri).hostname !== clientIdIdentifier) { -- throw new import_oauth23.Oauth2ServerErrorResponseError({ -- error: import_oauth23.Oauth2ErrorCodes.InvalidRequest, -- error_description: "Invalid client identifier. The fully qualified domain name of the redirect_uri value MUST match the Client Identifier without the prefix x509_san_dns." -- }); -+ if(!uri || new import_utils5.URL(uri).hostname.toLowerCase() !== clientIdIdentifier.toLowerCase()){ -+ throw new import_oauth23.Oauth2ServerErrorResponseError({ -+ error: import_oauth23.Oauth2ErrorCodes.InvalidRequest, -+ error_description: "Invalid client identifier. The fully qualified domain name of the redirect_uri value MUST match the Client Identifier without the prefix x509_san_dns." -+ }); -+ } - } - } - } else if (clientIdPrefix === "x509_san_uri") { diff --git a/patches/@openid4vc+openid4vp+0.3.0-alpha-20251110130103+001+initial.patch b/patches/@openid4vc+openid4vp+0.3.0-alpha-20251110130103+001+initial.patch new file mode 100644 index 000000000..14b30c8f0 --- /dev/null +++ b/patches/@openid4vc+openid4vp+0.3.0-alpha-20251110130103+001+initial.patch @@ -0,0 +1,37 @@ +diff --git a/node_modules/@openid4vc/openid4vp/dist/index.cjs b/node_modules/@openid4vc/openid4vp/dist/index.cjs +index 86819af..6a4f7e1 100644 +--- a/node_modules/@openid4vc/openid4vp/dist/index.cjs ++++ b/node_modules/@openid4vc/openid4vp/dist/index.cjs +@@ -643,7 +643,7 @@ async function validateOpenid4vpClientId(options, parserConfig) { + }); + if (!isOpenid4vpAuthorizationRequestDcApi(authorizationRequestPayload)) { + const uri = authorizationRequestPayload.redirect_uri ?? authorizationRequestPayload.response_uri; +- if (!uri || new __openid4vc_utils.URL(uri).hostname !== clientIdIdentifier) throw new __openid4vc_oauth2.Oauth2ServerErrorResponseError({ ++ if (!uri || new __openid4vc_utils.URL(uri).hostname.toLowerCase() !== clientIdIdentifier.toLowerCase()) throw new __openid4vc_oauth2.Oauth2ServerErrorResponseError({ + error: __openid4vc_oauth2.Oauth2ErrorCodes.InvalidRequest, + error_description: "Invalid client identifier. The fully qualified domain name of the redirect_uri value MUST match the Client Identifier without the prefix x509_san_dns." + }); +diff --git a/node_modules/@openid4vc/openid4vp/package.json b/node_modules/@openid4vc/openid4vp/package.json +index 0108f6c..424aec3 100644 +--- a/node_modules/@openid4vc/openid4vp/package.json ++++ b/node_modules/@openid4vc/openid4vp/package.json +@@ -8,7 +8,7 @@ + "exports": { + ".": { + "import": "./dist/index.mjs", +- "require": "./dist/index.js", ++ "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" + }, + "./package.json": "./package.json" +@@ -27,7 +27,7 @@ + "scripts": { + "build": "tsdown src/index.ts --format cjs,esm --dts --sourcemap" + }, +- "main": "./dist/index.js", ++ "main": "./dist/index.cjs", + "module": "./dist/index.mjs", +- "types": "./dist/index.d.ts" ++ "types": "./dist/index.d.cts" + } +\ No newline at end of file diff --git a/patches/@openid4vc+utils+0.3.0-alpha-20251110130103.patch b/patches/@openid4vc+utils+0.3.0-alpha-20251110130103.patch new file mode 100644 index 000000000..c8b89627f --- /dev/null +++ b/patches/@openid4vc+utils+0.3.0-alpha-20251110130103.patch @@ -0,0 +1,24 @@ +diff --git a/node_modules/@openid4vc/utils/package.json b/node_modules/@openid4vc/utils/package.json +index dcd161b..99a9e20 100644 +--- a/node_modules/@openid4vc/utils/package.json ++++ b/node_modules/@openid4vc/utils/package.json +@@ -8,7 +8,7 @@ + "exports": { + ".": { + "import": "./dist/index.mjs", +- "require": "./dist/index.js", ++ "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" + }, + "./package.json": "./package.json" +@@ -26,7 +26,7 @@ + "scripts": { + "build": "tsdown src/index.ts --format cjs,esm --dts --sourcemap" + }, +- "main": "./dist/index.js", ++ "main": "./dist/index.cjs", + "module": "./dist/index.mjs", +- "types": "./dist/index.d.ts" ++ "types": "./dist/index.d.cts" + } +\ No newline at end of file diff --git a/patches/dcql+2.0.0.patch b/patches/dcql+2.0.0.patch new file mode 100644 index 000000000..a25aa9799 --- /dev/null +++ b/patches/dcql+2.0.0.patch @@ -0,0 +1,20 @@ +diff --git a/node_modules/dcql/package.json b/node_modules/dcql/package.json +index 8cda87a..b879100 100644 +--- a/node_modules/dcql/package.json ++++ b/node_modules/dcql/package.json +@@ -45,13 +45,13 @@ + "build": "tsdown src/index.ts --format cjs,esm --dts --clean --sourcemap", + "types:check": "tsc --noEmit" + }, +- "main": "./dist/index.js", ++ "main": "./dist/index.cjs", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.mjs", +- "require": "./dist/index.js", ++ "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" + }, + "./package.json": "./package.json" From ae2f6d9cb37609f01fd0e032986a32d5a99c3ccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Wed, 19 Nov 2025 12:59:35 +0100 Subject: [PATCH 51/75] Get rid of the fakeKeyStorage and implement it the enmeshed way (#853) * feat: add keyStorage * feat: use keyStorage * fix: satisfy eslint * chore: rename keymanagement * fix: mongodb * chore: rename --- .../modules/openid4vc/OpenId4VcController.ts | 22 ++++-- .../src/modules/openid4vc/local/BaseAgent.ts | 19 ++--- .../EnmeshedHolderKeyManagmentService.ts | 72 +++++++------------ .../openid4vc/local/EnmeshedStorageService.ts | 32 +++++---- .../src/modules/openid4vc/local/Holder.ts | 12 ++-- .../src/modules/openid4vc/local/KeyStorage.ts | 63 ++++++++++++++++ 6 files changed, 136 insertions(+), 84 deletions(-) create mode 100644 packages/consumption/src/modules/openid4vc/local/KeyStorage.ts diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 78424427f..10f2603c1 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -5,18 +5,28 @@ import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseCont import { ConsumptionController } from "../../consumption/ConsumptionController"; import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; import { Holder } from "./local/Holder"; +import { KeyStorage } from "./local/KeyStorage"; export class OpenId4VcController extends ConsumptionBaseController { + private keyStorage: KeyStorage; + public constructor(parent: ConsumptionController) { super(ConsumptionControllerName.OpenId4VcController, parent); } + public override async init(): Promise { + const collection = await this.parent.accountController.getSynchronizedCollection("openid4vc-keys"); + this.keyStorage = new KeyStorage(collection, this._log); + + return this; + } + private get fetchInstance(): typeof fetch { return this.parent.consumptionConfig.fetchInstance ?? fetch; } public async fetchCredentialOffer(credentialOfferUrl: string): Promise<{ data: string }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); + const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOfferUrl); return { @@ -29,7 +39,7 @@ export class OpenId4VcController extends ConsumptionBaseController { requestedCredentialOffers: string[], pinCode?: string ): Promise<{ data: string; id: string; type: string; displayInformation: string | undefined }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); + const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const credentialOffer = JSON.parse(fetchedCredentialOffer); const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: requestedCredentialOffers, txCode: pinCode }); @@ -47,7 +57,7 @@ export class OpenId4VcController extends ConsumptionBaseController { } public async processCredentialOffer(credentialOffer: string): Promise<{ data: string; id: string; type: string; displayInformation: string | undefined }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); + const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOffer); const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: Object.keys(res.offeredCredentialConfigurations) }); @@ -67,7 +77,7 @@ export class OpenId4VcController extends ConsumptionBaseController { public async resolveAuthorizationRequest( requestUrl: string ): Promise<{ authorizationRequest: OpenId4VpResolvedAuthorizationRequest; usedCredentials: { id: string; data: string; type: string; displayInformation?: string }[] }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); + const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const authorizationRequest = await holder.resolveAuthorizationRequest(requestUrl); @@ -94,7 +104,7 @@ export class OpenId4VcController extends ConsumptionBaseController { public async acceptAuthorizationRequest( authorizationRequest: OpenId4VpResolvedAuthorizationRequest ): Promise<{ status: number; message: string | Record | null }> { - const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); + const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); // parse the credential type to be sdjwt @@ -105,7 +115,7 @@ export class OpenId4VcController extends ConsumptionBaseController { } public async getVerifiableCredentials(ids?: string[]): Promise<{ id: string; data: string; type: string; displayInformation?: string }[]> { - const holder = new Holder(this.parent.accountController, this.parent.attributes, this.fetchInstance); + const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const credentials = await holder.getVerifiableCredentials(ids); diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index f846a0d08..cd340c4e0 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -19,6 +19,7 @@ import { AttributesController } from "../../attributes"; import { EnmeshedHolderFileSystem } from "./EnmeshedHolderFileSystem"; import { EnmshedHolderKeyManagmentService } from "./EnmeshedHolderKeyManagmentService"; import { EnmeshedStorageService } from "./EnmeshedStorageService"; +import { KeyStorage } from "./KeyStorage"; export class BaseAgent { public config: InitConfig; @@ -29,16 +30,12 @@ export class BaseAgent { public verificationMethod!: VerificationMethod; public constructor( - public readonly port: number, - public readonly name: string, - public readonly modules: AgentModules, - public readonly accountController: AccountController, - public readonly attributeController: AttributesController, + private readonly keyStorage: KeyStorage, + modules: AgentModules, + accountController: AccountController, + attributeController: AttributesController, fetchInstance: typeof fetch ) { - this.name = name; - this.port = port; - const config = { allowInsecureHttpUrls: true, logger: new ConsoleLogger(LogLevel.off) @@ -46,10 +43,8 @@ export class BaseAgent { this.config = config; - this.accountController = accountController; - this.attributeController = attributeController; const dependencyManager = new DependencyManager(); - dependencyManager.registerInstance(InjectionSymbols.StorageService, new EnmeshedStorageService(accountController, attributeController)); + dependencyManager.registerInstance(InjectionSymbols.StorageService, new EnmeshedStorageService(accountController, attributeController, this.keyStorage)); this.agent = new Agent( { config, @@ -74,7 +69,7 @@ export class BaseAgent { await storage.save(this.agent.context, new StorageVersionRecord({ storageVersion: "0.5.0" })); const kmsConfig = this.agent.dependencyManager.resolve(Kms.KeyManagementModuleConfig); - kmsConfig.registerBackend(new EnmshedHolderKeyManagmentService()); + kmsConfig.registerBackend(new EnmshedHolderKeyManagmentService(this.keyStorage)); if (kmsConfig.backends.length === 0) throw new Error("No KMS backend registered"); diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts index 84439303d..d0dbe688f 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts @@ -2,6 +2,7 @@ import { AgentContext, Kms } from "@credo-ts/core"; import { ec as EC } from "elliptic"; import _sodium from "libsodium-wrappers"; import sjcl from "sjcl"; +import { KeyStorage } from "./KeyStorage"; export interface JwkKeyPair { publicKey: JsonWebKey; @@ -10,10 +11,9 @@ export interface JwkKeyPair { } export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementService { - public static readonly backend = "fakeKeyManagementService"; + public static readonly backend = "enmeshed"; public readonly backend = EnmshedHolderKeyManagmentService.backend; - public keystore: Map; private readonly b64url = (bytes: Uint8Array) => _sodium.to_base64(bytes, _sodium.base64_variants.URLSAFE_NO_PADDING); private readonly b64urlDecode = (b64url: string) => _sodium.from_base64(b64url, _sodium.base64_variants.URLSAFE_NO_PADDING); @@ -33,20 +33,7 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic return bytes; }; - public constructor() { - if ((globalThis as any).fakeKeyStorage) { - this.keystore = (globalThis as any).fakeKeyStorage; - } else { - this.keystore = new Map(); - } - this.updateGlobalInstance(this.keystore); - } - - public updateGlobalInstance(storage: Map): void { - // console.log(`FKM: updating global instance ${JSON.stringify(Array.from(storage.entries()))}`); - (globalThis as any).fakeKeyStorage = storage; - // console.log(`FKM: global instance state ${JSON.stringify(Array.from((globalThis as any).fakeKeyStorage.entries()))}`); - } + public constructor(private readonly keyStorage: KeyStorage) {} public isOperationSupported(agentContext: AgentContext, operation: Kms.KmsOperation): boolean { agentContext.config.logger.debug(`EKM: Checking if operation is supported: ${JSON.stringify(operation)}`); @@ -76,14 +63,14 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic } return false; } - public getPublicKey(agentContext: AgentContext, keyId: string): Promise { - const keyPair = this.keystore.get(keyId); + public async getPublicKey(agentContext: AgentContext, keyId: string): Promise { + const keyPair = await this.keyStorage.getKey(keyId); if (!keyPair) { agentContext.config.logger.error(`EKM: Key with id ${keyId} not found`); throw new Error(`Key with id ${keyId} not found`); } - return Promise.resolve((JSON.parse(keyPair) as JwkKeyPair).publicKey as Kms.KmsJwkPublic); + return (JSON.parse(keyPair) as JwkKeyPair).publicKey as Kms.KmsJwkPublic; } public async createKey(agentContext: AgentContext, options: Kms.KmsCreateKeyOptions): Promise> { options.keyId ??= "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { @@ -122,13 +109,9 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic agentContext.config.logger.debug(`EKM: Created EC key pair with id ${options.keyId}`); // store the key pair in the keystore - this.keystore.set(options.keyId, JSON.stringify(jwkKeyPair)); + await this.keyStorage.storeKey(options.keyId, JSON.stringify(jwkKeyPair)); - this.updateGlobalInstance(this.keystore); - return await Promise.resolve({ - keyId: options.keyId, - publicJwk: publicJwk as Kms.KmsJwkPublic - } as Kms.KmsCreateKeyReturn); + return { keyId: options.keyId, publicJwk: publicJwk as Kms.KmsJwkPublic } as Kms.KmsCreateKeyReturn; } await _sodium.ready; @@ -157,31 +140,28 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic keyType: "OKP" }; - // store the key pair in the keystore - this.keystore.set(options.keyId, JSON.stringify(jwkKeyPair)); - this.updateGlobalInstance(this.keystore); - return await Promise.resolve({ - keyId: options.keyId, - publicJwk: publicJwk as Kms.KmsJwkPublic - } as Kms.KmsCreateKeyReturn); + await this.keyStorage.storeKey(options.keyId, JSON.stringify(jwkKeyPair)); + return { keyId: options.keyId, publicJwk: publicJwk as Kms.KmsJwkPublic } as Kms.KmsCreateKeyReturn; } + public importKey(agentContext: AgentContext, options: Kms.KmsImportKeyOptions): Promise> { agentContext.config.logger.debug(`EKM: Importing key with ${JSON.stringify(options)}`); throw new Error("Method not implemented."); } - public deleteKey(agentContext: AgentContext, options: Kms.KmsDeleteKeyOptions): Promise { - if (this.keystore.has(options.keyId)) { - agentContext.config.logger.debug(`EKM: Deleting key with id ${options.keyId}`); - this.keystore.delete(options.keyId); - this.updateGlobalInstance(this.keystore); - return Promise.resolve(true); - } - throw new Error(`key with id ${options.keyId} not found. and cannot be deleted`); + + public async deleteKey(agentContext: AgentContext, options: Kms.KmsDeleteKeyOptions): Promise { + const hasKey = await this.keyStorage.hasKey(options.keyId); + if (!hasKey) throw new Error(`key with id ${options.keyId} not found. and cannot be deleted`); + + agentContext.config.logger.debug(`EKM: Deleting key with id ${options.keyId}`); + await this.keyStorage.deleteKey(options.keyId); + return true; } + public async sign(agentContext: AgentContext, options: Kms.KmsSignOptions): Promise { agentContext.config.logger.debug(`EKM: Signing data with key id ${options.keyId} using algorithm ${options.algorithm}`); - const stringifiedKeyPair = this.keystore.get(options.keyId); + const stringifiedKeyPair = await this.keyStorage.getKey(options.keyId); if (!stringifiedKeyPair) { throw new Error(`Key with id ${options.keyId} not found`); } @@ -273,8 +253,8 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic } } - private ecdhEs(localKeyId: string, remotePublicJWK: any): Uint8Array { - const keyPairString = this.keystore.get(localKeyId); + private async ecdhEs(localKeyId: string, remotePublicJWK: any): Promise { + const keyPairString = await this.keyStorage.getKey(localKeyId); if (!keyPairString) { throw new Error(`Key with id ${localKeyId} not found`); } @@ -360,7 +340,7 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic return hashBuf.subarray(0, keyLength / 8); } - public encrypt(agentContext: AgentContext, options: Kms.KmsEncryptOptions): Promise { + public async encrypt(agentContext: AgentContext, options: Kms.KmsEncryptOptions): Promise { try { // encryption via A-256-GCM // we will call the services side bob and the incoming side alice @@ -372,7 +352,7 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic } // 1. derive the shared secret via ECDH-ES - const sharedSecret = this.ecdhEs(options.key.keyAgreement.keyId, options.key.keyAgreement.externalPublicJwk); + const sharedSecret = await this.ecdhEs(options.key.keyAgreement.keyId, options.key.keyAgreement.externalPublicJwk); agentContext.config.logger.debug(`EKM: Derived shared secret for encryption using ECDH-ES`); // 2. Concat KDF to form the final key const derivedKey = this.concatKdf(sharedSecret, 256, "A256GCM", options.key.keyAgreement); @@ -403,7 +383,7 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic tag: tag }; - return Promise.resolve(returnValue); + return returnValue; } catch (e) { agentContext.config.logger.error(`EKM: Error during encryption: ${e}`); throw e; diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 413104851..2e015b469 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -15,19 +15,21 @@ import { W3cCredentialRecord, W3cJwtVerifiableCredential } from "@credo-ts/core"; -import { IdentityAttribute } from "@nmshd/content"; +import { IdentityAttribute, VerifiableCredential as VerifiableCredentialAttributeValue } from "@nmshd/content"; import { CoreId } from "@nmshd/core-types"; import { AccountController } from "@nmshd/transport"; import { OwnIdentityAttribute } from "../../attributes"; import { AttributesController } from "../../attributes/AttributesController"; +import { KeyStorage } from "./KeyStorage"; @injectable() export class EnmeshedStorageService implements StorageService { public storage: Map = new Map(); public constructor( - public accountController: AccountController, - public attributeController: AttributesController + private readonly accountController: AccountController, + private readonly attributeController: AttributesController, + private readonly keyStorage: KeyStorage ) {} public async save(agentContext: AgentContext, record: T): Promise { @@ -144,10 +146,16 @@ export class EnmeshedStorageService implements StorageServ public async getAll(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { const records: T[] = []; - const attributes = await this.attributeController.getLocalAttributes({ "@type": "OwnIdentityAttribute", "content.value.@type": "VerifiableCredential" }); + const attributes = (await this.attributeController.getLocalAttributes({ + "@type": "OwnIdentityAttribute", + "content.value.@type": "VerifiableCredential" + })) as OwnIdentityAttribute[]; + for (const attribute of attributes) { + const value = attribute.content.value as VerifiableCredentialAttributeValue; + // TODO: Correct casting - const type = (attribute as any).content.value.type; + const type = value.type; let record: T; if (type === ClaimFormat.SdJwtDc.toString() && recordClass.name === SdJwtVcRecord.name) { record = new SdJwtVcRecord({ id: (attribute as any).content.id, compactSdJwtVc: (attribute as any).content.value.value }) as unknown as T; @@ -164,18 +172,14 @@ export class EnmeshedStorageService implements StorageServ agentContext.config.logger.info(`Skipping attribute with id ${attribute.id} and type ${type} as it does not match record class ${recordClass.name}`); continue; } - if ((attribute as any).content.value.key !== undefined) { + + if (value.key !== undefined) { // TODO: Remove as this is only a workaround for demo purposes agentContext.config.logger.info("Found keys to possibly import"); - const parsed = JSON.parse((attribute as any).content.value.key) as Map; + + const parsed = JSON.parse(value.key) as Map; for (const [k, v] of parsed) { - const currentKeys = (globalThis as any).fakeKeyStorage as Map; - if (!currentKeys.has(k)) { - (globalThis as any).fakeKeyStorage.set(k, v); - agentContext.config.logger.info(`Added key ${k} to fake keystore`); - } else { - agentContext.config.logger.info(`Key ${k} already in fake keystore`); - } + await this.keyStorage.storeKey(k, v); } } records.push(record); diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 53a0d1406..bce2d7528 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -26,6 +26,7 @@ import { AccountController } from "@nmshd/transport"; import { AttributesController, OwnIdentityAttribute } from "../../attributes"; import { BaseAgent } from "./BaseAgent"; import { EnmeshedStorageService } from "./EnmeshedStorageService"; +import { KeyStorage } from "./KeyStorage"; function getOpenIdHolderModules() { return { @@ -46,13 +47,12 @@ export class Holder extends BaseAgent> redirectUri: "http://localhost:3000/redirect" }; - public constructor(accountController: AccountController, attributeController: AttributesController, fetchInstance: typeof fetch) { - super(3000, `OpenId4VcHolder ${Math.random().toString()}`, getOpenIdHolderModules(), accountController, attributeController, fetchInstance); + public constructor(keyStorage: KeyStorage, accountController: AccountController, attributeController: AttributesController, fetchInstance: typeof fetch) { + super(keyStorage, getOpenIdHolderModules(), accountController, attributeController, fetchInstance); } public async getVerifiableCredentials(ids: string[] | undefined): Promise { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion - const storageService = this.agent.dependencyManager.resolve(InjectionSymbols.StorageService) as EnmeshedStorageService; + const storageService = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); const allCredentials = await storageService.getAllAsAttributes(this.agent.context, SdJwtVcRecord); if (!ids) return allCredentials; @@ -202,8 +202,8 @@ export class Holder extends BaseAgent> credentialResponse.credentials.map((response) => { // TODO: batch issuance not yet supported const credential = response.credentials[0]; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion - const enmeshedStorageService = this.agent.dependencyManager.resolve(InjectionSymbols.StorageService) as EnmeshedStorageService; + + const enmeshedStorageService = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); let credentialKey = ""; for (const resolved in resolvedCredentialOffer.offeredCredentialConfigurations) { credentialKey = resolved; diff --git a/packages/consumption/src/modules/openid4vc/local/KeyStorage.ts b/packages/consumption/src/modules/openid4vc/local/KeyStorage.ts new file mode 100644 index 000000000..ec4f8cd9a --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/KeyStorage.ts @@ -0,0 +1,63 @@ +import { ILogger } from "@js-soft/logging-abstractions"; +import { serialize, validate } from "@js-soft/ts-serval"; +import { CoreId } from "@nmshd/core-types"; +import { CoreSynchronizable, ICoreSynchronizable, SynchronizedCollection } from "@nmshd/transport"; + +interface IKeyStorageEntry extends ICoreSynchronizable { + key: any; +} + +class KeyStorageEntry extends CoreSynchronizable { + public override technicalProperties: string[] = ["key"]; + + @serialize({ any: true }) + @validate() + public key: any; + + public static from(entry: IKeyStorageEntry): KeyStorageEntry { + return this.fromAny(entry); + } +} + +export class KeyStorage { + public constructor( + private readonly collection: SynchronizedCollection, + private readonly logger: ILogger + ) {} + + public async hasKey(keyId: string): Promise { + const entry = await this.collection.read(keyId); + return !!entry; + } + + public async storeKey(keyId: string, keyData: any): Promise { + const entry = await this.collection.read(keyId); + if (entry) { + this.logger.info(`Key with id ${keyId} already exists`); + return; + } + + await this.collection.create(KeyStorageEntry.from({ id: CoreId.from(keyId), key: keyData })); + } + + public async getKey(keyId: string): Promise { + const entry = await this.collection.read(keyId); + if (!entry) { + this.logger.warn(`Key with id ${keyId} not found`); + return undefined; + } + + const parsed = KeyStorageEntry.from(entry); + return parsed.key; + } + + public async deleteKey(keyId: string): Promise { + const entry = await this.collection.read(keyId); + if (!entry) { + this.logger.warn(`Key with id ${keyId} not found, cannot delete`); + return; + } + + await this.collection.delete(KeyStorageEntry.from(entry)); + } +} From fa0f94d227b7a59f66b2010c8b8e61d3d8622b20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Wed, 19 Nov 2025 16:12:11 +0100 Subject: [PATCH 52/75] libsodium-wrappers increases the bundle size (#854) * fix: do not use libsodium-wrappers * fix: do not use libsodium-wrappers --- package-lock.json | 20 -------------- packages/consumption/package.json | 2 -- .../EnmeshedHolderKeyManagmentService.ts | 26 ++++++++----------- 3 files changed, 11 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59f4a0e00..69b4a98de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4781,13 +4781,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/libsodium-wrappers": { - "version": "0.7.14", - "resolved": "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.14.tgz", - "integrity": "sha512-5Kv68fXuXK0iDuUir1WPGw2R9fOZUlYlSAa0ztMcL0s0BfIDTqg9GXz8K30VJpPP3sxWhbolnQma2x+/TfkzDQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/lodash": { "version": "4.17.20", "dev": true, @@ -10095,21 +10088,10 @@ "version": "1.12.13", "license": "MIT" }, - "node_modules/libsodium": { - "version": "0.7.15", - "license": "ISC" - }, "node_modules/libsodium-sumo": { "version": "0.7.15", "license": "ISC" }, - "node_modules/libsodium-wrappers": { - "version": "0.7.15", - "license": "ISC", - "dependencies": { - "libsodium": "^0.7.15" - } - }, "node_modules/libsodium-wrappers-sumo": { "version": "0.7.15", "license": "ISC", @@ -14856,7 +14838,6 @@ "@nmshd/transport": "*", "@noble/ciphers": "^2.0.1", "jose": "^6.1.1", - "libsodium-wrappers": "^0.7.15", "lodash": "^4.17.21", "sjcl": "^1.0.8", "ts-simple-nameof": "^1.3.3", @@ -14867,7 +14848,6 @@ "@js-soft/docdb-access-mongo": "1.3.1", "@js-soft/node-logger": "1.2.1", "@nmshd/crypto": "2.1.3", - "@types/libsodium-wrappers": "^0.7.14", "@types/lodash": "^4.17.20", "@types/sjcl": "^1.0.34", "ts-mockito": "^2.6.1" diff --git a/packages/consumption/package.json b/packages/consumption/package.json index b1e08d986..e90979e21 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -73,7 +73,6 @@ "@nmshd/transport": "*", "@noble/ciphers": "^2.0.1", "jose": "^6.1.1", - "libsodium-wrappers": "^0.7.15", "lodash": "^4.17.21", "sjcl": "^1.0.8", "ts-simple-nameof": "^1.3.3", @@ -84,7 +83,6 @@ "@js-soft/docdb-access-mongo": "1.3.1", "@js-soft/node-logger": "1.2.1", "@nmshd/crypto": "2.1.3", - "@types/libsodium-wrappers": "^0.7.14", "@types/lodash": "^4.17.20", "@types/sjcl": "^1.0.34", "ts-mockito": "^2.6.1" diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts index d0dbe688f..5f8af22dc 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts @@ -1,6 +1,7 @@ import { AgentContext, Kms } from "@credo-ts/core"; import { ec as EC } from "elliptic"; -import _sodium from "libsodium-wrappers"; + +import { SodiumWrapper } from "@nmshd/crypto"; import sjcl from "sjcl"; import { KeyStorage } from "./KeyStorage"; @@ -15,8 +16,8 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic public readonly backend = EnmshedHolderKeyManagmentService.backend; - private readonly b64url = (bytes: Uint8Array) => _sodium.to_base64(bytes, _sodium.base64_variants.URLSAFE_NO_PADDING); - private readonly b64urlDecode = (b64url: string) => _sodium.from_base64(b64url, _sodium.base64_variants.URLSAFE_NO_PADDING); + private readonly b64url = (bytes: Uint8Array) => SodiumWrapper.sodium.to_base64(bytes, (SodiumWrapper.sodium as any).base64_variants.URLSAFE_NO_PADDING); + private readonly b64urlDecode = (b64url: string) => SodiumWrapper.sodium.from_base64(b64url, (SodiumWrapper.sodium as any).base64_variants.URLSAFE_NO_PADDING); // please note: we cannot use buffer here - because it is not available in the browser // and yes it could be pollyfilled but that extends the bundle size for no good reason @@ -75,7 +76,7 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic public async createKey(agentContext: AgentContext, options: Kms.KmsCreateKeyOptions): Promise> { options.keyId ??= "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { // Use libsodium's randombytes_uniform for secure random number generation - const r = _sodium.randombytes_uniform(16); + const r = SodiumWrapper.sodium.randombytes_uniform(16); const v = c === "x" ? r : (r & 0x3) | 0x8; return v.toString(16); }); @@ -114,12 +115,9 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic return { keyId: options.keyId, publicJwk: publicJwk as Kms.KmsJwkPublic } as Kms.KmsCreateKeyReturn; } - await _sodium.ready; - const sodium = _sodium; - - const { keyType, publicKey, privateKey } = sodium.crypto_sign_keypair(); + const { keyType, publicKey, privateKey } = SodiumWrapper.sodium.crypto_sign_keypair(); agentContext.config.logger.debug(`EKM: Created OKP key pair with id ${options.keyId} and keyType ${keyType}`); - const seed = privateKey.slice(0, sodium.crypto_sign_SEEDBYTES); + const seed = privateKey.slice(0, (SodiumWrapper.sodium as any).crypto_sign_SEEDBYTES); // Public JWK const publicJwk = { @@ -192,10 +190,8 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic } as Kms.KmsSignReturn); } - await _sodium.ready; - const sodium = _sodium; - const decode = (bytes: string) => sodium.from_base64(bytes, sodium.base64_variants.URLSAFE_NO_PADDING); - // get the priavte key bytes + const decode = (bytes: string) => SodiumWrapper.sodium.from_base64(bytes, (SodiumWrapper.sodium as any).base64_variants.URLSAFE_NO_PADDING); + // get the private key bytes if (privateKey.d === undefined) { throw new Error("Private key does not contain 'd' parameter"); } @@ -213,7 +209,7 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic fullPrivateKeyBytes.set(publicKeyBytes, privateKeyBytes.length); // and use it to sign the data - const signature = sodium.crypto_sign_detached(options.data, fullPrivateKeyBytes); + const signature = SodiumWrapper.sodium.crypto_sign_detached(options.data, fullPrivateKeyBytes); return { signature: signature as Uint8Array // I hope this cast doesn't paper over something @@ -396,6 +392,6 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic } public randomBytes(agentContext: AgentContext, options: Kms.KmsRandomBytesOptions): Kms.KmsRandomBytesReturn { agentContext.config.logger.debug(`EKM: Generating ${options.length} random bytes`); - return _sodium.randombytes_buf(options.length); // Uint8Array + return SodiumWrapper.sodium.randombytes_buf(options.length); // Uint8Array } } From b09326eb17f5fa2f246bc5113f9b1a9191837d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Thu, 20 Nov 2025 10:35:26 +0100 Subject: [PATCH 53/75] Authorization request contains non-json payload causing crashes in the app (#857) * fix: toJson * fix: use stringifySafe --- .../consumption/openid4vc/ResolveAuthorizationRequest.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts index fd2b07e80..430032a44 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts @@ -2,6 +2,7 @@ import { Result } from "@js-soft/ts-utils"; import { OpenId4VcController } from "@nmshd/consumption"; import { FetchedAuthorizationRequestDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; +import stringifySafe from "json-stringify-safe"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; export interface ResolveAuthorizationRequestRequest { @@ -25,6 +26,9 @@ export class ResolveAuthorizationRequestUseCase extends UseCase> { const result = await this.openId4VcContoller.resolveAuthorizationRequest(request.requestUrl); - return Result.ok({ authorizationRequest: result.authorizationRequest, usedCredentials: result.usedCredentials }); + return Result.ok({ + authorizationRequest: JSON.parse(stringifySafe(result.authorizationRequest)), + usedCredentials: result.usedCredentials + }); } } From fbe0d3e40b5fd9713a973d3aae9087b32213e092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Thu, 20 Nov 2025 16:23:32 +0100 Subject: [PATCH 54/75] Upgrade dcql (#858) * chore: update dcql * chore: remove patch --- package-lock.json | 3444 ++++++++++++----- .../test/consumption/openid4vc.test.ts | 6 +- patches/dcql+2.0.0.patch | 20 - 3 files changed, 2417 insertions(+), 1053 deletions(-) delete mode 100644 patches/dcql+2.0.0.patch diff --git a/package-lock.json b/package-lock.json index 69b4a98de..5c22a2ccd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,20 +37,10 @@ "typescript": "^5.9.3" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@animo-id/mdoc": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@animo-id/mdoc/-/mdoc-0.5.2.tgz", + "integrity": "sha512-EQVsNOOeXFfBaEHkiKoh24jbSEQ1MORB/kUu0rnNrAEETpY5GK/H9iWevYFdmNDIqQTIEJlkU7S+sIj3pe66eA==", "license": "Apache-2.0", "dependencies": { "compare-versions": "^6.1.1" @@ -58,6 +48,8 @@ }, "node_modules/@animo-id/pex": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@animo-id/pex/-/pex-6.1.1.tgz", + "integrity": "sha512-my3g9Divea1sseZRzgD2tnrv0ett9fTlyoZp1x9nSjyRwtai/BBnFQigknMFscJuG6vnwYNcaj6TFQprw+v5xw==", "license": "Apache-2.0", "dependencies": { "@animo-id/mdoc": "^0.5.2", @@ -79,6 +71,8 @@ }, "node_modules/@animo-id/pex/node_modules/@sd-jwt/decode": { "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.7.2.tgz", + "integrity": "sha512-dan2LSvK63SKwb62031G4r7TE4TaiI0EK1KbPXqS+LCXNkNDUHqhtYp9uOpj+grXceCsMtMa2f8VnUfsjmwHHg==", "license": "Apache-2.0", "dependencies": { "@sd-jwt/types": "0.7.2", @@ -90,6 +84,8 @@ }, "node_modules/@animo-id/pex/node_modules/@sd-jwt/present": { "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.7.2.tgz", + "integrity": "sha512-mQV85u2+mLLy2VZ9Wx2zpaB6yTDnbhCfWkP7eeCrzJQHBKAAHko8GrylEFmLKewFIcajS/r4lT/zHOsCkp5pZw==", "license": "Apache-2.0", "dependencies": { "@sd-jwt/decode": "0.7.2", @@ -102,6 +98,8 @@ }, "node_modules/@animo-id/pex/node_modules/@sd-jwt/types": { "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.7.2.tgz", + "integrity": "sha512-1NRKowiW0ZiB9SGLApLPBH4Xk8gDQJ+nA9NdZ+uy6MmJKLEwjuJxO7yTvRIv/jX/0/Ebh339S7Kq4RD2AiFuRg==", "license": "Apache-2.0", "engines": { "node": ">=18" @@ -109,6 +107,8 @@ }, "node_modules/@animo-id/pex/node_modules/@sd-jwt/utils": { "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.7.2.tgz", + "integrity": "sha512-aMPY7uHRMgyI5PlDvEiIc+eBFGC1EM8OCQRiEjJ8HGN0pajWMYj0qwSw7pS90A49/DsYU1a5Zpvb7nyjgGH0Yg==", "license": "Apache-2.0", "dependencies": { "@sd-jwt/types": "0.7.2", @@ -120,6 +120,8 @@ }, "node_modules/@animo-id/pex/node_modules/ajv": { "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -134,6 +136,8 @@ }, "node_modules/@animo-id/pex/node_modules/ajv-formats": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -149,10 +153,14 @@ }, "node_modules/@animo-id/pex/node_modules/json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/@astronautlabs/jsonpath": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@astronautlabs/jsonpath/-/jsonpath-1.1.2.tgz", + "integrity": "sha512-FqL/muoreH7iltYC1EB5Tvox5E8NSOOPGkgns4G+qxRKl6k5dxEVljUjB5NcKESzkqwnUqWjSZkL61XGYOuV+A==", "license": "MIT", "dependencies": { "static-eval": "2.0.2" @@ -160,6 +168,8 @@ }, "node_modules/@babel/code-frame": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { @@ -182,21 +192,23 @@ } }, "node_modules/@babel/core": { - "version": "7.28.3", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.3", - "@babel/parser": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -211,14 +223,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", @@ -251,6 +255,8 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { @@ -264,14 +270,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", @@ -294,16 +292,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/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, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", @@ -322,16 +310,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin/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, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", @@ -351,6 +329,8 @@ }, "node_modules/@babel/helper-globals": { "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", "engines": { @@ -373,6 +353,8 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { @@ -385,6 +367,8 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { @@ -414,6 +398,8 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -472,6 +458,8 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -490,6 +478,8 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -512,12 +502,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.3", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2" + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -638,6 +630,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -649,6 +643,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -660,6 +656,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -671,6 +669,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -701,6 +701,8 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { @@ -715,6 +717,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -726,6 +730,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -753,6 +759,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -764,6 +772,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -775,6 +785,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -786,6 +798,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -797,6 +811,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -808,6 +824,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -819,6 +837,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -833,6 +853,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -1284,6 +1306,8 @@ }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, "license": "MIT", "dependencies": { @@ -1837,16 +1861,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/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, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -1884,6 +1898,8 @@ }, "node_modules/@babel/template": { "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { @@ -2050,6 +2066,8 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "license": "MIT", "dependencies": { @@ -2061,6 +2079,8 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2070,6 +2090,8 @@ }, "node_modules/@dependents/detective-less": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz", + "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2108,15 +2130,6 @@ "node": ">=18.0" } }, - "node_modules/@digitalcredentials/http-client/node_modules/undici": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", - "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, "node_modules/@digitalcredentials/jsonld": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-9.0.0.tgz", @@ -2172,9 +2185,9 @@ "license": "MIT" }, "node_modules/@digitalcredentials/vc": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-10.0.1.tgz", - "integrity": "sha512-p8pfyB0lV+yGfyy13RaZWvxL22TeEXu3xR7VGEEiyj9aF1P05xUI0L8TDRINnvGbGgPiFHB3x2zUew0wAXSyPA==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-10.0.2.tgz", + "integrity": "sha512-Mmts8WtAQmgdrSurQv+SFZNozNgvPzsruWQNIBlmfrlJ7QSyCoO7jybSnq43EuLm3UcqyqSb2mLHwAza310mhw==", "license": "BSD-3-Clause", "dependencies": { "@digitalcredentials/credentials-v2-context": "^0.0.1-beta.0", @@ -2189,9 +2202,9 @@ } }, "node_modules/@emnapi/core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", - "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", "dev": true, "license": "MIT", "optional": true, @@ -2201,9 +2214,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", "dev": true, "license": "MIT", "optional": true, @@ -2243,6 +2256,8 @@ }, "node_modules/@eslint-community/eslint-utils/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, "license": "Apache-2.0", "engines": { @@ -2253,7 +2268,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -2303,6 +2320,8 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2361,9 +2380,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", - "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.1.tgz", + "integrity": "sha512-sPxgEWtPUR3EnRJCEtbGZG2iX8LQDUls2wUS3o27jg07KqJFMq6YDeWvMo1wfpmy3rqRdS0rivpLwhqQtEyCuQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2393,153 +2412,316 @@ "node": ">=6" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", - "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "node_modules/@grpc/grpc-js/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, - "license": "Apache-2.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@grpc/grpc-js/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, + "license": "ISC", "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", + "node_modules/@grpc/grpc-js/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, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/@grpc/grpc-js/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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=18.18.0" + "node": ">=8" } }, - "node_modules/@humanfs/node": { - "version": "0.16.6", + "node_modules/@grpc/grpc-js/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, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=18.18.0" + "node": ">=8" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", + "node_modules/@grpc/grpc-js/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, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=18.18" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", + "node_modules/@grpc/grpc-js/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, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "license": "MIT", + "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" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">=12" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", "dev": true, "license": "Apache-2.0", - "engines": { - "node": ">=18.18" + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "node_modules/@grpc/proto-loader/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, "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=8" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "node_modules/@grpc/proto-loader/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, - "license": "MIT", + "license": "ISC", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=12" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", + "node_modules/@grpc/proto-loader/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, - "license": "ISC", + "license": "MIT" + }, + "node_modules/@grpc/proto-loader/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, + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/@grpc/proto-loader/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, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@grpc/proto-loader/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, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@grpc/proto-loader/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, + "license": "MIT", + "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/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, "license": "ISC", "dependencies": { @@ -2658,6 +2840,8 @@ }, "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, "license": "MIT", "engines": { @@ -2803,6 +2987,8 @@ }, "node_modules/@jest/get-type": { "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", "dev": true, "license": "MIT", "engines": { @@ -2827,6 +3013,8 @@ }, "node_modules/@jest/pattern": { "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", "dev": true, "license": "MIT", "dependencies": { @@ -2882,6 +3070,8 @@ }, "node_modules/@jest/schemas": { "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, "license": "MIT", "dependencies": { @@ -3002,6 +3192,8 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -3009,8 +3201,21 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "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, "license": "MIT", "engines": { @@ -3019,11 +3224,15 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.30", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -3033,11 +3242,15 @@ }, "node_modules/@js-joda/core": { "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.3.tgz", + "integrity": "sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==", "license": "BSD-3-Clause", "peer": true }, "node_modules/@js-joda/timezone": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@js-joda/timezone/-/timezone-2.3.0.tgz", + "integrity": "sha512-DHXdNs0SydSqC5f0oRJPpTcNfnpRojgBqMCFupQFv6WgeZAjU3DBx+A7JtaGPP3dHrP2Odi2N8Vf+uAm/8ynCQ==", "license": "BSD-3-Clause", "peerDependencies": { "@js-joda/core": ">=1.11.0" @@ -3120,103 +3333,6 @@ "license-check": "bin/licenseCheck.js" } }, - "node_modules/@js-soft/license-check/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@js-soft/license-check/node_modules/cliui": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@js-soft/license-check/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@js-soft/license-check/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@js-soft/license-check/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@js-soft/license-check/node_modules/yargs": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", - "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^9.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "string-width": "^7.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^22.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" - } - }, - "node_modules/@js-soft/license-check/node_modules/yargs-parser": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" - } - }, "node_modules/@js-soft/logging-abstractions": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@js-soft/logging-abstractions/-/logging-abstractions-1.0.2.tgz", @@ -3258,9 +3374,9 @@ } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.1.tgz", - "integrity": "sha512-6nZrq5kfAz0POWyhljnbWQQJQ5uT8oE2ddX303q1uY0tWsivWKgBDXBBvuFPwOqRRalXJuVO9EjOdVtuhLX0zg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.2.tgz", + "integrity": "sha512-QgA5AySqB27cGTXBFmnpifAi7HxoGUeezwo6p9dI03MuDB6Pp33zgclqVb6oVK3j6I9Vesg0+oojW2XxB59SGg==", "dev": true, "license": "MIT", "dependencies": { @@ -3269,6 +3385,8 @@ }, "node_modules/@multiformats/base-x": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", "license": "MIT" }, "node_modules/@napi-rs/wasm-runtime": { @@ -3379,6 +3497,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -3391,6 +3511,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, "license": "MIT", "engines": { @@ -3399,6 +3521,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, "license": "MIT", "dependencies": { @@ -3410,27 +3534,36 @@ } }, "node_modules/@npmcli/agent": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", "dev": true, "license": "ISC", "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", + "lru-cache": "^11.2.1", "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "20 || >=22" + } }, "node_modules/@npmcli/fs": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "dev": true, "license": "ISC", "dependencies": { @@ -3440,21 +3573,34 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@npmcli/git": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.0.tgz", - "integrity": "sha512-vnz7BVGtOctJAIHouCJdvWBhsTVSICMeUgZo2c7XAi5d5Rrl80S1H7oPym7K03cRuinK5Q6s2dw36+PgXQTcMA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.1.tgz", + "integrity": "sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", "lru-cache": "^11.2.1", "npm-pick-manifest": "^11.0.1", - "proc-log": "^5.0.0", + "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^5.0.0" + "which": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -3462,6 +3608,8 @@ }, "node_modules/@npmcli/git/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -3478,8 +3626,23 @@ "node": "20 || >=22" } }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@npmcli/git/node_modules/which": { - "version": "5.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", "dev": true, "license": "ISC", "dependencies": { @@ -3489,44 +3652,48 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", + "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", "dev": true, "license": "ISC", "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" }, "bin": { "installed-package-contents": "bin/index.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/node-gyp": { - "version": "4.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/package-json": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.1.tgz", - "integrity": "sha512-956YUeI0YITbk2+KnirCkD19HLzES0habV+Els+dyZaVsaM6VGSiNwnRu6t3CZaqDLz4KXy2zx+0N/Zy6YjlAA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.3.tgz", + "integrity": "sha512-XT8016UrDfnR7yh2XvnIqaPnA5v2QomaWryDYYgKNT0LaX0vcKf4gu2f3CWD/ltV4tOto4MwZynWlynMJL8bBQ==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/git": "^7.0.0", - "glob": "^11.0.3", + "glob": "^12.0.0", "hosted-git-info": "^9.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", "semver": "^7.5.3", "validate-npm-package-license": "^3.0.4" }, @@ -3535,9 +3702,9 @@ } }, "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-12.0.0.tgz", + "integrity": "sha512-5Qcll1z7IKgHr5g485ePDdHcNQY0k2dtv/bjYy0iuyGxQw2qSOiiXUXJ+AYQpg3HNoUMHqAruX478Jeev7UULw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -3601,9 +3768,9 @@ } }, "node_modules/@npmcli/package-json/node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -3617,21 +3784,36 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@npmcli/package-json/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@npmcli/promise-spawn": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", - "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", "dev": true, "license": "ISC", "dependencies": { - "which": "^5.0.0" + "which": "^6.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/promise-spawn/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -3639,7 +3821,9 @@ } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "5.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", "dev": true, "license": "ISC", "dependencies": { @@ -3649,30 +3833,32 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/redact": { - "version": "3.2.2", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/run-script": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.0.tgz", - "integrity": "sha512-vaQj4nccJbAslopIvd49pQH2NhUp7G9pY4byUtmwhe37ZZuubGrx0eB9hW2F37uVNRuDDK6byFGXF+7JCuMSZg==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz", + "integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^4.0.0", + "@npmcli/node-gyp": "^5.0.0", "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0", + "which": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -3680,6 +3866,8 @@ }, "node_modules/@npmcli/run-script/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -3687,7 +3875,9 @@ } }, "node_modules/@npmcli/run-script/node_modules/which": { - "version": "5.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", "dev": true, "license": "ISC", "dependencies": { @@ -3697,7 +3887,7 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@openid4vc/oauth2": { @@ -3803,90 +3993,100 @@ } }, "node_modules/@peculiar/asn1-cms": { - "version": "2.4.0", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz", + "integrity": "sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "@peculiar/asn1-x509-attr": "^2.4.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "@peculiar/asn1-x509-attr": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-csr": { - "version": "2.4.0", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz", + "integrity": "sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-ecc": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.5.0.tgz", - "integrity": "sha512-t4eYGNhXtLRxaP50h3sfO6aJebUCDGQACoeexcelL4roMFRRVgB20yBIu2LxsPh/tdW9I282gNgMOyg3ywg/mg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz", + "integrity": "sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-pfx": { - "version": "2.4.0", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz", + "integrity": "sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==", "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.4.0", - "@peculiar/asn1-pkcs8": "^2.4.0", - "@peculiar/asn1-rsa": "^2.4.0", - "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-pkcs8": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.4.0", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz", + "integrity": "sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.4.0", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz", + "integrity": "sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==", "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.4.0", - "@peculiar/asn1-pfx": "^2.4.0", - "@peculiar/asn1-pkcs8": "^2.4.0", - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", - "@peculiar/asn1-x509-attr": "^2.4.0", + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-pfx": "^2.6.0", + "@peculiar/asn1-pkcs8": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "@peculiar/asn1-x509-attr": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-rsa": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.5.0.tgz", - "integrity": "sha512-qMZ/vweiTHy9syrkkqWFvbT3eLoedvamcUdnnvwyyUNv5FgFXA3KP8td+ATibnlZ0EANW5PYRm8E6MJzEB/72Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz", + "integrity": "sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.5.0.tgz", - "integrity": "sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", "license": "MIT", "dependencies": { "asn1js": "^3.0.6", @@ -3895,29 +4095,33 @@ } }, "node_modules/@peculiar/asn1-x509": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.5.0.tgz", - "integrity": "sha512-CpwtMCTJvfvYTFMuiME5IH+8qmDe3yEWzKHe7OOADbGfq7ohxeLaXwQo0q4du3qs0AII3UbLCvb9NF/6q0oTKQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz", + "integrity": "sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.4.0", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz", + "integrity": "sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.4.0", - "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/json-schema": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -3928,6 +4132,8 @@ }, "node_modules/@peculiar/x509": { "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.13.0.tgz", + "integrity": "sha512-r9BOb1GZ3gx58Pog7u9x70spnHlCQPFm7u/ZNlFv+uBsU7kTDY9QkUD+l+X0awopDuCK1fkH3nEIZeMDSG/jlw==", "license": "MIT", "dependencies": { "@peculiar/asn1-cms": "^2.3.15", @@ -3945,6 +4151,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", "optional": true, @@ -4206,54 +4414,14 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@sigstore/sign/node_modules/@npmcli/agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", - "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^11.2.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/sign/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz", - "integrity": "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ==", + "node_modules/@sigstore/sign/node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", "dev": true, "license": "ISC", - "dependencies": { - "@npmcli/agent": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/tuf": { @@ -4286,7 +4454,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.34.40", + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true, "license": "MIT" }, @@ -4312,6 +4482,8 @@ }, "node_modules/@sovpro/delimited-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz", + "integrity": "sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==", "license": "MIT", "engines": { "node": ">= 8" @@ -4319,6 +4491,8 @@ }, "node_modules/@sphereon/kmp-mdoc-core": { "version": "0.2.0-SNAPSHOT.26", + "resolved": "https://registry.npmjs.org/@sphereon/kmp-mdoc-core/-/kmp-mdoc-core-0.2.0-SNAPSHOT.26.tgz", + "integrity": "sha512-QXJ6R8ENiZV2rPMbn06cw5JKwqUYN1kzVRbYfONqE1PEXx1noQ4md7uxr2zSczi0ubKkNcbyYDNtIMTZIhGzmQ==", "dependencies": { "@js-joda/core": "5.6.3", "@js-joda/timezone": "2.3.0", @@ -4327,10 +4501,14 @@ }, "node_modules/@sphereon/pex-models": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.3.2.tgz", + "integrity": "sha512-foFxfLkRwcn/MOp/eht46Q7wsvpQGlO7aowowIIb5Tz9u97kYZ2kz6K2h2ODxWuv5CRA7Q0MY8XUBGE2lfOhOQ==", "license": "Apache-2.0" }, "node_modules/@sphereon/ssi-types": { "version": "0.33.0", + "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.33.0.tgz", + "integrity": "sha512-OQnWLKZQU6lHlMw3JS5308q5Kctv1eT/NNQthGNXETarsgJFiD711pWMOJvi0p5kLpU8N1e7/okaH3mXsVAW0A==", "license": "Apache-2.0", "dependencies": { "@noble/hashes": "1.6.1", @@ -4344,6 +4522,8 @@ }, "node_modules/@sphereon/ssi-types/node_modules/@noble/hashes": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", "license": "MIT", "engines": { "node": "^14.21.3 || >=16" @@ -4354,6 +4534,8 @@ }, "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/decode": { "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.9.2.tgz", + "integrity": "sha512-jHY7hqk7EMkp6E2cB13QmXvRZN7njvAveVh+zKKy0kxpAM7DmcR4TqcDA4mc5y4lP8zWFUgbk7oGLCx2wiBq+w==", "license": "Apache-2.0", "dependencies": { "@sd-jwt/types": "0.9.2", @@ -4365,6 +4547,8 @@ }, "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/types": { "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.9.2.tgz", + "integrity": "sha512-eV/MY80ekeTrqaohzPpkrgwPki6Igx69D6RniduV1Ehv6o/zaJQ2F0hY/RqBAkJhQtBQoOzouwKYHme40k1Dlw==", "license": "Apache-2.0", "engines": { "node": ">=18" @@ -4372,6 +4556,8 @@ }, "node_modules/@sphereon/ssi-types/node_modules/@sd-jwt/utils": { "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.9.2.tgz", + "integrity": "sha512-GpTD0isav2f+JyMyzeyf6wV3nYcD5e3oL+sVVr/61Y3oaIBGMWLtGGGhBRMCimSnd8kbb0P9jLxvp7ioASk6vw==", "license": "Apache-2.0", "dependencies": { "@sd-jwt/types": "0.9.2", @@ -4383,6 +4569,8 @@ }, "node_modules/@sphereon/ssi-types/node_modules/jwt-decode": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", "license": "MIT", "engines": { "node": ">=18" @@ -4449,6 +4637,8 @@ }, "node_modules/@ts-graphviz/adapter": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@ts-graphviz/adapter/-/adapter-2.0.6.tgz", + "integrity": "sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==", "dev": true, "funding": [ { @@ -4470,6 +4660,8 @@ }, "node_modules/@ts-graphviz/ast": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@ts-graphviz/ast/-/ast-2.0.7.tgz", + "integrity": "sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==", "dev": true, "funding": [ { @@ -4491,6 +4683,8 @@ }, "node_modules/@ts-graphviz/common": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@ts-graphviz/common/-/common-2.1.5.tgz", + "integrity": "sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==", "dev": true, "funding": [ { @@ -4509,6 +4703,8 @@ }, "node_modules/@ts-graphviz/core": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@ts-graphviz/core/-/core-2.0.7.tgz", + "integrity": "sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==", "dev": true, "funding": [ { @@ -4530,27 +4726,37 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.11", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, "license": "MIT" }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, "license": "MIT", "engines": { @@ -4573,6 +4779,8 @@ }, "node_modules/@tufjs/models/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4581,6 +4789,8 @@ }, "node_modules/@tufjs/models/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, "license": "ISC", "dependencies": { @@ -4651,6 +4861,8 @@ }, "node_modules/@types/bn.js": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4688,9 +4900,9 @@ } }, "node_modules/@types/dockerode": { - "version": "3.3.45", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.45.tgz", - "integrity": "sha512-iYpZF+xr5QLpIICejLdUF2r5gh8IXY1Gw3WLmt41dUbS3Vn/3hVgL+6lJBVbmrhYBWfbWPPstdr6+A0s95DTWA==", + "version": "3.3.47", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.47.tgz", + "integrity": "sha512-ShM1mz7rCjdssXt7Xz0u1/R2BJC7piWa3SJpUBiVjCf2A3XNn4cP6pUVaD8bLanpPVVn4IKzJuw3dOvkJ8IbYw==", "dev": true, "license": "MIT", "dependencies": { @@ -4701,6 +4913,8 @@ }, "node_modules/@types/elliptic": { "version": "6.4.18", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.18.tgz", + "integrity": "sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw==", "dev": true, "license": "MIT", "dependencies": { @@ -4709,6 +4923,8 @@ }, "node_modules/@types/estree": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -4743,11 +4959,15 @@ }, "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, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -4756,6 +4976,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -4764,6 +4986,8 @@ }, "node_modules/@types/jest": { "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", "dev": true, "license": "MIT", "dependencies": { @@ -4773,25 +4997,35 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json-stringify-safe": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/json-stringify-safe/-/json-stringify-safe-5.0.3.tgz", + "integrity": "sha512-oNOjRxLfPeYbBSQ60maucaFNqbslVOPU4WWs5t/sHvAh6tyo/CThXSG+E24tEzkgh/fzvxyDrYdOJufgeNy1sQ==", "dev": true, "license": "MIT" }, "node_modules/@types/lodash": { "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", "dev": true, "license": "MIT" }, "node_modules/@types/lokijs": { "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@types/lokijs/-/lokijs-1.5.14.tgz", + "integrity": "sha512-4Fic47BX3Qxr8pd12KT6/T1XWU8dOlJBIp1jGoMbaDbiEvdv50rAii+B3z1b/J2pvMywcVP+DBPGP5/lgLOKGA==", "license": "MIT" }, "node_modules/@types/luxon": { "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", + "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", "dev": true, "license": "MIT" }, @@ -4813,6 +5047,8 @@ }, "node_modules/@types/qs": { "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "license": "MIT" }, "node_modules/@types/range-parser": { @@ -4853,6 +5089,8 @@ }, "node_modules/@types/sjcl": { "version": "1.0.34", + "resolved": "https://registry.npmjs.org/@types/sjcl/-/sjcl-1.0.34.tgz", + "integrity": "sha512-bQHEeK5DTQRunIfQeUMgtpPsNNCcZyQ9MJuAfW1I7iN0LDunTc78Fu17STbLMd7KiEY/g2zHVApippa70h6HoQ==", "dev": true, "license": "MIT" }, @@ -4867,7 +5105,9 @@ } }, "node_modules/@types/ssh2-streams": { - "version": "0.1.12", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.13.tgz", + "integrity": "sha512-faHyY3brO9oLEA0QlcO8N2wT7R0+1sHWZvQ+y3rMLwdY1ZyS1z0W3t65j9PqT4HmQ6ALzNe7RZlNuCNE0wBSWA==", "dev": true, "license": "MIT", "dependencies": { @@ -4893,6 +5133,8 @@ }, "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, "license": "MIT" }, @@ -4908,16 +5150,22 @@ } }, "node_modules/@types/validator": { - "version": "13.15.2", + "version": "13.15.10", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz", + "integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==", "license": "MIT" }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", "dev": true, "license": "MIT" }, "node_modules/@types/whatwg-url": { "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4926,13 +5174,17 @@ }, "node_modules/@types/ws": { "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.33", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "license": "MIT", "dependencies": { @@ -4941,22 +5193,24 @@ }, "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, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.1.tgz", - "integrity": "sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.47.0.tgz", + "integrity": "sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.1", - "@typescript-eslint/type-utils": "8.46.1", - "@typescript-eslint/utils": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1", + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/type-utils": "8.47.0", + "@typescript-eslint/utils": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -4970,13 +5224,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.1", + "@typescript-eslint/parser": "^8.47.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -4984,17 +5240,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.1.tgz", - "integrity": "sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.47.0.tgz", + "integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.46.1", - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/typescript-estree": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1", + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", "debug": "^4.3.4" }, "engines": { @@ -5010,14 +5266,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.1.tgz", - "integrity": "sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", + "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.1", - "@typescript-eslint/types": "^8.46.1", + "@typescript-eslint/tsconfig-utils": "^8.47.0", + "@typescript-eslint/types": "^8.47.0", "debug": "^4.3.4" }, "engines": { @@ -5032,14 +5288,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.1.tgz", - "integrity": "sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", + "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1" + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5050,9 +5306,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.1.tgz", - "integrity": "sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", + "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", "dev": true, "license": "MIT", "engines": { @@ -5067,15 +5323,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.1.tgz", - "integrity": "sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.47.0.tgz", + "integrity": "sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/typescript-estree": "8.46.1", - "@typescript-eslint/utils": "8.46.1", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0", + "@typescript-eslint/utils": "8.47.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -5092,9 +5348,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.1.tgz", - "integrity": "sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", + "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", "dev": true, "license": "MIT", "engines": { @@ -5106,16 +5362,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.1.tgz", - "integrity": "sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", + "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.1", - "@typescript-eslint/tsconfig-utils": "8.46.1", - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1", + "@typescript-eslint/project-service": "8.47.0", + "@typescript-eslint/tsconfig-utils": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/visitor-keys": "8.47.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5136,6 +5392,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5144,6 +5402,8 @@ }, "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, "license": "ISC", "dependencies": { @@ -5156,17 +5416,30 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.1.tgz", - "integrity": "sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", + "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.1", - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/typescript-estree": "8.46.1" + "@typescript-eslint/scope-manager": "8.47.0", + "@typescript-eslint/types": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5181,13 +5454,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.1.tgz", - "integrity": "sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", + "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/types": "8.47.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -5200,6 +5473,8 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, "license": "ISC" }, @@ -5473,68 +5748,84 @@ ] }, "node_modules/@vue/compiler-core": { - "version": "3.5.19", + "version": "3.5.24", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.24.tgz", + "integrity": "sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@vue/shared": "3.5.19", + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.24", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.19", + "version": "3.5.24", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.24.tgz", + "integrity": "sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.19", - "@vue/shared": "3.5.19" + "@vue/compiler-core": "3.5.24", + "@vue/shared": "3.5.24" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.19", + "version": "3.5.24", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.24.tgz", + "integrity": "sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@vue/compiler-core": "3.5.19", - "@vue/compiler-dom": "3.5.19", - "@vue/compiler-ssr": "3.5.19", - "@vue/shared": "3.5.19", + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.24", + "@vue/compiler-dom": "3.5.24", + "@vue/compiler-ssr": "3.5.24", + "@vue/shared": "3.5.24", "estree-walker": "^2.0.2", - "magic-string": "^0.30.17", + "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.19", + "version": "3.5.24", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.24.tgz", + "integrity": "sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.19", - "@vue/shared": "3.5.19" + "@vue/compiler-dom": "3.5.24", + "@vue/shared": "3.5.24" } }, "node_modules/@vue/shared": { - "version": "3.5.19", + "version": "3.5.24", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.24.tgz", + "integrity": "sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==", "dev": true, "license": "MIT" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/abbrev": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "license": "ISC" }, "node_modules/abort-controller": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "license": "MIT", "dependencies": { @@ -5557,20 +5848,10 @@ "node": ">= 0.6" } }, - "node_modules/accepts/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "peer": true, @@ -5583,6 +5864,8 @@ }, "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, "license": "MIT", "peerDependencies": { @@ -5591,6 +5874,8 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", "dependencies": { @@ -5602,6 +5887,8 @@ }, "node_modules/agent-base": { "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", "engines": { @@ -5610,6 +5897,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -5625,6 +5914,8 @@ }, "node_modules/ajv-formats": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -5640,6 +5931,8 @@ }, "node_modules/ajv-formats/node_modules/ajv": { "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -5654,6 +5947,8 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/ansi-escapes": { @@ -5673,7 +5968,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.2.0", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -5685,6 +5982,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, "license": "MIT", "dependencies": { @@ -5699,11 +5998,15 @@ }, "node_modules/any-promise": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true, "license": "MIT" }, "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, "license": "ISC", "dependencies": { @@ -5716,11 +6019,15 @@ }, "node_modules/app-module-path": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/archiver": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5738,6 +6045,8 @@ }, "node_modules/archiver-utils": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", "dev": true, "license": "MIT", "dependencies": { @@ -5755,6 +6064,8 @@ }, "node_modules/archiver-utils/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -5778,6 +6089,8 @@ }, "node_modules/archiver-utils/node_modules/readable-stream": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", "dependencies": { @@ -5793,6 +6106,8 @@ }, "node_modules/archiver/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -5816,6 +6131,8 @@ }, "node_modules/archiver/node_modules/readable-stream": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", "dependencies": { @@ -5831,16 +6148,22 @@ }, "node_modules/arg": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, "license": "MIT" }, "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, "license": "Python-2.0" }, "node_modules/array-find-index": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", "dev": true, "license": "MIT", "engines": { @@ -5849,11 +6172,15 @@ }, "node_modules/asap": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, "license": "MIT" }, "node_modules/asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5862,6 +6189,8 @@ }, "node_modules/asn1js": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", + "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", "license": "BSD-3-Clause", "dependencies": { "pvtsutils": "^1.3.6", @@ -5874,6 +6203,8 @@ }, "node_modules/ast-module-types": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz", + "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==", "dev": true, "license": "MIT", "engines": { @@ -5882,16 +6213,22 @@ }, "node_modules/async": { "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true, "license": "MIT" }, "node_modules/async-lock": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", "dev": true, "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, "node_modules/axios": { @@ -5906,9 +6243,19 @@ } }, "node_modules/b4a": { - "version": "1.6.7", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, "node_modules/babel-jest": { "version": "30.2.0", @@ -5980,16 +6327,6 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2/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, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", @@ -6019,6 +6356,8 @@ }, "node_modules/babel-preset-current-node-syntax": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -6061,19 +6400,30 @@ }, "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, "license": "MIT" }, "node_modules/bare-events": { - "version": "2.6.1", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, "license": "Apache-2.0", - "optional": true + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } }, "node_modules/bare-fs": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.10.tgz", - "integrity": "sha512-arqVF+xX/rJHwrONZaSPhlzleT2gXwVs9rsAe1p1mIVwWZI2A76/raio+KwwxfWMO8oV9Wo90EaUkS2QwVmy4w==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.1.tgz", + "integrity": "sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -6142,9 +6492,9 @@ } }, "node_modules/bare-url": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.2.2.tgz", - "integrity": "sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -6154,6 +6504,8 @@ }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -6180,9 +6532,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.26", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.26.tgz", - "integrity": "sha512-73lC1ugzwoaWCLJ1LvOgrR5xsMLTqSKIEoMHVtL9E/HNk0PXtTM76ZIm84856/SF7Nv8mPZxKoBsgpm0tR1u1Q==", + "version": "2.8.30", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz", + "integrity": "sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -6191,6 +6543,8 @@ }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6199,6 +6553,8 @@ }, "node_modules/bignumber.js": { "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", "license": "MIT", "engines": { "node": "*" @@ -6206,6 +6562,8 @@ }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", "dependencies": { @@ -6216,6 +6574,8 @@ }, "node_modules/bn.js": { "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "license": "MIT" }, "node_modules/body-parser": { @@ -6240,6 +6600,8 @@ }, "node_modules/borc": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/borc/-/borc-3.0.0.tgz", + "integrity": "sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g==", "license": "MIT", "dependencies": { "bignumber.js": "^9.0.0", @@ -6262,6 +6624,8 @@ }, "node_modules/borc/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -6284,10 +6648,14 @@ }, "node_modules/borc/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -6297,6 +6665,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -6308,6 +6678,8 @@ }, "node_modules/brorand": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "license": "MIT" }, "node_modules/browserslist": { @@ -6347,6 +6719,8 @@ }, "node_modules/bs-logger": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "license": "MIT", "dependencies": { @@ -6358,6 +6732,8 @@ }, "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, "license": "Apache-2.0", "dependencies": { @@ -6366,6 +6742,8 @@ }, "node_modules/bson": { "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6374,6 +6752,8 @@ }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -6397,6 +6777,8 @@ }, "node_modules/buffer-crc32": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "dev": true, "license": "MIT", "engines": { @@ -6412,6 +6794,8 @@ }, "node_modules/buildcheck": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", "dev": true, "optional": true, "engines": { @@ -6420,6 +6804,8 @@ }, "node_modules/byline": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", "dev": true, "license": "MIT", "engines": { @@ -6436,9 +6822,9 @@ } }, "node_modules/cacache": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.1.tgz", - "integrity": "sha512-+7LYcYGBYoNqTp1Rv7Ny1YjUo5E0/ftkQtraH3vkfAGgVHc+ouWdC8okAwQgQR7EVIdW6JTzTmhKFwzb+4okAQ==", + "version": "20.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.2.tgz", + "integrity": "sha512-rVWvqtWcgSzB22wImrVto+7PmE+lUqv5dYzRHD0QJsfpSwTkW+GIqA4ykSt/CCjQlQle8USn8CO8vcWNrIqktg==", "dev": true, "license": "ISC", "dependencies": { @@ -6451,7 +6837,7 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", - "ssri": "^12.0.0", + "ssri": "^13.0.0", "unique-filename": "^4.0.0" }, "engines": { @@ -6525,9 +6911,9 @@ } }, "node_modules/cacache/node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -6543,6 +6929,8 @@ }, "node_modules/call-bind": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -6560,6 +6948,8 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6571,6 +6961,8 @@ }, "node_modules/call-bound": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -6585,6 +6977,8 @@ }, "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, "license": "MIT", "engines": { @@ -6602,9 +6996,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001754", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz", - "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==", + "version": "1.0.30001756", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", + "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", "dev": true, "funding": [ { @@ -6630,6 +7024,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -6664,7 +7060,9 @@ } }, "node_modules/ci-info": { - "version": "4.3.0", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, "funding": [ { @@ -6678,18 +7076,22 @@ } }, "node_modules/cjs-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", - "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", + "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==", "dev": true, "license": "MIT" }, "node_modules/class-transformer": { "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", "license": "MIT" }, "node_modules/class-validator": { "version": "0.14.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", + "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", "license": "MIT", "dependencies": { "@types/validator": "^13.11.8", @@ -6699,6 +7101,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -6710,6 +7114,8 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "license": "MIT", "engines": { @@ -6720,66 +7126,71 @@ } }, "node_modules/cliui": { - "version": "8.0.1", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=12" + "node": ">=20" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -6787,6 +7198,8 @@ }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", "engines": { @@ -6805,14 +7218,16 @@ } }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -6824,11 +7239,15 @@ }, "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, "license": "MIT" }, "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==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -6839,6 +7258,8 @@ }, "node_modules/commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", "engines": { @@ -6847,15 +7268,21 @@ }, "node_modules/commondir": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true, "license": "MIT" }, "node_modules/compare-versions": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", "license": "MIT" }, "node_modules/compress-commons": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", "dev": true, "license": "MIT", "dependencies": { @@ -6871,6 +7298,8 @@ }, "node_modules/compress-commons/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -6894,6 +7323,8 @@ }, "node_modules/compress-commons/node_modules/readable-stream": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", "dependencies": { @@ -6909,19 +7340,22 @@ }, "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, "license": "MIT" }, "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -6935,6 +7369,8 @@ }, "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, "license": "MIT" }, @@ -6957,13 +7393,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", - "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", + "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.26.3" + "browserslist": "^4.28.0" }, "funding": { "type": "opencollective", @@ -6972,11 +7408,15 @@ }, "node_modules/core-util-is": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "license": "MIT" }, "node_modules/correlation-id": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/correlation-id/-/correlation-id-5.2.0.tgz", + "integrity": "sha512-qTsYujgBvWIx05qF9HV4+KoezGTelgqJiFnyEfRsEqjpQUZdWnraOGHD+IMep7lPFg6MiI55fvpC4qruKdY5Dw==", "dev": true, "license": "MIT", "engines": { @@ -6985,6 +7425,8 @@ }, "node_modules/cpu-features": { "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", "dev": true, "hasInstallScript": true, "optional": true, @@ -6998,6 +7440,8 @@ }, "node_modules/crc-32": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7009,6 +7453,8 @@ }, "node_modules/crc32-stream": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", "dev": true, "license": "MIT", "dependencies": { @@ -7021,6 +7467,8 @@ }, "node_modules/crc32-stream/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -7044,6 +7492,8 @@ }, "node_modules/crc32-stream/node_modules/readable-stream": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", "dependencies": { @@ -7059,6 +7509,8 @@ }, "node_modules/create-require": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, "license": "MIT" }, @@ -7070,47 +7522,17 @@ }, "node_modules/cross-fetch": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" } }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/cross-fetch/node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/cross-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/cross-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -7124,6 +7546,8 @@ }, "node_modules/date-format": { "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, "license": "MIT", "engines": { @@ -7131,9 +7555,9 @@ } }, "node_modules/dcql": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dcql/-/dcql-2.0.0.tgz", - "integrity": "sha512-+axocPnkCZfvmt9gT8RnVuQ2YTe/g3Wkycql5SubTnr17WqaE5vwa9pMmDcoAH3hdYGwM859z4WjGKkigzMRLQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dcql/-/dcql-2.0.1.tgz", + "integrity": "sha512-qf0Xv8bayL5YzyAH+F9ujE28tuETsoaMIWbYc1xjjUTmEL/UtlimZDQVl1Q7jbfbJ3+eGmAwJr0yIwCWeswA7A==", "license": "Apache-2.0", "dependencies": { "valibot": "1.1.0" @@ -7158,6 +7582,9 @@ }, "node_modules/debuglog": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, "license": "MIT", "engines": { @@ -7181,6 +7608,8 @@ }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "license": "MIT", "engines": { @@ -7189,6 +7618,8 @@ }, "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==", "license": "MIT" }, "node_modules/deepmerge": { @@ -7203,6 +7634,8 @@ }, "node_modules/defaults": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", "dependencies": { @@ -7214,6 +7647,8 @@ }, "node_modules/define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -7230,6 +7665,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==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -7246,6 +7683,8 @@ }, "node_modules/dependency-tree": { "version": "11.2.0", + "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-11.2.0.tgz", + "integrity": "sha512-+C1H3mXhcvMCeu5i2Jpg9dc0N29TWTuT6vJD7mHLAfVmAbo9zW8NlkvQ1tYd3PDMab0IRQM0ccoyX68EZtx9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -7263,6 +7702,8 @@ }, "node_modules/dependency-tree/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { @@ -7281,6 +7722,8 @@ }, "node_modules/detective-amd": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz", + "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==", "dev": true, "license": "MIT", "dependencies": { @@ -7298,6 +7741,8 @@ }, "node_modules/detective-cjs": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz", + "integrity": "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==", "dev": true, "license": "MIT", "dependencies": { @@ -7310,6 +7755,8 @@ }, "node_modules/detective-es6": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz", + "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==", "dev": true, "license": "MIT", "dependencies": { @@ -7321,6 +7768,8 @@ }, "node_modules/detective-postcss": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz", + "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7336,6 +7785,8 @@ }, "node_modules/detective-sass": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz", + "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==", "dev": true, "license": "MIT", "dependencies": { @@ -7348,6 +7799,8 @@ }, "node_modules/detective-scss": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz", + "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==", "dev": true, "license": "MIT", "dependencies": { @@ -7360,6 +7813,8 @@ }, "node_modules/detective-stylus": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz", + "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==", "dev": true, "license": "MIT", "engines": { @@ -7368,6 +7823,8 @@ }, "node_modules/detective-typescript": { "version": "14.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz", + "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==", "dev": true, "license": "MIT", "dependencies": { @@ -7384,6 +7841,8 @@ }, "node_modules/detective-vue2": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz", + "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==", "dev": true, "license": "MIT", "dependencies": { @@ -7404,6 +7863,8 @@ }, "node_modules/dezalgo": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, "license": "ISC", "dependencies": { @@ -7413,10 +7874,14 @@ }, "node_modules/did-resolver": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", "license": "Apache-2.0" }, "node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7524,6 +7989,8 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -7536,11 +8003,15 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/ec-compression": { - "version": "0.0.1-alpha.12" + "version": "0.0.1-alpha.12", + "resolved": "https://registry.npmjs.org/ec-compression/-/ec-compression-0.0.1-alpha.12.tgz", + "integrity": "sha512-rfsgHPnS/q8SiiJyaJ5w+qpkLtvtvEFOXoh40VmjH+Xs1pjzCCKwhd9Un3BQV+1+Qg0es5VQnzwZVJ7fjzfN+A==" }, "node_modules/ed25519-signature-2018-context": { "version": "1.1.0", @@ -7555,14 +8026,16 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.250", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.250.tgz", - "integrity": "sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==", + "version": "1.5.258", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.258.tgz", + "integrity": "sha512-rHUggNV5jKQ0sSdWwlaRDkFc3/rRJIVnOSe9yR4zrR07m3ZxhP4N27Hlg8VeJGGYgFTxK5NqDmWI4DSH72vIJg==", "dev": true, "license": "ISC" }, "node_modules/elliptic": { "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", "dependencies": { "bn.js": "^4.11.9", @@ -7589,6 +8062,8 @@ }, "node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, @@ -7612,13 +8087,13 @@ } }, "node_modules/enhanced-publish": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/enhanced-publish/-/enhanced-publish-1.1.6.tgz", - "integrity": "sha512-GPoSwSRz6BquvA9psdAERlVtc+L2z1p0PKUmp81fboA1pm8vwjuXuI2+ATIq1xr4HsF8vxWLoVBuYlFS5xxVFQ==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/enhanced-publish/-/enhanced-publish-1.1.7.tgz", + "integrity": "sha512-i+AeJYrsYASJbHvNvMI1ognqGuat8mHRDpHcjnGvq9cGPjphBiMtwjjr16DrDEkmx0RnhZwQlTeutKdN+dKV3g==", "dev": true, "license": "MIT", "dependencies": { - "pacote": "^21.0.3" + "pacote": "^21.0.4" }, "bin": { "enhanced-publish": "index.js" @@ -7626,6 +8101,8 @@ }, "node_modules/enhanced-resolve": { "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, "license": "MIT", "dependencies": { @@ -7638,6 +8115,8 @@ }, "node_modules/entities": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -7649,6 +8128,8 @@ }, "node_modules/env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { @@ -7657,6 +8138,8 @@ }, "node_modules/err-code": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true, "license": "MIT" }, @@ -7672,6 +8155,8 @@ }, "node_modules/es-define-property": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7679,6 +8164,8 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7686,6 +8173,8 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -7696,6 +8185,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -7709,6 +8200,8 @@ }, "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, "license": "MIT", "engines": { @@ -7723,6 +8216,8 @@ }, "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, "license": "MIT", "engines": { @@ -7734,6 +8229,8 @@ }, "node_modules/escodegen": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7815,6 +8312,8 @@ }, "node_modules/eslint-plugin-chai-expect": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-chai-expect/-/eslint-plugin-chai-expect-3.1.0.tgz", + "integrity": "sha512-a9F8b38hhJsR7fgDEfyMxppZXCnCW6OOHj7cQfygsm9guXqdSzfpwrHX5FT93gSExDqD71HQglF1lLkGBwhJ+g==", "dev": true, "license": "MIT", "engines": { @@ -7826,6 +8325,8 @@ }, "node_modules/eslint-plugin-chai-friendly": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-1.1.0.tgz", + "integrity": "sha512-+T1rClpDdXkgBAhC16vRQMI5umiWojVqkj9oUTdpma50+uByCZM/oBfxitZiOkjMRlm725mwFfz/RVgyDRvCKA==", "dev": true, "license": "MIT", "engines": { @@ -7836,7 +8337,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "29.0.1", + "version": "29.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.1.0.tgz", + "integrity": "sha512-LabxXbASXVjguqL+kBHTPMf3gUeSqwH4fsrEyHTY/MCs42I/p9+ctg09SJpYiD8eGaIsP6GwYr5xW6xWS9XgZg==", "dev": true, "license": "MIT", "dependencies": { @@ -7875,6 +8378,8 @@ }, "node_modules/eslint-plugin-mocha/node_modules/globals": { "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { @@ -7886,6 +8391,8 @@ }, "node_modules/eslint-scope": { "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7901,6 +8408,8 @@ }, "node_modules/eslint-visitor-keys": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7912,6 +8421,8 @@ }, "node_modules/espree": { "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7928,6 +8439,8 @@ }, "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==", "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -7939,6 +8452,8 @@ }, "node_modules/esquery": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7950,6 +8465,8 @@ }, "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, "license": "BSD-2-Clause", "dependencies": { @@ -7961,6 +8478,8 @@ }, "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, "license": "BSD-2-Clause", "engines": { @@ -7969,11 +8488,15 @@ }, "node_modules/estree-walker": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -7990,6 +8513,8 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, "license": "MIT", "engines": { @@ -7998,17 +8523,33 @@ }, "node_modules/eventemitter2": { "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", "license": "MIT" }, "node_modules/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", "engines": { "node": ">=0.8.x" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/eventsource": { - "version": "4.0.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-4.1.0.tgz", + "integrity": "sha512-2GuF51iuHX6A9xdTccMTsNb7VO0lHZihApxhvQzJB5A03DvHDd2FQepodbMaztPBmBcE/ox7o2gqaxGhYB9LhQ==", "license": "MIT", "dependencies": { "eventsource-parser": "^3.0.1" @@ -8018,10 +8559,12 @@ } }, "node_modules/eventsource-parser": { - "version": "3.0.5", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", "license": "MIT", "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/execa": { @@ -8132,29 +8675,23 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "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==", "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true, "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -8170,6 +8707,8 @@ }, "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, "license": "ISC", "dependencies": { @@ -8181,15 +8720,21 @@ }, "node_modules/fast-json-patch": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", "license": "MIT" }, "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, "license": "MIT" }, "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==", "license": "MIT" }, "node_modules/fast-text-encoding": { @@ -8199,7 +8744,9 @@ "license": "Apache-2.0" }, "node_modules/fast-uri": { - "version": "3.0.6", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -8214,6 +8761,8 @@ }, "node_modules/fastq": { "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -8222,6 +8771,8 @@ }, "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, "license": "Apache-2.0", "dependencies": { @@ -8230,6 +8781,8 @@ }, "node_modules/file-entry-cache": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8241,6 +8794,8 @@ }, "node_modules/filing-cabinet": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-5.0.3.tgz", + "integrity": "sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg==", "dev": true, "license": "MIT", "dependencies": { @@ -8265,6 +8820,8 @@ }, "node_modules/filing-cabinet/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { @@ -8273,6 +8830,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -8301,6 +8860,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, "license": "MIT", "dependencies": { @@ -8316,6 +8877,8 @@ }, "node_modules/find-yarn-workspace-root": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8324,6 +8887,8 @@ }, "node_modules/flat-cache": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -8336,11 +8901,15 @@ }, "node_modules/flatted": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -8390,8 +8959,31 @@ "node": ">= 6" } }, + "node_modules/form-data/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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/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==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/format-util": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", + "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==", "license": "MIT" }, "node_modules/forwarded": { @@ -8419,8 +9011,25 @@ "dev": true, "license": "MIT" }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs-minipass": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "license": "ISC", "dependencies": { @@ -8432,6 +9041,8 @@ }, "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, "license": "ISC" }, @@ -8452,6 +9063,8 @@ }, "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==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8459,6 +9072,8 @@ }, "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, "license": "MIT", "engines": { @@ -8467,6 +9082,8 @@ }, "node_modules/get-amd-module-type": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz", + "integrity": "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8479,6 +9096,8 @@ }, "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, "license": "ISC", "engines": { @@ -8500,6 +9119,8 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -8522,6 +9143,8 @@ }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true, "license": "ISC" }, @@ -8537,6 +9160,8 @@ }, "node_modules/get-port": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", + "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", "dev": true, "license": "MIT", "engines": { @@ -8548,6 +9173,8 @@ }, "node_modules/get-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -8593,6 +9220,8 @@ }, "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, "license": "ISC", "dependencies": { @@ -8604,6 +9233,8 @@ }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8612,6 +9243,8 @@ }, "node_modules/glob/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, "license": "ISC", "dependencies": { @@ -8626,6 +9259,8 @@ }, "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, "license": "MIT", "engines": { @@ -8637,6 +9272,8 @@ }, "node_modules/gonzales-pe": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8651,6 +9288,8 @@ }, "node_modules/gopd": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8661,16 +9300,22 @@ }, "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, "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/handlebars": { "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8691,6 +9336,8 @@ }, "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, "license": "MIT", "engines": { @@ -8699,6 +9346,8 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -8710,6 +9359,8 @@ }, "node_modules/has-symbols": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8720,6 +9371,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -8733,6 +9386,8 @@ }, "node_modules/hash.js": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -8741,6 +9396,8 @@ }, "node_modules/hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -8751,6 +9408,8 @@ }, "node_modules/hmac-drbg": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "license": "MIT", "dependencies": { "hash.js": "^1.0.3", @@ -8790,6 +9449,8 @@ }, "node_modules/http-cache-semantics": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, "license": "BSD-2-Clause" }, @@ -8820,6 +9481,8 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { @@ -8832,6 +9495,8 @@ }, "node_modules/https-proxy-agent": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { @@ -8866,6 +9531,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -8884,6 +9551,8 @@ }, "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, "license": "MIT", "engines": { @@ -8904,11 +9573,11 @@ } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -8921,6 +9590,8 @@ }, "node_modules/import-fresh": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8956,6 +9627,8 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -8964,6 +9637,9 @@ }, "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, "license": "ISC", "dependencies": { @@ -8973,18 +9649,24 @@ }, "node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ini": { - "version": "5.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/ip-address": { - "version": "10.0.1", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "dev": true, "license": "MIT", "engines": { @@ -9009,6 +9691,8 @@ }, "node_modules/is-core-module": { "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -9023,6 +9707,8 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "license": "MIT", "bin": { @@ -9037,6 +9723,8 @@ }, "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, "license": "MIT", "engines": { @@ -9045,6 +9733,8 @@ }, "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, "license": "MIT", "engines": { @@ -9063,6 +9753,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -9074,6 +9766,8 @@ }, "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", "engines": { @@ -9082,6 +9776,8 @@ }, "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, "license": "MIT", "engines": { @@ -9090,6 +9786,8 @@ }, "node_modules/is-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, "license": "MIT", "engines": { @@ -9104,6 +9802,8 @@ }, "node_modules/is-regexp": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, "license": "MIT", "engines": { @@ -9112,6 +9812,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, "license": "MIT", "engines": { @@ -9123,6 +9825,8 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -9134,11 +9838,15 @@ }, "node_modules/is-url": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true, "license": "MIT" }, "node_modules/is-url-superb": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", + "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", "dev": true, "license": "MIT", "engines": { @@ -9150,6 +9858,8 @@ }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "license": "MIT", "dependencies": { @@ -9160,17 +9870,23 @@ } }, "node_modules/isarray": { - "version": "1.0.0", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, "node_modules/iso-url": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", + "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", "license": "MIT", "engines": { "node": ">=12" @@ -9178,6 +9894,8 @@ }, "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, "license": "BSD-3-Clause", "engines": { @@ -9186,6 +9904,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, "license": "BSD-3-Clause", "dependencies": { @@ -9199,6 +9919,19 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", @@ -9245,6 +9978,8 @@ }, "node_modules/jackspeak": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -9365,6 +10100,103 @@ } } }, + "node_modules/jest-cli/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/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, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/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, + "license": "MIT" + }, + "node_modules/jest-cli/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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/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, + "license": "MIT", + "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/jest-cli/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, + "license": "MIT", + "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/jest-config": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", @@ -9484,6 +10316,8 @@ }, "node_modules/jest-expect-message": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.1.3.tgz", + "integrity": "sha512-bTK77T4P+zto+XepAX3low8XVQxDgaEqh3jSTQOG8qvPpD69LsIdyJTa+RmnJh3HNSzJng62/44RPPc7OIlFxg==", "dev": true, "license": "MIT" }, @@ -9598,6 +10432,8 @@ }, "node_modules/jest-regex-util": { "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", "dev": true, "license": "MIT", "engines": { @@ -9739,6 +10575,19 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest-util": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", @@ -9759,6 +10608,8 @@ }, "node_modules/jest-util/node_modules/picomatch": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -9853,9 +10704,9 @@ } }, "node_modules/jose": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.1.tgz", - "integrity": "sha512-GWSqjfOPf4cWOkBzw5THBjtGPhXKqYnfRBzh4Ni+ArTrQQ9unvmsA3oFLqaYKoKe5sjWmGu5wVKg9Ft1i+LQfg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.2.tgz", + "integrity": "sha512-MpcPtHLE5EmztuFIqB0vzHAWJPpmN1E6L4oo+kze56LIs3MyXIj9ZHMDxqOvkP38gBR7K1v3jqd4WU2+nrfONQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -9863,10 +10714,14 @@ }, "node_modules/js-base64": { "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", "license": "BSD-3-Clause" }, "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, "license": "MIT" }, @@ -9885,6 +10740,8 @@ }, "node_modules/jsesc": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -9896,24 +10753,32 @@ }, "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, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { - "version": "4.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", "dev": true, "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "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, "license": "MIT" }, "node_modules/json-stable-stringify": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", "dev": true, "license": "MIT", "dependencies": { @@ -9932,20 +10797,21 @@ }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify/node_modules/isarray": { - "version": "2.0.5", + "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, "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "license": "ISC" }, "node_modules/json-text-sequence": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.3.0.tgz", + "integrity": "sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA==", "license": "MIT", "dependencies": { "@sovpro/delimited-stream": "^1.1.0" @@ -9956,6 +10822,8 @@ }, "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, "license": "MIT", "bin": { @@ -9967,6 +10835,8 @@ }, "node_modules/jsonfile": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { @@ -9978,6 +10848,8 @@ }, "node_modules/jsonify": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", "dev": true, "license": "Public Domain", "funding": { @@ -9986,6 +10858,8 @@ }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -9994,10 +10868,14 @@ }, "node_modules/jwt-decode": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -10006,6 +10884,8 @@ }, "node_modules/klaw-sync": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10026,6 +10906,8 @@ }, "node_modules/lazystream": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "license": "MIT", "dependencies": { @@ -10035,8 +10917,17 @@ "node": ">= 0.6.3" } }, + "node_modules/lazystream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -10051,11 +10942,15 @@ }, "node_modules/lazystream/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/lazystream/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -10074,6 +10969,8 @@ }, "node_modules/levn": { "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, "license": "MIT", "dependencies": { @@ -10085,15 +10982,21 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.12.13", + "version": "1.12.28", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.28.tgz", + "integrity": "sha512-sDB+nY8l1d2SHC0TnBat4uovsx1EjrkesK9U8Arl2/LQluXn3OQczwqr2M/1V2Lo0ajnaY/nZjvacg6vmbqWUQ==", "license": "MIT" }, "node_modules/libsodium-sumo": { "version": "0.7.15", + "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.15.tgz", + "integrity": "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==", "license": "ISC" }, "node_modules/libsodium-wrappers-sumo": { "version": "0.7.15", + "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.15.tgz", + "integrity": "sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==", "license": "ISC", "dependencies": { "libsodium-sumo": "^0.7.15" @@ -10101,6 +11004,8 @@ }, "node_modules/license-checker": { "version": "25.0.1", + "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", + "integrity": "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -10121,6 +11026,8 @@ }, "node_modules/license-checker/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, "license": "MIT", "dependencies": { @@ -10132,6 +11039,8 @@ }, "node_modules/license-checker/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, "license": "MIT", "dependencies": { @@ -10145,6 +11054,8 @@ }, "node_modules/license-checker/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, "license": "MIT", "dependencies": { @@ -10153,11 +11064,15 @@ }, "node_modules/license-checker/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, "license": "MIT" }, "node_modules/license-checker/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10166,6 +11081,8 @@ }, "node_modules/license-checker/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, "license": "MIT", "engines": { @@ -10174,6 +11091,8 @@ }, "node_modules/license-checker/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, "license": "MIT", "engines": { @@ -10182,6 +11101,8 @@ }, "node_modules/license-checker/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -10190,6 +11111,8 @@ }, "node_modules/license-checker/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, "license": "MIT", "dependencies": { @@ -10208,6 +11131,8 @@ }, "node_modules/locate-path": { "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, "license": "MIT", "dependencies": { @@ -10222,6 +11147,8 @@ }, "node_modules/lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, "node_modules/lodash.camelcase": { @@ -10240,16 +11167,22 @@ }, "node_modules/lodash.memoize": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true, "license": "MIT" }, "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, "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { @@ -10265,6 +11198,8 @@ }, "node_modules/log4js": { "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10280,6 +11215,8 @@ }, "node_modules/lokijs": { "version": "1.5.12", + "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.12.tgz", + "integrity": "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==", "license": "MIT" }, "node_modules/long": { @@ -10291,10 +11228,14 @@ }, "node_modules/lru_map": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", + "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", "license": "MIT" }, "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, "license": "ISC", "dependencies": { @@ -10312,6 +11253,8 @@ }, "node_modules/madge": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/madge/-/madge-8.0.0.tgz", + "integrity": "sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==", "dev": true, "license": "MIT", "dependencies": { @@ -10348,11 +11291,13 @@ } }, "node_modules/magic-string": { - "version": "0.30.17", + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/make-dir": { @@ -10371,64 +11316,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-error": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "license": "ISC" }, "node_modules/make-fetch-happen": { - "version": "14.0.3", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz", + "integrity": "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", + "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", - "proc-log": "^5.0.0", + "proc-log": "^6.0.0", "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", - "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" + "ssri": "^13.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, "node_modules/makeerror": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -10437,6 +11370,8 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10472,11 +11407,15 @@ }, "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, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -10485,6 +11424,8 @@ }, "node_modules/micromatch": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -10505,24 +11446,25 @@ } }, "node_modules/mime-types": { - "version": "2.1.35", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types/node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "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, "license": "MIT", "engines": { @@ -10531,14 +11473,20 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "license": "MIT" }, "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, "license": "ISC", "dependencies": { @@ -10550,6 +11498,8 @@ }, "node_modules/minimist": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -10558,6 +11508,8 @@ }, "node_modules/minipass": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -10566,6 +11518,8 @@ }, "node_modules/minipass-collect": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, "license": "ISC", "dependencies": { @@ -10576,7 +11530,9 @@ } }, "node_modules/minipass-fetch": { - "version": "4.0.1", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.0.tgz", + "integrity": "sha512-fiCdUALipqgPWrOVTz9fw0XhcazULXOSU6ie40DDbX1F49p1dBrSRBuswndTx1x3vEb/g0FT7vC4c4C2u/mh3A==", "dev": true, "license": "MIT", "dependencies": { @@ -10585,7 +11541,7 @@ "minizlib": "^3.0.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" }, "optionalDependencies": { "encoding": "^0.1.13" @@ -10593,6 +11549,8 @@ }, "node_modules/minipass-flush": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "license": "ISC", "dependencies": { @@ -10604,6 +11562,8 @@ }, "node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -10615,11 +11575,15 @@ }, "node_modules/minipass-flush/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/minipass-pipeline": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "license": "ISC", "dependencies": { @@ -10631,6 +11595,8 @@ }, "node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -10642,11 +11608,15 @@ }, "node_modules/minipass-pipeline/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/minipass-sized": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, "license": "ISC", "dependencies": { @@ -10658,6 +11628,8 @@ }, "node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -10669,6 +11641,8 @@ }, "node_modules/minipass-sized/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, @@ -10687,6 +11661,8 @@ }, "node_modules/mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "license": "MIT", "dependencies": { @@ -10705,6 +11681,8 @@ }, "node_modules/module-definition": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz", + "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==", "dev": true, "license": "MIT", "dependencies": { @@ -10720,6 +11698,8 @@ }, "node_modules/module-lookup-amd": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-9.0.5.tgz", + "integrity": "sha512-Rs5FVpVcBYRHPLuhHOjgbRhosaQYLtEo3JIeDIbmNo7mSssi1CTzwMh8v36gAzpbzLGXI9wB/yHh+5+3fY1QVw==", "dev": true, "license": "MIT", "dependencies": { @@ -10737,6 +11717,8 @@ }, "node_modules/module-lookup-amd/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { @@ -10745,6 +11727,9 @@ }, "node_modules/module-lookup-amd/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, "license": "ISC", "dependencies": { @@ -10811,6 +11796,8 @@ }, "node_modules/mongodb-connection-string-url": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10820,20 +11807,28 @@ }, "node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/multiformats": { "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", "license": "(Apache-2.0 AND MIT)" }, "node_modules/nan": { - "version": "2.23.0", + "version": "2.23.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.1.tgz", + "integrity": "sha512-r7bBUGKzlqk8oPBDYxt6Z0aEdF1G1rwlMcLk8LCOMbOzf0mG+JUfUzG4fIMWwHWP0iyaLWEQZJmtB7nOHEm/qw==", "dev": true, "license": "MIT", "optional": true }, "node_modules/nanoid": { "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -10866,11 +11861,15 @@ }, "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, "license": "MIT" }, "node_modules/negotiator": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -10878,44 +11877,92 @@ }, "node_modules/neo-async": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, "license": "MIT" }, + "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==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/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==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/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==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-gyp": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", - "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.1.0.tgz", + "integrity": "sha512-W+RYA8jBnhSr2vrTtlPYPc1K+CSjGpVDRZxcqJcERZ8ND3A1ThWPHRwctTx3qC3oW99jt726jhdz3Y6ky87J4g==", "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", "semver": "^7.3.5", - "tar": "^7.4.3", + "tar": "^7.5.2", "tinyglobby": "^0.2.12", - "which": "^5.0.0" + "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/node-gyp/node_modules/abbrev": { - "version": "3.0.1", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/node-gyp/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -10923,21 +11970,38 @@ } }, "node_modules/node-gyp/node_modules/nopt": { - "version": "8.1.0", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", "dev": true, "license": "ISC", "dependencies": { - "abbrev": "^3.0.0" + "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/node-gyp/node_modules/which": { - "version": "5.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", "dev": true, "license": "ISC", "dependencies": { @@ -10947,11 +12011,13 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "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, "license": "MIT" }, @@ -10964,6 +12030,8 @@ }, "node_modules/node-source-walk": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz", + "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -10975,6 +12043,8 @@ }, "node_modules/nopt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "dev": true, "license": "ISC", "dependencies": { @@ -10987,6 +12057,8 @@ }, "node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10998,11 +12070,15 @@ }, "node_modules/normalize-package-data/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -11011,6 +12087,8 @@ }, "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, "license": "MIT", "engines": { @@ -11018,14 +12096,16 @@ } }, "node_modules/npm-bundled": { - "version": "4.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", + "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", "dev": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^4.0.0" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-check-updates": { @@ -11044,137 +12124,128 @@ } }, "node_modules/npm-install-checks": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", - "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-normalize-package-bin": { - "version": "4.0.0", + "node_modules/npm-install-checks/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10" } }, - "node_modules/npm-package-arg": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.1.tgz", - "integrity": "sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag==", + "node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", "dev": true, "license": "ISC", - "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-packlist": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.2.tgz", - "integrity": "sha512-DrIWNiWT0FTdDRjGOYfEEZUNe1IzaSZ+up7qBTKnrQDySpdmuOQvytrqQlpK5QrCA4IThMvL4wTumqaa1ZvVIQ==", + "node_modules/npm-package-arg": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", + "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", "dev": true, "license": "ISC", "dependencies": { - "ignore-walk": "^8.0.0", - "proc-log": "^5.0.0" + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-pick-manifest": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.1.tgz", - "integrity": "sha512-HnU7FYSWbo7dTVHtK0G+BXbZ0aIfxz/aUCVLN0979Ec6rGUX5cJ6RbgVx5fqb5G31ufz+BVFA7y1SkRTPVNoVQ==", + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^13.0.0", - "semver": "^7.3.5" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" } }, - "node_modules/npm-registry-fetch": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.0.0.tgz", - "integrity": "sha512-DFxSAemHUwT/POaXAOY4NJmEWBPB0oKbwD6FFDE9hnt1nORkt/FXvgjD4hQjoKoHw9u0Ezws9SPXwV7xE/Gyww==", + "node_modules/npm-packlist": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^15.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^13.0.0", - "proc-log": "^5.0.0" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-registry-fetch/node_modules/@npmcli/agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", - "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", "dev": true, "license": "ISC", "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^11.2.1", - "socks-proxy-agent": "^8.0.3" + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "node_modules/npm-pick-manifest/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": "20 || >=22" + "node": ">=10" } }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz", - "integrity": "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ==", + "node_modules/npm-registry-fetch": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -11195,6 +12266,8 @@ }, "node_modules/object-inspect": { "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -11205,6 +12278,8 @@ }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -11225,6 +12300,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==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -11232,6 +12309,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -11246,6 +12325,8 @@ }, "node_modules/open": { "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11261,6 +12342,8 @@ }, "node_modules/optionator": { "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -11277,6 +12360,8 @@ }, "node_modules/ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11299,6 +12384,8 @@ }, "node_modules/ora/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, "license": "MIT", "engines": { @@ -11307,6 +12394,8 @@ }, "node_modules/ora/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, "license": "MIT", "dependencies": { @@ -11318,6 +12407,8 @@ }, "node_modules/os-homedir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, "license": "MIT", "engines": { @@ -11326,6 +12417,8 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "license": "MIT", "engines": { @@ -11334,6 +12427,9 @@ }, "node_modules/osenv": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", "dev": true, "license": "ISC", "dependencies": { @@ -11343,6 +12439,8 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11357,6 +12455,8 @@ }, "node_modules/p-locate": { "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, "license": "MIT", "dependencies": { @@ -11370,7 +12470,9 @@ } }, "node_modules/p-map": { - "version": "7.0.3", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", "engines": { @@ -11392,20 +12494,22 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pacote": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.3.tgz", - "integrity": "sha512-itdFlanxO0nmQv4ORsvA9K1wv40IPfB9OmWqfaJWvoJ30VKyHsqNgDVeG+TVhI7Gk7XW8slUy7cA9r6dF5qohw==", + "version": "21.0.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.4.tgz", + "integrity": "sha512-RplP/pDW0NNNDh3pnaoIWYPvNenS7UqMbXyvMqJczosiFWTeGGwJC2NQBLqKf4rGLFfwCOnntw1aEp9Jiqm1MA==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/promise-spawn": "^9.0.0", "@npmcli/run-script": "^10.0.0", "cacache": "^20.0.0", "fs-minipass": "^3.0.0", @@ -11414,10 +12518,10 @@ "npm-packlist": "^10.0.1", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", - "proc-log": "^5.0.0", + "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "sigstore": "^4.0.0", - "ssri": "^12.0.0", + "ssri": "^13.0.0", "tar": "^7.4.3" }, "bin": { @@ -11435,6 +12539,8 @@ }, "node_modules/parent-module": { "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, "license": "MIT", "dependencies": { @@ -11472,6 +12578,8 @@ }, "node_modules/parse-ms": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true, "license": "MIT", "engines": { @@ -11489,6 +12597,8 @@ }, "node_modules/patch-package": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", "dev": true, "license": "MIT", "dependencies": { @@ -11517,6 +12627,8 @@ }, "node_modules/patch-package/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": [ { @@ -11529,21 +12641,23 @@ "node": ">=8" } }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "10.1.0", + "node_modules/patch-package/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/patch-package/node_modules/slash": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, "license": "MIT", "engines": { @@ -11552,6 +12666,8 @@ }, "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, "license": "MIT", "engines": { @@ -11560,6 +12676,8 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -11568,6 +12686,8 @@ }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -11576,11 +12696,15 @@ }, "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, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -11596,6 +12720,8 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, "license": "ISC" }, @@ -11611,11 +12737,15 @@ }, "node_modules/picocolors": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -11627,6 +12757,8 @@ }, "node_modules/pirates": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "license": "MIT", "engines": { @@ -11704,6 +12836,8 @@ }, "node_modules/pluralize": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, "license": "MIT", "engines": { @@ -11712,6 +12846,8 @@ }, "node_modules/postcss": { "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -11740,6 +12876,8 @@ }, "node_modules/postcss-values-parser": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", + "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", "dev": true, "license": "MPL-2.0", "dependencies": { @@ -11756,6 +12894,8 @@ }, "node_modules/precinct": { "version": "12.2.0", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz", + "integrity": "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==", "dev": true, "license": "MIT", "dependencies": { @@ -11784,6 +12924,8 @@ }, "node_modules/precinct/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { @@ -11792,6 +12934,8 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -11800,6 +12944,8 @@ }, "node_modules/prettier": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -11829,6 +12975,8 @@ }, "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, "license": "MIT", "engines": { @@ -11840,6 +12988,8 @@ }, "node_modules/pretty-ms": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11853,15 +13003,19 @@ } }, "node_modules/proc-log": { - "version": "5.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.0.0.tgz", + "integrity": "sha512-KG/XsTDN901PNfPfAMmj6N/Ywg9tM+bHK8pAz+27fS4N4Pcr+4zoYBOcGSBu6ceXYNPxkLpa4ohtfxV1XcLAfA==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/process": { "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "license": "MIT", "engines": { @@ -11870,11 +13024,15 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "license": "MIT" }, "node_modules/promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "license": "MIT", "dependencies": { @@ -11887,6 +13045,8 @@ }, "node_modules/proper-lockfile": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", "dev": true, "license": "MIT", "dependencies": { @@ -11897,11 +13057,15 @@ }, "node_modules/proper-lockfile/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, "license": "ISC" }, "node_modules/properties-reader": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/properties-reader/-/properties-reader-2.3.0.tgz", + "integrity": "sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==", "dev": true, "license": "MIT", "dependencies": { @@ -11917,6 +13081,8 @@ }, "node_modules/properties-reader/node_modules/mkdirp": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", "bin": { @@ -11966,6 +13132,8 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, "node_modules/pump": { @@ -11981,6 +13149,8 @@ }, "node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -12006,20 +13176,26 @@ }, "node_modules/pvtsutils": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "license": "MIT", "dependencies": { "tslib": "^2.8.1" } }, "node_modules/pvutils": { - "version": "1.1.3", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=16.0.0" } }, "node_modules/qs": { "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -12033,6 +13209,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -12052,6 +13230,8 @@ }, "node_modules/quote-unquote": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", + "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", "dev": true, "license": "MIT" }, @@ -12097,6 +13277,8 @@ }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { @@ -12111,11 +13293,15 @@ }, "node_modules/rc/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "license": "MIT", "engines": { @@ -12136,11 +13322,16 @@ }, "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, "license": "MIT" }, "node_modules/read-installed": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "integrity": "sha512-O03wg/IYuV/VtnK2h/KXEt9VIbMUFbk3ERG0Iu4FhLZw0EP0T9znqrYDGn6ncbEsXUFaUjiVAWXHzxwt3lhRPQ==", + "deprecated": "This package is no longer supported.", "dev": true, "license": "ISC", "dependencies": { @@ -12157,6 +13348,8 @@ }, "node_modules/read-installed/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -12165,6 +13358,9 @@ }, "node_modules/read-package-json": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", "dev": true, "license": "ISC", "dependencies": { @@ -12176,6 +13372,9 @@ }, "node_modules/read-package-json/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, "license": "ISC", "dependencies": { @@ -12195,16 +13394,22 @@ }, "node_modules/read-package-json/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, "license": "MIT" }, "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "license": "ISC" }, "node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -12217,6 +13422,8 @@ }, "node_modules/readdir-glob": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12225,6 +13432,8 @@ }, "node_modules/readdir-glob/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12233,6 +13442,8 @@ }, "node_modules/readdir-glob/node_modules/minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -12244,6 +13455,9 @@ }, "node_modules/readdir-scoped-modules": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "license": "ISC", "dependencies": { @@ -12255,6 +13469,8 @@ }, "node_modules/reflect-metadata": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, "node_modules/regenerate": { @@ -12317,6 +13533,8 @@ }, "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, "license": "MIT", "engines": { @@ -12325,6 +13543,8 @@ }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12332,6 +13552,8 @@ }, "node_modules/requirejs": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", + "integrity": "sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==", "dev": true, "license": "MIT", "bin": { @@ -12344,6 +13566,8 @@ }, "node_modules/requirejs-config-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", + "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", "dev": true, "license": "MIT", "dependencies": { @@ -12355,11 +13579,13 @@ } }, "node_modules/resolve": { - "version": "1.22.10", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -12398,6 +13624,8 @@ }, "node_modules/resolve-dependency-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-4.0.1.tgz", + "integrity": "sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==", "dev": true, "license": "MIT", "engines": { @@ -12406,6 +13634,8 @@ }, "node_modules/resolve-from": { "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, "license": "MIT", "engines": { @@ -12414,6 +13644,8 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -12426,11 +13658,15 @@ }, "node_modules/restore-cursor/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, "license": "ISC" }, "node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", "engines": { @@ -12439,6 +13675,8 @@ }, "node_modules/reusify": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -12448,6 +13686,8 @@ }, "node_modules/rfdc": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, @@ -12469,6 +13709,8 @@ }, "node_modules/run-parallel": { "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": [ { @@ -12491,6 +13733,8 @@ }, "node_modules/rxjs": { "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -12498,6 +13742,8 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -12516,6 +13762,8 @@ }, "node_modules/safe-stable-stringify": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "dev": true, "license": "MIT", "engines": { @@ -12524,10 +13772,14 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/sass-lookup": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-6.1.0.tgz", + "integrity": "sha512-Zx+lVyoWqXZxHuYWlTA17Z5sczJ6braNT2C7rmClw+c4E7r/n911Zwss3h1uHI9reR5AgHZyNHF7c2+VIp5AUA==", "dev": true, "license": "MIT", "dependencies": { @@ -12543,6 +13795,8 @@ }, "node_modules/sass-lookup/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { @@ -12550,16 +13804,13 @@ } }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/send": { @@ -12584,18 +13835,6 @@ "node": ">= 18" } }, - "node_modules/send/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serialize-error": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", @@ -12640,6 +13879,8 @@ }, "node_modules/set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -12668,6 +13909,8 @@ }, "node_modules/shebang-command": { "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, "license": "MIT", "dependencies": { @@ -12679,6 +13922,8 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -12687,6 +13932,8 @@ }, "node_modules/side-channel": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -12704,6 +13951,8 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -12718,6 +13967,8 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -12734,6 +13985,8 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -12751,6 +14004,8 @@ }, "node_modules/signal-exit": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -12780,6 +14035,8 @@ }, "node_modules/sjcl": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.8.tgz", + "integrity": "sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ==", "license": "(BSD-2-Clause OR GPL-2.0-only)", "engines": { "node": "*" @@ -12787,6 +14044,8 @@ }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -12795,6 +14054,8 @@ }, "node_modules/slide": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", "dev": true, "license": "ISC", "engines": { @@ -12803,6 +14064,8 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "license": "MIT", "engines": { @@ -12812,6 +14075,8 @@ }, "node_modules/socks": { "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, "license": "MIT", "peer": true, @@ -12826,6 +14091,8 @@ }, "node_modules/socks-proxy-agent": { "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { @@ -12839,6 +14106,8 @@ }, "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==", "devOptional": true, "license": "BSD-3-Clause", "engines": { @@ -12847,6 +14116,8 @@ }, "node_modules/source-map-js": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -12876,6 +14147,8 @@ }, "node_modules/spdx-compare": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", "dev": true, "license": "MIT", "dependencies": { @@ -12886,6 +14159,8 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12895,11 +14170,15 @@ }, "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, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12909,16 +14188,22 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/spdx-ranges": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==", "dev": true, "license": "(MIT AND CC-BY-3.0)" }, "node_modules/spdx-satisfies": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-4.0.1.tgz", + "integrity": "sha512-WVzZ/cXAzoNmjCWiEluEA3BjHp5tiUmmhn9MK+X0tBbR9sOqtC6UQwmgCNrAIZvNlMuBUYAaHYfb2oqlF9SwKA==", "dev": true, "license": "MIT", "dependencies": { @@ -12943,6 +14228,8 @@ }, "node_modules/ssh-remote-port-forward": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ssh-remote-port-forward/-/ssh-remote-port-forward-1.0.4.tgz", + "integrity": "sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12952,6 +14239,8 @@ }, "node_modules/ssh-remote-port-forward/node_modules/@types/ssh2": { "version": "0.5.52", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-0.5.52.tgz", + "integrity": "sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==", "dev": true, "license": "MIT", "dependencies": { @@ -12961,6 +14250,8 @@ }, "node_modules/ssh2": { "version": "1.17.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.17.0.tgz", + "integrity": "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -12976,18 +14267,22 @@ } }, "node_modules/ssri": { - "version": "12.0.0", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "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, "license": "MIT", "dependencies": { @@ -12999,6 +14294,8 @@ }, "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, "license": "MIT", "engines": { @@ -13007,6 +14304,8 @@ }, "node_modules/static-eval": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", "license": "MIT", "dependencies": { "escodegen": "^1.8.1" @@ -13014,6 +14313,8 @@ }, "node_modules/static-eval/node_modules/escodegen": { "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", @@ -13034,6 +14335,8 @@ }, "node_modules/static-eval/node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -13041,6 +14344,8 @@ }, "node_modules/static-eval/node_modules/levn": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", @@ -13052,6 +14357,8 @@ }, "node_modules/static-eval/node_modules/optionator": { "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "license": "MIT", "dependencies": { "deep-is": "~0.1.3", @@ -13067,12 +14374,16 @@ }, "node_modules/static-eval/node_modules/prelude-ls": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "engines": { "node": ">= 0.8.0" } }, "node_modules/static-eval/node_modules/type-check": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" @@ -13092,6 +14403,8 @@ }, "node_modules/stream-to-array": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", "dev": true, "license": "MIT", "dependencies": { @@ -13100,6 +14413,8 @@ }, "node_modules/streamroller": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", "dev": true, "license": "MIT", "dependencies": { @@ -13113,6 +14428,8 @@ }, "node_modules/streamroller/node_modules/fs-extra": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -13126,6 +14443,8 @@ }, "node_modules/streamroller/node_modules/jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -13134,6 +14453,8 @@ }, "node_modules/streamroller/node_modules/universalify": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "engines": { @@ -13141,19 +14462,21 @@ } }, "node_modules/streamx": { - "version": "2.22.1", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", "dev": true, "license": "MIT", "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -13198,6 +14521,8 @@ }, "node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -13215,6 +14540,8 @@ "node_modules/string-width-cjs": { "name": "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, "license": "MIT", "dependencies": { @@ -13228,6 +14555,8 @@ }, "node_modules/string-width-cjs/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, "license": "MIT", "engines": { @@ -13236,11 +14565,15 @@ }, "node_modules/string-width-cjs/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, "license": "MIT" }, "node_modules/string-width-cjs/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, "license": "MIT", "dependencies": { @@ -13252,6 +14585,8 @@ }, "node_modules/stringify-object": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -13264,7 +14599,9 @@ } }, "node_modules/strip-ansi": { - "version": "7.1.0", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -13280,6 +14617,8 @@ "node_modules/strip-ansi-cjs": { "name": "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, "license": "MIT", "dependencies": { @@ -13291,6 +14630,8 @@ }, "node_modules/strip-ansi-cjs/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, "license": "MIT", "engines": { @@ -13319,6 +14660,8 @@ }, "node_modules/strip-json-comments": { "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, "license": "MIT", "engines": { @@ -13330,6 +14673,8 @@ }, "node_modules/stylus-lookup": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-6.1.0.tgz", + "integrity": "sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13344,6 +14689,8 @@ }, "node_modules/stylus-lookup/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { @@ -13352,6 +14699,8 @@ }, "node_modules/supports-color": { "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, "license": "MIT", "dependencies": { @@ -13363,6 +14712,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -13389,11 +14740,17 @@ } }, "node_modules/tapable": { - "version": "2.2.2", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tar": { @@ -13430,6 +14787,8 @@ }, "node_modules/tar-stream": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13509,8 +14868,20 @@ "undici": "^7.16.0" } }, + "node_modules/testcontainers/node_modules/undici": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", + "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, "node_modules/text-decoder": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13568,6 +14939,8 @@ }, "node_modules/tmp": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { @@ -13576,11 +14949,15 @@ }, "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, "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "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, "license": "MIT", "dependencies": { @@ -13601,6 +14978,8 @@ }, "node_modules/tr46": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", "dev": true, "license": "MIT", "dependencies": { @@ -13612,6 +14991,8 @@ }, "node_modules/treeify": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", "dev": true, "license": "MIT", "engines": { @@ -13620,6 +15001,8 @@ }, "node_modules/ts-api-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -13631,6 +15014,8 @@ }, "node_modules/ts-graphviz": { "version": "2.1.6", + "resolved": "https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-2.1.6.tgz", + "integrity": "sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==", "dev": true, "funding": [ { @@ -13706,8 +15091,23 @@ } } }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ts-jest/node_modules/type-fest": { "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -13719,6 +15119,8 @@ }, "node_modules/ts-json-schema-generator": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-2.4.0.tgz", + "integrity": "sha512-HbmNsgs58CfdJq0gpteRTxPXG26zumezOs+SB9tgky6MpqiFgQwieCn2MW70+sxpHouZ/w9LW0V6L4ZQO4y1Ug==", "dev": true, "license": "MIT", "dependencies": { @@ -13740,6 +15142,8 @@ }, "node_modules/ts-json-schema-generator/node_modules/commander": { "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, "license": "MIT", "engines": { @@ -13772,6 +15176,8 @@ }, "node_modules/ts-json-schema-generator/node_modules/jackspeak": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -13785,7 +15191,9 @@ } }, "node_modules/ts-json-schema-generator/node_modules/lru-cache": { - "version": "11.1.0", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", "dev": true, "license": "ISC", "engines": { @@ -13809,7 +15217,9 @@ } }, "node_modules/ts-json-schema-generator/node_modules/path-scurry": { - "version": "2.0.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -13825,6 +15235,8 @@ }, "node_modules/ts-mockito": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", + "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", "dev": true, "license": "MIT", "dependencies": { @@ -13833,6 +15245,8 @@ }, "node_modules/ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "peer": true, @@ -13876,10 +15290,14 @@ }, "node_modules/ts-simple-nameof": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/ts-simple-nameof/-/ts-simple-nameof-1.3.3.tgz", + "integrity": "sha512-nQUaiSnaJUx18YpX9dbZ63jgLnb0CgRTFvQPtIg6sSPZ0mUqH3tYjbmG6XYmwbyuokTEGy4eU0c5zAzNfvLgjg==", "license": "MIT" }, "node_modules/tsconfig-paths": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "license": "MIT", "dependencies": { @@ -13893,6 +15311,8 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -13901,10 +15321,14 @@ }, "node_modules/tslib": { "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tsyringe": { "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", "license": "MIT", "dependencies": { "tslib": "^1.9.3" @@ -13915,6 +15339,8 @@ }, "node_modules/tsyringe/node_modules/tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "license": "0BSD" }, "node_modules/tuf-js": { @@ -13932,63 +15358,17 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/tuf-js/node_modules/@npmcli/agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", - "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^11.2.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/tuf-js/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz", - "integrity": "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true, "license": "Unlicense" }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -14035,18 +15415,6 @@ "node": ">= 0.6" } }, - "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -14063,16 +15431,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.1.tgz", - "integrity": "sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.47.0.tgz", + "integrity": "sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.46.1", - "@typescript-eslint/parser": "8.46.1", - "@typescript-eslint/typescript-estree": "8.46.1", - "@typescript-eslint/utils": "8.46.1" + "@typescript-eslint/eslint-plugin": "8.47.0", + "@typescript-eslint/parser": "8.47.0", + "@typescript-eslint/typescript-estree": "8.47.0", + "@typescript-eslint/utils": "8.47.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -14088,6 +15456,8 @@ }, "node_modules/uglify-js": { "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, "license": "BSD-2-Clause", "optional": true, @@ -14100,19 +15470,20 @@ }, "node_modules/uint8arrays": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", "license": "MIT", "dependencies": { "multiformats": "^9.4.2" } }, "node_modules/undici": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", - "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", - "dev": true, + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", "license": "MIT", "engines": { - "node": ">=20.18.1" + "node": ">=18.17" } }, "node_modules/undici-types": { @@ -14167,6 +15538,8 @@ }, "node_modules/unique-filename": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "dev": true, "license": "ISC", "dependencies": { @@ -14178,6 +15551,8 @@ }, "node_modules/unique-slug": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", "dev": true, "license": "ISC", "dependencies": { @@ -14189,6 +15564,8 @@ }, "node_modules/universalify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -14272,6 +15649,8 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -14280,15 +15659,21 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, "node_modules/util-extend": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", "dev": true, "license": "MIT" }, "node_modules/uuid": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -14300,6 +15685,8 @@ }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, "license": "MIT" }, @@ -14334,6 +15721,8 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14342,19 +15731,19 @@ } }, "node_modules/validate-npm-package-name": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", - "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.0.tgz", + "integrity": "sha512-bwVk/OK+Qu108aJcMAEiU4yavHUI7aN20TgZNBj9MR2iU1zPUl1Z1Otr7771ExfYTPTvfN8ZJ1pbr5Iklgt4xg==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/validator": { - "version": "13.15.20", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.20.tgz", - "integrity": "sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw==", + "version": "13.15.23", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.23.tgz", + "integrity": "sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -14362,6 +15751,8 @@ }, "node_modules/varint": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", "license": "MIT" }, "node_modules/vary": { @@ -14375,6 +15766,8 @@ }, "node_modules/walkdir": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", "dev": true, "license": "MIT", "engines": { @@ -14383,6 +15776,8 @@ }, "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, "license": "Apache-2.0", "dependencies": { @@ -14391,6 +15786,8 @@ }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -14398,7 +15795,9 @@ } }, "node_modules/web-did-resolver": { - "version": "2.0.30", + "version": "2.0.31", + "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.31.tgz", + "integrity": "sha512-alYii1EzapRM4Umlkp0xxbqFUV9ZWPxFxJBzHlrATQz7IEa04s8CICYBcwUkY94cTIjW+Rnvli8/Q9SXRbN74w==", "license": "Apache-2.0", "dependencies": { "cross-fetch": "^4.1.0", @@ -14407,6 +15806,8 @@ }, "node_modules/webcrypto-core": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", + "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.13", @@ -14418,6 +15819,8 @@ }, "node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -14426,6 +15829,8 @@ }, "node_modules/whatwg-url": { "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "dev": true, "license": "MIT", "dependencies": { @@ -14438,6 +15843,8 @@ }, "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, "license": "ISC", "dependencies": { @@ -14452,6 +15859,8 @@ }, "node_modules/word-wrap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -14459,22 +15868,24 @@ }, "node_modules/wordwrap": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true, "license": "MIT" }, "node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -14483,6 +15894,8 @@ "node_modules/wrap-ansi-cjs": { "name": "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, "license": "MIT", "dependencies": { @@ -14542,19 +15955,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", @@ -14568,53 +15968,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-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==", "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -14627,6 +15990,8 @@ }, "node_modules/ws": { "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -14646,6 +16011,8 @@ }, "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, "license": "ISC", "engines": { @@ -14654,11 +16021,15 @@ }, "node_modules/yallist": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/yaml": { "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, "license": "ISC", "bin": { @@ -14669,69 +16040,72 @@ } }, "node_modules/yargs": { - "version": "17.7.2", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "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, "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/yargs/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "license": "ISC", "engines": { - "node": ">=8" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -14740,6 +16114,8 @@ }, "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, "license": "MIT", "engines": { @@ -14751,6 +16127,8 @@ }, "node_modules/zip-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", "dev": true, "license": "MIT", "dependencies": { @@ -14764,6 +16142,8 @@ }, "node_modules/zip-stream/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -14787,6 +16167,8 @@ }, "node_modules/zip-stream/node_modules/readable-stream": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", "dependencies": { @@ -14802,6 +16184,8 @@ }, "node_modules/zod": { "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 0c32424eb..b74071943 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -6,10 +6,10 @@ import { Agent as UndiciAgent, fetch as undiciFetch } from "undici"; import { ConsumptionServices } from "../../src"; import { RuntimeServiceProvider } from "../lib"; -const fetchInstance: typeof fetch = (async (input, init) => { - const response = await undiciFetch(input as any, { ...(init as any), dispatcher: new UndiciAgent({}) }); +const fetchInstance: typeof fetch = (async (input: any, init: any) => { + const response = await undiciFetch(input, { ...init, dispatcher: new UndiciAgent({}) }); return response; -}) as typeof fetch; +}) as unknown as typeof fetch; describe("custom openid4vc service", () => { const runtimeServiceProvider = new RuntimeServiceProvider(fetchInstance); diff --git a/patches/dcql+2.0.0.patch b/patches/dcql+2.0.0.patch deleted file mode 100644 index a25aa9799..000000000 --- a/patches/dcql+2.0.0.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/node_modules/dcql/package.json b/node_modules/dcql/package.json -index 8cda87a..b879100 100644 ---- a/node_modules/dcql/package.json -+++ b/node_modules/dcql/package.json -@@ -45,13 +45,13 @@ - "build": "tsdown src/index.ts --format cjs,esm --dts --clean --sourcemap", - "types:check": "tsc --noEmit" - }, -- "main": "./dist/index.js", -+ "main": "./dist/index.cjs", - "module": "./dist/index.mjs", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "import": "./dist/index.mjs", -- "require": "./dist/index.js", -+ "require": "./dist/index.cjs", - "types": "./dist/index.d.ts" - }, - "./package.json": "./package.json" From 630b58555b9249920ae36f2296532b734d237f6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Thu, 20 Nov 2025 17:20:45 +0100 Subject: [PATCH 55/75] Only extract used credentials when one request is satisfied (#859) * refactor: move extracting the used credentials to a helper method * chore: rename helper method * chore: update lockfile --- package-lock.json | 17 ++++++++++ .../modules/openid4vc/OpenId4VcController.ts | 31 ++++++++++++++----- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2304e7af..16a598541 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8076,6 +8076,17 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -12531,6 +12542,12 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 10f2603c1..6a7ad0b0f 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -83,7 +83,28 @@ export class OpenId4VcController extends ConsumptionBaseController { // TODO: extract DTOs - const matchedCredentialsSdJwtVc = authorizationRequest.presentationExchange?.credentialsForRequest.requirements + const usedCredentials = await this.extractUsedCredentialsFromAuthorizationRequest(authorizationRequest); + + return { + authorizationRequest, + usedCredentials + }; + } + + private async extractUsedCredentialsFromAuthorizationRequest( + authorizationRequest: OpenId4VpResolvedAuthorizationRequest + ): Promise<{ id: string; data: string; type: string; displayInformation?: string }[]> { + const dcqlSatisfied = authorizationRequest.dcql?.queryResult.can_be_satisfied ?? false; + const authorizationRequestSatisfied = authorizationRequest.presentationExchange?.credentialsForRequest.areRequirementsSatisfied ?? false; + if (!dcqlSatisfied && !authorizationRequestSatisfied) { + return []; + } + + // there is no easy method to check which credentials were used in dcql + // this has to be added later + if (!authorizationRequestSatisfied) return []; + + const matchedCredentialsFromPresentationExchange = authorizationRequest.presentationExchange?.credentialsForRequest.requirements .map((entry) => entry.submissionEntry .map((subEntry) => subEntry.verifiableCredentials.filter((vc) => vc.claimFormat === ClaimFormat.SdJwtDc).map((vc) => vc.credentialRecord.compactSdJwtVc)) @@ -93,12 +114,8 @@ export class OpenId4VcController extends ConsumptionBaseController { const allCredentials = await this.getVerifiableCredentials(); - const usedCredentials = allCredentials.filter((credential) => matchedCredentialsSdJwtVc?.includes(credential.data)); - - return { - authorizationRequest, - usedCredentials - }; + const usedCredentials = allCredentials.filter((credential) => matchedCredentialsFromPresentationExchange?.includes(credential.data)); + return usedCredentials; } public async acceptAuthorizationRequest( From 4bd37126015d97452964c4e90d580cb0764a35a2 Mon Sep 17 00:00:00 2001 From: Magnus Kuhn <127854942+Magnus-Kuhn@users.noreply.github.com> Date: Fri, 21 Nov 2025 16:55:36 +0100 Subject: [PATCH 56/75] Improve namings in the oid4vc use cases (#861) * refactor: change the use case and related namings * refactor: remove combination use case, rename response * chore: build schemas * refactor: use more responses * fix: complete response usage * fix: don't use credo type in runtime --- .../modules/openid4vc/OpenId4VcController.ts | 33 +++-------- .../AcceptedAuthorizationRequestDTO.ts | 4 -- .../FetchedAuthorizationRequestDTO.ts | 6 -- .../consumption/FetchedCredentialOfferDTO.ts | 3 - .../runtime-types/src/consumption/index.ts | 3 - .../facades/consumption/OpenId4VcFacade.ts | 30 +++++----- .../runtime/src/useCases/common/Schemas.ts | 57 ++++++------------- .../openid4vc/AcceptAuthorizationRequest.ts | 17 +++--- .../openid4vc/AcceptCredentialOffer.ts | 36 ++++++++++++ .../openid4vc/FetchCredentialOffer.ts | 29 ---------- .../openid4vc/GetVerifiableCredentials.ts | 4 +- .../openid4vc/ResolveAuthorizationRequest.ts | 17 ++++-- .../openid4vc/ResolveCredentialOffer.ts | 15 +++-- .../openid4vc/ResolveFetchedCredential.ts | 36 ------------ .../useCases/consumption/openid4vc/index.ts | 3 +- .../test/consumption/openid4vc.test.ts | 22 +++---- 16 files changed, 118 insertions(+), 197 deletions(-) delete mode 100644 packages/runtime-types/src/consumption/AcceptedAuthorizationRequestDTO.ts delete mode 100644 packages/runtime-types/src/consumption/FetchedAuthorizationRequestDTO.ts delete mode 100644 packages/runtime-types/src/consumption/FetchedCredentialOfferDTO.ts create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts delete mode 100644 packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOffer.ts delete mode 100644 packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredential.ts diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 6a7ad0b0f..63b7d1753 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -25,7 +25,7 @@ export class OpenId4VcController extends ConsumptionBaseController { return this.parent.consumptionConfig.fetchInstance ?? fetch; } - public async fetchCredentialOffer(credentialOfferUrl: string): Promise<{ data: string }> { + public async resolveCredentialOffer(credentialOfferUrl: string): Promise<{ data: string }> { const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOfferUrl); @@ -34,33 +34,14 @@ export class OpenId4VcController extends ConsumptionBaseController { }; } - public async processFetchedCredentialOffer( - fetchedCredentialOffer: string, - requestedCredentialOffers: string[], + public async acceptCredentialOffer( + credentialOffer: string, + credentialConfigurationIds: string[], pinCode?: string ): Promise<{ data: string; id: string; type: string; displayInformation: string | undefined }> { const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const credentialOffer = JSON.parse(fetchedCredentialOffer); - const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: requestedCredentialOffers, txCode: pinCode }); - - // TODO: support multiple credentials - const credential = credentials[0].content.value as VerifiableCredential; - - return { - data: credential.value, - // multi credentials not supported yet - id: credentials[0].id.toString(), - type: credential.type, - displayInformation: credential.displayInformation - }; - } - - public async processCredentialOffer(credentialOffer: string): Promise<{ data: string; id: string; type: string; displayInformation: string | undefined }> { - const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const res = await holder.resolveCredentialOffer(credentialOffer); - const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: Object.keys(res.offeredCredentialConfigurations) }); + const credentials = await holder.requestAndStoreCredentials(JSON.parse(credentialOffer), { credentialsToRequest: credentialConfigurationIds, txCode: pinCode }); // TODO: support multiple credentials const credential = credentials[0].content.value as VerifiableCredential; @@ -75,11 +56,11 @@ export class OpenId4VcController extends ConsumptionBaseController { } public async resolveAuthorizationRequest( - requestUrl: string + authorizationRequestUrl: string ): Promise<{ authorizationRequest: OpenId4VpResolvedAuthorizationRequest; usedCredentials: { id: string; data: string; type: string; displayInformation?: string }[] }> { const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const authorizationRequest = await holder.resolveAuthorizationRequest(requestUrl); + const authorizationRequest = await holder.resolveAuthorizationRequest(authorizationRequestUrl); // TODO: extract DTOs diff --git a/packages/runtime-types/src/consumption/AcceptedAuthorizationRequestDTO.ts b/packages/runtime-types/src/consumption/AcceptedAuthorizationRequestDTO.ts deleted file mode 100644 index f7fada0e1..000000000 --- a/packages/runtime-types/src/consumption/AcceptedAuthorizationRequestDTO.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface AcceptAuthorizationRequestDTO { - status: number; - message: string; -} diff --git a/packages/runtime-types/src/consumption/FetchedAuthorizationRequestDTO.ts b/packages/runtime-types/src/consumption/FetchedAuthorizationRequestDTO.ts deleted file mode 100644 index ce97265ea..000000000 --- a/packages/runtime-types/src/consumption/FetchedAuthorizationRequestDTO.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { VerifiableCredentialDTO } from "./VerifiableCredentialDTO"; - -export interface FetchedAuthorizationRequestDTO { - authorizationRequest: Record; - usedCredentials: VerifiableCredentialDTO[]; -} diff --git a/packages/runtime-types/src/consumption/FetchedCredentialOfferDTO.ts b/packages/runtime-types/src/consumption/FetchedCredentialOfferDTO.ts deleted file mode 100644 index b669e51eb..000000000 --- a/packages/runtime-types/src/consumption/FetchedCredentialOfferDTO.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface FetchedCredentialOfferDTO { - jsonRepresentation: string; -} diff --git a/packages/runtime-types/src/consumption/index.ts b/packages/runtime-types/src/consumption/index.ts index c9fb6f886..9d93032ca 100644 --- a/packages/runtime-types/src/consumption/index.ts +++ b/packages/runtime-types/src/consumption/index.ts @@ -1,9 +1,6 @@ -export * from "./AcceptedAuthorizationRequestDTO"; export * from "./AttributeTagCollectionDTO"; export * from "./CredentialOfferDTO"; export * from "./DraftDTO"; -export * from "./FetchedAuthorizationRequestDTO"; -export * from "./FetchedCredentialOfferDTO"; export * from "./IdentityMetadataDTO"; export * from "./LocalAttributeDeletionInfoDTO"; export * from "./LocalAttributeDTO"; diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts index 29d796111..a9bdf369b 100644 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -1,47 +1,43 @@ import { ApplicationError, Result } from "@js-soft/ts-utils"; -import { AcceptAuthorizationRequestDTO, FetchedAuthorizationRequestDTO, FetchedCredentialOfferDTO, VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { AcceptAuthorizationRequestRequest, + AcceptAuthorizationRequestResponse, AcceptAuthorizationRequestUseCase, - FetchCredentialOfferRequest, - FetchCredentialOfferUseCase, - FetchedCredentialOfferRequest, + AcceptCredentialOfferRequest, + AcceptCredentialOfferUseCase, GetVerifiableCredentialsUseCase, ResolveAuthorizationRequestRequest, + ResolveAuthorizationRequestResponse, ResolveAuthorizationRequestUseCase, ResolveCredentialOfferRequest, - ResolveCredentialOfferUseCase, - ResolveFetchedCredentialOfferUseCase + ResolveCredentialOfferResponse, + ResolveCredentialOfferUseCase } from "../../../useCases"; export class OpenId4VcFacade { public constructor( @Inject private readonly resolveCredentialOfferUseCase: ResolveCredentialOfferUseCase, - @Inject private readonly fetchOfferUseCase: FetchCredentialOfferUseCase, - @Inject private readonly resolveFetchedOfferUseCase: ResolveFetchedCredentialOfferUseCase, + @Inject private readonly acceptCredentialOfferUseCase: AcceptCredentialOfferUseCase, @Inject private readonly resolveAuthorizationRequestUseCase: ResolveAuthorizationRequestUseCase, @Inject private readonly acceptAuthorizationRequestUseCase: AcceptAuthorizationRequestUseCase, @Inject private readonly getVerifiableCredentialsUseCase: GetVerifiableCredentialsUseCase ) {} - public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { + public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { return await this.resolveCredentialOfferUseCase.execute(request); } - public async fetchCredentialOffer(request: FetchCredentialOfferRequest): Promise> { - return await this.fetchOfferUseCase.execute(request); + public async acceptCredentialOffer(request: AcceptCredentialOfferRequest): Promise> { + return await this.acceptCredentialOfferUseCase.execute(request); } - public async resolveFetchedCredentialOffer(request: FetchedCredentialOfferRequest): Promise> { - return await this.resolveFetchedOfferUseCase.execute(request); - } - - public async resolveAuthorizationRequest(request: ResolveAuthorizationRequestRequest): Promise> { + public async resolveAuthorizationRequest(request: ResolveAuthorizationRequestRequest): Promise> { return await this.resolveAuthorizationRequestUseCase.execute(request); } - public async acceptAuthorizationRequest(request: AcceptAuthorizationRequestRequest): Promise> { + public async acceptAuthorizationRequest(request: AcceptAuthorizationRequestRequest): Promise> { return await this.acceptAuthorizationRequestUseCase.execute(request); } diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index ec57ad2ee..03b27a25c 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -16706,9 +16706,7 @@ export const AcceptAuthorizationRequestRequest: any = { "AcceptAuthorizationRequestRequest": { "type": "object", "properties": { - "authorizationRequest": { - "type": "object" - } + "authorizationRequest": {} }, "required": [ "authorizationRequest" @@ -16718,19 +16716,29 @@ export const AcceptAuthorizationRequestRequest: any = { } } -export const FetchCredentialOfferRequest: any = { +export const AcceptCredentialOfferRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/FetchCredentialOfferRequest", + "$ref": "#/definitions/AcceptCredentialOfferRequest", "definitions": { - "FetchCredentialOfferRequest": { + "AcceptCredentialOfferRequest": { "type": "object", "properties": { - "credentialOfferUrl": { + "credentialOffer": { "type": "string" + }, + "pinCode": { + "type": "string" + }, + "credentialConfigurationIds": { + "type": "array", + "items": { + "type": "string" + } } }, "required": [ - "credentialOfferUrl" + "credentialOffer", + "credentialConfigurationIds" ], "additionalProperties": false } @@ -16763,12 +16771,12 @@ export const ResolveAuthorizationRequestRequest: any = { "ResolveAuthorizationRequestRequest": { "type": "object", "properties": { - "requestUrl": { + "authorizationRequestUrl": { "type": "string" } }, "required": [ - "requestUrl" + "authorizationRequestUrl" ], "additionalProperties": false } @@ -16794,35 +16802,6 @@ export const ResolveCredentialOfferRequest: any = { } } -export const FetchedCredentialOfferRequest: any = { - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/FetchedCredentialOfferRequest", - "definitions": { - "FetchedCredentialOfferRequest": { - "type": "object", - "properties": { - "data": { - "type": "string" - }, - "pinCode": { - "type": "string" - }, - "requestedCredentials": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "data", - "requestedCredentials" - ], - "additionalProperties": false - } - } -} - export const CreateSettingRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/CreateSettingRequest", diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts index 95b1bed56..8ec76fbc1 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts @@ -1,12 +1,15 @@ -import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { Result } from "@js-soft/ts-utils"; import { OpenId4VcController } from "@nmshd/consumption"; -import { AcceptAuthorizationRequestDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; export interface AcceptAuthorizationRequestRequest { - authorizationRequest: Record; + authorizationRequest: any; +} + +export interface AcceptAuthorizationRequestResponse { + status: number; + message: string; } class Validator extends SchemaValidator { @@ -15,16 +18,16 @@ class Validator extends SchemaValidator { } } -export class AcceptAuthorizationRequestUseCase extends UseCase { +export class AcceptAuthorizationRequestUseCase extends UseCase { public constructor( - @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject private readonly openId4VcController: OpenId4VcController, @Inject validator: Validator ) { super(validator); } - protected override async executeInternal(request: AcceptAuthorizationRequestRequest): Promise> { - const result = await this.openId4VcContoller.acceptAuthorizationRequest(request.authorizationRequest as OpenId4VpResolvedAuthorizationRequest); + protected override async executeInternal(request: AcceptAuthorizationRequestRequest): Promise> { + const result = await this.openId4VcController.acceptAuthorizationRequest(request.authorizationRequest); return Result.ok({ status: result.status, message: JSON.stringify(result.message) }); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts new file mode 100644 index 000000000..0076cf47e --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts @@ -0,0 +1,36 @@ +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface AcceptCredentialOfferRequest { + credentialOffer: string; + pinCode?: string; + credentialConfigurationIds: string[]; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("AcceptCredentialOfferRequest")); + } +} + +export class AcceptCredentialOfferUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcController: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: AcceptCredentialOfferRequest): Promise> { + const result = await this.openId4VcController.acceptCredentialOffer(request.credentialOffer, request.credentialConfigurationIds, request.pinCode); + return Result.ok({ + data: result.data, + id: result.id, + type: result.type, + displayInformation: result.displayInformation + }); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOffer.ts b/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOffer.ts deleted file mode 100644 index 6d1067aad..000000000 --- a/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOffer.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Result } from "@js-soft/ts-utils"; -import { OpenId4VcController } from "@nmshd/consumption"; -import { FetchedCredentialOfferDTO } from "@nmshd/runtime-types"; -import { Inject } from "@nmshd/typescript-ioc"; -import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; - -export interface FetchCredentialOfferRequest { - credentialOfferUrl: string; -} - -class Validator extends SchemaValidator { - public constructor(@Inject schemaRepository: SchemaRepository) { - super(schemaRepository.getSchema("FetchCredentialOfferRequest")); - } -} - -export class FetchCredentialOfferUseCase extends UseCase { - public constructor( - @Inject private readonly openId4VcContoller: OpenId4VcController, - @Inject validator: Validator - ) { - super(validator); - } - - protected override async executeInternal(request: FetchCredentialOfferRequest): Promise> { - const result = await this.openId4VcContoller.fetchCredentialOffer(request.credentialOfferUrl); - return Result.ok({ jsonRepresentation: result.data } as FetchedCredentialOfferDTO); - } -} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts b/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts index 55beb77d7..679f518ad 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts @@ -16,14 +16,14 @@ class Validator extends SchemaValidator { export class GetVerifiableCredentialsUseCase extends UseCase { public constructor( - @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject private readonly openId4VcController: OpenId4VcController, @Inject validator: Validator ) { super(validator); } protected override async executeInternal(request: GetVerifiableCredentialsRequest): Promise> { - const credentials = await this.openId4VcContoller.getVerifiableCredentials(request.ids); + const credentials = await this.openId4VcController.getVerifiableCredentials(request.ids); return Result.ok(credentials); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts index 430032a44..3b0c1dd79 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts @@ -1,12 +1,17 @@ import { Result } from "@js-soft/ts-utils"; import { OpenId4VcController } from "@nmshd/consumption"; -import { FetchedAuthorizationRequestDTO } from "@nmshd/runtime-types"; +import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import stringifySafe from "json-stringify-safe"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; export interface ResolveAuthorizationRequestRequest { - requestUrl: string; + authorizationRequestUrl: string; +} + +export interface ResolveAuthorizationRequestResponse { + authorizationRequest: Record; + usedCredentials: VerifiableCredentialDTO[]; } class Validator extends SchemaValidator { @@ -15,16 +20,16 @@ class Validator extends SchemaValidator { } } -export class ResolveAuthorizationRequestUseCase extends UseCase { +export class ResolveAuthorizationRequestUseCase extends UseCase { public constructor( - @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject private readonly openId4VcController: OpenId4VcController, @Inject validator: Validator ) { super(validator); } - protected override async executeInternal(request: ResolveAuthorizationRequestRequest): Promise> { - const result = await this.openId4VcContoller.resolveAuthorizationRequest(request.requestUrl); + protected override async executeInternal(request: ResolveAuthorizationRequestRequest): Promise> { + const result = await this.openId4VcController.resolveAuthorizationRequest(request.authorizationRequestUrl); return Result.ok({ authorizationRequest: JSON.parse(stringifySafe(result.authorizationRequest)), diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts index 4a29eb874..b68dedf17 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts @@ -1,6 +1,5 @@ import { Result } from "@js-soft/ts-utils"; import { OpenId4VcController } from "@nmshd/consumption"; -import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; @@ -8,22 +7,26 @@ export interface ResolveCredentialOfferRequest { credentialOfferUrl: string; } +export interface ResolveCredentialOfferResponse { + jsonRepresentation: string; +} + class Validator extends SchemaValidator { public constructor(@Inject schemaRepository: SchemaRepository) { super(schemaRepository.getSchema("ResolveCredentialOfferRequest")); } } -export class ResolveCredentialOfferUseCase extends UseCase { +export class ResolveCredentialOfferUseCase extends UseCase { public constructor( - @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject private readonly openId4VcController: OpenId4VcController, @Inject validator: Validator ) { super(validator); } - protected override async executeInternal(request: ResolveCredentialOfferRequest): Promise> { - const result = await this.openId4VcContoller.processCredentialOffer(request.credentialOfferUrl); - return Result.ok(result); + protected override async executeInternal(request: ResolveCredentialOfferRequest): Promise> { + const result = await this.openId4VcController.resolveCredentialOffer(request.credentialOfferUrl); + return Result.ok({ jsonRepresentation: result.data }); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredential.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredential.ts deleted file mode 100644 index 81d090b3a..000000000 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredential.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Result } from "@js-soft/ts-utils"; -import { OpenId4VcController } from "@nmshd/consumption"; -import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; -import { Inject } from "@nmshd/typescript-ioc"; -import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; - -export interface FetchedCredentialOfferRequest { - data: string; - pinCode?: string; - requestedCredentials: string[]; -} - -class Validator extends SchemaValidator { - public constructor(@Inject schemaRepository: SchemaRepository) { - super(schemaRepository.getSchema("FetchedCredentialOfferRequest")); - } -} - -export class ResolveFetchedCredentialOfferUseCase extends UseCase { - public constructor( - @Inject private readonly openId4VcContoller: OpenId4VcController, - @Inject validator: Validator - ) { - super(validator); - } - - protected override async executeInternal(request: FetchedCredentialOfferRequest): Promise> { - const result = await this.openId4VcContoller.processFetchedCredentialOffer(request.data, request.requestedCredentials, request.pinCode); - return Result.ok({ - data: result.data, - id: result.id, - type: result.type, - displayInformation: result.displayInformation - }); - } -} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/index.ts b/packages/runtime/src/useCases/consumption/openid4vc/index.ts index 9d19e641b..12295fc15 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/index.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/index.ts @@ -1,6 +1,5 @@ export * from "./AcceptAuthorizationRequest"; -export * from "./FetchCredentialOffer"; +export * from "./AcceptCredentialOffer"; export * from "./GetVerifiableCredentials"; export * from "./ResolveAuthorizationRequest"; export * from "./ResolveCredentialOffer"; -export * from "./ResolveFetchedCredential"; diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index b74071943..144c232e9 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -54,7 +54,7 @@ describe("custom openid4vc service", () => { credentialOfferUrl = responseData.result.credentialOffer; - const result = await consumptionServices.openId4Vc.fetchCredentialOffer({ + const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ credentialOfferUrl }); @@ -72,9 +72,9 @@ describe("custom openid4vc service", () => { requestedCredentials = credentialOfferDecoded["credentialOfferPayload"]["credential_configuration_ids"]; } - const acceptanceResult = await consumptionServices.openId4Vc.resolveFetchedCredentialOffer({ - data: jsonRepresentation, - requestedCredentials: requestedCredentials + const acceptanceResult = await consumptionServices.openId4Vc.acceptCredentialOffer({ + credentialOffer: jsonRepresentation, + credentialConfigurationIds: requestedCredentials }); expect(acceptanceResult).toBeSuccessful(); expect(typeof acceptanceResult.value.id).toBe("string"); @@ -119,7 +119,7 @@ describe("custom openid4vc service", () => { expect(response.status).toBe(200); const responseData = await response.data; - const result = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ requestUrl: responseData.result.presentationRequest }); + const result = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); expect(result.value.usedCredentials).toHaveLength(1); const request = result.value.authorizationRequest as OpenId4VpResolvedAuthorizationRequest; @@ -245,25 +245,25 @@ describe("EUDIPLO", () => { }) ).data.uri; - const loadResult = await consumptionServices.openId4Vc.fetchCredentialOffer({ credentialOfferUrl }); + const loadResult = await consumptionServices.openId4Vc.resolveCredentialOffer({ credentialOfferUrl }); expect(loadResult).toBeSuccessful(); - const resolveResult = await consumptionServices.openId4Vc.resolveFetchedCredentialOffer({ - data: loadResult.value.jsonRepresentation, - requestedCredentials: [eudiploCredentialIdInConfiguration] + const resolveResult = await consumptionServices.openId4Vc.acceptCredentialOffer({ + credentialOffer: loadResult.value.jsonRepresentation, + credentialConfigurationIds: [eudiploCredentialIdInConfiguration] }); expect(resolveResult).toBeSuccessful(); }); test("presentation", async () => { - const requestUrl = ( + const authorizationRequestUrl = ( await axiosInstance.post(`/presentation-management/request`, { response_type: "uri", // eslint-disable-line @typescript-eslint/naming-convention requestId: eudiploPresentationConfigurationId }) ).data.uri; - const loadResult = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ requestUrl }); + const loadResult = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl }); expect(loadResult).toBeSuccessful(); const queryResult = loadResult.value.authorizationRequest.dcql.queryResult; From 216832b844408c75f4de435a18a2136063941e1b Mon Sep 17 00:00:00 2001 From: Magnus Kuhn <127854942+Magnus-Kuhn@users.noreply.github.com> Date: Mon, 24 Nov 2025 13:42:38 +0100 Subject: [PATCH 57/75] More precise OpenID4VC interfaces (#863) * refactor: more precise interfaces * feat: credential format validation * fix: undo string cast --- package-lock.json | 12 +- .../modules/openid4vc/OpenId4VcController.ts | 63 ++----- .../openid4vc/local/EnmeshedStorageService.ts | 10 +- .../src/modules/openid4vc/local/Holder.ts | 58 ++----- .../attributes/types/VerifiableCredential.ts | 20 +-- packages/runtime/package.json | 1 + .../facades/consumption/OpenId4VcFacade.ts | 12 +- .../runtime/src/useCases/common/Schemas.ts | 163 ++++++++++-------- .../openid4vc/AcceptAuthorizationRequest.ts | 9 +- .../openid4vc/AcceptCredentialOffer.ts | 23 +-- .../openid4vc/GetVerifiableCredentials.ts | 29 ---- .../openid4vc/ResolveAuthorizationRequest.ts | 10 +- .../openid4vc/ResolveCredentialOffer.ts | 7 +- .../useCases/consumption/openid4vc/index.ts | 1 - .../test/consumption/openid4vc.test.ts | 48 ++---- 15 files changed, 190 insertions(+), 276 deletions(-) delete mode 100644 packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts diff --git a/package-lock.json b/package-lock.json index 16a598541..5cec2389b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8076,17 +8076,6 @@ "node": ">= 0.8" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -16306,6 +16295,7 @@ "ts-simple-nameof": "^1.3.3" }, "devDependencies": { + "@credo-ts/openid4vc": "v0.6.0-alpha-20251110135447", "@js-soft/docdb-access-loki": "1.3.1", "@js-soft/docdb-access-mongo": "1.3.1", "@js-soft/node-logger": "1.2.1", diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 63b7d1753..6d23b5bb2 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,9 +1,10 @@ import { ClaimFormat } from "@credo-ts/core"; -import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; +import { OpenId4VciResolvedCredentialOffer, OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { VerifiableCredential } from "@nmshd/content"; import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; +import { OwnIdentityAttribute } from "../attributes"; import { Holder } from "./local/Holder"; import { KeyStorage } from "./local/KeyStorage"; @@ -25,45 +26,29 @@ export class OpenId4VcController extends ConsumptionBaseController { return this.parent.consumptionConfig.fetchInstance ?? fetch; } - public async resolveCredentialOffer(credentialOfferUrl: string): Promise<{ data: string }> { + public async resolveCredentialOffer(credentialOfferUrl: string): Promise { const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const res = await holder.resolveCredentialOffer(credentialOfferUrl); - return { - data: JSON.stringify(res) - }; + return await holder.resolveCredentialOffer(credentialOfferUrl); } - public async acceptCredentialOffer( - credentialOffer: string, - credentialConfigurationIds: string[], - pinCode?: string - ): Promise<{ data: string; id: string; type: string; displayInformation: string | undefined }> { + public async acceptCredentialOffer(credentialOffer: OpenId4VciResolvedCredentialOffer, credentialConfigurationIds: string[], pinCode?: string): Promise { const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const credentials = await holder.requestAndStoreCredentials(JSON.parse(credentialOffer), { credentialsToRequest: credentialConfigurationIds, txCode: pinCode }); + const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: credentialConfigurationIds, txCode: pinCode }); // TODO: support multiple credentials - const credential = credentials[0].content.value as VerifiableCredential; - - return { - data: credential.value, - // multi credentials not supported yet - id: credentials[0].id.toString(), - type: credential.type, - displayInformation: credential.displayInformation - }; + return credentials[0]; } - public async resolveAuthorizationRequest( - authorizationRequestUrl: string - ): Promise<{ authorizationRequest: OpenId4VpResolvedAuthorizationRequest; usedCredentials: { id: string; data: string; type: string; displayInformation?: string }[] }> { + public async resolveAuthorizationRequest(authorizationRequestUrl: string): Promise<{ + authorizationRequest: OpenId4VpResolvedAuthorizationRequest; + usedCredentials: OwnIdentityAttribute[]; + }> { const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const authorizationRequest = await holder.resolveAuthorizationRequest(authorizationRequestUrl); - // TODO: extract DTOs - const usedCredentials = await this.extractUsedCredentialsFromAuthorizationRequest(authorizationRequest); return { @@ -72,9 +57,7 @@ export class OpenId4VcController extends ConsumptionBaseController { }; } - private async extractUsedCredentialsFromAuthorizationRequest( - authorizationRequest: OpenId4VpResolvedAuthorizationRequest - ): Promise<{ id: string; data: string; type: string; displayInformation?: string }[]> { + private async extractUsedCredentialsFromAuthorizationRequest(authorizationRequest: OpenId4VpResolvedAuthorizationRequest): Promise { const dcqlSatisfied = authorizationRequest.dcql?.queryResult.can_be_satisfied ?? false; const authorizationRequestSatisfied = authorizationRequest.presentationExchange?.credentialsForRequest.areRequirementsSatisfied ?? false; if (!dcqlSatisfied && !authorizationRequestSatisfied) { @@ -93,9 +76,14 @@ export class OpenId4VcController extends ConsumptionBaseController { ) .flat(); - const allCredentials = await this.getVerifiableCredentials(); + const allCredentials = (await this.parent.attributes.getLocalAttributes({ + "@type": "OwnIdentityAttribute", + "content.value.@type": "VerifiableCredential" + })) as OwnIdentityAttribute[]; - const usedCredentials = allCredentials.filter((credential) => matchedCredentialsFromPresentationExchange?.includes(credential.data)); + const usedCredentials = allCredentials.filter((credential) => + matchedCredentialsFromPresentationExchange?.includes((credential.content.value as VerifiableCredential).value as string) + ); // in current demo scenarios this is a string return usedCredentials; } @@ -111,17 +99,4 @@ export class OpenId4VcController extends ConsumptionBaseController { return { status: serverResponse.status, message: serverResponse.body }; } - - public async getVerifiableCredentials(ids?: string[]): Promise<{ id: string; data: string; type: string; displayInformation?: string }[]> { - const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - - const credentials = await holder.getVerifiableCredentials(ids); - - return credentials.map((credential) => { - const value = credential.content.value as VerifiableCredential; - - return { id: credential.id.toString(), data: value.value, type: value.type, displayInformation: value.displayInformation }; - }); - } } diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 2e015b469..5a9265fc3 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -67,15 +67,19 @@ export class EnmeshedStorageService implements StorageServ return await Promise.resolve(); } - public async saveWithDisplay(agentContext: AgentContext, value: string, type: string, displayInformation: string, title: string): Promise { + public async saveWithDisplay( + agentContext: AgentContext, + value: string | Record, + type: string, + displayInformation?: Record[] + ): Promise { const owner = this.accountController.identity.address; const identityAttribute = IdentityAttribute.from({ value: { "@type": "VerifiableCredential", value: value, type: type, - displayInformation: displayInformation, - title: title + displayInformation: displayInformation }, owner: owner }); diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index bce2d7528..8491631d2 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -51,14 +51,6 @@ export class Holder extends BaseAgent> super(keyStorage, getOpenIdHolderModules(), accountController, attributeController, fetchInstance); } - public async getVerifiableCredentials(ids: string[] | undefined): Promise { - const storageService = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); - const allCredentials = await storageService.getAllAsAttributes(this.agent.context, SdJwtVcRecord); - - if (!ids) return allCredentials; - return allCredentials.filter((vc) => ids.includes(vc.id.toString())); - } - public async resolveCredentialOffer(credentialOffer: string): Promise { return await this.agent.openid4vc.holder.resolveCredentialOffer(credentialOffer); } @@ -203,51 +195,21 @@ export class Holder extends BaseAgent> // TODO: batch issuance not yet supported const credential = response.credentials[0]; - const enmeshedStorageService = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); - let credentialKey = ""; - for (const resolved in resolvedCredentialOffer.offeredCredentialConfigurations) { - credentialKey = resolved; + if (![ClaimFormat.SdJwtW3cVc, ClaimFormat.SdJwtDc, ClaimFormat.MsoMdoc].includes(credential.claimFormat)) { + throw new Error("Unsupported credential format"); } - const displayInfo = resolvedCredentialOffer.offeredCredentialConfigurations[credentialKey].display as any; + + const enmeshedStorageService = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); + + const displayInfo = response.credentialConfiguration.display as Record[] | undefined; // if the displayInfo does not provide a logo - we try to load a logo from the issuers attributes - if ( - displayInfo !== undefined && - displayInfo[0]?.logo === undefined && - resolvedCredentialOffer.metadata.credentialIssuer.display !== undefined && - (resolvedCredentialOffer.metadata.credentialIssuer.display as any)?.[0] !== undefined && - (resolvedCredentialOffer.metadata.credentialIssuer.display as any)?.[0]?.["logo"] !== undefined - ) { - const logoInformation = (resolvedCredentialOffer.metadata.credentialIssuer.display as any)?.[0]?.["logo"]; - displayInfo[0]["logo"] = logoInformation; + if (displayInfo && !displayInfo[0]?.logo) { + const logoInformation = resolvedCredentialOffer.metadata.credentialIssuer.display?.[0]?.["logo"]; + displayInfo[0].logo = logoInformation; } - if (credential.claimFormat === ClaimFormat.MsoMdoc) { - return enmeshedStorageService.saveWithDisplay( - this.agent.context, - credential.base64Url, - credential.claimFormat.toString(), - JSON.stringify(displayInfo), - credentialKey - ); - } else if (credential.claimFormat === ClaimFormat.SdJwtDc) { - return enmeshedStorageService.saveWithDisplay( - this.agent.context, - credential.compact, - credential.claimFormat.toString(), - JSON.stringify(displayInfo), - credentialKey - ); - } else if (credential.claimFormat === ClaimFormat.SdJwtW3cVc) { - return enmeshedStorageService.saveWithDisplay( - this.agent.context, - credential.encoded, - credential.claimFormat.toString(), - JSON.stringify(displayInfo), - credentialKey - ); - } - throw new Error("Unsupported credential format"); + return enmeshedStorageService.saveWithDisplay(this.agent.context, credential.encoded, credential.claimFormat, displayInfo); }) ); diff --git a/packages/content/src/attributes/types/VerifiableCredential.ts b/packages/content/src/attributes/types/VerifiableCredential.ts index 55e14dbfa..290d23908 100644 --- a/packages/content/src/attributes/types/VerifiableCredential.ts +++ b/packages/content/src/attributes/types/VerifiableCredential.ts @@ -1,34 +1,28 @@ import { serialize, type, validate } from "@js-soft/ts-serval"; import { AbstractAttributeValue, AbstractAttributeValueJSON, IAbstractAttributeValue } from "../AbstractAttributeValue"; import { RenderHints, RenderHintsEditType, RenderHintsTechnicalType, ValueHints } from "../hints"; -import { PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH, PROPRIETARY_ATTRIBUTE_MAX_TITLE_LENGTH } from "./proprietary/ProprietaryAttributeValue"; +import { PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH } from "./proprietary/ProprietaryAttributeValue"; export interface VerifiableCredentialJSON extends AbstractAttributeValueJSON { "@type": "VerifiableCredential"; - title: string; - value: string; + value: string | Record; type: string; - displayInformation?: string; + displayInformation?: Record[]; key?: string; } export interface IVerifiableCredential extends IAbstractAttributeValue { - title: string; - value: string; + value: string | Record; type: string; - displayInformation?: string; + displayInformation?: Record[]; key?: string; } @type("VerifiableCredential") export class VerifiableCredential extends AbstractAttributeValue { - @serialize() - @validate({ max: PROPRIETARY_ATTRIBUTE_MAX_TITLE_LENGTH }) - public title: string; - @serialize({ any: true }) @validate({ customValidator: validateValue }) - public value: string; + public value: string | Record; @serialize() @validate({ nullable: true }) @@ -36,7 +30,7 @@ export class VerifiableCredential extends AbstractAttributeValue { @serialize() @validate({ nullable: true, max: PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH }) - public displayInformation?: string; + public displayInformation?: Record[]; @serialize() @validate({ nullable: true, max: PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH }) diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 641e66146..12d5f8f06 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -86,6 +86,7 @@ "ts-simple-nameof": "^1.3.3" }, "devDependencies": { + "@credo-ts/openid4vc": "v0.6.0-alpha-20251110135447", "@js-soft/docdb-access-loki": "1.3.1", "@js-soft/docdb-access-mongo": "1.3.1", "@js-soft/node-logger": "1.2.1", diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts index a9bdf369b..1cf7ade55 100644 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -1,5 +1,5 @@ import { ApplicationError, Result } from "@js-soft/ts-utils"; -import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { LocalAttributeDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { AcceptAuthorizationRequestRequest, @@ -7,7 +7,6 @@ import { AcceptAuthorizationRequestUseCase, AcceptCredentialOfferRequest, AcceptCredentialOfferUseCase, - GetVerifiableCredentialsUseCase, ResolveAuthorizationRequestRequest, ResolveAuthorizationRequestResponse, ResolveAuthorizationRequestUseCase, @@ -21,15 +20,14 @@ export class OpenId4VcFacade { @Inject private readonly resolveCredentialOfferUseCase: ResolveCredentialOfferUseCase, @Inject private readonly acceptCredentialOfferUseCase: AcceptCredentialOfferUseCase, @Inject private readonly resolveAuthorizationRequestUseCase: ResolveAuthorizationRequestUseCase, - @Inject private readonly acceptAuthorizationRequestUseCase: AcceptAuthorizationRequestUseCase, - @Inject private readonly getVerifiableCredentialsUseCase: GetVerifiableCredentialsUseCase + @Inject private readonly acceptAuthorizationRequestUseCase: AcceptAuthorizationRequestUseCase ) {} public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { return await this.resolveCredentialOfferUseCase.execute(request); } - public async acceptCredentialOffer(request: AcceptCredentialOfferRequest): Promise> { + public async acceptCredentialOffer(request: AcceptCredentialOfferRequest): Promise> { return await this.acceptCredentialOfferUseCase.execute(request); } @@ -40,8 +38,4 @@ export class OpenId4VcFacade { public async acceptAuthorizationRequest(request: AcceptAuthorizationRequestRequest): Promise> { return await this.acceptAuthorizationRequestUseCase.execute(request); } - - public async getVerifiableCredentials(ids?: string[]): Promise> { - return await this.getVerifiableCredentialsUseCase.execute({ ids }); - } } diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index 03b27a25c..359cdc4ac 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -1809,17 +1809,24 @@ export const CanCreateOutgoingRequestRequest: any = { "@version": { "type": "string" }, - "title": { - "type": "string" - }, "value": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] }, "type": { "type": "string" }, "displayInformation": { - "type": "string" + "type": "array", + "items": { + "type": "object" + } }, "key": { "type": "string" @@ -1827,7 +1834,6 @@ export const CanCreateOutgoingRequestRequest: any = { }, "required": [ "@type", - "title", "type", "value" ], @@ -3828,17 +3834,24 @@ export const CompleteOutgoingRequestRequest: any = { "@version": { "type": "string" }, - "title": { - "type": "string" - }, "value": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] }, "type": { "type": "string" }, "displayInformation": { - "type": "string" + "type": "array", + "items": { + "type": "object" + } }, "key": { "type": "string" @@ -3846,7 +3859,6 @@ export const CompleteOutgoingRequestRequest: any = { }, "required": [ "@type", - "title", "type", "value" ], @@ -5834,17 +5846,24 @@ export const CreateAndCompleteOutgoingRequestFromRelationshipTemplateResponseReq "@version": { "type": "string" }, - "title": { - "type": "string" - }, "value": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] }, "type": { "type": "string" }, "displayInformation": { - "type": "string" + "type": "array", + "items": { + "type": "object" + } }, "key": { "type": "string" @@ -5852,7 +5871,6 @@ export const CreateAndCompleteOutgoingRequestFromRelationshipTemplateResponseReq }, "required": [ "@type", - "title", "type", "value" ], @@ -8457,17 +8475,24 @@ export const CreateOutgoingRequestRequest: any = { "@version": { "type": "string" }, - "title": { - "type": "string" - }, "value": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] }, "type": { "type": "string" }, "displayInformation": { - "type": "string" + "type": "array", + "items": { + "type": "object" + } }, "key": { "type": "string" @@ -8475,7 +8500,6 @@ export const CreateOutgoingRequestRequest: any = { }, "required": [ "@type", - "title", "type", "value" ], @@ -11482,17 +11506,24 @@ export const ReceivedIncomingRequestRequest: any = { "@version": { "type": "string" }, - "title": { - "type": "string" - }, "value": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] }, "type": { "type": "string" }, "displayInformation": { - "type": "string" + "type": "array", + "items": { + "type": "object" + } }, "key": { "type": "string" @@ -11500,7 +11531,6 @@ export const ReceivedIncomingRequestRequest: any = { }, "required": [ "@type", - "title", "type", "value" ], @@ -15500,17 +15530,24 @@ export const SucceedOwnIdentityAttributeRequest: any = { "@version": { "type": "string" }, - "title": { - "type": "string" - }, "value": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] }, "type": { "type": "string" }, "displayInformation": { - "type": "string" + "type": "array", + "items": { + "type": "object" + } }, "key": { "type": "string" @@ -15518,7 +15555,6 @@ export const SucceedOwnIdentityAttributeRequest: any = { }, "required": [ "@type", - "title", "type", "value" ], @@ -16705,13 +16741,15 @@ export const AcceptAuthorizationRequestRequest: any = { "definitions": { "AcceptAuthorizationRequestRequest": { "type": "object", + "additionalProperties": false, "properties": { - "authorizationRequest": {} + "authorizationRequest": { + "type": "object" + } }, "required": [ "authorizationRequest" - ], - "additionalProperties": false + ] } } } @@ -16722,9 +16760,10 @@ export const AcceptCredentialOfferRequest: any = { "definitions": { "AcceptCredentialOfferRequest": { "type": "object", + "additionalProperties": false, "properties": { "credentialOffer": { - "type": "string" + "type": "object" }, "pinCode": { "type": "string" @@ -16737,29 +16776,9 @@ export const AcceptCredentialOfferRequest: any = { } }, "required": [ - "credentialOffer", - "credentialConfigurationIds" - ], - "additionalProperties": false - } - } -} - -export const GetVerifiableCredentialsRequest: any = { - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/GetVerifiableCredentialsRequest", - "definitions": { - "GetVerifiableCredentialsRequest": { - "type": "object", - "properties": { - "ids": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false + "credentialConfigurationIds", + "credentialOffer" + ] } } } @@ -20853,17 +20872,24 @@ export const VerifiableCredential: any = { "@version": { "type": "string" }, - "title": { - "type": "string" - }, "value": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] }, "type": { "type": "string" }, "displayInformation": { - "type": "string" + "type": "array", + "items": { + "type": "object" + } }, "key": { "type": "string" @@ -20871,7 +20897,6 @@ export const VerifiableCredential: any = { }, "required": [ "@type", - "title", "type", "value" ], diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts index 8ec76fbc1..e5a9df210 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/AcceptAuthorizationRequest.ts @@ -1,12 +1,17 @@ +import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { Result } from "@js-soft/ts-utils"; import { OpenId4VcController } from "@nmshd/consumption"; import { Inject } from "@nmshd/typescript-ioc"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; -export interface AcceptAuthorizationRequestRequest { - authorizationRequest: any; +export interface AbstractAcceptAuthorizationRequestRequest { + authorizationRequest: T; } +export interface AcceptAuthorizationRequestRequest extends AbstractAcceptAuthorizationRequestRequest {} + +export interface SchemaValidatableAcceptAuthorizationRequestRequest extends AbstractAcceptAuthorizationRequestRequest> {} + export interface AcceptAuthorizationRequestResponse { status: number; message: string; diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts index 0076cf47e..7ed165081 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts @@ -1,22 +1,28 @@ +import { OpenId4VciResolvedCredentialOffer } from "@credo-ts/openid4vc"; import { Result } from "@js-soft/ts-utils"; import { OpenId4VcController } from "@nmshd/consumption"; -import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { LocalAttributeDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; +import { AttributeMapper } from "../attributes"; -export interface AcceptCredentialOfferRequest { - credentialOffer: string; +export interface AbstractCredentialOfferRequest { + credentialOffer: T; pinCode?: string; credentialConfigurationIds: string[]; } +export interface AcceptCredentialOfferRequest extends AbstractCredentialOfferRequest {} + +export interface SchemaValidatableAcceptCredentialOfferRequest extends AbstractCredentialOfferRequest> {} + class Validator extends SchemaValidator { public constructor(@Inject schemaRepository: SchemaRepository) { super(schemaRepository.getSchema("AcceptCredentialOfferRequest")); } } -export class AcceptCredentialOfferUseCase extends UseCase { +export class AcceptCredentialOfferUseCase extends UseCase { public constructor( @Inject private readonly openId4VcController: OpenId4VcController, @Inject validator: Validator @@ -24,13 +30,8 @@ export class AcceptCredentialOfferUseCase extends UseCase> { + protected override async executeInternal(request: AcceptCredentialOfferRequest): Promise> { const result = await this.openId4VcController.acceptCredentialOffer(request.credentialOffer, request.credentialConfigurationIds, request.pinCode); - return Result.ok({ - data: result.data, - id: result.id, - type: result.type, - displayInformation: result.displayInformation - }); + return Result.ok(AttributeMapper.toAttributeDTO(result)); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts b/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts deleted file mode 100644 index 679f518ad..000000000 --- a/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentials.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Result } from "@js-soft/ts-utils"; -import { OpenId4VcController } from "@nmshd/consumption"; -import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; -import { Inject } from "@nmshd/typescript-ioc"; -import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; - -export interface GetVerifiableCredentialsRequest { - ids: string[] | undefined; -} - -class Validator extends SchemaValidator { - public constructor(@Inject schemaRepository: SchemaRepository) { - super(schemaRepository.getSchema("GetVerifiableCredentialsRequest")); - } -} - -export class GetVerifiableCredentialsUseCase extends UseCase { - public constructor( - @Inject private readonly openId4VcController: OpenId4VcController, - @Inject validator: Validator - ) { - super(validator); - } - - protected override async executeInternal(request: GetVerifiableCredentialsRequest): Promise> { - const credentials = await this.openId4VcController.getVerifiableCredentials(request.ids); - return Result.ok(credentials); - } -} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts index 3b0c1dd79..0a109a6ff 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts @@ -1,17 +1,19 @@ +import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { Result } from "@js-soft/ts-utils"; import { OpenId4VcController } from "@nmshd/consumption"; -import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { LocalAttributeDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import stringifySafe from "json-stringify-safe"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; +import { AttributeMapper } from "../attributes"; export interface ResolveAuthorizationRequestRequest { authorizationRequestUrl: string; } export interface ResolveAuthorizationRequestResponse { - authorizationRequest: Record; - usedCredentials: VerifiableCredentialDTO[]; + authorizationRequest: OpenId4VpResolvedAuthorizationRequest; + usedCredentials: LocalAttributeDTO[]; } class Validator extends SchemaValidator { @@ -33,7 +35,7 @@ export class ResolveAuthorizationRequestUseCase extends UseCase { @@ -26,7 +27,7 @@ export class ResolveCredentialOfferUseCase extends UseCase> { - const result = await this.openId4VcController.resolveCredentialOffer(request.credentialOfferUrl); - return Result.ok({ jsonRepresentation: result.data }); + const credentialOffer = await this.openId4VcController.resolveCredentialOffer(request.credentialOfferUrl); + return Result.ok({ credentialOffer }); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/index.ts b/packages/runtime/src/useCases/consumption/openid4vc/index.ts index 12295fc15..df1516ddd 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/index.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/index.ts @@ -1,5 +1,4 @@ export * from "./AcceptAuthorizationRequest"; export * from "./AcceptCredentialOffer"; -export * from "./GetVerifiableCredentials"; export * from "./ResolveAuthorizationRequest"; export * from "./ResolveCredentialOffer"; diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 144c232e9..a70981a10 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -1,4 +1,4 @@ -import { OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; +import { VerifiableCredential } from "@nmshd/content"; import axios, { AxiosInstance } from "axios"; import path from "path"; import { DockerComposeEnvironment, GenericContainer, StartedDockerComposeEnvironment, StartedTestContainer, Wait } from "testcontainers"; @@ -61,23 +61,22 @@ describe("custom openid4vc service", () => { expect(result).toBeSuccessful(); // analogously to the app code all presented credentials are accepted - const jsonRepresentation = result.value.jsonRepresentation; - const credentialOfferDecoded = JSON.parse(jsonRepresentation); - let requestedCredentials = []; + const credentialOffer = result.value.credentialOffer; + // determine which credentials to pick from the offer for all supported types of offers - if (credentialOfferDecoded["credentialOfferPayload"]["credentials"] !== undefined) { - requestedCredentials = credentialOfferDecoded["credentialOfferPayload"]["credentials"]; - } else if (credentialOfferDecoded["credentialOfferPayload"]["credential_configuration_ids"] !== undefined) { - requestedCredentials = credentialOfferDecoded["credentialOfferPayload"]["credential_configuration_ids"]; - } + const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; const acceptanceResult = await consumptionServices.openId4Vc.acceptCredentialOffer({ - credentialOffer: jsonRepresentation, + credentialOffer, credentialConfigurationIds: requestedCredentials }); expect(acceptanceResult).toBeSuccessful(); expect(typeof acceptanceResult.value.id).toBe("string"); + + const credential = acceptanceResult.value.content.value as unknown as VerifiableCredential; + expect(credential.displayInformation?.[0].logo).toBeDefined(); + expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); }); test("should be able to process a given credential presentation", async () => { @@ -122,7 +121,7 @@ describe("custom openid4vc service", () => { const result = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); expect(result.value.usedCredentials).toHaveLength(1); - const request = result.value.authorizationRequest as OpenId4VpResolvedAuthorizationRequest; + const request = result.value.authorizationRequest; expect(request.presentationExchange!.credentialsForRequest.areRequirementsSatisfied).toBe(true); const presentationResult = await consumptionServices.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); @@ -134,27 +133,16 @@ describe("custom openid4vc service", () => { // Ensure the first test has completed expect(credentialOfferUrl).toBeDefined(); - const acceptanceResult = await consumptionServices.openId4Vc.getVerifiableCredentials(); + const acceptanceResult = await consumptionServices.attributes.getOwnIdentityAttributes({ + query: { + "content.value.@type": "VerifiableCredential" + } + }); expect(acceptanceResult).toBeSuccessful(); expect(acceptanceResult.value.length).toBeGreaterThan(0); }); - test("getting the earlier created verifiable credential by id should return exactly one credential", async () => { - // Ensure the first test has completed - expect(credentialOfferUrl).toBeDefined(); - - const allCredentialsResult = await consumptionServices.openId4Vc.getVerifiableCredentials(); - expect(allCredentialsResult).toBeSuccessful(); - expect(allCredentialsResult.value.length).toBeGreaterThan(0); - - const firstCredentialId = allCredentialsResult.value[0].id; - const singleCredentialResult = await consumptionServices.openId4Vc.getVerifiableCredentials([firstCredentialId]); - expect(singleCredentialResult).toBeSuccessful(); - expect(singleCredentialResult.value).toHaveLength(1); - expect(singleCredentialResult.value[0].id).toBe(firstCredentialId); - }); - async function startOid4VcComposeStack() { let baseUrl = process.env.NMSHD_TEST_BASEURL!; let addressGenerationHostnameOverride: string | undefined; @@ -249,10 +237,12 @@ describe("EUDIPLO", () => { expect(loadResult).toBeSuccessful(); const resolveResult = await consumptionServices.openId4Vc.acceptCredentialOffer({ - credentialOffer: loadResult.value.jsonRepresentation, + credentialOffer: loadResult.value.credentialOffer, credentialConfigurationIds: [eudiploCredentialIdInConfiguration] }); expect(resolveResult).toBeSuccessful(); + + expect((resolveResult.value.content.value as unknown as VerifiableCredential).displayInformation?.[0].name).toBe("Employee ID Card"); }); test("presentation", async () => { @@ -266,7 +256,7 @@ describe("EUDIPLO", () => { const loadResult = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl }); expect(loadResult).toBeSuccessful(); - const queryResult = loadResult.value.authorizationRequest.dcql.queryResult; + const queryResult = loadResult.value.authorizationRequest.dcql!.queryResult; expect(queryResult.can_be_satisfied).toBe(true); const credentialMatches = queryResult.credential_matches["EmployeeIdCard-vc-sd-jwt"]; From a17d61f8115a00616e5f7eda1221a57111e383ac Mon Sep 17 00:00:00 2001 From: Magnus Kuhn <127854942+Magnus-Kuhn@users.noreply.github.com> Date: Tue, 25 Nov 2025 15:07:44 +0100 Subject: [PATCH 58/75] Remove unused oid4vc coding (#864) * refactor: remove unused code * feat: throw when unimplemented methods are used --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .../modules/openid4vc/OpenId4VcController.ts | 2 +- .../local/EnmeshedHolderFileSystem.ts | 118 ++--------- .../openid4vc/local/EnmeshedStorageService.ts | 195 ++++++------------ .../src/modules/openid4vc/local/Holder.ts | 99 +-------- 4 files changed, 94 insertions(+), 320 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 6d23b5bb2..7aedae88e 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -35,7 +35,7 @@ export class OpenId4VcController extends ConsumptionBaseController { public async acceptCredentialOffer(credentialOffer: OpenId4VciResolvedCredentialOffer, credentialConfigurationIds: string[], pinCode?: string): Promise { const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: credentialConfigurationIds, txCode: pinCode }); + const credentials = await holder.acceptCredentialOffer(credentialOffer, { credentialConfigurationIds: credentialConfigurationIds, txCode: pinCode }); // TODO: support multiple credentials return credentials[0]; diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderFileSystem.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderFileSystem.ts index faab98a6d..66473edb1 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderFileSystem.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderFileSystem.ts @@ -1,111 +1,29 @@ import { DownloadToFileOptions, FileSystem } from "@credo-ts/core"; +// File system is not used since we don't use Askar or AnonCreds. export class EnmeshedHolderFileSystem implements FileSystem { - public readonly dataPath: string; - public readonly cachePath: string; - public readonly tempPath: string; - - private readonly fileSystem: Map = new Map(); - private readonly directories: Map = new Map(); - - public constructor() { - // check if the globalThis object already knows a fake file system - if ((globalThis as any).enmeshedFileSystem) { - // if a fake file system already exists use its value to initialize this instance - const existingFs = (globalThis as any).enmeshedFileSystem as EnmeshedHolderFileSystem; - this.fileSystem = existingFs.fileSystem; - this.directories = existingFs.directories; - - this.dataPath = existingFs.dataPath; - this.cachePath = existingFs.cachePath; - this.tempPath = existingFs.tempPath; - } else { - this.dataPath = "/data"; - this.cachePath = "/cache"; - this.tempPath = "/temp"; - - // initialize the directories map with the known paths - this.directories.set(this.dataPath, true); - this.directories.set(this.cachePath, true); - this.directories.set(this.tempPath, true); - // store this instance in the globalThis object - EnmeshedHolderFileSystem.updateGlobalInstance(this); - } + public exists(_path: string): Promise { + throw new Error("File system not implemented because previously not needed."); } - - public static updateGlobalInstance(toStore: EnmeshedHolderFileSystem): void { - (globalThis as any).enmeshedFileSystem = toStore; - } - - public exists(path: string): Promise { - if (this.directories.has(path) || this.fileSystem.has(path)) { - return Promise.resolve(true); - } - - return Promise.resolve(false); - } - - public createDirectory(path: string): Promise { - this.directories.set(path, true); - EnmeshedHolderFileSystem.updateGlobalInstance(this); - return Promise.resolve(); + public createDirectory(_path: string): Promise { + throw new Error("File system not implemented because previously not needed."); } - - public async copyFile(sourcePath: string, destinationPath: string): Promise { - const exists = await this.exists(sourcePath); - if (!exists) { - throw new Error(`Source file ${sourcePath} does not exist`); - } - - if (this.directories.get(sourcePath)) { - throw new Error(`Source path ${sourcePath} is a directory, not a file`); - } - - await this.write(destinationPath, this.fileSystem.get(sourcePath)!); - return; + public copyFile(_sourcePath: string, _destinationPath: string): Promise { + throw new Error("File system not implemented because previously not needed."); } - - public write(path: string, data: string): Promise { - // if the path doe not yet exist set it as a file - if (!this.directories.has(path)) { - this.directories.set(path, false); // mark as file - } - this.fileSystem.set(path, data); - EnmeshedHolderFileSystem.updateGlobalInstance(this); - return Promise.resolve(); + public write(_path: string, _data: string): Promise { + throw new Error("File system not implemented because previously not needed."); } - - public async read(path: string): Promise { - const exists = await this.exists(path); - if (!exists) { - throw new Error(`Path ${path} does not exist`); - } - - if (this.directories.get(path)) { - throw new Error(`Path ${path} is a directory, not a file`); - } - - return this.fileSystem.get(path) ?? ""; + public read(_path: string): Promise { + throw new Error("File system not implemented because previously not needed."); } - - public async delete(path: string): Promise { - if (!(await this.exists(path))) { - throw new Error(`Path ${path} does not exist`); - } - if (this.directories.get(path)) { - throw new Error(`Path ${path} is a directory, not a file`); - } - - if (this.fileSystem.has(path)) { - this.fileSystem.delete(path); - this.directories.delete(path); - } - EnmeshedHolderFileSystem.updateGlobalInstance(this); - return; + public delete(_path: string): Promise { + throw new Error("File system not implemented because previously not needed."); } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public downloadToFile(url: string, path: string, options?: DownloadToFileOptions): Promise { - throw new Error("Method not implemented."); + public downloadToFile(_url: string, _path: string, _options?: DownloadToFileOptions): Promise { + throw new Error("File system not implemented because previously not needed."); } + public readonly dataPath: string; + public readonly cachePath: string; + public readonly tempPath: string; } diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 5a9265fc3..6bcab9947 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -4,19 +4,16 @@ import { BaseRecordConstructor, ClaimFormat, injectable, - JsonTransformer, Mdoc, MdocRecord, Query, QueryOptions, SdJwtVcRecord, StorageService, - VerifiableCredential, W3cCredentialRecord, W3cJwtVerifiableCredential } from "@credo-ts/core"; -import { IdentityAttribute, VerifiableCredential as VerifiableCredentialAttributeValue } from "@nmshd/content"; -import { CoreId } from "@nmshd/core-types"; +import { IdentityAttribute, VerifiableCredential } from "@nmshd/content"; import { AccountController } from "@nmshd/transport"; import { OwnIdentityAttribute } from "../../attributes"; import { AttributesController } from "../../attributes/AttributesController"; @@ -25,46 +22,19 @@ import { KeyStorage } from "./KeyStorage"; @injectable() export class EnmeshedStorageService implements StorageService { public storage: Map = new Map(); - public constructor( private readonly accountController: AccountController, private readonly attributeController: AttributesController, private readonly keyStorage: KeyStorage ) {} - public async save(agentContext: AgentContext, record: T): Promise { - if (record.id === "STORAGE_VERSION_RECORD_ID") { - this.storage.set(record.id, record); - return; - } - - if (record.type === "DidRecord") { - this.storage.set(record.id, record); - return; + public save(_agentContext: AgentContext, record: T): Promise { + if (record.id !== "STORAGE_VERSION_RECORD_ID" && record.type !== "DidRecord") { + throw new Error("Only storage of STORAGE_VERSION_RECORD_ID and DidRecord implemented because others previously not needed"); } - let value = (record as unknown as VerifiableCredential).encoded; - if (typeof value !== "string") { - agentContext.config.logger.warn(`Record is not a string, serializing to JSON`); - value = JSON.stringify(value); - } - const owner = this.accountController.identity.address; - agentContext.config.logger.debug(`Saving record with id ${record.id} and value ${value}`); - - const identityAttribute = IdentityAttribute.from({ - value: { - "@type": "VerifiableCredential", - title: (record as any).credential?.payload?.vct ?? "Credential", - value: value, - type: record.type - }, - owner: owner - }); - const result = await this.attributeController.createOwnIdentityAttribute({ - content: identityAttribute - }); - agentContext.config.logger.debug(`Saved record: ${JSON.stringify(result)}`); - return await Promise.resolve(); + this.storage.set(record.id, record); + return Promise.resolve(); } public async saveWithDisplay( @@ -90,115 +60,84 @@ export class EnmeshedStorageService implements StorageServ return await Promise.resolve(result); } - public async update(agentContext: AgentContext, record: T): Promise { - agentContext.config.logger.debug(`Updating record with id ${record.id}`); - const value = JsonTransformer.serialize(record); - const owner = this.accountController.identity.address; - const oldAttribute = await this.attributeController.getLocalAttribute(CoreId.from(record.id)); - if (!oldAttribute) throw new Error(`Attribute with id ${record.id} not found`); - - const identityAttribute = IdentityAttribute.from({ - value: { - "@type": "VerifiableCredential", - value: value, - title: "Employee ID Card", - displayInformation: (oldAttribute.content.value as any).displayInformation - }, - owner: owner - }); - await this.attributeController.createOwnIdentityAttribute({ - content: identityAttribute - // id: CoreId.from(record.id) - }); - return await Promise.resolve(); + public update(_agentContext: AgentContext, _record: T): Promise { + throw new Error("Storage update not implemented because previously not needed"); } - public async delete(agentContext: AgentContext, record: T): Promise { - agentContext.config.logger.debug(`Deleting record with id ${record.id}`); - const attribute = await this.attributeController.getLocalAttribute(CoreId.from(record.id)); - if (attribute === undefined) { - throw new Error(`Attribute with id ${record.id} not found`); - } - await this.attributeController.deleteAttribute(attribute.id); + public delete(_agentContext: AgentContext, _record: T): Promise { + throw new Error("Storage delete not implemented because previously not needed"); } - public async deleteById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { - agentContext.config.logger.debug(`Deleting record with id ${id} - with record class ${recordClass.name}`); - const attribute = await this.attributeController.getLocalAttribute(CoreId.from(id)); - if (attribute === undefined) { - throw new Error(`Attribute with id ${id} not found`); - } - await this.attributeController.deleteAttribute(attribute.id); + public deleteById(_agentContext: AgentContext, _recordClass: BaseRecordConstructor, _id: string): Promise { + throw new Error("Storage delete not implemented because previously not needed"); } - public async getById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { - if (this.storage.has(id)) { - const record = this.storage.get(id); - if (!record) throw new Error(`Record with id ${id} not found`); - return record; - } - - agentContext.config.logger.debug(`Getting record with id ${id}`); - const attribute = await this.attributeController.getLocalAttribute(CoreId.from(id)); - // parse the value field of attribute as JSON into T - if (attribute === undefined) { - throw new Error(`Attribute with id ${id} not found`); - } - const record = JsonTransformer.deserialize((attribute.content.value as any).value, recordClass); - return record; + public getById(_agentContext: AgentContext, _recordClass: BaseRecordConstructor, id: string): Promise { + const record = this.storage.get(id); + if (!record) throw new Error(`Record with id ${id} not found`); + return Promise.resolve(record); } - public async getAll(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { - const records: T[] = []; - const attributes = (await this.attributeController.getLocalAttributes({ - "@type": "OwnIdentityAttribute", - "content.value.@type": "VerifiableCredential" - })) as OwnIdentityAttribute[]; - - for (const attribute of attributes) { - const value = attribute.content.value as VerifiableCredentialAttributeValue; - - // TODO: Correct casting - const type = value.type; - let record: T; - if (type === ClaimFormat.SdJwtDc.toString() && recordClass.name === SdJwtVcRecord.name) { - record = new SdJwtVcRecord({ id: (attribute as any).content.id, compactSdJwtVc: (attribute as any).content.value.value }) as unknown as T; - } else if (type === ClaimFormat.MsoMdoc.toString() && recordClass.name === MdocRecord.name) { - record = new MdocRecord({ id: (attribute as any).content.id, mdoc: Mdoc.fromBase64Url((attribute as any).content.value.value) }) as unknown as T; - } else if (type === ClaimFormat.SdJwtW3cVc.toString() && recordClass.name === W3cCredentialRecord.name) { - const credential = W3cJwtVerifiableCredential.fromSerializedJwt((attribute as any).content.value.value); - record = new W3cCredentialRecord({ - id: (attribute as any).content.id, - credential: credential, - tags: {} - }) as unknown as T; - } else { - agentContext.config.logger.info(`Skipping attribute with id ${attribute.id} and type ${type} as it does not match record class ${recordClass.name}`); - continue; - } + public async getAll(_agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { + // so far only encountered in the credential context + const recordType = recordClass.type; + const correspondingCredentialType = this.recordTypeToCredentialType(recordType); - if (value.key !== undefined) { - // TODO: Remove as this is only a workaround for demo purposes - agentContext.config.logger.info("Found keys to possibly import"); + const attributes = await this.attributeController.getLocalAttributes({ + "@type": "OwnIdentityAttribute", + "content.value.@type": "VerifiableCredential", + "content.value.type": correspondingCredentialType + }); - const parsed = JSON.parse(value.key) as Map; - for (const [k, v] of parsed) { - await this.keyStorage.storeKey(k, v); + return await Promise.all( + attributes.map(async (attribute) => { + const attributeValue = attribute.content.value as VerifiableCredential; + if (attributeValue.key !== undefined) { + // TODO: Remove as this is only a workaround for demo purposes + _agentContext.config.logger.info("Found keys to possibly import"); + + const parsed = JSON.parse(attributeValue.key) as Map; + for (const [k, v] of parsed) { + await this.keyStorage.storeKey(k, v); + } } - } - records.push(record); + + return this.fromEncoded(correspondingCredentialType, (attribute.content.value as VerifiableCredential).value) as T; + }) + ); + } + + private recordTypeToCredentialType(recordType: string): string { + switch (recordType) { + case SdJwtVcRecord.name: + return ClaimFormat.SdJwtDc; + case MdocRecord.name: + return ClaimFormat.MsoMdoc; + case W3cCredentialRecord.name: + return ClaimFormat.SdJwtW3cVc; + default: + throw new Error("Record type not supported."); } - return records; } - // should only be used for exporting data out of the credo environment - public async getAllAsAttributes(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { - agentContext.config.logger.debug(`Getting all records of type ${recordClass.name}`); - const attributes = await this.attributeController.getLocalAttributes({ "@type": "OwnIdentityAttribute", "content.value.@type": "VerifiableCredential" }); - return attributes as OwnIdentityAttribute[]; + private fromEncoded(type: string, encoded: string | Record): BaseRecord { + switch (type) { + case ClaimFormat.SdJwtDc: + return new SdJwtVcRecord({ compactSdJwtVc: encoded as string }); + case ClaimFormat.MsoMdoc: + return new MdocRecord({ mdoc: Mdoc.fromBase64Url(encoded as string) }); + case ClaimFormat.SdJwtW3cVc: + return new W3cCredentialRecord({ + credential: W3cJwtVerifiableCredential.fromSerializedJwt(encoded as string), + tags: {} + }); + default: + throw new Error("Credential type not supported."); + } } public async findByQuery(agentContext: AgentContext, recordClass: BaseRecordConstructor, query: Query, queryOptions?: QueryOptions): Promise { + // so far only encountered in the credential context agentContext.config.logger.debug(`Finding records by query ${JSON.stringify(query)} and options ${JSON.stringify(queryOptions)}`); const records: T[] = []; for (const record of await this.getAll(agentContext, recordClass)) { diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 8491631d2..949ec2aeb 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -12,16 +12,7 @@ import { SdJwtVcRecord, X509Module } from "@credo-ts/core"; -import { - OpenId4VcModule, - OpenId4VciAuthorizationFlow, - OpenId4VciDpopRequestOptions, - authorizationCodeGrantIdentifier, - preAuthorizedCodeGrantIdentifier, - type OpenId4VciMetadata, - type OpenId4VciResolvedCredentialOffer, - type OpenId4VpResolvedAuthorizationRequest -} from "@credo-ts/openid4vc"; +import { OpenId4VcModule, type OpenId4VciResolvedCredentialOffer, type OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { AccountController } from "@nmshd/transport"; import { AttributesController, OwnIdentityAttribute } from "../../attributes"; import { BaseAgent } from "./BaseAgent"; @@ -55,95 +46,21 @@ export class Holder extends BaseAgent> return await this.agent.openid4vc.holder.resolveCredentialOffer(credentialOffer); } - public async resolveIssuerMetadata(credentialIssuer: string): Promise { - return await this.agent.openid4vc.holder.resolveIssuerMetadata(credentialIssuer); - } - - public async initiateAuthorization( - resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, - credentialsToRequest: string[] - ): Promise< - | { - readonly authorizationFlow: "PreAuthorized"; - readonly preAuthorizedCode: string; - } - | { - readonly authorizationFlow: "PresentationDuringIssuance"; - readonly openid4vpRequestUrl: string; - readonly authSession: string; - readonly dpop?: OpenId4VciDpopRequestOptions; - readonly preAuthorizedCode?: undefined; - } - | { - readonly authorizationFlow: "Oauth2Redirect"; - readonly authorizationRequestUrl: string; - readonly codeVerifier?: string; - readonly dpop?: OpenId4VciDpopRequestOptions; - readonly preAuthorizedCode?: undefined; - } - > { - const grants = resolvedCredentialOffer.credentialOfferPayload.grants; - if (grants?.[preAuthorizedCodeGrantIdentifier]) { - return { - authorizationFlow: "PreAuthorized", - preAuthorizedCode: grants[preAuthorizedCodeGrantIdentifier]["pre-authorized_code"] - } as const; - } - - if (resolvedCredentialOffer.credentialOfferPayload.grants?.[authorizationCodeGrantIdentifier]) { - const resolvedAuthorizationRequest = await this.agent.openid4vc.holder.resolveOpenId4VciAuthorizationRequest(resolvedCredentialOffer, { - clientId: this.client.clientId, - redirectUri: this.client.redirectUri, - scope: Object.entries(resolvedCredentialOffer.offeredCredentialConfigurations) - .map(([id, value]) => (credentialsToRequest.includes(id) ? value.scope : undefined)) - .filter((v): v is string => Boolean(v)) - }); - - if (resolvedAuthorizationRequest.authorizationFlow === OpenId4VciAuthorizationFlow.PresentationDuringIssuance) { - return { - ...resolvedAuthorizationRequest, - authorizationFlow: `${OpenId4VciAuthorizationFlow.PresentationDuringIssuance}` - } as const; - } - return { - ...resolvedAuthorizationRequest, - authorizationFlow: `${OpenId4VciAuthorizationFlow.Oauth2Redirect}` - } as const; - } - - throw new Error("Unsupported grant type"); - } - - public async requestAndStoreCredentials( + public async acceptCredentialOffer( resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, options: { - clientId?: string; - codeVerifier?: string; - credentialsToRequest: string[]; - code?: string; - redirectUri?: string; + credentialConfigurationIds: string[]; txCode?: string; } ): Promise { - const tokenResponse = await this.agent.openid4vc.holder.requestToken( - options.code && options.clientId - ? { - resolvedCredentialOffer, - clientId: options.clientId, - codeVerifier: options.codeVerifier, - code: options.code, - redirectUri: options.redirectUri - } - : { - resolvedCredentialOffer, - txCode: options.txCode - } - ); + const tokenResponse = await this.agent.openid4vc.holder.requestToken({ + resolvedCredentialOffer, + txCode: options.txCode + }); const credentialResponse = await this.agent.openid4vc.holder.requestCredentials({ resolvedCredentialOffer, - clientId: options.clientId, - credentialConfigurationIds: options.credentialsToRequest, + credentialConfigurationIds: options.credentialConfigurationIds, credentialBindingResolver: async ({ supportedDidMethods, supportsAllDidMethods, proofTypes }) => { const key = await this.agent.kms.createKeyForSignatureAlgorithm({ algorithm: proofTypes.jwt?.supportedSignatureAlgorithms[0] ?? "EdDSA" From 4396a874da287e59f53b9754c4ba1bd3df82eac5 Mon Sep 17 00:00:00 2001 From: Milena Czierlinski <146972016+Milena-Czierlinski@users.noreply.github.com> Date: Tue, 25 Nov 2025 17:13:31 +0100 Subject: [PATCH 59/75] Audit fix (#865) --- package-lock.json | 44 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9319c88aa..a6819cf44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6579,23 +6579,27 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/borc": { @@ -9518,15 +9522,19 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ieee754": { @@ -13259,22 +13267,6 @@ "node": ">= 0.10" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", From 9f9c88bb59e1aa0afc7905452b6475d4e777aaca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Wed, 26 Nov 2025 10:32:49 +0100 Subject: [PATCH 60/75] The ResolveCredentialOffer UseCase is returning non json payloads (#866) * chore: remove duplicate dependency declaration * fix: return proper json from ResolveCredentialOffer --- package-lock.json | 1 - packages/runtime/package.json | 1 - .../useCases/consumption/openid4vc/ResolveCredentialOffer.ts | 5 ++++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6819cf44..79497e11e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16287,7 +16287,6 @@ "ts-simple-nameof": "^1.3.3" }, "devDependencies": { - "@credo-ts/openid4vc": "v0.6.0-alpha-20251110135447", "@js-soft/docdb-access-loki": "1.3.1", "@js-soft/docdb-access-mongo": "1.3.1", "@js-soft/node-logger": "1.2.1", diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 157e3bea7..b18942f01 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -86,7 +86,6 @@ "ts-simple-nameof": "^1.3.3" }, "devDependencies": { - "@credo-ts/openid4vc": "v0.6.0-alpha-20251110135447", "@js-soft/docdb-access-loki": "1.3.1", "@js-soft/docdb-access-mongo": "1.3.1", "@js-soft/node-logger": "1.2.1", diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts index 6f79404de..ced41a0be 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOffer.ts @@ -2,6 +2,7 @@ import { OpenId4VciResolvedCredentialOffer } from "@credo-ts/openid4vc"; import { Result } from "@js-soft/ts-utils"; import { OpenId4VcController } from "@nmshd/consumption"; import { Inject } from "@nmshd/typescript-ioc"; +import stringifySafe from "json-stringify-safe"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; export interface ResolveCredentialOfferRequest { @@ -28,6 +29,8 @@ export class ResolveCredentialOfferUseCase extends UseCase> { const credentialOffer = await this.openId4VcController.resolveCredentialOffer(request.credentialOfferUrl); - return Result.ok({ credentialOffer }); + return Result.ok({ + credentialOffer: JSON.parse(stringifySafe(credentialOffer)) + }); } } From 116d385f2a2d95f96bb48acdbcc2b59021e0b459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Wed, 26 Nov 2025 13:23:05 +0100 Subject: [PATCH 61/75] Remove obsolete VerifiableCredentialDTO (#867) * chore: remove dto * chore: remove export --- .../src/consumption/VerifiableCredentialDTO.ts | 7 ------- packages/runtime-types/src/consumption/index.ts | 1 - 2 files changed, 8 deletions(-) delete mode 100644 packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts diff --git a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts deleted file mode 100644 index aa9042a93..000000000 --- a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface VerifiableCredentialDTO { - id: string; - data: string; - type: string; - displayInformation?: string; - key?: string; -} diff --git a/packages/runtime-types/src/consumption/index.ts b/packages/runtime-types/src/consumption/index.ts index 9d93032ca..652c13749 100644 --- a/packages/runtime-types/src/consumption/index.ts +++ b/packages/runtime-types/src/consumption/index.ts @@ -9,4 +9,3 @@ export * from "./LocalNotificationDTO"; export * from "./LocalRequestDTO"; export * from "./RequestValidationResultDTO"; export * from "./SettingDTO"; -export * from "./VerifiableCredentialDTO"; From ece4db095ac6145b76d9ec793d3ecfcd328bc992 Mon Sep 17 00:00:00 2001 From: Magnus Kuhn <127854942+Magnus-Kuhn@users.noreply.github.com> Date: Thu, 27 Nov 2025 16:03:13 +0100 Subject: [PATCH 62/75] Bump credo (#868) * chore: bump credo * fix: store legacy key id * fix: re-add encoded credential * test: remove only * refactor: remove comment * fix: only re-add for PEX --- package-lock.json | 366 +++++------------- packages/consumption/package.json | 4 +- .../modules/openid4vc/OpenId4VcController.ts | 2 +- .../EnmeshedHolderKeyManagmentService.ts | 4 + .../openid4vc/local/EnmeshedStorageService.ts | 13 +- .../src/modules/openid4vc/local/Holder.ts | 21 +- .../openid4vc/ResolveAuthorizationRequest.ts | 15 +- ...vc+oauth2+0.3.0-alpha-20251110130103.patch | 50 --- ...vc+oauth2+0.3.0-alpha-20251113142742.patch | 21 + ...penid4vci+0.3.0-alpha-20251110130103.patch | 24 -- ....0-alpha-20251113142742+001+initial.patch} | 24 -- ...4vc+utils+0.3.0-alpha-20251110130103.patch | 24 -- 12 files changed, 152 insertions(+), 416 deletions(-) delete mode 100644 patches/@openid4vc+oauth2+0.3.0-alpha-20251110130103.patch create mode 100644 patches/@openid4vc+oauth2+0.3.0-alpha-20251113142742.patch delete mode 100644 patches/@openid4vc+openid4vci+0.3.0-alpha-20251110130103.patch rename patches/{@openid4vc+openid4vp+0.3.0-alpha-20251110130103+001+initial.patch => @openid4vc+openid4vp+0.3.0-alpha-20251113142742+001+initial.patch} (58%) delete mode 100644 patches/@openid4vc+utils+0.3.0-alpha-20251110130103.patch diff --git a/package-lock.json b/package-lock.json index 79497e11e..054149d54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1959,9 +1959,9 @@ "license": "MIT" }, "node_modules/@credo-ts/core": { - "version": "0.6.0-alpha-20251110135447", - "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20251110135447.tgz", - "integrity": "sha512-prkezpQV8W9z30DG9ksoEYKa8SvaFj5Jt+8SD6BR4A8TGCrALCRh3AimbK9Jeyl40kTeBWm29eC3hOwLyz6x+Q==", + "version": "0.6.0-alpha-20251121023030", + "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20251121023030.tgz", + "integrity": "sha512-sMCpulU0tFKkArJozexY3yqCUIEZU/Tskbi/K5Gd6c/Ekz/cy5NevDkI81SdVy/TfQuUbUrqIFc3Rew8Dnh94g==", "license": "Apache-2.0", "dependencies": { "@animo-id/mdoc": "^0.5.2", @@ -1973,27 +1973,26 @@ "@multiformats/base-x": "^4.0.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", - "@peculiar/asn1-ecc": "^2.5.0", - "@peculiar/asn1-rsa": "^2.5.0", - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", - "@peculiar/x509": "~1.13.0", - "@sd-jwt/core": "^0.16.0", - "@sd-jwt/decode": "^0.16.0", - "@sd-jwt/jwt-status-list": "^0.16.0", - "@sd-jwt/present": "^0.16.0", - "@sd-jwt/sd-jwt-vc": "^0.16.0", - "@sd-jwt/types": "^0.16.0", - "@sd-jwt/utils": "^0.16.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "@peculiar/x509": "^1.14.2", + "@sd-jwt/core": "^0.17.0", + "@sd-jwt/decode": "^0.17.0", + "@sd-jwt/jwt-status-list": "^0.17.0", + "@sd-jwt/present": "^0.17.0", + "@sd-jwt/sd-jwt-vc": "^0.17.0", + "@sd-jwt/types": "^0.17.0", + "@sd-jwt/utils": "^0.17.0", "@sphereon/pex-models": "^2.3.2", "@sphereon/ssi-types": "0.33.0", "@stablelib/ed25519": "^2.0.2", "@types/ws": "^8.18.1", - "borc": "^3.0.0", "buffer": "^6.0.3", "class-transformer": "0.5.1", "class-validator": "0.14.1", - "dcql": "^2.0.0", + "dcql": "^2.0.1", "did-resolver": "^4.1.0", "ec-compression": "0.0.1-alpha.12", "lru_map": "^0.4.1", @@ -2004,9 +2003,9 @@ "tsyringe": "^4.10.0", "uuid": "^13.0.0", "varint": "^6.0.0", - "web-did-resolver": "^2.0.30", + "web-did-resolver": "^2.0.31", "webcrypto-core": "^1.8.1", - "zod": "^3.25.74" + "zod": "^4.1.12" } }, "node_modules/@credo-ts/core/node_modules/buffer": { @@ -2047,21 +2046,21 @@ } }, "node_modules/@credo-ts/openid4vc": { - "version": "0.6.0-alpha-20251110135447", - "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20251110135447.tgz", - "integrity": "sha512-0oTip5PBPEPM8CNI4QdU4il72MZ9JL4s5n0A/MouqkN4BuzbnmcdOJpPmVFRTa2XkzIAIkEYfHlAXV+emRxxcg==", + "version": "0.6.0-alpha-20251121023030", + "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20251121023030.tgz", + "integrity": "sha512-mR+R5g8D6WKCM7bGdODRFAuT/b54/hLaxs7SFfU4X/tHIbBt/Q5z0o63lKA6JEz08u0cnjGu64lgOFPCj9NMtA==", "license": "Apache-2.0", "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20251110135447", - "@openid4vc/oauth2": "0.3.0-alpha-20251110130103", - "@openid4vc/openid4vci": "0.3.0-alpha-20251110130103", - "@openid4vc/openid4vp": "0.3.0-alpha-20251110130103", - "@openid4vc/utils": "0.3.0-alpha-20251110130103", - "@types/express": "^5.0.3", + "@credo-ts/core": "0.6.0-alpha-20251121023030", + "@openid4vc/oauth2": "0.3.0-alpha-20251113142742", + "@openid4vc/openid4vci": "0.3.0-alpha-20251113142742", + "@openid4vc/openid4vp": "0.3.0-alpha-20251113142742", + "@openid4vc/utils": "0.3.0-alpha-20251113142742", + "@types/express": "^5.0.5", "class-transformer": "0.5.1", "express": "^5.1.0", "rxjs": "^7.8.2", - "zod": "^3.25.74" + "zod": "^4.1.12" } }, "node_modules/@cspotcode/source-map-support": { @@ -3891,68 +3890,41 @@ } }, "node_modules/@openid4vc/oauth2": { - "version": "0.3.0-alpha-20251110130103", - "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20251110130103.tgz", - "integrity": "sha512-B7flK9sgev8Acd4Z9VfMJRrcCa+ksyWGarwvHblodxKSYhy9WFr22Vc0Hzik33uEaHxxBxXTnQojTuwiRi6ILA==", + "version": "0.3.0-alpha-20251113142742", + "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20251113142742.tgz", + "integrity": "sha512-soMld7OMwZ9IbdctLpsS81v1d2/sDVZKOVavqM8qPLE6YA44lIrof2ZD6wEOA8bx8lJyXYX1rVOHmsT1q47ftQ==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/utils": "0.3.0-alpha-20251110130103", + "@openid4vc/utils": "0.3.0-alpha-20251113142742", "zod": "^4.1.12" } }, - "node_modules/@openid4vc/oauth2/node_modules/zod": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", - "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@openid4vc/openid4vci": { - "version": "0.3.0-alpha-20251110130103", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20251110130103.tgz", - "integrity": "sha512-sOcFM7VWxD1jFZQMNp+ivxXMrJyaYfX3KR8tLDPpiGbTididpiZlujHQUj/DtfqDlLARvERX/PVPlCFwnsgpow==", + "version": "0.3.0-alpha-20251113142742", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20251113142742.tgz", + "integrity": "sha512-CawGuMCLRMYEmoI5lNLw0ztkJl5PIakqPt7yoITPR4ZgivZxV2Uux34jx9cqVUBa25Je/0l+9SHA28O4S6/yYQ==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20251110130103", - "@openid4vc/utils": "0.3.0-alpha-20251110130103", + "@openid4vc/oauth2": "0.3.0-alpha-20251113142742", + "@openid4vc/utils": "0.3.0-alpha-20251113142742", "zod": "^4.1.12" } }, - "node_modules/@openid4vc/openid4vci/node_modules/zod": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", - "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@openid4vc/openid4vp": { - "version": "0.3.0-alpha-20251110130103", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20251110130103.tgz", - "integrity": "sha512-noBCIU8eBFTHtNipQwcNYCsZZ6zF7vXiLsxkSbIxYYAikfKM/tkGYYghbm4g1faXCw8Nt9Om/dnmAXWASx6mzA==", + "version": "0.3.0-alpha-20251113142742", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20251113142742.tgz", + "integrity": "sha512-JGHFgKGFAe0LrAJ4HTZuw4cXFNf7yD9qIkYVQWRJG3Yodk4W3IsuI11du/tufomG+9ZAY1xyvbt1/Phb3xR0bQ==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20251110130103", - "@openid4vc/utils": "0.3.0-alpha-20251110130103", + "@openid4vc/oauth2": "0.3.0-alpha-20251113142742", + "@openid4vc/utils": "0.3.0-alpha-20251113142742", "zod": "^4.1.12" } }, - "node_modules/@openid4vc/openid4vp/node_modules/zod": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", - "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@openid4vc/utils": { - "version": "0.3.0-alpha-20251110130103", - "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20251110130103.tgz", - "integrity": "sha512-c1Yl03UvY+flYJMDiBLucvjK3gp0pFdmUE9jL2xUXNfm7E/OuVoHdqQKqGXdDK30w55EvyhhXLT0+56C2l3vXA==", + "version": "0.3.0-alpha-20251113142742", + "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20251113142742.tgz", + "integrity": "sha512-q+h0zFVOS4Z29+FzLpgFhBXMciRSOZ+0KrD5jMheUJJG6MUNMMowAfnKlVs0E/gpxydmBI23qUqq8Lx/fJoRJg==", "license": "Apache-2.0", "dependencies": { "buffer": "^6.0.3", @@ -3983,15 +3955,6 @@ "ieee754": "^1.2.1" } }, - "node_modules/@openid4vc/utils/node_modules/zod": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", - "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@peculiar/asn1-cms": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz", @@ -4131,22 +4094,25 @@ } }, "node_modules/@peculiar/x509": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.13.0.tgz", - "integrity": "sha512-r9BOb1GZ3gx58Pog7u9x70spnHlCQPFm7u/ZNlFv+uBsU7kTDY9QkUD+l+X0awopDuCK1fkH3nEIZeMDSG/jlw==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.3.15", - "@peculiar/asn1-csr": "^2.3.15", - "@peculiar/asn1-ecc": "^2.3.15", - "@peculiar/asn1-pkcs9": "^2.3.15", - "@peculiar/asn1-rsa": "^2.3.15", - "@peculiar/asn1-schema": "^2.3.15", - "@peculiar/asn1-x509": "^2.3.15", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.2.tgz", + "integrity": "sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "pvtsutils": "^1.3.6", "reflect-metadata": "^0.2.2", "tslib": "^2.8.1", "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=22.0.0" } }, "node_modules/@pkgjs/parseargs": { @@ -4248,41 +4214,41 @@ "license": "BSD-3-Clause" }, "node_modules/@sd-jwt/core": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/core/-/core-0.16.0.tgz", - "integrity": "sha512-3rZCIxepMPmN7BGVHeDNpA5Leer3tSHsGkfaTVDXjqWryefNbhevb/jAb0EDkaMiIaM+DtS7HUXPiWuOsxEx7Q==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/core/-/core-0.17.0.tgz", + "integrity": "sha512-8NM2kZFjBxNT7JE+UukhcXDEiTq/6LSltVx2R2BlL2NlbYaT29Eln+vKyULNDI8FaRbh4lierLguPJGba4E5uA==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/decode": "0.16.0", - "@sd-jwt/present": "0.16.0", - "@sd-jwt/types": "0.16.0", - "@sd-jwt/utils": "0.16.0" + "@sd-jwt/decode": "0.17.0", + "@sd-jwt/present": "0.17.0", + "@sd-jwt/types": "0.17.0", + "@sd-jwt/utils": "0.17.0" }, "engines": { "node": ">=20" } }, "node_modules/@sd-jwt/decode": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.16.0.tgz", - "integrity": "sha512-BFj5l3Xz+PrDBwh4bAgjBIgdauPup5ITdbmQ7wFDaAyQOaRSHCucA+uLIOm82CI4ioBboEkFiliNC4IbWvMUBA==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/decode/-/decode-0.17.0.tgz", + "integrity": "sha512-1qBA0nfsYdAPb/s+n+uWfeaYRVaiDYBg/cL7iDpPcSS8Zq8rtHFwR86KhQfRk8WR5V4cKO7p+njK/8LweqlHxg==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/types": "0.16.0", - "@sd-jwt/utils": "0.16.0" + "@sd-jwt/types": "0.17.0", + "@sd-jwt/utils": "0.17.0" }, "engines": { "node": ">=20" } }, "node_modules/@sd-jwt/jwt-status-list": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/jwt-status-list/-/jwt-status-list-0.16.0.tgz", - "integrity": "sha512-3ElpfGJkDM7x2fZLPCGM/NZ70zR52iFVeMbbdcHoi2wnIAI66iCkNfVx2kwmiw1TviJQ0sm3jZWuHfnPzZ6nVw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@sd-jwt/jwt-status-list/-/jwt-status-list-0.17.1.tgz", + "integrity": "sha512-5vcOQsEmWwCkh7uEU7iwSaZ9aDH7nSNLnt48dTc6X5UrF9qWNFkVf8r/juBfuzSy2JlxRZQitVYGhyactiXxHA==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/types": "0.16.0", - "base64url": "^3.0.1", + "@sd-jwt/types": "0.17.0", + "@sd-jwt/utils": "0.17.0", "pako": "^2.1.0" }, "engines": { @@ -4290,73 +4256,49 @@ } }, "node_modules/@sd-jwt/present": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.16.0.tgz", - "integrity": "sha512-Z97N3CPDXW5xm+vZLTJeMSlD7BudDL/qIzZHGkttbiQMxERrBf8zHgl70BS7bpEIjoUInf6GoGSvF7o2rNJyBQ==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/present/-/present-0.17.0.tgz", + "integrity": "sha512-qh226z4H76uMVfFfqvltV9d0oz2N9S2REURy2HcVFKhsa1fSYZXdKkhg4S102iwp9fEELEPyCnLkW26+qwWLcg==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/decode": "0.16.0", - "@sd-jwt/types": "0.16.0", - "@sd-jwt/utils": "0.16.0" + "@sd-jwt/decode": "0.17.0", + "@sd-jwt/types": "0.17.0", + "@sd-jwt/utils": "0.17.0" }, "engines": { "node": ">=20" } }, "node_modules/@sd-jwt/sd-jwt-vc": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.16.0.tgz", - "integrity": "sha512-nRkFNjREwEMU6KTu/F8Qegqm1102b+/CsgX3sI75lQIH2YjMvTRzHgmiA4TlZZwEN3ItgP1sZMK6lMW+hu/eMg==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.17.1.tgz", + "integrity": "sha512-rkbkAfZSJM6gLyOn+eKqzFRrsztfpo+k8odKkXv+psmmZURnOleVvECJHdn2v3ggn6HSqa5uiiH7WkjNiHmGMA==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/core": "0.16.0", - "@sd-jwt/jwt-status-list": "0.16.0", - "@sd-jwt/utils": "0.16.0", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1" + "@sd-jwt/core": "0.17.0", + "@sd-jwt/jwt-status-list": "0.17.1", + "@sd-jwt/utils": "0.17.0" }, "engines": { "node": ">=20" } }, - "node_modules/@sd-jwt/sd-jwt-vc/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@sd-jwt/sd-jwt-vc/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, "node_modules/@sd-jwt/types": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.16.0.tgz", - "integrity": "sha512-nt7rxBXaFVUWUVIrhAi9tJ4P0hBeDP+0Tgn054QWpkAfZ+ruFT5jZ5qjfR/Ks8+hX53UhRdQgba6/3OZ02LsBw==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/types/-/types-0.17.0.tgz", + "integrity": "sha512-XMZprAzSst+ze6JXoMttV3zrUNTL9VFAzHWChENTlFuh9tM6gy+/hJjFyTO0RVO0SRRNl2c7eMeYu7byLMj6Jg==", "license": "Apache-2.0", "engines": { "node": ">=20" } }, "node_modules/@sd-jwt/utils": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.16.0.tgz", - "integrity": "sha512-iF4bEvH4ipFRWsTymStU4CZeGAyNrE402+/sdnz2Tw2bcsOSLYNq24uJcHBwFGnzFpEDIN92vo9QsxGqR8z9gQ==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@sd-jwt/utils/-/utils-0.17.0.tgz", + "integrity": "sha512-Xe6GgO3tzjQrKbwVgtrE4LkB8Prcl0zCX+LDFC0QCzsvrks1jEFSPpcpP5Ge/ESBK6LrNG/srBKOQlFM/RuGsg==", "license": "Apache-2.0", "dependencies": { - "@sd-jwt/types": "0.16.0", + "@sd-jwt/types": "0.17.0", "js-base64": "^3.7.8" }, "engines": { @@ -4480,15 +4422,6 @@ "@sinonjs/commons": "^3.0.1" } }, - "node_modules/@sovpro/delimited-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz", - "integrity": "sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/@sphereon/kmp-mdoc-core": { "version": "0.2.0-SNAPSHOT.26", "resolved": "https://registry.npmjs.org/@sphereon/kmp-mdoc-core/-/kmp-mdoc-core-0.2.0-SNAPSHOT.26.tgz", @@ -6522,15 +6455,6 @@ ], "license": "MIT" }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/baseline-browser-mapping": { "version": "2.8.30", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz", @@ -6551,15 +6475,6 @@ "tweetnacl": "^0.14.3" } }, - "node_modules/bignumber.js": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -6602,60 +6517,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/borc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/borc/-/borc-3.0.0.tgz", - "integrity": "sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g==", - "license": "MIT", - "dependencies": { - "bignumber.js": "^9.0.0", - "buffer": "^6.0.3", - "commander": "^2.15.0", - "ieee754": "^1.1.13", - "iso-url": "^1.1.5", - "json-text-sequence": "~0.3.0", - "readable-stream": "^3.6.0" - }, - "bin": { - "cbor2comment": "bin/cbor2comment.js", - "cbor2diag": "bin/cbor2diag.js", - "cbor2json": "bin/cbor2json.js", - "json2cbor": "bin/json2cbor.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/borc/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/borc/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -9891,15 +9752,6 @@ "dev": true, "license": "ISC" }, - "node_modules/iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -10816,18 +10668,6 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "license": "ISC" }, - "node_modules/json-text-sequence": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.3.0.tgz", - "integrity": "sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA==", - "license": "MIT", - "dependencies": { - "@sovpro/delimited-stream": "^1.1.0" - }, - "engines": { - "node": ">=10.18.0" - } - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -13402,6 +13242,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -13736,6 +13577,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -14469,6 +14311,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -15653,6 +15496,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, "node_modules/util-extend": { @@ -16175,9 +16019,9 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -16203,8 +16047,8 @@ "name": "@nmshd/consumption", "license": "AGPL-3.0-or-later", "dependencies": { - "@credo-ts/core": "v0.6.0-alpha-20251110135447", - "@credo-ts/openid4vc": "v0.6.0-alpha-20251110135447", + "@credo-ts/core": "v0.6.0-alpha-20251121023030", + "@credo-ts/openid4vc": "v0.6.0-alpha-20251121023030", "@js-soft/docdb-querytranslator": "^1.1.6", "@js-soft/ts-serval": "2.0.14", "@js-soft/ts-utils": "2.3.5", diff --git a/packages/consumption/package.json b/packages/consumption/package.json index 6e3c2a164..b7ecf6467 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -62,8 +62,8 @@ ] }, "dependencies": { - "@credo-ts/core": "v0.6.0-alpha-20251110135447", - "@credo-ts/openid4vc": "v0.6.0-alpha-20251110135447", + "@credo-ts/core": "v0.6.0-alpha-20251121023030", + "@credo-ts/openid4vc": "v0.6.0-alpha-20251121023030", "@js-soft/docdb-querytranslator": "^1.1.6", "@js-soft/ts-serval": "2.0.14", "@js-soft/ts-utils": "2.3.5", diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 7aedae88e..4f0041f66 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -71,7 +71,7 @@ export class OpenId4VcController extends ConsumptionBaseController { const matchedCredentialsFromPresentationExchange = authorizationRequest.presentationExchange?.credentialsForRequest.requirements .map((entry) => entry.submissionEntry - .map((subEntry) => subEntry.verifiableCredentials.filter((vc) => vc.claimFormat === ClaimFormat.SdJwtDc).map((vc) => vc.credentialRecord.compactSdJwtVc)) + .map((subEntry) => subEntry.verifiableCredentials.filter((vc) => vc.claimFormat === ClaimFormat.SdJwtDc).map((vc) => vc.credentialRecord.encoded)) .flat() ) .flat(); diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts index 5f8af22dc..beefbb096 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts @@ -112,6 +112,10 @@ export class EnmshedHolderKeyManagmentService implements Kms.KeyManagementServic // store the key pair in the keystore await this.keyStorage.storeKey(options.keyId, JSON.stringify(jwkKeyPair)); + // Credo doesn't trust the key id provided in the key binding jwk anymore, so there are two options: Storing the key id with the credential and making sure that key id is properly fetched - this turned out to be difficult - or the easy way out by storing this alternative key id computed from the public key. + const credoLegacyKeyId = Kms.PublicJwk.fromPublicJwk(publicJwk as any).legacyKeyId; + await this.keyStorage.storeKey(credoLegacyKeyId, JSON.stringify(jwkKeyPair)); + return { keyId: options.keyId, publicJwk: publicJwk as Kms.KmsJwkPublic } as Kms.KmsCreateKeyReturn; } diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 6bcab9947..45cb1b8b8 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -4,14 +4,12 @@ import { BaseRecordConstructor, ClaimFormat, injectable, - Mdoc, MdocRecord, Query, QueryOptions, SdJwtVcRecord, StorageService, - W3cCredentialRecord, - W3cJwtVerifiableCredential + W3cCredentialRecord } from "@credo-ts/core"; import { IdentityAttribute, VerifiableCredential } from "@nmshd/content"; import { AccountController } from "@nmshd/transport"; @@ -123,14 +121,11 @@ export class EnmeshedStorageService implements StorageServ private fromEncoded(type: string, encoded: string | Record): BaseRecord { switch (type) { case ClaimFormat.SdJwtDc: - return new SdJwtVcRecord({ compactSdJwtVc: encoded as string }); + return new SdJwtVcRecord({ credentialInstances: [{ compactSdJwtVc: encoded as string }] }); case ClaimFormat.MsoMdoc: - return new MdocRecord({ mdoc: Mdoc.fromBase64Url(encoded as string) }); + return new MdocRecord({ credentialInstances: [{ issuerSignedBase64Url: encoded as string }] }); case ClaimFormat.SdJwtW3cVc: - return new W3cCredentialRecord({ - credential: W3cJwtVerifiableCredential.fromSerializedJwt(encoded as string), - tags: {} - }); + return new W3cCredentialRecord({ credentialInstances: [{ credential: encoded as string }] }); default: throw new Error("Credential type not supported."); } diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 949ec2aeb..da6d2107a 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -1,17 +1,4 @@ -import { - BaseRecord, - ClaimFormat, - DidJwk, - DidKey, - InjectionSymbols, - JwkDidCreateOptions, - KeyDidCreateOptions, - Kms, - Mdoc, - MdocRecord, - SdJwtVcRecord, - X509Module -} from "@credo-ts/core"; +import { BaseRecord, ClaimFormat, DidJwk, DidKey, InjectionSymbols, JwkDidCreateOptions, KeyDidCreateOptions, Kms, MdocRecord, SdJwtVcRecord, X509Module } from "@credo-ts/core"; import { OpenId4VcModule, type OpenId4VciResolvedCredentialOffer, type OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { AccountController } from "@nmshd/transport"; import { AttributesController, OwnIdentityAttribute } from "../../attributes"; @@ -110,7 +97,7 @@ export class Holder extends BaseAgent> const storedCredentials = await Promise.all( credentialResponse.credentials.map((response) => { // TODO: batch issuance not yet supported - const credential = response.credentials[0]; + const credential = response.record.firstCredential; if (![ClaimFormat.SdJwtW3cVc, ClaimFormat.SdJwtDc, ClaimFormat.MsoMdoc].includes(credential.claimFormat)) { throw new Error("Unsupported credential format"); @@ -166,7 +153,7 @@ export class Holder extends BaseAgent> const record = new SdJwtVcRecord({ id: recordUncast.id, createdAt: recordUncast.createdAt, - compactSdJwtVc: recordUncast.compactSdJwtVc + credentialInstances: [{ compactSdJwtVc: recordUncast.encoded }] }); vc.credentialRecord = record; } else if (vc.claimFormat === ClaimFormat.MsoMdoc) { @@ -174,7 +161,7 @@ export class Holder extends BaseAgent> const record = new MdocRecord({ id: recordUncast.id, createdAt: recordUncast.createdAt, - mdoc: Mdoc.fromBase64Url(recordUncast.base64Url) + credentialInstances: [{ issuerSignedBase64Url: recordUncast.encoded }] }); vc.credentialRecord = record; } else { diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts index 0a109a6ff..ff19a42db 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts @@ -33,9 +33,16 @@ export class ResolveAuthorizationRequestUseCase extends UseCase> { const result = await this.openId4VcController.resolveAuthorizationRequest(request.authorizationRequestUrl); - return Result.ok({ - authorizationRequest: JSON.parse(stringifySafe(result.authorizationRequest)), - usedCredentials: AttributeMapper.toAttributeDTOList(result.usedCredentials) - }); + const authorizationRequest = JSON.parse(stringifySafe(result.authorizationRequest)); + // the 'get encoded' of the credential is lost while making it app-safe, we have to re-add it for PEX + // quick-fix for the simplest case with one requested credential only - otherwise every [0] would have to be generalised. + if (result.authorizationRequest.presentationExchange) { + const encodedCredential = + result.authorizationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord.encoded; + authorizationRequest.presentationExchange.credentialsForRequest.requirements[0].submissionEntry[0].verifiableCredentials[0].credentialRecord.encoded = + encodedCredential; + } + + return Result.ok({ authorizationRequest, usedCredentials: AttributeMapper.toAttributeDTOList(result.usedCredentials) }); } } diff --git a/patches/@openid4vc+oauth2+0.3.0-alpha-20251110130103.patch b/patches/@openid4vc+oauth2+0.3.0-alpha-20251110130103.patch deleted file mode 100644 index 3f907dc9e..000000000 --- a/patches/@openid4vc+oauth2+0.3.0-alpha-20251110130103.patch +++ /dev/null @@ -1,50 +0,0 @@ -diff --git a/node_modules/@openid4vc/oauth2/dist/index.cjs b/node_modules/@openid4vc/oauth2/dist/index.cjs -index 618d066..d826d04 100644 ---- a/node_modules/@openid4vc/oauth2/dist/index.cjs -+++ b/node_modules/@openid4vc/oauth2/dist/index.cjs -@@ -1419,11 +1419,16 @@ async function createJarAuthorizationRequest(options) { - * @throws {Error} if parsing json from response fails - */ - async function fetchWellKnownMetadata(wellKnownMetadataUrl, schema, options) { -- const { result, response } = await (0, __openid4vc_utils.createZodFetcher)(options?.fetch)(schema, options?.acceptedContentType ?? [__openid4vc_utils.ContentType.Json], wellKnownMetadataUrl); -- if (response.status === 404) return null; -- if (!response.ok) throw new __openid4vc_utils.InvalidFetchResponseError(`Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessful response with status '${response.status}'.`, await response.clone().text(), response); -- if (!result?.success) throw new ValidationError$1(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); -- return result.data; -+ try { -+ const { result, response } = await (0, __openid4vc_utils.createZodFetcher)(options?.fetch)(schema, options?.acceptedContentType ?? [__openid4vc_utils.ContentType.Json], wellKnownMetadataUrl); -+ if (response.status === 404) return null; -+ if (!response.ok) throw new __openid4vc_utils.InvalidFetchResponseError(`Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessful response with status '${response.status}'.`, await response.clone().text(), response); -+ if (!result?.success) throw new ValidationError$1(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); -+ return result.data; -+ } catch(e) { -+ console.log('Changed By JS-SOFT: Error can probably be ignored', e); -+ return null; -+ } - } - - //#endregion -diff --git a/node_modules/@openid4vc/oauth2/package.json b/node_modules/@openid4vc/oauth2/package.json -index ac34772..79816b0 100644 ---- a/node_modules/@openid4vc/oauth2/package.json -+++ b/node_modules/@openid4vc/oauth2/package.json -@@ -8,7 +8,7 @@ - "exports": { - ".": { - "import": "./dist/index.mjs", -- "require": "./dist/index.js", -+ "require": "./dist/index.cjs", - "types": "./dist/index.d.ts" - }, - "./package.json": "./package.json" -@@ -29,7 +29,7 @@ - "scripts": { - "build": "tsdown src/index.ts --format cjs,esm --dts --sourcemap" - }, -- "main": "./dist/index.js", -+ "main": "./dist/index.cjs", - "module": "./dist/index.mjs", -- "types": "./dist/index.d.ts" -+ "types": "./dist/index.d.cts" - } -\ No newline at end of file diff --git a/patches/@openid4vc+oauth2+0.3.0-alpha-20251113142742.patch b/patches/@openid4vc+oauth2+0.3.0-alpha-20251113142742.patch new file mode 100644 index 000000000..38560d1ae --- /dev/null +++ b/patches/@openid4vc+oauth2+0.3.0-alpha-20251113142742.patch @@ -0,0 +1,21 @@ +diff --git a/node_modules/@openid4vc/oauth2/dist/index.cjs b/node_modules/@openid4vc/oauth2/dist/index.cjs +index 3286de2..c99b244 100644 +--- a/node_modules/@openid4vc/oauth2/dist/index.cjs ++++ b/node_modules/@openid4vc/oauth2/dist/index.cjs +@@ -1578,11 +1578,16 @@ async function createJarAuthorizationRequest(options) { + * @throws {Error} if parsing json from response fails + */ + async function fetchWellKnownMetadata(wellKnownMetadataUrl, schema, options) { ++ try { + const { result, response } = await (0, __openid4vc_utils.createZodFetcher)(options?.fetch)(schema, options?.acceptedContentType ?? [__openid4vc_utils.ContentType.Json], wellKnownMetadataUrl); + if (response.status === 404) return null; + if (!response.ok) throw new __openid4vc_utils.InvalidFetchResponseError(`Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessful response with status '${response.status}'.`, await response.clone().text(), response); + if (!result?.success) throw new ValidationError$1(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); + return result.data; ++ } catch (e) { ++ console.log('Changed By JS-SOFT: Error can probably be ignored', e); ++ return null; ++ } + } + + //#endregion diff --git a/patches/@openid4vc+openid4vci+0.3.0-alpha-20251110130103.patch b/patches/@openid4vc+openid4vci+0.3.0-alpha-20251110130103.patch deleted file mode 100644 index cc9c1f9f5..000000000 --- a/patches/@openid4vc+openid4vci+0.3.0-alpha-20251110130103.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/node_modules/@openid4vc/openid4vci/package.json b/node_modules/@openid4vc/openid4vci/package.json -index 9c7c62d..6f85994 100644 ---- a/node_modules/@openid4vc/openid4vci/package.json -+++ b/node_modules/@openid4vc/openid4vci/package.json -@@ -8,7 +8,7 @@ - "exports": { - ".": { - "import": "./dist/index.mjs", -- "require": "./dist/index.js", -+ "require": "./dist/index.cjs", - "types": "./dist/index.d.ts" - }, - "./package.json": "./package.json" -@@ -30,7 +30,7 @@ - "scripts": { - "build": "tsdown src/index.ts --format cjs,esm --dts --sourcemap" - }, -- "main": "./dist/index.js", -+ "main": "./dist/index.cjs", - "module": "./dist/index.mjs", -- "types": "./dist/index.d.ts" -+ "types": "./dist/index.d.cts" - } -\ No newline at end of file diff --git a/patches/@openid4vc+openid4vp+0.3.0-alpha-20251110130103+001+initial.patch b/patches/@openid4vc+openid4vp+0.3.0-alpha-20251113142742+001+initial.patch similarity index 58% rename from patches/@openid4vc+openid4vp+0.3.0-alpha-20251110130103+001+initial.patch rename to patches/@openid4vc+openid4vp+0.3.0-alpha-20251113142742+001+initial.patch index 14b30c8f0..0795c51a8 100644 --- a/patches/@openid4vc+openid4vp+0.3.0-alpha-20251110130103+001+initial.patch +++ b/patches/@openid4vc+openid4vp+0.3.0-alpha-20251113142742+001+initial.patch @@ -11,27 +11,3 @@ index 86819af..6a4f7e1 100644 error: __openid4vc_oauth2.Oauth2ErrorCodes.InvalidRequest, error_description: "Invalid client identifier. The fully qualified domain name of the redirect_uri value MUST match the Client Identifier without the prefix x509_san_dns." }); -diff --git a/node_modules/@openid4vc/openid4vp/package.json b/node_modules/@openid4vc/openid4vp/package.json -index 0108f6c..424aec3 100644 ---- a/node_modules/@openid4vc/openid4vp/package.json -+++ b/node_modules/@openid4vc/openid4vp/package.json -@@ -8,7 +8,7 @@ - "exports": { - ".": { - "import": "./dist/index.mjs", -- "require": "./dist/index.js", -+ "require": "./dist/index.cjs", - "types": "./dist/index.d.ts" - }, - "./package.json": "./package.json" -@@ -27,7 +27,7 @@ - "scripts": { - "build": "tsdown src/index.ts --format cjs,esm --dts --sourcemap" - }, -- "main": "./dist/index.js", -+ "main": "./dist/index.cjs", - "module": "./dist/index.mjs", -- "types": "./dist/index.d.ts" -+ "types": "./dist/index.d.cts" - } -\ No newline at end of file diff --git a/patches/@openid4vc+utils+0.3.0-alpha-20251110130103.patch b/patches/@openid4vc+utils+0.3.0-alpha-20251110130103.patch deleted file mode 100644 index c8b89627f..000000000 --- a/patches/@openid4vc+utils+0.3.0-alpha-20251110130103.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/node_modules/@openid4vc/utils/package.json b/node_modules/@openid4vc/utils/package.json -index dcd161b..99a9e20 100644 ---- a/node_modules/@openid4vc/utils/package.json -+++ b/node_modules/@openid4vc/utils/package.json -@@ -8,7 +8,7 @@ - "exports": { - ".": { - "import": "./dist/index.mjs", -- "require": "./dist/index.js", -+ "require": "./dist/index.cjs", - "types": "./dist/index.d.ts" - }, - "./package.json": "./package.json" -@@ -26,7 +26,7 @@ - "scripts": { - "build": "tsdown src/index.ts --format cjs,esm --dts --sourcemap" - }, -- "main": "./dist/index.js", -+ "main": "./dist/index.cjs", - "module": "./dist/index.mjs", -- "types": "./dist/index.d.ts" -+ "types": "./dist/index.d.cts" - } -\ No newline at end of file From 18a87ca614cf67b8f3fd4ec18d0a0945cf17e9f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Thu, 27 Nov 2025 16:09:33 +0100 Subject: [PATCH 63/75] Audit fix (#871) * chore: audit fix * chore: formatting * chore: formatting --- .ci/runChecks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/runChecks.sh b/.ci/runChecks.sh index 3192c5be4..d747a0db2 100755 --- a/.ci/runChecks.sh +++ b/.ci/runChecks.sh @@ -6,4 +6,4 @@ npm run lint:eslint npm run lint:prettier npm run --workspaces cdep npx --workspaces license-check -npx better-npm-audit audit +npx better-npm-audit audit --exclude=1110992 From ec95545636499b353f5b4f28ed0f2997ff7ccdd8 Mon Sep 17 00:00:00 2001 From: Magnus Kuhn <127854942+Magnus-Kuhn@users.noreply.github.com> Date: Fri, 28 Nov 2025 17:52:36 +0100 Subject: [PATCH 64/75] Bump credo (#874) * chore: bump credo * test: make jest work * test: slimmer jest config * test: apply the fixes in other package.jsons too * ci: remove audit exclude --- .ci/runChecks.sh | 2 +- package-lock.json | 90 +++++++++---------- packages/app-runtime/package.json | 15 +++- packages/consumption/package.json | 19 +++- packages/runtime/package.json | 15 +++- ...vc+oauth2+0.3.0-alpha-20251113142742.patch | 21 ----- patches/@openid4vc+oauth2+0.4.0.patch | 21 +++++ ...3.0-alpha-20251113142742+001+initial.patch | 13 --- ...penid4vc+openid4vp+0.4.0+001+initial.patch | 13 +++ 9 files changed, 124 insertions(+), 85 deletions(-) delete mode 100644 patches/@openid4vc+oauth2+0.3.0-alpha-20251113142742.patch create mode 100644 patches/@openid4vc+oauth2+0.4.0.patch delete mode 100644 patches/@openid4vc+openid4vp+0.3.0-alpha-20251113142742+001+initial.patch create mode 100644 patches/@openid4vc+openid4vp+0.4.0+001+initial.patch diff --git a/.ci/runChecks.sh b/.ci/runChecks.sh index d747a0db2..3192c5be4 100755 --- a/.ci/runChecks.sh +++ b/.ci/runChecks.sh @@ -6,4 +6,4 @@ npm run lint:eslint npm run lint:prettier npm run --workspaces cdep npx --workspaces license-check -npx better-npm-audit audit --exclude=1110992 +npx better-npm-audit audit diff --git a/package-lock.json b/package-lock.json index 054149d54..aa07100d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1959,9 +1959,9 @@ "license": "MIT" }, "node_modules/@credo-ts/core": { - "version": "0.6.0-alpha-20251121023030", - "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20251121023030.tgz", - "integrity": "sha512-sMCpulU0tFKkArJozexY3yqCUIEZU/Tskbi/K5Gd6c/Ekz/cy5NevDkI81SdVy/TfQuUbUrqIFc3Rew8Dnh94g==", + "version": "0.6.0-alpha-20251127101655", + "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20251127101655.tgz", + "integrity": "sha512-LBO5X45kqHTi+sny7Sy/qXSTU0OBhJtSLjZNgFVg5KRTdhBqUL3io5AsV8hlBgNX4aJHU/qwTNpNBOavP0D6Ow==", "license": "Apache-2.0", "dependencies": { "@animo-id/mdoc": "^0.5.2", @@ -1969,7 +1969,7 @@ "@astronautlabs/jsonpath": "^1.1.2", "@digitalcredentials/jsonld": "^9.0.0", "@digitalcredentials/jsonld-signatures": "^12.0.1", - "@digitalcredentials/vc": "^10.0.1", + "@digitalcredentials/vc": "^10.0.2", "@multiformats/base-x": "^4.0.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", @@ -1980,9 +1980,9 @@ "@peculiar/x509": "^1.14.2", "@sd-jwt/core": "^0.17.0", "@sd-jwt/decode": "^0.17.0", - "@sd-jwt/jwt-status-list": "^0.17.0", + "@sd-jwt/jwt-status-list": "^0.17.1", "@sd-jwt/present": "^0.17.0", - "@sd-jwt/sd-jwt-vc": "^0.17.0", + "@sd-jwt/sd-jwt-vc": "^0.17.1", "@sd-jwt/types": "^0.17.0", "@sd-jwt/utils": "^0.17.0", "@sphereon/pex-models": "^2.3.2", @@ -1992,7 +1992,7 @@ "buffer": "^6.0.3", "class-transformer": "0.5.1", "class-validator": "0.14.1", - "dcql": "^2.0.1", + "dcql": "^3.0.0", "did-resolver": "^4.1.0", "ec-compression": "0.0.1-alpha.12", "lru_map": "^0.4.1", @@ -2046,16 +2046,16 @@ } }, "node_modules/@credo-ts/openid4vc": { - "version": "0.6.0-alpha-20251121023030", - "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20251121023030.tgz", - "integrity": "sha512-mR+R5g8D6WKCM7bGdODRFAuT/b54/hLaxs7SFfU4X/tHIbBt/Q5z0o63lKA6JEz08u0cnjGu64lgOFPCj9NMtA==", + "version": "0.6.0-alpha-20251127101655", + "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20251127101655.tgz", + "integrity": "sha512-pzS/Hv0iVwPWoiYUyxF09XTeo9l/sv+M+OyFsC1AQSmUtNpxMrB5gPNCLZhd8G08QqJcCPsnCd7WogAmk0O6fQ==", "license": "Apache-2.0", "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20251121023030", - "@openid4vc/oauth2": "0.3.0-alpha-20251113142742", - "@openid4vc/openid4vci": "0.3.0-alpha-20251113142742", - "@openid4vc/openid4vp": "0.3.0-alpha-20251113142742", - "@openid4vc/utils": "0.3.0-alpha-20251113142742", + "@credo-ts/core": "0.6.0-alpha-20251127101655", + "@openid4vc/oauth2": "^0.4.0", + "@openid4vc/openid4vci": "^0.4.0", + "@openid4vc/openid4vp": "^0.4.0", + "@openid4vc/utils": "^0.4.0", "@types/express": "^5.0.5", "class-transformer": "0.5.1", "express": "^5.1.0", @@ -3890,45 +3890,45 @@ } }, "node_modules/@openid4vc/oauth2": { - "version": "0.3.0-alpha-20251113142742", - "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.3.0-alpha-20251113142742.tgz", - "integrity": "sha512-soMld7OMwZ9IbdctLpsS81v1d2/sDVZKOVavqM8qPLE6YA44lIrof2ZD6wEOA8bx8lJyXYX1rVOHmsT1q47ftQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@openid4vc/oauth2/-/oauth2-0.4.0.tgz", + "integrity": "sha512-cCoh8WzUAagUg9LrpmLmOLlyvU3OXDAQJieVkOXj3za2cLb++Je6msi3eqrkHhNeLvVpFtnjD/Ip1ondAlP9hA==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/utils": "0.3.0-alpha-20251113142742", - "zod": "^4.1.12" + "@openid4vc/utils": "0.4.0", + "zod": "^4.1.13" } }, "node_modules/@openid4vc/openid4vci": { - "version": "0.3.0-alpha-20251113142742", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.3.0-alpha-20251113142742.tgz", - "integrity": "sha512-CawGuMCLRMYEmoI5lNLw0ztkJl5PIakqPt7yoITPR4ZgivZxV2Uux34jx9cqVUBa25Je/0l+9SHA28O4S6/yYQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vci/-/openid4vci-0.4.0.tgz", + "integrity": "sha512-ULZuY9P/6XyKxEHgH+aVaBQZeFT4hD3FNCRe7cngfNeGq0yCAoLWVsnziqDr4jwXOej4RRLO0GgNLy32WR7LKw==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20251113142742", - "@openid4vc/utils": "0.3.0-alpha-20251113142742", - "zod": "^4.1.12" + "@openid4vc/oauth2": "0.4.0", + "@openid4vc/utils": "0.4.0", + "zod": "^4.1.13" } }, "node_modules/@openid4vc/openid4vp": { - "version": "0.3.0-alpha-20251113142742", - "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.3.0-alpha-20251113142742.tgz", - "integrity": "sha512-JGHFgKGFAe0LrAJ4HTZuw4cXFNf7yD9qIkYVQWRJG3Yodk4W3IsuI11du/tufomG+9ZAY1xyvbt1/Phb3xR0bQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@openid4vc/openid4vp/-/openid4vp-0.4.0.tgz", + "integrity": "sha512-gLWGjwfnKervKvS0e2gjAMA94Vm6ylcS1Wuf7TXzOYn6qx+ToUA9x3HG9oda0dezjOIkci4yL4qkBbdS40l16w==", "license": "Apache-2.0", "dependencies": { - "@openid4vc/oauth2": "0.3.0-alpha-20251113142742", - "@openid4vc/utils": "0.3.0-alpha-20251113142742", - "zod": "^4.1.12" + "@openid4vc/oauth2": "0.4.0", + "@openid4vc/utils": "0.4.0", + "zod": "^4.1.13" } }, "node_modules/@openid4vc/utils": { - "version": "0.3.0-alpha-20251113142742", - "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.3.0-alpha-20251113142742.tgz", - "integrity": "sha512-q+h0zFVOS4Z29+FzLpgFhBXMciRSOZ+0KrD5jMheUJJG6MUNMMowAfnKlVs0E/gpxydmBI23qUqq8Lx/fJoRJg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@openid4vc/utils/-/utils-0.4.0.tgz", + "integrity": "sha512-faLjM1Kc696YfDQo6DeaXr3UWt8vjOZ5wBogQ50X+O++vuL/hBXwQ9rFKoYDcgcTcsQMwAAmCk9T3414b+rddA==", "license": "Apache-2.0", "dependencies": { "buffer": "^6.0.3", - "zod": "^4.1.12" + "zod": "^4.1.13" } }, "node_modules/@openid4vc/utils/node_modules/buffer": { @@ -7420,12 +7420,12 @@ } }, "node_modules/dcql": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dcql/-/dcql-2.0.1.tgz", - "integrity": "sha512-qf0Xv8bayL5YzyAH+F9ujE28tuETsoaMIWbYc1xjjUTmEL/UtlimZDQVl1Q7jbfbJ3+eGmAwJr0yIwCWeswA7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dcql/-/dcql-3.0.0.tgz", + "integrity": "sha512-Z1Iq+tDQqPCqWzQVevUVOaYa+NfoplwrwSPvV0JINZpniiN5jq32C4CXsrmELAgSa5Ja7hBKiuYkpZjQFkeHyw==", "license": "Apache-2.0", "dependencies": { - "valibot": "1.1.0" + "valibot": "1.2.0" } }, "node_modules/debug": { @@ -15542,9 +15542,9 @@ } }, "node_modules/valibot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.1.0.tgz", - "integrity": "sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", + "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", "license": "MIT", "peerDependencies": { "typescript": ">=5" @@ -16047,8 +16047,8 @@ "name": "@nmshd/consumption", "license": "AGPL-3.0-or-later", "dependencies": { - "@credo-ts/core": "v0.6.0-alpha-20251121023030", - "@credo-ts/openid4vc": "v0.6.0-alpha-20251121023030", + "@credo-ts/core": "v0.6.0-alpha-20251127101655", + "@credo-ts/openid4vc": "v0.6.0-alpha-20251127101655", "@js-soft/docdb-querytranslator": "^1.1.6", "@js-soft/ts-serval": "2.0.14", "@js-soft/ts-utils": "2.3.5", diff --git a/packages/app-runtime/package.json b/packages/app-runtime/package.json index de35baada..9991953f5 100644 --- a/packages/app-runtime/package.json +++ b/packages/app-runtime/package.json @@ -48,10 +48,23 @@ { "tsconfig": "test/tsconfig.json" } + ], + "^.+\\.mjs$": [ + "babel-jest", + { + "presets": [ + [ + "@babel/preset-env", + { + "modules": "commonjs" + } + ] + ] + } ] }, "transformIgnorePatterns": [ - "/node_modules/(?!(@noble|@stablelib|@credo\\-ts/core/node_modules/uuid)/)" + "/node_modules/(?!(@noble|@stablelib|@credo\\-ts)/)" ] }, "dependencies": { diff --git a/packages/consumption/package.json b/packages/consumption/package.json index b7ecf6467..f73e02db6 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -55,15 +55,28 @@ { "tsconfig": "test/tsconfig.json" } + ], + "^.+\\.mjs$": [ + "babel-jest", + { + "presets": [ + [ + "@babel/preset-env", + { + "modules": "commonjs" + } + ] + ] + } ] }, "transformIgnorePatterns": [ - "/node_modules/(?!(@noble|@stablelib|@credo\\-ts/core/node_modules/uuid)/)" + "/node_modules/(?!(@noble|@stablelib|@credo\\-ts)/)" ] }, "dependencies": { - "@credo-ts/core": "v0.6.0-alpha-20251121023030", - "@credo-ts/openid4vc": "v0.6.0-alpha-20251121023030", + "@credo-ts/core": "v0.6.0-alpha-20251127101655", + "@credo-ts/openid4vc": "v0.6.0-alpha-20251127101655", "@js-soft/docdb-querytranslator": "^1.1.6", "@js-soft/ts-serval": "2.0.14", "@js-soft/ts-utils": "2.3.5", diff --git a/packages/runtime/package.json b/packages/runtime/package.json index b18942f01..4d98a0dea 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -56,10 +56,23 @@ { "tsconfig": "test/tsconfig.json" } + ], + "^.+\\.mjs$": [ + "babel-jest", + { + "presets": [ + [ + "@babel/preset-env", + { + "modules": "commonjs" + } + ] + ] + } ] }, "transformIgnorePatterns": [ - "/node_modules/(?!(@noble|@stablelib|@credo\\-ts/core/node_modules/uuid)/)" + "/node_modules/(?!(@noble|@stablelib|@credo\\-ts)/)" ] }, "dependencies": { diff --git a/patches/@openid4vc+oauth2+0.3.0-alpha-20251113142742.patch b/patches/@openid4vc+oauth2+0.3.0-alpha-20251113142742.patch deleted file mode 100644 index 38560d1ae..000000000 --- a/patches/@openid4vc+oauth2+0.3.0-alpha-20251113142742.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/node_modules/@openid4vc/oauth2/dist/index.cjs b/node_modules/@openid4vc/oauth2/dist/index.cjs -index 3286de2..c99b244 100644 ---- a/node_modules/@openid4vc/oauth2/dist/index.cjs -+++ b/node_modules/@openid4vc/oauth2/dist/index.cjs -@@ -1578,11 +1578,16 @@ async function createJarAuthorizationRequest(options) { - * @throws {Error} if parsing json from response fails - */ - async function fetchWellKnownMetadata(wellKnownMetadataUrl, schema, options) { -+ try { - const { result, response } = await (0, __openid4vc_utils.createZodFetcher)(options?.fetch)(schema, options?.acceptedContentType ?? [__openid4vc_utils.ContentType.Json], wellKnownMetadataUrl); - if (response.status === 404) return null; - if (!response.ok) throw new __openid4vc_utils.InvalidFetchResponseError(`Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessful response with status '${response.status}'.`, await response.clone().text(), response); - if (!result?.success) throw new ValidationError$1(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); - return result.data; -+ } catch (e) { -+ console.log('Changed By JS-SOFT: Error can probably be ignored', e); -+ return null; -+ } - } - - //#endregion diff --git a/patches/@openid4vc+oauth2+0.4.0.patch b/patches/@openid4vc+oauth2+0.4.0.patch new file mode 100644 index 000000000..ff2aaffa9 --- /dev/null +++ b/patches/@openid4vc+oauth2+0.4.0.patch @@ -0,0 +1,21 @@ +diff --git a/node_modules/@openid4vc/oauth2/dist/index.mjs b/node_modules/@openid4vc/oauth2/dist/index.mjs +index f468772..77525c8 100644 +--- a/node_modules/@openid4vc/oauth2/dist/index.mjs ++++ b/node_modules/@openid4vc/oauth2/dist/index.mjs +@@ -1554,11 +1554,16 @@ async function createJarAuthorizationRequest(options) { + * @throws {Error} if parsing json from response fails + */ + async function fetchWellKnownMetadata(wellKnownMetadataUrl, schema, options) { ++ try { + const { result, response } = await createZodFetcher(options?.fetch)(schema, options?.acceptedContentType ?? [ContentType.Json], wellKnownMetadataUrl); + if (response.status === 404) return null; + if (!response.ok) throw new InvalidFetchResponseError$1(`Fetching well known metadata from '${wellKnownMetadataUrl}' resulted in an unsuccessful response with status '${response.status}'.`, await response.clone().text(), response); + if (!result?.success) throw new ValidationError$1(`Validation of metadata from '${wellKnownMetadataUrl}' failed`, result?.error); + return result.data; ++ } catch (e) { ++ console.log('Changed By JS-SOFT: Error can probably be ignored', e); ++ return null; ++ } + } + + //#endregion diff --git a/patches/@openid4vc+openid4vp+0.3.0-alpha-20251113142742+001+initial.patch b/patches/@openid4vc+openid4vp+0.3.0-alpha-20251113142742+001+initial.patch deleted file mode 100644 index 0795c51a8..000000000 --- a/patches/@openid4vc+openid4vp+0.3.0-alpha-20251113142742+001+initial.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/@openid4vc/openid4vp/dist/index.cjs b/node_modules/@openid4vc/openid4vp/dist/index.cjs -index 86819af..6a4f7e1 100644 ---- a/node_modules/@openid4vc/openid4vp/dist/index.cjs -+++ b/node_modules/@openid4vc/openid4vp/dist/index.cjs -@@ -643,7 +643,7 @@ async function validateOpenid4vpClientId(options, parserConfig) { - }); - if (!isOpenid4vpAuthorizationRequestDcApi(authorizationRequestPayload)) { - const uri = authorizationRequestPayload.redirect_uri ?? authorizationRequestPayload.response_uri; -- if (!uri || new __openid4vc_utils.URL(uri).hostname !== clientIdIdentifier) throw new __openid4vc_oauth2.Oauth2ServerErrorResponseError({ -+ if (!uri || new __openid4vc_utils.URL(uri).hostname.toLowerCase() !== clientIdIdentifier.toLowerCase()) throw new __openid4vc_oauth2.Oauth2ServerErrorResponseError({ - error: __openid4vc_oauth2.Oauth2ErrorCodes.InvalidRequest, - error_description: "Invalid client identifier. The fully qualified domain name of the redirect_uri value MUST match the Client Identifier without the prefix x509_san_dns." - }); diff --git a/patches/@openid4vc+openid4vp+0.4.0+001+initial.patch b/patches/@openid4vc+openid4vp+0.4.0+001+initial.patch new file mode 100644 index 000000000..45d850b8d --- /dev/null +++ b/patches/@openid4vc+openid4vp+0.4.0+001+initial.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/@openid4vc/openid4vp/dist/index.mjs b/node_modules/@openid4vc/openid4vp/dist/index.mjs +index 18d18f8..1948db5 100644 +--- a/node_modules/@openid4vc/openid4vp/dist/index.mjs ++++ b/node_modules/@openid4vc/openid4vp/dist/index.mjs +@@ -619,7 +619,7 @@ async function validateOpenid4vpClientId(options, parserConfig) { + }); + if (!isOpenid4vpAuthorizationRequestDcApi(authorizationRequestPayload)) { + const uri = authorizationRequestPayload.redirect_uri ?? authorizationRequestPayload.response_uri; +- if (!uri || new URL(uri).hostname !== clientIdIdentifier) throw new Oauth2ServerErrorResponseError({ ++ if (!uri || new URL(uri).hostname.toLowerCase() !== clientIdIdentifier.toLowerCase()) throw new Oauth2ServerErrorResponseError({ + error: Oauth2ErrorCodes.InvalidRequest, + error_description: "Invalid client identifier. The fully qualified domain name of the redirect_uri value MUST match the Client Identifier without the prefix x509_san_dns." + }); From 5ba38cdcb58e1cd62a1d910fd689a5a631f16e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Mon, 1 Dec 2025 14:58:55 +0100 Subject: [PATCH 65/75] Reuse holder (#878) * chore: move skipLibCheck comment * refactor: reuse holder in OpenId4VcController * refactor: move keyStorage init --- .../modules/openid4vc/OpenId4VcController.ts | 23 ++++++++----------- packages/consumption/tsconfig.json | 4 +--- packages/tsconfig.base.json | 1 + 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 4f0041f66..79395cce1 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -9,7 +9,7 @@ import { Holder } from "./local/Holder"; import { KeyStorage } from "./local/KeyStorage"; export class OpenId4VcController extends ConsumptionBaseController { - private keyStorage: KeyStorage; + private holder: Holder; public constructor(parent: ConsumptionController) { super(ConsumptionControllerName.OpenId4VcController, parent); @@ -17,7 +17,10 @@ export class OpenId4VcController extends ConsumptionBaseController { public override async init(): Promise { const collection = await this.parent.accountController.getSynchronizedCollection("openid4vc-keys"); - this.keyStorage = new KeyStorage(collection, this._log); + const keyStorage = new KeyStorage(collection, this._log); + + this.holder = new Holder(keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); + await this.holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); return this; } @@ -27,15 +30,11 @@ export class OpenId4VcController extends ConsumptionBaseController { } public async resolveCredentialOffer(credentialOfferUrl: string): Promise { - const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - return await holder.resolveCredentialOffer(credentialOfferUrl); + return await this.holder.resolveCredentialOffer(credentialOfferUrl); } public async acceptCredentialOffer(credentialOffer: OpenId4VciResolvedCredentialOffer, credentialConfigurationIds: string[], pinCode?: string): Promise { - const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const credentials = await holder.acceptCredentialOffer(credentialOffer, { credentialConfigurationIds: credentialConfigurationIds, txCode: pinCode }); + const credentials = await this.holder.acceptCredentialOffer(credentialOffer, { credentialConfigurationIds: credentialConfigurationIds, txCode: pinCode }); // TODO: support multiple credentials return credentials[0]; @@ -45,9 +44,7 @@ export class OpenId4VcController extends ConsumptionBaseController { authorizationRequest: OpenId4VpResolvedAuthorizationRequest; usedCredentials: OwnIdentityAttribute[]; }> { - const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - const authorizationRequest = await holder.resolveAuthorizationRequest(authorizationRequestUrl); + const authorizationRequest = await this.holder.resolveAuthorizationRequest(authorizationRequestUrl); const usedCredentials = await this.extractUsedCredentialsFromAuthorizationRequest(authorizationRequest); @@ -90,11 +87,9 @@ export class OpenId4VcController extends ConsumptionBaseController { public async acceptAuthorizationRequest( authorizationRequest: OpenId4VpResolvedAuthorizationRequest ): Promise<{ status: number; message: string | Record | null }> { - const holder = new Holder(this.keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); - await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); // parse the credential type to be sdjwt - const serverResponse = await holder.acceptAuthorizationRequest(authorizationRequest); + const serverResponse = await this.holder.acceptAuthorizationRequest(authorizationRequest); if (!serverResponse) throw new Error("No response from server"); return { status: serverResponse.status, message: serverResponse.body }; diff --git a/packages/consumption/tsconfig.json b/packages/consumption/tsconfig.json index 9c1c63549..323399fff 100644 --- a/packages/consumption/tsconfig.json +++ b/packages/consumption/tsconfig.json @@ -2,9 +2,7 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", - // ONLY POC - THIS IS STRICTLY FORBIDDEN IN PRODUCTION - "skipLibCheck": true + "rootDir": "src" }, "include": ["src/**/*.ts"], "exclude": [], diff --git a/packages/tsconfig.base.json b/packages/tsconfig.base.json index 797aa9697..e72dc85c2 100644 --- a/packages/tsconfig.base.json +++ b/packages/tsconfig.base.json @@ -21,6 +21,7 @@ "useDefineForClassFields": false, "lib": ["ES2022", "DOM"], "composite": true, + // ONLY POC - THIS IS STRICTLY FORBIDDEN IN PRODUCTION "skipLibCheck": true } } From af1e52307ea8ea6bcbbd7a21e22a7da50a0128bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Mon, 1 Dec 2025 18:29:21 +0100 Subject: [PATCH 66/75] Key cannot be loaded (#879) --- .../src/modules/openid4vc/local/EnmeshedStorageService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 45cb1b8b8..1307d241e 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -95,7 +95,7 @@ export class EnmeshedStorageService implements StorageServ _agentContext.config.logger.info("Found keys to possibly import"); const parsed = JSON.parse(attributeValue.key) as Map; - for (const [k, v] of parsed) { + for (const [k, v] of Object.entries(parsed)) { await this.keyStorage.storeKey(k, v); } } From 41f09d231f751c90bae8b7a94f023fd9fd655258 Mon Sep 17 00:00:00 2001 From: Milena Czierlinski <146972016+Milena-Czierlinski@users.noreply.github.com> Date: Wed, 3 Dec 2025 14:15:20 +0100 Subject: [PATCH 67/75] Separate RequestCredentials from StoreCredentials (#875) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: separate requestCredentials from acceptCredentials * chore: build schemas * test: use new functions * chore: audit fix * chore: jsonparse stringifySafe REquestCredentialsResponse * refactor: rename storeCredentials * chore: save change in index file * chore: run build * fix: it works for now --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: Julian König --- package-lock.json | 9 ++-- .../modules/openid4vc/OpenId4VcController.ts | 19 +++++-- .../src/modules/openid4vc/local/Holder.ts | 40 +++++++++------ .../facades/consumption/OpenId4VcFacade.ts | 28 +++++++---- .../runtime/src/useCases/common/Schemas.ts | 28 +++++++++-- .../openid4vc/AcceptCredentialOffer.ts | 37 -------------- .../openid4vc/RequestCredentials.ts | 49 +++++++++++++++++++ .../consumption/openid4vc/StoreCredentials.ts | 38 ++++++++++++++ .../useCases/consumption/openid4vc/index.ts | 3 +- .../test/consumption/openid4vc.test.ts | 22 +++++---- 10 files changed, 190 insertions(+), 83 deletions(-) delete mode 100644 packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/StoreCredentials.ts diff --git a/package-lock.json b/package-lock.json index 24afd1b8d..1e258f515 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8499,18 +8499,19 @@ "license": "Apache-2.0" }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.2.0", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", + "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 79395cce1..ce572bdee 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,5 +1,5 @@ -import { ClaimFormat } from "@credo-ts/core"; -import { OpenId4VciResolvedCredentialOffer, OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; +import { ClaimFormat, W3cJsonCredential } from "@credo-ts/core"; +import { OpenId4VciCredentialResponse, OpenId4VciResolvedCredentialOffer, OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { VerifiableCredential } from "@nmshd/content"; import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; @@ -33,8 +33,19 @@ export class OpenId4VcController extends ConsumptionBaseController { return await this.holder.resolveCredentialOffer(credentialOfferUrl); } - public async acceptCredentialOffer(credentialOffer: OpenId4VciResolvedCredentialOffer, credentialConfigurationIds: string[], pinCode?: string): Promise { - const credentials = await this.holder.acceptCredentialOffer(credentialOffer, { credentialConfigurationIds: credentialConfigurationIds, txCode: pinCode }); + public async requestCredentials( + credentialOffer: OpenId4VciResolvedCredentialOffer, + credentialConfigurationIds: string[], + pinCode?: string + ): Promise { + const credentialsResponses = await this.holder.requestCredentials(credentialOffer, { credentialConfigurationIds: credentialConfigurationIds, txCode: pinCode }); + return credentialsResponses; + } + + public async storeCredentials( + credentialResponses: (Omit & { record: { claimFormat: ClaimFormat; encoded: string | W3cJsonCredential } })[] + ): Promise { + const credentials = await this.holder.storeCredentials(credentialResponses); // TODO: support multiple credentials return credentials[0]; diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index da6d2107a..52c22f367 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -1,5 +1,18 @@ -import { BaseRecord, ClaimFormat, DidJwk, DidKey, InjectionSymbols, JwkDidCreateOptions, KeyDidCreateOptions, Kms, MdocRecord, SdJwtVcRecord, X509Module } from "@credo-ts/core"; -import { OpenId4VcModule, type OpenId4VciResolvedCredentialOffer, type OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; +import { + BaseRecord, + ClaimFormat, + DidJwk, + DidKey, + InjectionSymbols, + JwkDidCreateOptions, + KeyDidCreateOptions, + Kms, + MdocRecord, + SdJwtVcRecord, + W3cJsonCredential, + X509Module +} from "@credo-ts/core"; +import { OpenId4VciCredentialResponse, OpenId4VcModule, type OpenId4VciResolvedCredentialOffer, type OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { AccountController } from "@nmshd/transport"; import { AttributesController, OwnIdentityAttribute } from "../../attributes"; import { BaseAgent } from "./BaseAgent"; @@ -33,13 +46,13 @@ export class Holder extends BaseAgent> return await this.agent.openid4vc.holder.resolveCredentialOffer(credentialOffer); } - public async acceptCredentialOffer( + public async requestCredentials( resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, options: { credentialConfigurationIds: string[]; txCode?: string; } - ): Promise { + ): Promise { const tokenResponse = await this.agent.openid4vc.holder.requestToken({ resolvedCredentialOffer, txCode: options.txCode @@ -94,10 +107,15 @@ export class Holder extends BaseAgent> this.agent.config.logger.info("Credential response:", credentialResponse); + return credentialResponse.credentials; + } + + public async storeCredentials( + credentialResponses: (Omit & { record: { claimFormat: ClaimFormat; encoded: string | W3cJsonCredential } })[] + ): Promise { const storedCredentials = await Promise.all( - credentialResponse.credentials.map((response) => { - // TODO: batch issuance not yet supported - const credential = response.record.firstCredential; + credentialResponses.map((credentialResponse) => { + const credential = credentialResponse.record; if (![ClaimFormat.SdJwtW3cVc, ClaimFormat.SdJwtDc, ClaimFormat.MsoMdoc].includes(credential.claimFormat)) { throw new Error("Unsupported credential format"); @@ -105,13 +123,7 @@ export class Holder extends BaseAgent> const enmeshedStorageService = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); - const displayInfo = response.credentialConfiguration.display as Record[] | undefined; - - // if the displayInfo does not provide a logo - we try to load a logo from the issuers attributes - if (displayInfo && !displayInfo[0]?.logo) { - const logoInformation = resolvedCredentialOffer.metadata.credentialIssuer.display?.[0]?.["logo"]; - displayInfo[0].logo = logoInformation; - } + const displayInfo = credentialResponse.credentialConfiguration.display as Record[] | undefined; return enmeshedStorageService.saveWithDisplay(this.agent.context, credential.encoded, credential.claimFormat, displayInfo); }) diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts index 1cf7ade55..17ff55885 100644 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -1,41 +1,49 @@ -import { ApplicationError, Result } from "@js-soft/ts-utils"; +import { Result } from "@js-soft/ts-utils"; import { LocalAttributeDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { AcceptAuthorizationRequestRequest, AcceptAuthorizationRequestResponse, AcceptAuthorizationRequestUseCase, - AcceptCredentialOfferRequest, - AcceptCredentialOfferUseCase, + RequestCredentialsRequest, + RequestCredentialsResponse, + RequestCredentialsUseCase, ResolveAuthorizationRequestRequest, ResolveAuthorizationRequestResponse, ResolveAuthorizationRequestUseCase, ResolveCredentialOfferRequest, ResolveCredentialOfferResponse, - ResolveCredentialOfferUseCase + ResolveCredentialOfferUseCase, + StoreCredentialsRequest, + StoreCredentialsUseCase } from "../../../useCases"; export class OpenId4VcFacade { public constructor( @Inject private readonly resolveCredentialOfferUseCase: ResolveCredentialOfferUseCase, - @Inject private readonly acceptCredentialOfferUseCase: AcceptCredentialOfferUseCase, + @Inject private readonly requestCredentialsUseCase: RequestCredentialsUseCase, + @Inject private readonly storeCredentialsUseCase: StoreCredentialsUseCase, @Inject private readonly resolveAuthorizationRequestUseCase: ResolveAuthorizationRequestUseCase, @Inject private readonly acceptAuthorizationRequestUseCase: AcceptAuthorizationRequestUseCase ) {} - public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { + public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { return await this.resolveCredentialOfferUseCase.execute(request); } - public async acceptCredentialOffer(request: AcceptCredentialOfferRequest): Promise> { - return await this.acceptCredentialOfferUseCase.execute(request); + public async requestCredentials(request: RequestCredentialsRequest): Promise> { + return await this.requestCredentialsUseCase.execute(request); } - public async resolveAuthorizationRequest(request: ResolveAuthorizationRequestRequest): Promise> { + public async storeCredentials(request: StoreCredentialsRequest): Promise> { + return await this.storeCredentialsUseCase.execute(request); + } + + public async resolveAuthorizationRequest(request: ResolveAuthorizationRequestRequest): Promise> { return await this.resolveAuthorizationRequestUseCase.execute(request); } - public async acceptAuthorizationRequest(request: AcceptAuthorizationRequestRequest): Promise> { + public async acceptAuthorizationRequest(request: AcceptAuthorizationRequestRequest): Promise> { return await this.acceptAuthorizationRequestUseCase.execute(request); } } diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index 6dd87e14f..70abb6a4e 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -16958,11 +16958,11 @@ export const AcceptAuthorizationRequestRequest: any = { } } -export const AcceptCredentialOfferRequest: any = { +export const RequestCredentialsRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/AcceptCredentialOfferRequest", + "$ref": "#/definitions/RequestCredentialsRequest", "definitions": { - "AcceptCredentialOfferRequest": { + "RequestCredentialsRequest": { "type": "object", "additionalProperties": false, "properties": { @@ -17025,6 +17025,28 @@ export const ResolveCredentialOfferRequest: any = { } } +export const StoreCredentialsRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/StoreCredentialsRequest", + "definitions": { + "StoreCredentialsRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "credentialResponses": { + "type": "array", + "items": { + "type": "object" + } + } + }, + "required": [ + "credentialResponses" + ] + } + } +} + export const CreateSettingRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/CreateSettingRequest", diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts deleted file mode 100644 index 7ed165081..000000000 --- a/packages/runtime/src/useCases/consumption/openid4vc/AcceptCredentialOffer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { OpenId4VciResolvedCredentialOffer } from "@credo-ts/openid4vc"; -import { Result } from "@js-soft/ts-utils"; -import { OpenId4VcController } from "@nmshd/consumption"; -import { LocalAttributeDTO } from "@nmshd/runtime-types"; -import { Inject } from "@nmshd/typescript-ioc"; -import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; -import { AttributeMapper } from "../attributes"; - -export interface AbstractCredentialOfferRequest { - credentialOffer: T; - pinCode?: string; - credentialConfigurationIds: string[]; -} - -export interface AcceptCredentialOfferRequest extends AbstractCredentialOfferRequest {} - -export interface SchemaValidatableAcceptCredentialOfferRequest extends AbstractCredentialOfferRequest> {} - -class Validator extends SchemaValidator { - public constructor(@Inject schemaRepository: SchemaRepository) { - super(schemaRepository.getSchema("AcceptCredentialOfferRequest")); - } -} - -export class AcceptCredentialOfferUseCase extends UseCase { - public constructor( - @Inject private readonly openId4VcController: OpenId4VcController, - @Inject validator: Validator - ) { - super(validator); - } - - protected override async executeInternal(request: AcceptCredentialOfferRequest): Promise> { - const result = await this.openId4VcController.acceptCredentialOffer(request.credentialOffer, request.credentialConfigurationIds, request.pinCode); - return Result.ok(AttributeMapper.toAttributeDTO(result)); - } -} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts b/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts new file mode 100644 index 000000000..438f2a56b --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts @@ -0,0 +1,49 @@ +import { ClaimFormat, W3cJsonCredential } from "@credo-ts/core"; +import { OpenId4VciCredentialResponse, OpenId4VciResolvedCredentialOffer } from "@credo-ts/openid4vc"; +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface AbstractRequestCredentialsRequest { + credentialOffer: T; + pinCode?: string; + credentialConfigurationIds: string[]; +} + +export interface RequestCredentialsResponse { + credentialResponses: (Omit & { record: { claimFormat: ClaimFormat; encoded: string | W3cJsonCredential } })[]; +} + +export interface RequestCredentialsRequest extends AbstractRequestCredentialsRequest {} + +export interface SchemaValidatableRequestCredentialsRequest extends AbstractRequestCredentialsRequest> {} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("RequestCredentialsRequest")); + } +} + +export class RequestCredentialsUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcController: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: RequestCredentialsRequest): Promise> { + const credentialResponses = await this.openId4VcController.requestCredentials(request.credentialOffer, request.credentialConfigurationIds, request.pinCode); + return Result.ok({ + credentialResponses: credentialResponses.map((response) => ({ + ...response, + record: { + // TODO: batch issuance not yet supported + claimFormat: response.record.firstCredential.claimFormat, + encoded: response.record.firstCredential.encoded + } + })) + }); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/StoreCredentials.ts b/packages/runtime/src/useCases/consumption/openid4vc/StoreCredentials.ts new file mode 100644 index 000000000..ef4769af9 --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/StoreCredentials.ts @@ -0,0 +1,38 @@ +import { ClaimFormat, W3cJsonCredential } from "@credo-ts/core"; +import { OpenId4VciCredentialResponse } from "@credo-ts/openid4vc"; +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { LocalAttributeDTO } from "@nmshd/runtime-types"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; +import { AttributeMapper } from "../attributes"; + +export interface AbstractStoreCredentialsRequest { + credentialResponses: T; +} + +export interface StoreCredentialsRequest extends AbstractStoreCredentialsRequest< + (Omit & { record: { claimFormat: ClaimFormat; encoded: string | W3cJsonCredential } })[] +> {} + +export interface SchemaValidatableStoreCredentialsRequest extends AbstractStoreCredentialsRequest[]> {} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("StoreCredentialsRequest")); + } +} + +export class StoreCredentialsUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcController: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: StoreCredentialsRequest): Promise> { + const result = await this.openId4VcController.storeCredentials(request.credentialResponses); + return Result.ok(AttributeMapper.toAttributeDTO(result)); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/index.ts b/packages/runtime/src/useCases/consumption/openid4vc/index.ts index df1516ddd..d035ced3e 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/index.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/index.ts @@ -1,4 +1,5 @@ export * from "./AcceptAuthorizationRequest"; -export * from "./AcceptCredentialOffer"; +export * from "./RequestCredentials"; export * from "./ResolveAuthorizationRequest"; export * from "./ResolveCredentialOffer"; +export * from "./StoreCredentials"; diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index a70981a10..3a12108ed 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -67,14 +67,15 @@ describe("custom openid4vc service", () => { const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; - const acceptanceResult = await consumptionServices.openId4Vc.acceptCredentialOffer({ + const credentialResponseResult = await consumptionServices.openId4Vc.requestCredentials({ credentialOffer, credentialConfigurationIds: requestedCredentials }); - expect(acceptanceResult).toBeSuccessful(); - expect(typeof acceptanceResult.value.id).toBe("string"); + const storeResult = await consumptionServices.openId4Vc.storeCredentials({ credentialResponses: credentialResponseResult.value.credentialResponses }); + expect(storeResult).toBeSuccessful(); + expect(typeof storeResult.value.id).toBe("string"); - const credential = acceptanceResult.value.content.value as unknown as VerifiableCredential; + const credential = storeResult.value.content.value as unknown as VerifiableCredential; expect(credential.displayInformation?.[0].logo).toBeDefined(); expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); }); @@ -233,16 +234,17 @@ describe("EUDIPLO", () => { }) ).data.uri; - const loadResult = await consumptionServices.openId4Vc.resolveCredentialOffer({ credentialOfferUrl }); - expect(loadResult).toBeSuccessful(); + const resolveCredentialOfferResult = await consumptionServices.openId4Vc.resolveCredentialOffer({ credentialOfferUrl }); + expect(resolveCredentialOfferResult).toBeSuccessful(); - const resolveResult = await consumptionServices.openId4Vc.acceptCredentialOffer({ - credentialOffer: loadResult.value.credentialOffer, + const credentialResponsesResult = await consumptionServices.openId4Vc.requestCredentials({ + credentialOffer: resolveCredentialOfferResult.value.credentialOffer, credentialConfigurationIds: [eudiploCredentialIdInConfiguration] }); - expect(resolveResult).toBeSuccessful(); + const storeCredentialsResponse = await consumptionServices.openId4Vc.storeCredentials({ credentialResponses: credentialResponsesResult.value.credentialResponses }); + expect(storeCredentialsResponse).toBeSuccessful(); - expect((resolveResult.value.content.value as unknown as VerifiableCredential).displayInformation?.[0].name).toBe("Employee ID Card"); + expect((storeCredentialsResponse.value.content.value as unknown as VerifiableCredential).displayInformation?.[0].name).toBe("Employee ID Card"); }); test("presentation", async () => { From 825b9ceb8e27e00d1a7012f2cd8c12b2d261146b Mon Sep 17 00:00:00 2001 From: Magnus Kuhn <127854942+Magnus-Kuhn@users.noreply.github.com> Date: Fri, 5 Dec 2025 13:26:30 +0100 Subject: [PATCH 68/75] Receive mdocs via OpenID4VCI (#884) * test: add mdoc test * fix: be more lenient * test: restructure tests * chore: update images * fix: cleanup merge * refactor: naming usedCredentials -> matchingCredentials --- .dev/compose.openid4vc.yml | 4 +- .../modules/openid4vc/OpenId4VcController.ts | 18 +- .../openid4vc/ResolveAuthorizationRequest.ts | 9 +- .../test/consumption/openid4vc.test.ts | 256 ++++++++++++------ 4 files changed, 195 insertions(+), 92 deletions(-) diff --git a/.dev/compose.openid4vc.yml b/.dev/compose.openid4vc.yml index 9c43b6f9b..d9b1a5c7f 100644 --- a/.dev/compose.openid4vc.yml +++ b/.dev/compose.openid4vc.yml @@ -2,7 +2,7 @@ name: runtime-oid4vc-tests services: oid4vc-service: - image: ghcr.io/js-soft/openid4vc-service:1.1.14@sha256:d8601d031769f2ce850bcfcea32da839c0d444ed90ad6d345d85d9d864f1620a + image: ghcr.io/js-soft/openid4vc-service:1.2.0-alpha.12@sha256:57064c1deee358b44a107de9633fc98c3f9511f96eac9d9bbd22cb53f3fb529c ports: - "9000:9000" platform: linux/amd64 @@ -18,7 +18,7 @@ services: - default connector: - image: ghcr.io/nmshd/connector:7.1.0-openid4vc.2@sha256:b8458560fa85b190485aa544d9db34ab7d0b6b7b88129eda487b723e201734f8 + image: ghcr.io/nmshd/connector:7.3.0-openid4vc.1@sha256:4be31417d10d67454d7732949601a2136417fefc78107e3751eccea7946a7aca environment: CUSTOM_CONFIG_LOCATION: "/config.json" transportLibrary__baseUrl: "http://consumer-api:8080" diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index ce572bdee..61923c1c0 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -53,19 +53,19 @@ export class OpenId4VcController extends ConsumptionBaseController { public async resolveAuthorizationRequest(authorizationRequestUrl: string): Promise<{ authorizationRequest: OpenId4VpResolvedAuthorizationRequest; - usedCredentials: OwnIdentityAttribute[]; + matchingCredentials: OwnIdentityAttribute[]; }> { const authorizationRequest = await this.holder.resolveAuthorizationRequest(authorizationRequestUrl); - const usedCredentials = await this.extractUsedCredentialsFromAuthorizationRequest(authorizationRequest); + const matchingCredentials = await this.extractMatchingCredentialsFromAuthorizationRequest(authorizationRequest); return { authorizationRequest, - usedCredentials + matchingCredentials }; } - private async extractUsedCredentialsFromAuthorizationRequest(authorizationRequest: OpenId4VpResolvedAuthorizationRequest): Promise { + private async extractMatchingCredentialsFromAuthorizationRequest(authorizationRequest: OpenId4VpResolvedAuthorizationRequest): Promise { const dcqlSatisfied = authorizationRequest.dcql?.queryResult.can_be_satisfied ?? false; const authorizationRequestSatisfied = authorizationRequest.presentationExchange?.credentialsForRequest.areRequirementsSatisfied ?? false; if (!dcqlSatisfied && !authorizationRequestSatisfied) { @@ -77,11 +77,7 @@ export class OpenId4VcController extends ConsumptionBaseController { if (!authorizationRequestSatisfied) return []; const matchedCredentialsFromPresentationExchange = authorizationRequest.presentationExchange?.credentialsForRequest.requirements - .map((entry) => - entry.submissionEntry - .map((subEntry) => subEntry.verifiableCredentials.filter((vc) => vc.claimFormat === ClaimFormat.SdJwtDc).map((vc) => vc.credentialRecord.encoded)) - .flat() - ) + .map((entry) => entry.submissionEntry.map((subEntry) => subEntry.verifiableCredentials.map((vc) => vc.credentialRecord.encoded)).flat()) .flat(); const allCredentials = (await this.parent.attributes.getLocalAttributes({ @@ -89,10 +85,10 @@ export class OpenId4VcController extends ConsumptionBaseController { "content.value.@type": "VerifiableCredential" })) as OwnIdentityAttribute[]; - const usedCredentials = allCredentials.filter((credential) => + const matchingCredentials = allCredentials.filter((credential) => matchedCredentialsFromPresentationExchange?.includes((credential.content.value as VerifiableCredential).value as string) ); // in current demo scenarios this is a string - return usedCredentials; + return matchingCredentials; } public async acceptAuthorizationRequest( diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts index ff19a42db..e86263824 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveAuthorizationRequest.ts @@ -13,7 +13,7 @@ export interface ResolveAuthorizationRequestRequest { export interface ResolveAuthorizationRequestResponse { authorizationRequest: OpenId4VpResolvedAuthorizationRequest; - usedCredentials: LocalAttributeDTO[]; + matchingCredentials: LocalAttributeDTO[]; } class Validator extends SchemaValidator { @@ -34,6 +34,11 @@ export class ResolveAuthorizationRequestUseCase extends UseCase { let credentialOfferUrl: string; - test("should process a given credential offer", async () => { - const response = await axiosInstance.post("/issuance/credentialOffers", { - credentialConfigurationIds: ["EmployeeIdCard-sdjwt"] + describe("sd-jwt", () => { + test("should process a given sd-jwt credential offer", async () => { + const response = await axiosInstance.post("/issuance/credentialOffers", { + credentialConfigurationIds: ["EmployeeIdCard-sdjwt"] + }); + expect(response.status).toBe(200); + const responseData = await response.data; + + credentialOfferUrl = responseData.result.credentialOffer; + + const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ + credentialOfferUrl + }); + + expect(result).toBeSuccessful(); + + // analogously to the app code all presented credentials are accepted + const credentialOffer = result.value.credentialOffer; + + // determine which credentials to pick from the offer for all supported types of offers + const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; + + const credentialResponseResult = await consumptionServices.openId4Vc.requestCredentials({ + credentialOffer, + credentialConfigurationIds: requestedCredentials + }); + const storeResult = await consumptionServices.openId4Vc.storeCredentials({ credentialResponses: credentialResponseResult.value.credentialResponses }); + expect(storeResult).toBeSuccessful(); + expect(typeof storeResult.value.id).toBe("string"); + + const credential = storeResult.value.content.value as unknown as VerifiableCredential; + expect(credential.displayInformation?.[0].logo).toBeDefined(); + expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); }); - expect(response.status).toBe(200); - const responseData = await response.data; - credentialOfferUrl = responseData.result.credentialOffer; + test("should be able to process a given sd-jwt credential presentation", async () => { + // Ensure the first test has completed + expect(credentialOfferUrl).toBeDefined(); - const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ - credentialOfferUrl - }); - - expect(result).toBeSuccessful(); + const response = await axiosInstance.post("/presentation/presentationRequests", { + pex: { + id: "anId", + purpose: "To prove you work here", - // analogously to the app code all presented credentials are accepted - const credentialOffer = result.value.credentialOffer; + // eslint-disable-next-line @typescript-eslint/naming-convention + input_descriptors: [ + { + id: "EmployeeIdCard", + format: { + // eslint-disable-next-line @typescript-eslint/naming-convention + "vc+sd-jwt": { + // eslint-disable-next-line @typescript-eslint/naming-convention + "sd-jwt_alg_values": [ + "RS256", + "PS256", + "HS256", + "ES256", + "ES256K", + "RS384", + "PS384", + "HS384", + "ES384", + "RS512", + "PS512", + "HS512", + "ES512", + "EdDSA" + ] + } + }, + constraints: { + fields: [ + { + path: ["$.vct"], + filter: { + type: "string", + pattern: "EmployeeIdCard" + } + } + ] + } + } + ] + }, + version: "v1.draft21" + }); + expect(response.status).toBe(200); + const responseData = await response.data; - // determine which credentials to pick from the offer for all supported types of offers + const result = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); + expect(result.value.matchingCredentials).toHaveLength(1); - const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; + const request = result.value.authorizationRequest; + expect(request.presentationExchange!.credentialsForRequest.areRequirementsSatisfied).toBe(true); - const credentialResponseResult = await consumptionServices.openId4Vc.requestCredentials({ - credentialOffer, - credentialConfigurationIds: requestedCredentials + const presentationResult = await consumptionServices.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); + expect(presentationResult).toBeSuccessful(); + expect(presentationResult.value.status).toBe(200); }); - const storeResult = await consumptionServices.openId4Vc.storeCredentials({ credentialResponses: credentialResponseResult.value.credentialResponses }); - expect(storeResult).toBeSuccessful(); - expect(typeof storeResult.value.id).toBe("string"); - const credential = storeResult.value.content.value as unknown as VerifiableCredential; - expect(credential.displayInformation?.[0].logo).toBeDefined(); - expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); + test("getting all verifiable credentials should not return an empty list", async () => { + // Ensure the first test has completed + expect(credentialOfferUrl).toBeDefined(); + + const acceptanceResult = await consumptionServices.attributes.getOwnIdentityAttributes({ + query: { + "content.value.@type": "VerifiableCredential" + } + }); + + expect(acceptanceResult).toBeSuccessful(); + expect(acceptanceResult.value.length).toBeGreaterThan(0); + }); }); - test("should be able to process a given credential presentation", async () => { - // Ensure the first test has completed - expect(credentialOfferUrl).toBeDefined(); + describe("mdoc", () => { + test("should process a given mdoc credential offer", async () => { + const response = await axiosInstance.post("/issuance/credentialOffers", { + credentialConfigurationIds: ["EmployeeIdCard-mdoc"] + }); + expect(response.status).toBe(200); + const responseData = await response.data; - const response = await axiosInstance.post("/presentation/presentationRequests", { - pex: { - id: "anId", - purpose: "To prove you work here", + credentialOfferUrl = responseData.result.credentialOffer; - // eslint-disable-next-line @typescript-eslint/naming-convention - input_descriptors: [ - { - id: "EmployeeIdCard", - format: { - // eslint-disable-next-line @typescript-eslint/naming-convention - "vc+sd-jwt": { - // eslint-disable-next-line @typescript-eslint/naming-convention - "sd-jwt_alg_values": ["RS256", "PS256", "HS256", "ES256", "ES256K", "RS384", "PS384", "HS384", "ES384", "RS512", "PS512", "HS512", "ES512", "EdDSA"] - } - }, - constraints: { - fields: [ - { - path: ["$.vct"], - filter: { - type: "string", - pattern: "EmployeeIdCard" - } - } - ] - } - } - ] - }, - version: "v1.draft21" - }); - expect(response.status).toBe(200); - const responseData = await response.data; + const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ + credentialOfferUrl + }); - const result = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); - expect(result.value.usedCredentials).toHaveLength(1); + expect(result).toBeSuccessful(); - const request = result.value.authorizationRequest; - expect(request.presentationExchange!.credentialsForRequest.areRequirementsSatisfied).toBe(true); + // analogously to the app code all presented credentials are accepted + const credentialOffer = result.value.credentialOffer; - const presentationResult = await consumptionServices.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); - expect(presentationResult).toBeSuccessful(); - expect(presentationResult.value.status).toBe(200); - }); + // determine which credentials to pick from the offer for all supported types of offers + const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; - test("getting all verifiable credentials should not return an empty list", async () => { - // Ensure the first test has completed - expect(credentialOfferUrl).toBeDefined(); + const credentialResponseResult = await consumptionServices.openId4Vc.requestCredentials({ + credentialOffer, + credentialConfigurationIds: requestedCredentials + }); + const storeResult = await consumptionServices.openId4Vc.storeCredentials({ credentialResponses: credentialResponseResult.value.credentialResponses }); + expect(storeResult).toBeSuccessful(); + expect(typeof storeResult.value.id).toBe("string"); - const acceptanceResult = await consumptionServices.attributes.getOwnIdentityAttributes({ - query: { - "content.value.@type": "VerifiableCredential" - } + const credential = storeResult.value.content.value as unknown as VerifiableCredential; + expect(credential.displayInformation?.[0].logo).toBeDefined(); + expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); }); - expect(acceptanceResult).toBeSuccessful(); - expect(acceptanceResult.value.length).toBeGreaterThan(0); + test("should be able to process a given mdoc credential presentation", async () => { + // Ensure the first test has completed + expect(credentialOfferUrl).toBeDefined(); + + const response = await axiosInstance.post("/presentation/presentationRequests", { + pex: { + // see openid4vp-draft21.e2e.test.ts of credo for a more detailed example how to build a query + id: "anId", + purpose: "To prove you work here", + + // eslint-disable-next-line @typescript-eslint/naming-convention + input_descriptors: [ + { + id: "EmployeeIdCard", + format: { + // eslint-disable-next-line @typescript-eslint/naming-convention + mso_mdoc: { + alg: ["EdDSA", "ES256"] + } + }, + constraints: { + fields: [ + { + path: ["$['employeeIdCard']['degree']"], + // eslint-disable-next-line @typescript-eslint/naming-convention + intent_to_retain: false + } + ], + // eslint-disable-next-line @typescript-eslint/naming-convention + limit_disclosure: "required" + } + } + ] + }, + version: "v1.draft21" + }); + expect(response.status).toBe(200); + const responseData = await response.data; + + const result = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); + expect(result.value.matchingCredentials).toHaveLength(1); + + const request = result.value.authorizationRequest; + expect(request.presentationExchange!.credentialsForRequest.areRequirementsSatisfied).toBe(true); + + const presentationResult = await consumptionServices.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); + expect(presentationResult).toBeSuccessful(); + expect(presentationResult.value.status).toBe(200); + }); }); async function startOid4VcComposeStack() { From c8bf361fce3fb6f3bf6fd46d6903ea0ea9114c7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Fri, 5 Dec 2025 15:11:05 +0100 Subject: [PATCH 69/75] Transfer credential offers over requests (#885) * fix: remove hacky key solution * feat: add ShareCredentialOfferRequestItem * feat: add empty ShareCredentialOfferRequestItemProcessor * feat: add event * refactor: move code to OpenId4VciCredentialResponseJSON * feat: implement processor * feat: add ShareCredentialOfferRequestItemDVO * test: add test * fix: build schemas * chore: remove comments * fix: add request item to check * refactor: naming * fix: use nameof * refactor: types * chore: use property directly * fix: add error cause to ValidationResult error message * chore: naming * fix: event namespace + wording * fix: use typed property * fix: stuff * chore: one-liner --- .../src/consumption/ConsumptionController.ts | 5 +- .../modules/openid4vc/OpenId4VcController.ts | 43 +++-- .../src/modules/openid4vc/index.ts | 1 + .../openid4vc/local/EnmeshedStorageService.ts | 20 +-- .../src/modules/openid4vc/local/Holder.ts | 33 ++-- .../src/modules/openid4vc/local/KeyStorage.ts | 3 +- .../local/OpenId4VciCredentialResponseJSON.ts | 7 + .../local/RequestedCredentialCache.ts | 30 ++++ ...ferRequestItemProcessedByRecipientEvent.ts | 16 ++ .../src/modules/requests/events/index.ts | 1 + .../consumption/src/modules/requests/index.ts | 1 + ...hareCredentialOfferRequestItemProcessor.ts | 62 ++++++++ .../outgoing/OutgoingRequestsController.ts | 3 +- .../attributes/types/VerifiableCredential.ts | 6 - packages/content/src/requests/RequestItem.ts | 15 +- packages/content/src/requests/items/index.ts | 1 + .../ShareCredentialOfferRequestItem.ts | 29 ++++ .../runtime/src/dataViews/DataViewExpander.ts | 23 +++ .../src/dataViews/content/RequestItemDVOs.ts | 7 + packages/runtime/src/events/EventProxy.ts | 13 +- ...ferRequestItemProcessedByRecipientEvent.ts | 15 ++ .../runtime/src/events/consumption/index.ts | 1 + .../runtime/src/useCases/common/Schemas.ts | 138 +++++++++++++--- .../openid4vc/RequestCredentials.ts | 18 +-- .../consumption/openid4vc/StoreCredentials.ts | 8 +- .../test/consumption/openid4vc.test.ts | 148 ++++++++++++++---- 26 files changed, 511 insertions(+), 136 deletions(-) create mode 100644 packages/consumption/src/modules/openid4vc/local/OpenId4VciCredentialResponseJSON.ts create mode 100644 packages/consumption/src/modules/openid4vc/local/RequestedCredentialCache.ts create mode 100644 packages/consumption/src/modules/requests/events/ShareCredentialOfferRequestItemProcessedByRecipientEvent.ts create mode 100644 packages/consumption/src/modules/requests/itemProcessors/shareCredentialOffer/ShareCredentialOfferRequestItemProcessor.ts create mode 100644 packages/content/src/requests/items/shareCredentialOffer/ShareCredentialOfferRequestItem.ts create mode 100644 packages/runtime/src/events/consumption/ShareCredentialOfferRequestItemProcessedByRecipientEvent.ts diff --git a/packages/consumption/src/consumption/ConsumptionController.ts b/packages/consumption/src/consumption/ConsumptionController.ts index fabeecd17..d116e4dd9 100644 --- a/packages/consumption/src/consumption/ConsumptionController.ts +++ b/packages/consumption/src/consumption/ConsumptionController.ts @@ -11,6 +11,7 @@ import { ProposeAttributeRequestItem, ReadAttributeRequestItem, ShareAttributeRequestItem, + ShareCredentialOfferRequestItem, TransferFileOwnershipRequestItem } from "@nmshd/content"; import { CoreAddress, CoreId } from "@nmshd/core-types"; @@ -41,6 +42,7 @@ import { RequestItemProcessorRegistry, SettingsController, ShareAttributeRequestItemProcessor, + ShareCredentialOfferRequestItemProcessor, TransferFileOwnershipRequestItemProcessor } from "../modules"; import { ConsumptionConfig } from "./ConsumptionConfig"; @@ -160,7 +162,8 @@ export class ConsumptionController { [ConsentRequestItem, GenericRequestItemProcessor], [AuthenticationRequestItem, GenericRequestItemProcessor], [FormFieldRequestItem, FormFieldRequestItemProcessor], - [TransferFileOwnershipRequestItem, TransferFileOwnershipRequestItemProcessor] + [TransferFileOwnershipRequestItem, TransferFileOwnershipRequestItemProcessor], + [ShareCredentialOfferRequestItem, ShareCredentialOfferRequestItemProcessor] ]); } diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 61923c1c0..bf1cc19d6 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,5 +1,4 @@ -import { ClaimFormat, W3cJsonCredential } from "@credo-ts/core"; -import { OpenId4VciCredentialResponse, OpenId4VciResolvedCredentialOffer, OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; +import { OpenId4VciResolvedCredentialOffer, OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { VerifiableCredential } from "@nmshd/content"; import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; @@ -7,21 +6,27 @@ import { ConsumptionControllerName } from "../../consumption/ConsumptionControll import { OwnIdentityAttribute } from "../attributes"; import { Holder } from "./local/Holder"; import { KeyStorage } from "./local/KeyStorage"; +import { OpenId4VciCredentialResponseJSON } from "./local/OpenId4VciCredentialResponseJSON"; +import { RequestedCredentialCache } from "./local/RequestedCredentialCache"; export class OpenId4VcController extends ConsumptionBaseController { private holder: Holder; + private requestedCredentialCache: RequestedCredentialCache; public constructor(parent: ConsumptionController) { super(ConsumptionControllerName.OpenId4VcController, parent); } public override async init(): Promise { - const collection = await this.parent.accountController.getSynchronizedCollection("openid4vc-keys"); - const keyStorage = new KeyStorage(collection, this._log); + const keyCollection = await this.parent.accountController.getSynchronizedCollection("openid4vc-keys"); + const keyStorage = new KeyStorage(keyCollection, this._log); this.holder = new Holder(keyStorage, this.parent.accountController, this.parent.attributes, this.fetchInstance); await this.holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + const requestedCredentialsCacheCollection = await this.parent.accountController.getSynchronizedCollection("openid4vc-requested-credentials-cache"); + this.requestedCredentialCache = new RequestedCredentialCache(requestedCredentialsCacheCollection); + return this; } @@ -29,6 +34,19 @@ export class OpenId4VcController extends ConsumptionBaseController { return this.parent.consumptionConfig.fetchInstance ?? fetch; } + public async requestAllCredentialsFromCredentialOfferUrl(credentialOfferUrl: string): Promise { + const cachedCredentialResponses = await this.requestedCredentialCache.get(credentialOfferUrl); + if (cachedCredentialResponses) return cachedCredentialResponses; + + const offer = await this.resolveCredentialOffer(credentialOfferUrl); + const credentialResponses = await this.requestCredentials(offer, offer.credentialOfferPayload.credential_configuration_ids); + + await this.requestedCredentialCache.set(credentialOfferUrl, credentialResponses); + await this.parent.accountController.syncDatawallet(); + + return credentialResponses; + } + public async resolveCredentialOffer(credentialOfferUrl: string): Promise { return await this.holder.resolveCredentialOffer(credentialOfferUrl); } @@ -37,14 +55,19 @@ export class OpenId4VcController extends ConsumptionBaseController { credentialOffer: OpenId4VciResolvedCredentialOffer, credentialConfigurationIds: string[], pinCode?: string - ): Promise { - const credentialsResponses = await this.holder.requestCredentials(credentialOffer, { credentialConfigurationIds: credentialConfigurationIds, txCode: pinCode }); - return credentialsResponses; + ): Promise { + const credentialResponses = await this.holder.requestCredentials(credentialOffer, { credentialConfigurationIds: credentialConfigurationIds, txCode: pinCode }); + + const mappedResponses = credentialResponses.map((response) => ({ + claimFormat: response.record.firstCredential.claimFormat, + encoded: response.record.firstCredential.encoded, + displayInformation: response.credentialConfiguration.credential_metadata?.display ?? (response.credentialConfiguration.display as Record[] | undefined) + })); + + return mappedResponses; } - public async storeCredentials( - credentialResponses: (Omit & { record: { claimFormat: ClaimFormat; encoded: string | W3cJsonCredential } })[] - ): Promise { + public async storeCredentials(credentialResponses: OpenId4VciCredentialResponseJSON[]): Promise { const credentials = await this.holder.storeCredentials(credentialResponses); // TODO: support multiple credentials diff --git a/packages/consumption/src/modules/openid4vc/index.ts b/packages/consumption/src/modules/openid4vc/index.ts index 1f9d59bac..63337975d 100644 --- a/packages/consumption/src/modules/openid4vc/index.ts +++ b/packages/consumption/src/modules/openid4vc/index.ts @@ -3,4 +3,5 @@ export * from "./local/EnmeshedHolderFileSystem"; export * from "./local/EnmeshedHolderKeyManagmentService"; export * from "./local/EnmeshedStorageService"; export * from "./local/Holder"; +export * from "./local/OpenId4VciCredentialResponseJSON"; export * from "./OpenId4VcController"; diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 1307d241e..59e69aacb 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -87,22 +87,10 @@ export class EnmeshedStorageService implements StorageServ "content.value.type": correspondingCredentialType }); - return await Promise.all( - attributes.map(async (attribute) => { - const attributeValue = attribute.content.value as VerifiableCredential; - if (attributeValue.key !== undefined) { - // TODO: Remove as this is only a workaround for demo purposes - _agentContext.config.logger.info("Found keys to possibly import"); - - const parsed = JSON.parse(attributeValue.key) as Map; - for (const [k, v] of Object.entries(parsed)) { - await this.keyStorage.storeKey(k, v); - } - } - - return this.fromEncoded(correspondingCredentialType, (attribute.content.value as VerifiableCredential).value) as T; - }) - ); + return attributes.map((attribute) => { + const attributeValue = attribute.content.value as VerifiableCredential; + return this.fromEncoded(correspondingCredentialType, attributeValue.value) as T; + }); } private recordTypeToCredentialType(recordType: string): string { diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 52c22f367..c93f11719 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -1,23 +1,11 @@ -import { - BaseRecord, - ClaimFormat, - DidJwk, - DidKey, - InjectionSymbols, - JwkDidCreateOptions, - KeyDidCreateOptions, - Kms, - MdocRecord, - SdJwtVcRecord, - W3cJsonCredential, - X509Module -} from "@credo-ts/core"; +import { BaseRecord, ClaimFormat, DidJwk, DidKey, InjectionSymbols, JwkDidCreateOptions, KeyDidCreateOptions, Kms, MdocRecord, SdJwtVcRecord, X509Module } from "@credo-ts/core"; import { OpenId4VciCredentialResponse, OpenId4VcModule, type OpenId4VciResolvedCredentialOffer, type OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { AccountController } from "@nmshd/transport"; import { AttributesController, OwnIdentityAttribute } from "../../attributes"; import { BaseAgent } from "./BaseAgent"; import { EnmeshedStorageService } from "./EnmeshedStorageService"; import { KeyStorage } from "./KeyStorage"; +import { OpenId4VciCredentialResponseJSON } from "./OpenId4VciCredentialResponseJSON"; function getOpenIdHolderModules() { return { @@ -110,22 +98,21 @@ export class Holder extends BaseAgent> return credentialResponse.credentials; } - public async storeCredentials( - credentialResponses: (Omit & { record: { claimFormat: ClaimFormat; encoded: string | W3cJsonCredential } })[] - ): Promise { + public async storeCredentials(credentialResponses: OpenId4VciCredentialResponseJSON[]): Promise { const storedCredentials = await Promise.all( credentialResponses.map((credentialResponse) => { - const credential = credentialResponse.record; - - if (![ClaimFormat.SdJwtW3cVc, ClaimFormat.SdJwtDc, ClaimFormat.MsoMdoc].includes(credential.claimFormat)) { + if (![ClaimFormat.SdJwtW3cVc, ClaimFormat.SdJwtDc, ClaimFormat.MsoMdoc].includes(credentialResponse.claimFormat)) { throw new Error("Unsupported credential format"); } const enmeshedStorageService = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); - const displayInfo = credentialResponse.credentialConfiguration.display as Record[] | undefined; - - return enmeshedStorageService.saveWithDisplay(this.agent.context, credential.encoded, credential.claimFormat, displayInfo); + return enmeshedStorageService.saveWithDisplay( + this.agent.context, + credentialResponse.encoded, + credentialResponse.claimFormat, + credentialResponse.displayInformation + ); }) ); diff --git a/packages/consumption/src/modules/openid4vc/local/KeyStorage.ts b/packages/consumption/src/modules/openid4vc/local/KeyStorage.ts index ec4f8cd9a..3453307d0 100644 --- a/packages/consumption/src/modules/openid4vc/local/KeyStorage.ts +++ b/packages/consumption/src/modules/openid4vc/local/KeyStorage.ts @@ -2,13 +2,14 @@ import { ILogger } from "@js-soft/logging-abstractions"; import { serialize, validate } from "@js-soft/ts-serval"; import { CoreId } from "@nmshd/core-types"; import { CoreSynchronizable, ICoreSynchronizable, SynchronizedCollection } from "@nmshd/transport"; +import { nameof } from "ts-simple-nameof"; interface IKeyStorageEntry extends ICoreSynchronizable { key: any; } class KeyStorageEntry extends CoreSynchronizable { - public override technicalProperties: string[] = ["key"]; + public override technicalProperties: string[] = [nameof((r) => r.key)]; @serialize({ any: true }) @validate() diff --git a/packages/consumption/src/modules/openid4vc/local/OpenId4VciCredentialResponseJSON.ts b/packages/consumption/src/modules/openid4vc/local/OpenId4VciCredentialResponseJSON.ts new file mode 100644 index 000000000..8484f4788 --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/OpenId4VciCredentialResponseJSON.ts @@ -0,0 +1,7 @@ +import { ClaimFormat, W3cJsonCredential } from "@credo-ts/core"; + +export interface OpenId4VciCredentialResponseJSON { + claimFormat: ClaimFormat; + encoded: string | W3cJsonCredential; + displayInformation?: Record[]; +} diff --git a/packages/consumption/src/modules/openid4vc/local/RequestedCredentialCache.ts b/packages/consumption/src/modules/openid4vc/local/RequestedCredentialCache.ts new file mode 100644 index 000000000..82c6a8321 --- /dev/null +++ b/packages/consumption/src/modules/openid4vc/local/RequestedCredentialCache.ts @@ -0,0 +1,30 @@ +import { serialize, validate } from "@js-soft/ts-serval"; +import { CoreId } from "@nmshd/core-types"; +import { CoreSynchronizable, SynchronizedCollection } from "@nmshd/transport"; +import { nameof } from "ts-simple-nameof"; +import { OpenId4VciCredentialResponseJSON } from "./OpenId4VciCredentialResponseJSON"; + +class RequestedCredentialCacheEntry extends CoreSynchronizable { + public override technicalProperties: string[] = [nameof((r) => r.credentialResponses)]; + + @serialize({ any: true }) + @validate() + public credentialResponses: OpenId4VciCredentialResponseJSON[]; + + public static create(credentialOfferUrl: string, credentialResponses: OpenId4VciCredentialResponseJSON[]): RequestedCredentialCacheEntry { + return this.fromAny({ id: CoreId.from(credentialOfferUrl), credentialResponses }); + } +} + +export class RequestedCredentialCache { + public constructor(private readonly collection: SynchronizedCollection) {} + + public async get(credentialOfferUrl: string): Promise { + const doc = await this.collection.read(credentialOfferUrl); + return doc ? RequestedCredentialCacheEntry.fromAny(doc).credentialResponses : undefined; + } + + public async set(credentialOfferUrl: string, credentialResponses: OpenId4VciCredentialResponseJSON[]): Promise { + await this.collection.create(RequestedCredentialCacheEntry.create(credentialOfferUrl, credentialResponses)); + } +} diff --git a/packages/consumption/src/modules/requests/events/ShareCredentialOfferRequestItemProcessedByRecipientEvent.ts b/packages/consumption/src/modules/requests/events/ShareCredentialOfferRequestItemProcessedByRecipientEvent.ts new file mode 100644 index 000000000..6296d65d0 --- /dev/null +++ b/packages/consumption/src/modules/requests/events/ShareCredentialOfferRequestItemProcessedByRecipientEvent.ts @@ -0,0 +1,16 @@ +import { CoreAddress } from "@nmshd/core-types"; +import { TransportDataEvent } from "@nmshd/transport"; + +export interface ShareCredentialOfferRequestItemProcessedByRecipientEventData { + credentialOfferUrl: string; + accepted: boolean; + peer: CoreAddress; +} + +export class ShareCredentialOfferRequestItemProcessedByRecipientEvent extends TransportDataEvent { + public static readonly namespace = "consumption.shareCredentialOfferRequestItemProcessedByRecipient"; + + public constructor(eventTargetAddress: string, data: ShareCredentialOfferRequestItemProcessedByRecipientEventData) { + super(ShareCredentialOfferRequestItemProcessedByRecipientEvent.namespace, eventTargetAddress, data); + } +} diff --git a/packages/consumption/src/modules/requests/events/index.ts b/packages/consumption/src/modules/requests/events/index.ts index 0e6febf86..36068ce3f 100644 --- a/packages/consumption/src/modules/requests/events/index.ts +++ b/packages/consumption/src/modules/requests/events/index.ts @@ -3,3 +3,4 @@ export * from "./IncomingRequestStatusChangedEvent"; export * from "./OutgoingRequestCreatedAndCompletedEvent"; export * from "./OutgoingRequestCreatedEvent"; export * from "./OutgoingRequestStatusChangedEvent"; +export * from "./ShareCredentialOfferRequestItemProcessedByRecipientEvent"; diff --git a/packages/consumption/src/modules/requests/index.ts b/packages/consumption/src/modules/requests/index.ts index 5918b2832..985d56e91 100644 --- a/packages/consumption/src/modules/requests/index.ts +++ b/packages/consumption/src/modules/requests/index.ts @@ -30,6 +30,7 @@ export * from "./itemProcessors/RequestItemConstructor"; export * from "./itemProcessors/RequestItemProcessorConstructor"; export * from "./itemProcessors/RequestItemProcessorRegistry"; export * from "./itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor"; +export * from "./itemProcessors/shareCredentialOffer/ShareCredentialOfferRequestItemProcessor"; export * from "./itemProcessors/transferFileOwnership/TransferFileOwnershipRequestItemProcessor"; export * from "./local/LocalRequest"; export * from "./local/LocalRequestStatus"; diff --git a/packages/consumption/src/modules/requests/itemProcessors/shareCredentialOffer/ShareCredentialOfferRequestItemProcessor.ts b/packages/consumption/src/modules/requests/itemProcessors/shareCredentialOffer/ShareCredentialOfferRequestItemProcessor.ts new file mode 100644 index 000000000..67c92845b --- /dev/null +++ b/packages/consumption/src/modules/requests/itemProcessors/shareCredentialOffer/ShareCredentialOfferRequestItemProcessor.ts @@ -0,0 +1,62 @@ +import { AcceptResponseItem, RejectResponseItem, Request, ResponseItemResult, ShareCredentialOfferRequestItem } from "@nmshd/content"; +import { CoreAddress } from "@nmshd/core-types"; +import { ConsumptionCoreErrors } from "../../../../consumption/ConsumptionCoreErrors"; +import { ValidationResult } from "../../../common/ValidationResult"; +import { ShareCredentialOfferRequestItemProcessedByRecipientEvent } from "../../events"; +import { AcceptRequestItemParametersJSON } from "../../incoming/decide/AcceptRequestItemParameters"; +import { GenericRequestItemProcessor } from "../GenericRequestItemProcessor"; +import { LocalRequestInfo } from "../IRequestItemProcessor"; + +export class ShareCredentialOfferRequestItemProcessor extends GenericRequestItemProcessor { + public override async canCreateOutgoingRequestItem(requestItem: ShareCredentialOfferRequestItem, _request: Request, _recipient?: CoreAddress): Promise { + const offer = await this.consumptionController.openId4Vc.resolveCredentialOffer(requestItem.credentialOfferUrl); + + const preAuthorizedCodeGrant = offer.credentialOfferPayload.grants?.["urn:ietf:params:oauth:grant-type:pre-authorized_code"]; + const isUnauthenticatedOffer = preAuthorizedCodeGrant && !preAuthorizedCodeGrant.tx_code; + if (!isUnauthenticatedOffer) { + return ValidationResult.error( + ConsumptionCoreErrors.requests.invalidRequestItem("Only unauthenticated credential offers (pre-authorized code grants without tx_code) are supported.") + ); + } + + return ValidationResult.success(); + } + + public override async canAccept( + requestItem: ShareCredentialOfferRequestItem, + _params: AcceptRequestItemParametersJSON, + _requestInfo: LocalRequestInfo + ): Promise { + try { + await this.consumptionController.openId4Vc.requestAllCredentialsFromCredentialOfferUrl(requestItem.credentialOfferUrl); + return ValidationResult.success(); + } catch (error) { + return ValidationResult.error( + ConsumptionCoreErrors.requests.invalidRequestItem(`The credential offer at URL '${requestItem.credentialOfferUrl}' could not be processed. Cause: ${error}`) + ); + } + } + + public override async accept( + requestItem: ShareCredentialOfferRequestItem, + _params: AcceptRequestItemParametersJSON, + _requestInfo: LocalRequestInfo + ): Promise { + const cachedCredentials = await this.consumptionController.openId4Vc.requestAllCredentialsFromCredentialOfferUrl(requestItem.credentialOfferUrl); + await this.consumptionController.openId4Vc.storeCredentials(cachedCredentials); + + return AcceptResponseItem.from({ result: ResponseItemResult.Accepted }); + } + + public override applyIncomingResponseItem( + responseItem: AcceptResponseItem | RejectResponseItem, + requestItem: ShareCredentialOfferRequestItem, + requestInfo: LocalRequestInfo + ): ShareCredentialOfferRequestItemProcessedByRecipientEvent { + return new ShareCredentialOfferRequestItemProcessedByRecipientEvent(this.currentIdentityAddress.toString(), { + credentialOfferUrl: requestItem.credentialOfferUrl, + accepted: responseItem.result === ResponseItemResult.Accepted, + peer: requestInfo.peer + }); + } +} diff --git a/packages/consumption/src/modules/requests/outgoing/OutgoingRequestsController.ts b/packages/consumption/src/modules/requests/outgoing/OutgoingRequestsController.ts index 40c958d83..068248b40 100644 --- a/packages/consumption/src/modules/requests/outgoing/OutgoingRequestsController.ts +++ b/packages/consumption/src/modules/requests/outgoing/OutgoingRequestsController.ts @@ -387,7 +387,8 @@ export class OutgoingRequestsController extends ConsumptionBaseController { private async applyItem(requestItem: RequestItem, responseItem: ResponseItem, request: LocalRequest) { const processor = this.processorRegistry.getProcessorForItem(requestItem); - await processor.applyIncomingResponseItem(responseItem, requestItem, request); + const event = await processor.applyIncomingResponseItem(responseItem, requestItem, request); + if (event) this.eventBus.publish(event); } public async getOutgoingRequests(query?: any): Promise { diff --git a/packages/content/src/attributes/types/VerifiableCredential.ts b/packages/content/src/attributes/types/VerifiableCredential.ts index 290d23908..20b87060f 100644 --- a/packages/content/src/attributes/types/VerifiableCredential.ts +++ b/packages/content/src/attributes/types/VerifiableCredential.ts @@ -8,14 +8,12 @@ export interface VerifiableCredentialJSON extends AbstractAttributeValueJSON { value: string | Record; type: string; displayInformation?: Record[]; - key?: string; } export interface IVerifiableCredential extends IAbstractAttributeValue { value: string | Record; type: string; displayInformation?: Record[]; - key?: string; } @type("VerifiableCredential") @@ -32,10 +30,6 @@ export class VerifiableCredential extends AbstractAttributeValue { @validate({ nullable: true, max: PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH }) public displayInformation?: Record[]; - @serialize() - @validate({ nullable: true, max: PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH }) - public key?: string; - public static get valueHints(): ValueHints { return ValueHints.from({}); } diff --git a/packages/content/src/requests/RequestItem.ts b/packages/content/src/requests/RequestItem.ts index ef2f425b9..27bb7fbab 100644 --- a/packages/content/src/requests/RequestItem.ts +++ b/packages/content/src/requests/RequestItem.ts @@ -19,6 +19,7 @@ import { IProposeAttributeRequestItem, IReadAttributeRequestItem, IShareAttributeRequestItem, + IShareCredentialOfferRequestItem, ITransferFileOwnershipRequestItem, ProposeAttributeRequestItem, ProposeAttributeRequestItemJSON, @@ -26,6 +27,8 @@ import { ReadAttributeRequestItemJSON, ShareAttributeRequestItem, ShareAttributeRequestItemJSON, + ShareCredentialOfferRequestItem, + ShareCredentialOfferRequestItemJSON, TransferFileOwnershipRequestItem, TransferFileOwnershipRequestItemJSON } from "./items"; @@ -61,7 +64,8 @@ export type RequestItemJSONDerivations = | ConsentRequestItemJSON | AuthenticationRequestItemJSON | FormFieldRequestItemJSON - | TransferFileOwnershipRequestItemJSON; + | TransferFileOwnershipRequestItemJSON + | ShareCredentialOfferRequestItemJSON; export interface IRequestItem extends ISerializable { /** @@ -94,7 +98,8 @@ export type IRequestItemDerivations = | IConsentRequestItem | IAuthenticationRequestItem | IFormFieldRequestItem - | ITransferFileOwnershipRequestItem; + | ITransferFileOwnershipRequestItem + | IShareCredentialOfferRequestItem; export abstract class RequestItem extends Serializable { @serialize() @@ -124,7 +129,8 @@ export type RequestItemDerivations = | ConsentRequestItem | AuthenticationRequestItem | FormFieldRequestItem - | TransferFileOwnershipRequestItem; + | TransferFileOwnershipRequestItem + | ShareCredentialOfferRequestItem; export function isRequestItemDerivation(input: any): input is RequestItemDerivations { return ( @@ -137,6 +143,7 @@ export function isRequestItemDerivation(input: any): input is RequestItemDerivat input["@type"] === "ConsentRequestItem" || input["@type"] === "AuthenticationRequestItem" || input["@type"] === "FormFieldRequestItem" || - input["@type"] === "TransferFileOwnershipRequestItem" + input["@type"] === "TransferFileOwnershipRequestItem" || + input["@type"] === "ShareCredentialOfferRequestItem" ); } diff --git a/packages/content/src/requests/items/index.ts b/packages/content/src/requests/items/index.ts index af2fd29ad..9428c0c81 100644 --- a/packages/content/src/requests/items/index.ts +++ b/packages/content/src/requests/items/index.ts @@ -14,5 +14,6 @@ export * from "./proposeAttribute/ProposeAttributeRequestItem"; export * from "./readAttribute/ReadAttributeAcceptResponseItem"; export * from "./readAttribute/ReadAttributeRequestItem"; export * from "./shareAttribute/ShareAttributeRequestItem"; +export * from "./shareCredentialOffer/ShareCredentialOfferRequestItem"; export * from "./transferFileOwnership/TransferFileOwnershipAcceptResponseItem"; export * from "./transferFileOwnership/TransferFileOwnershipRequestItem"; diff --git a/packages/content/src/requests/items/shareCredentialOffer/ShareCredentialOfferRequestItem.ts b/packages/content/src/requests/items/shareCredentialOffer/ShareCredentialOfferRequestItem.ts new file mode 100644 index 000000000..97fe3699c --- /dev/null +++ b/packages/content/src/requests/items/shareCredentialOffer/ShareCredentialOfferRequestItem.ts @@ -0,0 +1,29 @@ +import { serialize, type, validate } from "@js-soft/ts-serval"; +import { RequestItemJSON } from "../.."; +import { IRequestItem, RequestItem } from "../../RequestItem"; + +export interface ShareCredentialOfferRequestItemJSON extends RequestItemJSON { + "@type": "ShareCredentialOfferRequestItem"; + credentialOfferUrl: string; +} + +export interface IShareCredentialOfferRequestItem extends IRequestItem { + credentialOfferUrl: string; +} + +@type("ShareCredentialOfferRequestItem") +export class ShareCredentialOfferRequestItem extends RequestItem implements IShareCredentialOfferRequestItem { + @serialize() + @validate() + public credentialOfferUrl: string; + + public static from( + value: IShareCredentialOfferRequestItem | Omit | ShareCredentialOfferRequestItemJSON + ): ShareCredentialOfferRequestItem { + return this.fromAny(value); + } + + public override toJSON(verbose?: boolean | undefined, serializeAsString?: boolean | undefined): ShareCredentialOfferRequestItemJSON { + return super.toJSON(verbose, serializeAsString) as ShareCredentialOfferRequestItemJSON; + } +} diff --git a/packages/runtime/src/dataViews/DataViewExpander.ts b/packages/runtime/src/dataViews/DataViewExpander.ts index 6f1b879b7..0b6c9a671 100644 --- a/packages/runtime/src/dataViews/DataViewExpander.ts +++ b/packages/runtime/src/dataViews/DataViewExpander.ts @@ -49,6 +49,7 @@ import { ResponseJSON, SexJSON, ShareAttributeRequestItemJSON, + ShareCredentialOfferRequestItemJSON, SurnameJSON, ThirdPartyRelationshipAttributeQueryJSON, TransferFileOwnershipAcceptResponseItemJSON, @@ -132,6 +133,7 @@ import { ResponseItemDVO, ResponseItemGroupDVO, ShareAttributeRequestItemDVO, + ShareCredentialOfferRequestItemDVO, ThirdPartyRelationshipAttributeQueryDVO, TransferFileOwnershipAcceptResponseItemDVO, TransferFileOwnershipRequestItemDVO @@ -632,6 +634,27 @@ export class DataViewExpander { file } as TransferFileOwnershipRequestItemDVO; + case "ShareCredentialOfferRequestItem": + const shareCredentialOfferRequestItem = requestItem as ShareCredentialOfferRequestItemJSON; + + const credentialResponses = await (async () => { + try { + return await this.consumptionController.openId4Vc.requestAllCredentialsFromCredentialOfferUrl(shareCredentialOfferRequestItem.credentialOfferUrl); + } catch { + return; + } + })(); + + return { + ...shareCredentialOfferRequestItem, + type: "ShareCredentialOfferRequestItemDVO", + id: "", + name: this.generateRequestItemName(requestItem["@type"], isDecidable), + isDecidable: isDecidable && !!credentialResponses, + response: responseItemDVO, + credentialResponses + } as ShareCredentialOfferRequestItemDVO; + default: return { ...requestItem, diff --git a/packages/runtime/src/dataViews/content/RequestItemDVOs.ts b/packages/runtime/src/dataViews/content/RequestItemDVOs.ts index c3b4226bb..ff22c5901 100644 --- a/packages/runtime/src/dataViews/content/RequestItemDVOs.ts +++ b/packages/runtime/src/dataViews/content/RequestItemDVOs.ts @@ -1,3 +1,4 @@ +import { OpenId4VciCredentialResponseJSON } from "@nmshd/consumption"; import { FormFieldSettingsJSONDerivations } from "@nmshd/content"; import { LocalAttributeDVO } from "../consumption"; import { DataViewObject } from "../DataViewObject"; @@ -75,3 +76,9 @@ export interface TransferFileOwnershipRequestItemDVO extends RequestItemDVO { file: FileDVO; ownershipToken: string; } + +export interface ShareCredentialOfferRequestItemDVO extends RequestItemDVO { + type: "ShareCredentialOfferRequestItemDVO"; + credentialOfferUrl: string; + credentialResponses?: OpenId4VciCredentialResponseJSON[]; +} diff --git a/packages/runtime/src/events/EventProxy.ts b/packages/runtime/src/events/EventProxy.ts index ed9ecfc4b..3e07cedb9 100644 --- a/packages/runtime/src/events/EventProxy.ts +++ b/packages/runtime/src/events/EventProxy.ts @@ -16,7 +16,8 @@ import { OutgoingRequestFromRelationshipCreationCreatedAndCompletedEvent, OutgoingRequestStatusChangedEvent, OwnAttributeDeletedByOwnerEvent, - PeerRelationshipAttributeDeletedByPeerEvent + PeerRelationshipAttributeDeletedByPeerEvent, + ShareCredentialOfferRequestItemProcessedByRecipientEvent } from "./consumption"; import { DatawalletSynchronizedEvent, @@ -206,6 +207,16 @@ export class EventProxy { }) ); }); + + this.subscribeToSourceEvent(consumption.ShareCredentialOfferRequestItemProcessedByRecipientEvent, (event) => { + this.targetEventBus.publish( + new ShareCredentialOfferRequestItemProcessedByRecipientEvent(event.eventTargetAddress, { + credentialOfferUrl: event.data.credentialOfferUrl, + accepted: event.data.accepted, + peer: event.data.peer.toString() + }) + ); + }); } private subscribeToSourceEvent(subscriptionTarget: SubscriptionTarget, handler: EventHandler) { diff --git a/packages/runtime/src/events/consumption/ShareCredentialOfferRequestItemProcessedByRecipientEvent.ts b/packages/runtime/src/events/consumption/ShareCredentialOfferRequestItemProcessedByRecipientEvent.ts new file mode 100644 index 000000000..827a35267 --- /dev/null +++ b/packages/runtime/src/events/consumption/ShareCredentialOfferRequestItemProcessedByRecipientEvent.ts @@ -0,0 +1,15 @@ +import { DataEvent } from "../DataEvent"; + +export interface ShareCredentialOfferRequestItemProcessedByRecipientEventData { + credentialOfferUrl: string; + accepted: boolean; + peer: string; +} + +export class ShareCredentialOfferRequestItemProcessedByRecipientEvent extends DataEvent { + public static readonly namespace = "consumption.shareCredentialOfferRequestItemProcessedByRecipient"; + + public constructor(eventTargetAddress: string, data: ShareCredentialOfferRequestItemProcessedByRecipientEventData) { + super(ShareCredentialOfferRequestItemProcessedByRecipientEvent.namespace, eventTargetAddress, data); + } +} diff --git a/packages/runtime/src/events/consumption/index.ts b/packages/runtime/src/events/consumption/index.ts index 0adbf3cd9..02ea9ed25 100644 --- a/packages/runtime/src/events/consumption/index.ts +++ b/packages/runtime/src/events/consumption/index.ts @@ -16,3 +16,4 @@ export * from "./OwnAttributeDeletedByOwnerEvent"; export * from "./PeerRelationshipAttributeDeletedByPeerEvent"; export * from "./RelationshipEvent"; export * from "./RelationshipTemplateProcessedEvent"; +export * from "./ShareCredentialOfferRequestItemProcessedByRecipientEvent"; diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index 70abb6a4e..a00fdbe37 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -314,6 +314,9 @@ export const CanCreateOutgoingRequestRequest: any = { }, { "$ref": "#/definitions/TransferFileOwnershipRequestItemJSON" + }, + { + "$ref": "#/definitions/ShareCredentialOfferRequestItemJSON" } ] }, @@ -1860,9 +1863,6 @@ export const CanCreateOutgoingRequestRequest: any = { "items": { "type": "object" } - }, - "key": { - "type": "string" } }, "required": [ @@ -2721,6 +2721,42 @@ export const CanCreateOutgoingRequestRequest: any = { ], "additionalProperties": false }, + "ShareCredentialOfferRequestItemJSON": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "ShareCredentialOfferRequestItem" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "description": { + "type": "string", + "description": "The human-readable description of this item." + }, + "metadata": { + "type": "object", + "description": "This property can be used to add some arbitrary metadata to this item. The content of this property will be copied into the response on the side of the recipient, so the sender can use it to identify the item as they receive the response." + }, + "mustBeAccepted": { + "type": "boolean", + "description": "If set to `true`, the recipient has to accept this item if they want to accept the Request. If set to `false`, the recipient can decide whether they want to accept it or not." + }, + "credentialOfferUrl": { + "type": "string" + } + }, + "required": [ + "@type", + "credentialOfferUrl", + "mustBeAccepted" + ], + "additionalProperties": false + }, "AddressString": { "type": "string", "pattern": "did:e:((([A-Za-z0-9]+(-[A-Za-z0-9]+)*)\\.)+[a-z]{2,}|localhost):dids:[0-9a-f]{22}" @@ -3919,9 +3955,6 @@ export const CompleteOutgoingRequestRequest: any = { "items": { "type": "object" } - }, - "key": { - "type": "string" } }, "required": [ @@ -5964,9 +5997,6 @@ export const CreateAndCompleteOutgoingRequestFromRelationshipTemplateResponseReq "items": { "type": "object" } - }, - "key": { - "type": "string" } }, "required": [ @@ -7080,6 +7110,9 @@ export const CreateOutgoingRequestRequest: any = { }, { "$ref": "#/definitions/TransferFileOwnershipRequestItemJSON" + }, + { + "$ref": "#/definitions/ShareCredentialOfferRequestItemJSON" } ] }, @@ -8626,9 +8659,6 @@ export const CreateOutgoingRequestRequest: any = { "items": { "type": "object" } - }, - "key": { - "type": "string" } }, "required": [ @@ -9487,6 +9517,42 @@ export const CreateOutgoingRequestRequest: any = { ], "additionalProperties": false }, + "ShareCredentialOfferRequestItemJSON": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "ShareCredentialOfferRequestItem" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "description": { + "type": "string", + "description": "The human-readable description of this item." + }, + "metadata": { + "type": "object", + "description": "This property can be used to add some arbitrary metadata to this item. The content of this property will be copied into the response on the side of the recipient, so the sender can use it to identify the item as they receive the response." + }, + "mustBeAccepted": { + "type": "boolean", + "description": "If set to `true`, the recipient has to accept this item if they want to accept the Request. If set to `false`, the recipient can decide whether they want to accept it or not." + }, + "credentialOfferUrl": { + "type": "string" + } + }, + "required": [ + "@type", + "credentialOfferUrl", + "mustBeAccepted" + ], + "additionalProperties": false + }, "AddressString": { "type": "string", "pattern": "did:e:((([A-Za-z0-9]+(-[A-Za-z0-9]+)*)\\.)+[a-z]{2,}|localhost):dids:[0-9a-f]{22}" @@ -10145,6 +10211,9 @@ export const ReceivedIncomingRequestRequest: any = { }, { "$ref": "#/definitions/TransferFileOwnershipRequestItemJSON" + }, + { + "$ref": "#/definitions/ShareCredentialOfferRequestItemJSON" } ] }, @@ -11691,9 +11760,6 @@ export const ReceivedIncomingRequestRequest: any = { "items": { "type": "object" } - }, - "key": { - "type": "string" } }, "required": [ @@ -12552,6 +12618,42 @@ export const ReceivedIncomingRequestRequest: any = { ], "additionalProperties": false }, + "ShareCredentialOfferRequestItemJSON": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "const": "ShareCredentialOfferRequestItem" + }, + "@context": { + "type": "string" + }, + "@version": { + "type": "string" + }, + "description": { + "type": "string", + "description": "The human-readable description of this item." + }, + "metadata": { + "type": "object", + "description": "This property can be used to add some arbitrary metadata to this item. The content of this property will be copied into the response on the side of the recipient, so the sender can use it to identify the item as they receive the response." + }, + "mustBeAccepted": { + "type": "boolean", + "description": "If set to `true`, the recipient has to accept this item if they want to accept the Request. If set to `false`, the recipient can decide whether they want to accept it or not." + }, + "credentialOfferUrl": { + "type": "string" + } + }, + "required": [ + "@type", + "credentialOfferUrl", + "mustBeAccepted" + ], + "additionalProperties": false + }, "MessageIdString": { "type": "string", "pattern": "MSG[A-Za-z0-9]{17}" @@ -15751,9 +15853,6 @@ export const SucceedOwnIdentityAttributeRequest: any = { "items": { "type": "object" } - }, - "key": { - "type": "string" } }, "required": [ @@ -21166,9 +21265,6 @@ export const VerifiableCredential: any = { "items": { "type": "object" } - }, - "key": { - "type": "string" } }, "required": [ diff --git a/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts b/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts index 438f2a56b..b38cc2d48 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts @@ -1,7 +1,6 @@ -import { ClaimFormat, W3cJsonCredential } from "@credo-ts/core"; -import { OpenId4VciCredentialResponse, OpenId4VciResolvedCredentialOffer } from "@credo-ts/openid4vc"; +import { OpenId4VciResolvedCredentialOffer } from "@credo-ts/openid4vc"; import { Result } from "@js-soft/ts-utils"; -import { OpenId4VcController } from "@nmshd/consumption"; +import { OpenId4VcController, OpenId4VciCredentialResponseJSON } from "@nmshd/consumption"; import { Inject } from "@nmshd/typescript-ioc"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; @@ -12,7 +11,7 @@ export interface AbstractRequestCredentialsRequest { } export interface RequestCredentialsResponse { - credentialResponses: (Omit & { record: { claimFormat: ClaimFormat; encoded: string | W3cJsonCredential } })[]; + credentialResponses: OpenId4VciCredentialResponseJSON[]; } export interface RequestCredentialsRequest extends AbstractRequestCredentialsRequest {} @@ -35,15 +34,6 @@ export class RequestCredentialsUseCase extends UseCase> { const credentialResponses = await this.openId4VcController.requestCredentials(request.credentialOffer, request.credentialConfigurationIds, request.pinCode); - return Result.ok({ - credentialResponses: credentialResponses.map((response) => ({ - ...response, - record: { - // TODO: batch issuance not yet supported - claimFormat: response.record.firstCredential.claimFormat, - encoded: response.record.firstCredential.encoded - } - })) - }); + return Result.ok({ credentialResponses: credentialResponses }); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/StoreCredentials.ts b/packages/runtime/src/useCases/consumption/openid4vc/StoreCredentials.ts index ef4769af9..44d724fe1 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/StoreCredentials.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/StoreCredentials.ts @@ -1,7 +1,5 @@ -import { ClaimFormat, W3cJsonCredential } from "@credo-ts/core"; -import { OpenId4VciCredentialResponse } from "@credo-ts/openid4vc"; import { Result } from "@js-soft/ts-utils"; -import { OpenId4VcController } from "@nmshd/consumption"; +import { OpenId4VcController, OpenId4VciCredentialResponseJSON } from "@nmshd/consumption"; import { LocalAttributeDTO } from "@nmshd/runtime-types"; import { Inject } from "@nmshd/typescript-ioc"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; @@ -11,9 +9,7 @@ export interface AbstractStoreCredentialsRequest { credentialResponses: T; } -export interface StoreCredentialsRequest extends AbstractStoreCredentialsRequest< - (Omit & { record: { claimFormat: ClaimFormat; encoded: string | W3cJsonCredential } })[] -> {} +export interface StoreCredentialsRequest extends AbstractStoreCredentialsRequest {} export interface SchemaValidatableStoreCredentialsRequest extends AbstractStoreCredentialsRequest[]> {} diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 068147004..b0f509a61 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -3,25 +3,35 @@ import axios, { AxiosInstance } from "axios"; import path from "path"; import { DockerComposeEnvironment, GenericContainer, StartedDockerComposeEnvironment, StartedTestContainer, Wait } from "testcontainers"; import { Agent as UndiciAgent, fetch as undiciFetch } from "undici"; -import { ConsumptionServices } from "../../src"; -import { RuntimeServiceProvider } from "../lib"; +import { ShareCredentialOfferRequestItemProcessedByRecipientEvent } from "../../src"; +import { ensureActiveRelationship, exchangeAndAcceptRequestByMessage, RuntimeServiceProvider, TestRuntimeServices } from "../lib"; const fetchInstance: typeof fetch = (async (input: any, init: any) => { const response = await undiciFetch(input, { ...init, dispatcher: new UndiciAgent({}) }); return response; }) as unknown as typeof fetch; -describe("custom openid4vc service", () => { - const runtimeServiceProvider = new RuntimeServiceProvider(fetchInstance); - let consumptionServices: ConsumptionServices; +const runtimeServiceProvider = new RuntimeServiceProvider(fetchInstance); +let runtimeServices1: TestRuntimeServices; +let runtimeServices2: TestRuntimeServices; + +beforeAll(async () => { + const runtimeServices = await runtimeServiceProvider.launch(2, { enableDeciderModule: true, enableRequestModule: true }); + runtimeServices1 = runtimeServices[0]; + runtimeServices2 = runtimeServices[1]; + + await ensureActiveRelationship(runtimeServices1.transport, runtimeServices2.transport); +}, 120000); + +afterAll(async () => { + await runtimeServiceProvider.stop(); +}); +describe("custom openid4vc service", () => { let axiosInstance: AxiosInstance; let dockerComposeStack: StartedDockerComposeEnvironment | undefined; beforeAll(async () => { - const runtimeServices = await runtimeServiceProvider.launch(1); - consumptionServices = runtimeServices[0].consumption; - let oid4vcServiceBaseUrl = process.env.OPENID4VC_SERVICE_BASEURL!; if (!oid4vcServiceBaseUrl) { dockerComposeStack = await startOid4VcComposeStack(); @@ -39,7 +49,6 @@ describe("custom openid4vc service", () => { }, 120000); afterAll(async () => { - await runtimeServiceProvider.stop(); if (dockerComposeStack) await dockerComposeStack.down(); }); @@ -55,7 +64,7 @@ describe("custom openid4vc service", () => { credentialOfferUrl = responseData.result.credentialOffer; - const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ + const result = await runtimeServices1.consumption.openId4Vc.resolveCredentialOffer({ credentialOfferUrl }); @@ -67,11 +76,11 @@ describe("custom openid4vc service", () => { // determine which credentials to pick from the offer for all supported types of offers const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; - const credentialResponseResult = await consumptionServices.openId4Vc.requestCredentials({ + const credentialResponseResult = await runtimeServices1.consumption.openId4Vc.requestCredentials({ credentialOffer, credentialConfigurationIds: requestedCredentials }); - const storeResult = await consumptionServices.openId4Vc.storeCredentials({ credentialResponses: credentialResponseResult.value.credentialResponses }); + const storeResult = await runtimeServices1.consumption.openId4Vc.storeCredentials({ credentialResponses: credentialResponseResult.value.credentialResponses }); expect(storeResult).toBeSuccessful(); expect(typeof storeResult.value.id).toBe("string"); @@ -134,13 +143,13 @@ describe("custom openid4vc service", () => { expect(response.status).toBe(200); const responseData = await response.data; - const result = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); + const result = await runtimeServices1.consumption.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); expect(result.value.matchingCredentials).toHaveLength(1); const request = result.value.authorizationRequest; expect(request.presentationExchange!.credentialsForRequest.areRequirementsSatisfied).toBe(true); - const presentationResult = await consumptionServices.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); + const presentationResult = await runtimeServices1.consumption.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); expect(presentationResult).toBeSuccessful(); expect(presentationResult.value.status).toBe(200); }); @@ -149,7 +158,7 @@ describe("custom openid4vc service", () => { // Ensure the first test has completed expect(credentialOfferUrl).toBeDefined(); - const acceptanceResult = await consumptionServices.attributes.getOwnIdentityAttributes({ + const acceptanceResult = await runtimeServices1.consumption.attributes.getOwnIdentityAttributes({ query: { "content.value.@type": "VerifiableCredential" } @@ -170,7 +179,7 @@ describe("custom openid4vc service", () => { credentialOfferUrl = responseData.result.credentialOffer; - const result = await consumptionServices.openId4Vc.resolveCredentialOffer({ + const result = await runtimeServices1.consumption.openId4Vc.resolveCredentialOffer({ credentialOfferUrl }); @@ -182,11 +191,11 @@ describe("custom openid4vc service", () => { // determine which credentials to pick from the offer for all supported types of offers const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; - const credentialResponseResult = await consumptionServices.openId4Vc.requestCredentials({ + const credentialResponseResult = await runtimeServices1.consumption.openId4Vc.requestCredentials({ credentialOffer, credentialConfigurationIds: requestedCredentials }); - const storeResult = await consumptionServices.openId4Vc.storeCredentials({ credentialResponses: credentialResponseResult.value.credentialResponses }); + const storeResult = await runtimeServices1.consumption.openId4Vc.storeCredentials({ credentialResponses: credentialResponseResult.value.credentialResponses }); expect(storeResult).toBeSuccessful(); expect(typeof storeResult.value.id).toBe("string"); @@ -234,18 +243,99 @@ describe("custom openid4vc service", () => { expect(response.status).toBe(200); const responseData = await response.data; - const result = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); + const result = await runtimeServices1.consumption.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); expect(result.value.matchingCredentials).toHaveLength(1); const request = result.value.authorizationRequest; expect(request.presentationExchange!.credentialsForRequest.areRequirementsSatisfied).toBe(true); - const presentationResult = await consumptionServices.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); + const presentationResult = await runtimeServices1.consumption.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); expect(presentationResult).toBeSuccessful(); expect(presentationResult.value.status).toBe(200); }); }); + test("transfer offer using requests", async () => { + const response = await axiosInstance.post("/issuance/credentialOffers", { + credentialConfigurationIds: ["EmployeeIdCard-sdjwt"] + }); + expect(response.status).toBe(200); + const responseData = await response.data; + + credentialOfferUrl = responseData.result.credentialOffer; + + await exchangeAndAcceptRequestByMessage( + runtimeServices1, + runtimeServices2, + { + content: { items: [{ "@type": "ShareCredentialOfferRequestItem", credentialOfferUrl, mustBeAccepted: true }] }, + peer: (await runtimeServices2.transport.account.getIdentityInfo()).value.address + }, + [{ accept: true }] + ); + + await expect(runtimeServices1.eventBus).toHavePublished( + ShareCredentialOfferRequestItemProcessedByRecipientEvent, + (m) => m.data.accepted && m.data.credentialOfferUrl === credentialOfferUrl + ); + + const attributes = await runtimeServices2.consumption.attributes.getOwnIdentityAttributes({ + query: { + "content.value.@type": "VerifiableCredential" + } + }); + + expect(attributes).toBeSuccessful(); + expect(attributes.value.length).toBeGreaterThan(0); + + const createPresentationResponse = await axiosInstance.post("/presentation/presentationRequests", { + pex: { + id: "anId", + purpose: "To prove you work here", + + // eslint-disable-next-line @typescript-eslint/naming-convention + input_descriptors: [ + { + id: "EmployeeIdCard", + format: { + // eslint-disable-next-line @typescript-eslint/naming-convention + "vc+sd-jwt": { + // eslint-disable-next-line @typescript-eslint/naming-convention + "sd-jwt_alg_values": ["RS256", "PS256", "HS256", "ES256", "ES256K", "RS384", "PS384", "HS384", "ES384", "RS512", "PS512", "HS512", "ES512", "EdDSA"] + } + }, + constraints: { + fields: [ + { + path: ["$.vct"], + filter: { + type: "string", + pattern: "EmployeeIdCard" + } + } + ] + } + } + ] + }, + version: "v1.draft21" + }); + expect(createPresentationResponse.status).toBe(200); + const createPresentationResponseData = await createPresentationResponse.data; + + const result = await runtimeServices2.consumption.openId4Vc.resolveAuthorizationRequest({ + authorizationRequestUrl: createPresentationResponseData.result.presentationRequest + }); + expect(result.value.matchingCredentials).toHaveLength(1); + + const request = result.value.authorizationRequest; + expect(request.presentationExchange!.credentialsForRequest.areRequirementsSatisfied).toBe(true); + + const presentationResult = await runtimeServices2.consumption.openId4Vc.acceptAuthorizationRequest({ authorizationRequest: result.value.authorizationRequest }); + expect(presentationResult).toBeSuccessful(); + expect(presentationResult.value.status).toBe(200); + }); + async function startOid4VcComposeStack() { let baseUrl = process.env.NMSHD_TEST_BASEURL!; let addressGenerationHostnameOverride: string | undefined; @@ -281,9 +371,6 @@ describe("EUDIPLO", () => { const eudiploCredentialIdInConfiguration = "EmployeeIdCard"; const eudiploPort = 3000; // CAUTION: don't change this. The DCQL query has this port hardcoded in its configuration. The presentation test will fail if we change this. - const runtimeServiceProvider = new RuntimeServiceProvider(fetchInstance); - let consumptionServices: ConsumptionServices; - let eudiploContainer: StartedTestContainer | undefined; let axiosInstance: AxiosInstance; @@ -317,15 +404,10 @@ describe("EUDIPLO", () => { Authorization: `Bearer ${accessToken}` // eslint-disable-line @typescript-eslint/naming-convention } }); - - const runtimeServices = await runtimeServiceProvider.launch(1); - consumptionServices = runtimeServices[0].consumption; }); afterAll(async () => { await eudiploContainer?.stop(); - - await runtimeServiceProvider.stop(); }); test("issuance", async () => { @@ -336,14 +418,16 @@ describe("EUDIPLO", () => { }) ).data.uri; - const resolveCredentialOfferResult = await consumptionServices.openId4Vc.resolveCredentialOffer({ credentialOfferUrl }); + const resolveCredentialOfferResult = await runtimeServices1.consumption.openId4Vc.resolveCredentialOffer({ credentialOfferUrl }); expect(resolveCredentialOfferResult).toBeSuccessful(); - const credentialResponsesResult = await consumptionServices.openId4Vc.requestCredentials({ + const credentialResponsesResult = await runtimeServices1.consumption.openId4Vc.requestCredentials({ credentialOffer: resolveCredentialOfferResult.value.credentialOffer, credentialConfigurationIds: [eudiploCredentialIdInConfiguration] }); - const storeCredentialsResponse = await consumptionServices.openId4Vc.storeCredentials({ credentialResponses: credentialResponsesResult.value.credentialResponses }); + const storeCredentialsResponse = await runtimeServices1.consumption.openId4Vc.storeCredentials({ + credentialResponses: credentialResponsesResult.value.credentialResponses + }); expect(storeCredentialsResponse).toBeSuccessful(); expect((storeCredentialsResponse.value.content.value as unknown as VerifiableCredential).displayInformation?.[0].name).toBe("Employee ID Card"); @@ -357,7 +441,7 @@ describe("EUDIPLO", () => { }) ).data.uri; - const loadResult = await consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl }); + const loadResult = await runtimeServices1.consumption.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl }); expect(loadResult).toBeSuccessful(); const queryResult = loadResult.value.authorizationRequest.dcql!.queryResult; From f8ce1861b2fd520f29aa60fe03298dadee14d908 Mon Sep 17 00:00:00 2001 From: Magnus Kuhn <127854942+Magnus-Kuhn@users.noreply.github.com> Date: Mon, 8 Dec 2025 17:06:18 +0100 Subject: [PATCH 70/75] Bump credo to 0.6.0 (#888) * chore: bump credo * ci: bump oid4vc service image --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .dev/compose.openid4vc.yml | 2 +- package-lock.json | 55 +++++++++++-------------------- packages/consumption/package.json | 4 +-- 3 files changed, 22 insertions(+), 39 deletions(-) diff --git a/.dev/compose.openid4vc.yml b/.dev/compose.openid4vc.yml index d9b1a5c7f..790065d90 100644 --- a/.dev/compose.openid4vc.yml +++ b/.dev/compose.openid4vc.yml @@ -2,7 +2,7 @@ name: runtime-oid4vc-tests services: oid4vc-service: - image: ghcr.io/js-soft/openid4vc-service:1.2.0-alpha.12@sha256:57064c1deee358b44a107de9633fc98c3f9511f96eac9d9bbd22cb53f3fb529c + image: ghcr.io/js-soft/openid4vc-service:1.2.0@sha256:653358212651a992d211a187a0d405f56ae50b05d6c95bbdc37e1647fd8e6c33 ports: - "9000:9000" platform: linux/amd64 diff --git a/package-lock.json b/package-lock.json index 2db6d26de..b7c9c0148 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1959,9 +1959,9 @@ "license": "MIT" }, "node_modules/@credo-ts/core": { - "version": "0.6.0-alpha-20251127101655", - "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0-alpha-20251127101655.tgz", - "integrity": "sha512-LBO5X45kqHTi+sny7Sy/qXSTU0OBhJtSLjZNgFVg5KRTdhBqUL3io5AsV8hlBgNX4aJHU/qwTNpNBOavP0D6Ow==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@credo-ts/core/-/core-0.6.0.tgz", + "integrity": "sha512-gZQgaZzj27Mzm0Ei2Axw+qNDBRsqsHVeEv/Rkqu4yzd0v1QIl/XQV+fUF44krvanzf0mlVBA0JXD0ZNESharCQ==", "license": "Apache-2.0", "dependencies": { "@animo-id/mdoc": "^0.5.2", @@ -1991,7 +1991,7 @@ "@types/ws": "^8.18.1", "buffer": "^6.0.3", "class-transformer": "0.5.1", - "class-validator": "0.14.1", + "class-validator": "^0.14.1", "dcql": "^3.0.0", "did-resolver": "^4.1.0", "ec-compression": "0.0.1-alpha.12", @@ -2046,19 +2046,19 @@ } }, "node_modules/@credo-ts/openid4vc": { - "version": "0.6.0-alpha-20251127101655", - "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0-alpha-20251127101655.tgz", - "integrity": "sha512-pzS/Hv0iVwPWoiYUyxF09XTeo9l/sv+M+OyFsC1AQSmUtNpxMrB5gPNCLZhd8G08QqJcCPsnCd7WogAmk0O6fQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@credo-ts/openid4vc/-/openid4vc-0.6.0.tgz", + "integrity": "sha512-p2+4eMFuNB6vaZn4IM9EkXZE4eqoswjI8YzD4zcOHIGO02XgbW6X0Ftj5TSO2Djc5pmYDqEp/+G/ESWsinUAXw==", "license": "Apache-2.0", "dependencies": { - "@credo-ts/core": "0.6.0-alpha-20251127101655", + "@credo-ts/core": "0.6.0", "@openid4vc/oauth2": "^0.4.0", "@openid4vc/openid4vci": "^0.4.0", "@openid4vc/openid4vp": "^0.4.0", "@openid4vc/utils": "^0.4.0", - "@types/express": "^5.0.5", + "@types/express": "^5.0.6", "class-transformer": "0.5.1", - "express": "^5.1.0", + "express": "^5.2.0", "rxjs": "^7.8.2", "zod": "^4.1.12" } @@ -4862,14 +4862,14 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.5.tgz", - "integrity": "sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^1" + "@types/serve-static": "^2" } }, "node_modules/@types/express-serve-static-core": { @@ -4962,12 +4962,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, "node_modules/@types/node": { "version": "24.10.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", @@ -5000,23 +4994,12 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", - "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "license": "MIT", "dependencies": { "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" - } - }, - "node_modules/@types/serve-static/node_modules/@types/send": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", - "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -16054,8 +16037,8 @@ "name": "@nmshd/consumption", "license": "AGPL-3.0-or-later", "dependencies": { - "@credo-ts/core": "v0.6.0-alpha-20251127101655", - "@credo-ts/openid4vc": "v0.6.0-alpha-20251127101655", + "@credo-ts/core": "^0.6.0", + "@credo-ts/openid4vc": "^0.6.0", "@js-soft/docdb-querytranslator": "^1.1.6", "@js-soft/ts-serval": "2.0.14", "@js-soft/ts-utils": "2.3.5", diff --git a/packages/consumption/package.json b/packages/consumption/package.json index f73e02db6..543625fc8 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -75,8 +75,8 @@ ] }, "dependencies": { - "@credo-ts/core": "v0.6.0-alpha-20251127101655", - "@credo-ts/openid4vc": "v0.6.0-alpha-20251127101655", + "@credo-ts/core": "^0.6.0", + "@credo-ts/openid4vc": "^0.6.0", "@js-soft/docdb-querytranslator": "^1.1.6", "@js-soft/ts-serval": "2.0.14", "@js-soft/ts-utils": "2.3.5", From dfa7fb1b7c2efb766fe3c42a2cef5500509d394d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Tue, 9 Dec 2025 10:30:28 +0100 Subject: [PATCH 71/75] Remove old display fetching workaround (#889) * chore: remove hacky display fetching method * chore: formatting --- packages/runtime/test/consumption/openid4vc.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index b0f509a61..640fdaad2 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -1,4 +1,4 @@ -import { VerifiableCredential } from "@nmshd/content"; +import { VerifiableCredentialJSON } from "@nmshd/content"; import axios, { AxiosInstance } from "axios"; import path from "path"; import { DockerComposeEnvironment, GenericContainer, StartedDockerComposeEnvironment, StartedTestContainer, Wait } from "testcontainers"; @@ -84,7 +84,7 @@ describe("custom openid4vc service", () => { expect(storeResult).toBeSuccessful(); expect(typeof storeResult.value.id).toBe("string"); - const credential = storeResult.value.content.value as unknown as VerifiableCredential; + const credential = storeResult.value.content.value as VerifiableCredentialJSON; expect(credential.displayInformation?.[0].logo).toBeDefined(); expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); }); @@ -199,7 +199,7 @@ describe("custom openid4vc service", () => { expect(storeResult).toBeSuccessful(); expect(typeof storeResult.value.id).toBe("string"); - const credential = storeResult.value.content.value as unknown as VerifiableCredential; + const credential = storeResult.value.content.value as VerifiableCredentialJSON; expect(credential.displayInformation?.[0].logo).toBeDefined(); expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); }); @@ -430,7 +430,7 @@ describe("EUDIPLO", () => { }); expect(storeCredentialsResponse).toBeSuccessful(); - expect((storeCredentialsResponse.value.content.value as unknown as VerifiableCredential).displayInformation?.[0].name).toBe("Employee ID Card"); + expect((storeCredentialsResponse.value.content.value as VerifiableCredentialJSON).displayInformation?.[0].name).toBe("Employee ID Card"); }); test("presentation", async () => { From d4b55e52565de8d235b88fa9db408e557d589aba Mon Sep 17 00:00:00 2001 From: Timo Notheisen <65653426+tnotheis@users.noreply.github.com> Date: Wed, 10 Dec 2025 07:27:43 +0100 Subject: [PATCH 72/75] Error when synchronizing the datawallet modification for a RequestedCredentialCacheEntry (#893) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .../src/consumption/ConsumptionIds.ts | 1 + .../local/RequestedCredentialCache.ts | 23 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/consumption/src/consumption/ConsumptionIds.ts b/packages/consumption/src/consumption/ConsumptionIds.ts index 1c1b9b75f..0a9c5890c 100644 --- a/packages/consumption/src/consumption/ConsumptionIds.ts +++ b/packages/consumption/src/consumption/ConsumptionIds.ts @@ -3,6 +3,7 @@ import { CoreIdHelper } from "@nmshd/core-types"; export class ConsumptionIds { public static readonly draft = new CoreIdHelper("LCLDRF"); public static readonly setting = new CoreIdHelper("LCLSET"); + public static readonly requestedCredentialCacheEntry = new CoreIdHelper("LCLRCC"); public static readonly attribute = new CoreIdHelper("ATT"); public static readonly attributeForwardingDetails = new CoreIdHelper("ATTFD"); diff --git a/packages/consumption/src/modules/openid4vc/local/RequestedCredentialCache.ts b/packages/consumption/src/modules/openid4vc/local/RequestedCredentialCache.ts index 82c6a8321..dfcfa5e99 100644 --- a/packages/consumption/src/modules/openid4vc/local/RequestedCredentialCache.ts +++ b/packages/consumption/src/modules/openid4vc/local/RequestedCredentialCache.ts @@ -2,17 +2,29 @@ import { serialize, validate } from "@js-soft/ts-serval"; import { CoreId } from "@nmshd/core-types"; import { CoreSynchronizable, SynchronizedCollection } from "@nmshd/transport"; import { nameof } from "ts-simple-nameof"; +import { ConsumptionIds } from "../../../consumption/ConsumptionIds"; import { OpenId4VciCredentialResponseJSON } from "./OpenId4VciCredentialResponseJSON"; class RequestedCredentialCacheEntry extends CoreSynchronizable { - public override technicalProperties: string[] = [nameof((r) => r.credentialResponses)]; + public override technicalProperties: string[] = [ + nameof((r) => r.credentialOfferUrl), + nameof((r) => r.credentialResponses) + ]; + + @serialize() + @validate() + public credentialOfferUrl: string; @serialize({ any: true }) @validate() public credentialResponses: OpenId4VciCredentialResponseJSON[]; - public static create(credentialOfferUrl: string, credentialResponses: OpenId4VciCredentialResponseJSON[]): RequestedCredentialCacheEntry { - return this.fromAny({ id: CoreId.from(credentialOfferUrl), credentialResponses }); + public static create(id: CoreId, credentialOfferUrl: string, credentialResponses: OpenId4VciCredentialResponseJSON[]): RequestedCredentialCacheEntry { + return this.fromAny({ + id: id, + credentialOfferUrl: credentialOfferUrl, + credentialResponses + }); } } @@ -20,11 +32,12 @@ export class RequestedCredentialCache { public constructor(private readonly collection: SynchronizedCollection) {} public async get(credentialOfferUrl: string): Promise { - const doc = await this.collection.read(credentialOfferUrl); + const doc = await this.collection.findOne({ credentialOfferUrl: credentialOfferUrl }); return doc ? RequestedCredentialCacheEntry.fromAny(doc).credentialResponses : undefined; } public async set(credentialOfferUrl: string, credentialResponses: OpenId4VciCredentialResponseJSON[]): Promise { - await this.collection.create(RequestedCredentialCacheEntry.create(credentialOfferUrl, credentialResponses)); + const id = await ConsumptionIds.requestedCredentialCacheEntry.generate(); + await this.collection.create(RequestedCredentialCacheEntry.create(id, credentialOfferUrl, credentialResponses)); } } From cada1507a6b83de5e9e25a45650db59798217e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Sat, 13 Dec 2025 21:13:30 +0100 Subject: [PATCH 73/75] Process openid urls over the string processor (#902) * chore: WIP * feat: add retry * chore: add log * feat: implement processOpenID4VPURL * fix: renamings * fix: remove duplicated code * chore: add another error code * fix: update fake ui bridge * chore: implement MockUIBridge * fix: proper error * chore: timos hidden PR comments * Update packages/app-runtime/test/lib/MockUIBridge.matchers.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update packages/app-runtime/test/lib/MockUIBridge.matchers.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: remove test * refactor: move error --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- packages/app-runtime/src/AppRuntimeErrors.ts | 7 + .../app-runtime/src/AppStringProcessor.ts | 138 +++++++++++++++++- .../src/extensibility/ui/IUIBridge.ts | 17 ++- packages/app-runtime/test/lib/FakeUIBridge.ts | 8 + .../test/lib/MockUIBridge.matchers.ts | 52 +++++++ packages/app-runtime/test/lib/MockUIBridge.ts | 17 ++- .../runtime/src/useCases/common/UseCase.ts | 5 + 7 files changed, 237 insertions(+), 7 deletions(-) diff --git a/packages/app-runtime/src/AppRuntimeErrors.ts b/packages/app-runtime/src/AppRuntimeErrors.ts index 7650c8c3b..41476ec10 100644 --- a/packages/app-runtime/src/AppRuntimeErrors.ts +++ b/packages/app-runtime/src/AppRuntimeErrors.ts @@ -38,6 +38,13 @@ class AppStringProcessor { "The scanned code does not contain a device onboarding info, but this scanner is only able to process device onboarding codes." ); } + + public unsupportedOid4vcCredentialOfferGrantFound(): ApplicationError { + return new ApplicationError( + "error.appruntime.appStringProcessor.unsupportedOid4vcCredentialOfferGrantFound", + "The OpenID4VC Credential Offer contain an unsupported grant type." + ); + } } class General { diff --git a/packages/app-runtime/src/AppStringProcessor.ts b/packages/app-runtime/src/AppStringProcessor.ts index 816f955aa..c87799699 100644 --- a/packages/app-runtime/src/AppStringProcessor.ts +++ b/packages/app-runtime/src/AppStringProcessor.ts @@ -1,7 +1,8 @@ +import { OpenId4VciResolvedCredentialOffer } from "@credo-ts/openid4vc"; import { ILogger, ILoggerFactory } from "@js-soft/logging-abstractions"; import { Serializable } from "@js-soft/ts-serval"; -import { EventBus, Result } from "@js-soft/ts-utils"; -import { ICoreAddress, Reference, SharedPasswordProtection } from "@nmshd/core-types"; +import { ApplicationError, EventBus, Result } from "@js-soft/ts-utils"; +import { ICoreAddress, Reference } from "@nmshd/core-types"; import { AnonymousServices, DeviceMapper, RuntimeServices } from "@nmshd/runtime"; import { BackboneIds, TokenContentDeviceSharedSecret } from "@nmshd/transport"; import { AppRuntimeErrors } from "./AppRuntimeErrors"; @@ -29,9 +30,13 @@ export class AppStringProcessor { url = url.trim(); const parsed = new URL(url); - const allowedProtocols = ["http:", "https:"]; + + const allowedProtocols = ["http:", "https:", "openid4vp:", "openid-credential-offer:"]; if (!allowedProtocols.includes(parsed.protocol)) return Result.fail(AppRuntimeErrors.appStringProcessor.wrongURL()); + if (parsed.protocol === "openid-credential-offer:") return await this.processOpenIDCredentialOfferURL(url, account); + if (parsed.protocol === "openid4vp:") return await this.processOpenID4VPURL(url, account); + return await this.processReference(url, account); } @@ -44,6 +49,125 @@ export class AppStringProcessor { } } + private async processOpenIDCredentialOfferURL(url: string, account?: LocalAccountDTO): Promise> { + if (!account) { + const result = await this.selectAccount(); + if (result.isError) { + this.logger.info("Could not query account", result.error); + return Result.fail(result.error); + } + + if (!result.value) { + this.logger.info("User cancelled account selection"); + return Result.ok(undefined); + } + + account = result.value; + } + + const services = await this.runtime.getServices(account.id); + const resolveCredentialOfferResult = await services.consumptionServices.openId4Vc.resolveCredentialOffer({ credentialOfferUrl: url }); + + const uiBridge = await this.runtime.uiBridge(); + + if (resolveCredentialOfferResult.isError) { + this.logger.error("Could not resolve credential offer", resolveCredentialOfferResult.error); + + await uiBridge.showError(resolveCredentialOfferResult.error); + + return Result.ok(undefined); + } + + const credentialOffer = resolveCredentialOfferResult.value.credentialOffer; + const grants = credentialOffer.credentialOfferPayload.grants; + + if (grants?.authorization_code) return await this.processAuthCodeOpenIDCredentialOffer(services, account, credentialOffer); + if (grants?.["urn:ietf:params:oauth:grant-type:pre-authorized_code"]) return await this.processPreAuthorizedOpenIDCredentialOffer(services, account, credentialOffer); + + await uiBridge.showError(AppRuntimeErrors.appStringProcessor.unsupportedOid4vcCredentialOfferGrantFound()); + return Result.ok(undefined); + } + + private async processAuthCodeOpenIDCredentialOffer( + _services: RuntimeServices, + _account: LocalAccountDTO, + _credentialOffer: OpenId4VciResolvedCredentialOffer + ): Promise> { + // Not implemented yet + const uiBridge = await this.runtime.uiBridge(); + await uiBridge.showError(new ApplicationError("error.app.openid4vc.authorizationCodeGrantNotSupported", "")); + return Result.ok(undefined); + } + + private async processPreAuthorizedOpenIDCredentialOffer( + services: RuntimeServices, + account: LocalAccountDTO, + credentialOffer: OpenId4VciResolvedCredentialOffer + ): Promise> { + const uiBridge = await this.runtime.uiBridge(); + + const preAuthorizedCodeGrant = credentialOffer.credentialOfferPayload.grants!["urn:ietf:params:oauth:grant-type:pre-authorized_code"]; + + const requestCredentialsResult = preAuthorizedCodeGrant?.tx_code + ? ( + await this._fetchPasswordProtectedItemWithRetry( + async (password) => + await services.consumptionServices.openId4Vc.requestCredentials({ + credentialOffer: credentialOffer, + credentialConfigurationIds: credentialOffer.credentialOfferPayload.credential_configuration_ids, + pinCode: password + }), + { + passwordType: preAuthorizedCodeGrant.tx_code.input_mode === "text" ? "pw" : `pin${preAuthorizedCodeGrant.tx_code.length ?? 4}` + }, + "error.runtime.openid4vc.oauth.invalid_grant" + ) + ).result + : await services.consumptionServices.openId4Vc.requestCredentials({ + credentialOffer: credentialOffer, + credentialConfigurationIds: credentialOffer.credentialOfferPayload.credential_configuration_ids + }); + + if (requestCredentialsResult.isError) { + await uiBridge.showError(requestCredentialsResult.error); + + return Result.ok(undefined); + } + + await uiBridge.showResolvedCredentialOffer(account, requestCredentialsResult.value.credentialResponses, credentialOffer.metadata.credentialIssuer.display); + return Result.ok(undefined); + } + + private async processOpenID4VPURL(url: string, account?: LocalAccountDTO): Promise> { + if (!account) { + const result = await this.selectAccount(); + if (result.isError) { + this.logger.info("Could not query account", result.error); + return Result.fail(result.error); + } + + if (!result.value) { + this.logger.info("User cancelled account selection"); + return Result.ok(undefined); + } + + account = result.value; + } + + const session = await this.runtime.getServices(account.id); + const result = await session.consumptionServices.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: url }); + + const uiBridge = await this.runtime.uiBridge(); + if (result.isError) { + this.logger.error("Could not resolve authorization request", result.error); + await uiBridge.showError(result.error); + + return Result.ok(undefined); + } + + return await uiBridge.showResolvedAuthorizationRequest(account, result.value); + } + private async _processReference(reference: Reference, account?: LocalAccountDTO): Promise> { if (account) return await this._handleReference(reference, account); @@ -190,7 +314,11 @@ export class AppStringProcessor { private async _fetchPasswordProtectedItemWithRetry( fetchFunction: (password: string) => Promise>, - passwordProtection: SharedPasswordProtection + passwordProtection: { + passwordType: "pw" | `pin${number}`; + passwordLocationIndicator?: number; + }, + wrongPasswordErrorCode = "error.runtime.recordNotFound" ): Promise<{ result: Result; password?: string }> { let attempt = 1; @@ -214,7 +342,7 @@ export class AppStringProcessor { attempt++; if (result.isSuccess) return { result, password }; - if (result.isError && result.error.code === "error.runtime.recordNotFound") continue; + if (result.isError && result.error.code === wrongPasswordErrorCode) continue; return { result }; } diff --git a/packages/app-runtime/src/extensibility/ui/IUIBridge.ts b/packages/app-runtime/src/extensibility/ui/IUIBridge.ts index 3fa3b6b47..237341b7e 100644 --- a/packages/app-runtime/src/extensibility/ui/IUIBridge.ts +++ b/packages/app-runtime/src/extensibility/ui/IUIBridge.ts @@ -1,5 +1,6 @@ import { ApplicationError, Result } from "@js-soft/ts-utils"; -import { DeviceOnboardingInfoDTO, FileDVO, IdentityDVO, LocalRequestDVO, MailDVO, MessageDVO, RequestMessageDVO } from "@nmshd/runtime"; +import { OpenId4VciCredentialResponseJSON } from "@nmshd/consumption"; +import { DeviceOnboardingInfoDTO, FileDVO, IdentityDVO, LocalRequestDVO, MailDVO, MessageDVO, RequestMessageDVO, ResolveAuthorizationRequestResponse } from "@nmshd/runtime"; import { LocalAccountDTO } from "../../multiAccount"; export interface IUIBridge { @@ -8,6 +9,20 @@ export interface IUIBridge { showFile(account: LocalAccountDTO, file: FileDVO): Promise>; showDeviceOnboarding(deviceOnboardingInfo: DeviceOnboardingInfoDTO): Promise>; showRequest(account: LocalAccountDTO, request: LocalRequestDVO): Promise>; + showResolvedAuthorizationRequest(account: LocalAccountDTO, response: ResolveAuthorizationRequestResponse): Promise>; + showResolvedCredentialOffer( + account: LocalAccountDTO, + credentialResponses: OpenId4VciCredentialResponseJSON[], + issuerDisplayInformation?: { + name?: string; + locale?: string; + logo?: { + uri?: string; + // eslint-disable-next-line @typescript-eslint/naming-convention + alt_text?: string; + }; + }[] + ): Promise>; showError(error: ApplicationError, account?: LocalAccountDTO): Promise>; requestAccountSelection(possibleAccounts: LocalAccountDTO[], title?: string, description?: string): Promise>; enterPassword(passwordType: "pw" | "pin", pinLength?: number, attempt?: number, passwordLocationIndicator?: number): Promise>; diff --git a/packages/app-runtime/test/lib/FakeUIBridge.ts b/packages/app-runtime/test/lib/FakeUIBridge.ts index 0346ebf37..a233c1239 100644 --- a/packages/app-runtime/test/lib/FakeUIBridge.ts +++ b/packages/app-runtime/test/lib/FakeUIBridge.ts @@ -22,6 +22,14 @@ export class FakeUIBridge implements IUIBridge { return Promise.resolve(Result.ok(undefined)); } + public showResolvedAuthorizationRequest(): Promise> { + return Promise.resolve(Result.ok(undefined)); + } + + public showResolvedCredentialOffer(): Promise> { + return Promise.resolve(Result.ok(undefined)); + } + public showError(): Promise> { return Promise.resolve(Result.ok(undefined)); } diff --git a/packages/app-runtime/test/lib/MockUIBridge.matchers.ts b/packages/app-runtime/test/lib/MockUIBridge.matchers.ts index 1432113d5..0a9a5a877 100644 --- a/packages/app-runtime/test/lib/MockUIBridge.matchers.ts +++ b/packages/app-runtime/test/lib/MockUIBridge.matchers.ts @@ -134,6 +134,54 @@ expect.extend({ return { pass: true, message: () => "" }; }, + showResolvedAuthorizationRequestCalled(mockUIBridge: unknown) { + if (!(mockUIBridge instanceof MockUIBridge)) { + throw new Error("This method can only be used with expect(MockUIBridge)."); + } + + const calls = mockUIBridge.calls.filter((x) => x.method === "showResolvedAuthorizationRequest"); + if (calls.length === 0) { + return { pass: false, message: () => "The method showResolvedAuthorizationRequest was not called." }; + } + + return { pass: true, message: () => "" }; + }, + showResolvedAuthorizationRequestNotCalled(mockUIBridge: unknown) { + if (!(mockUIBridge instanceof MockUIBridge)) { + throw new Error("This method can only be used with expect(MockUIBridge)."); + } + + const calls = mockUIBridge.calls.filter((x) => x.method === "showResolvedAuthorizationRequest"); + if (calls.length > 0) { + return { pass: false, message: () => `The method showResolvedAuthorizationRequest was called: ${calls.map((c) => `'account id: ${c.account.id}'`)}` }; + } + + return { pass: true, message: () => "" }; + }, + showResolvedCredentialOfferCalled(mockUIBridge: unknown) { + if (!(mockUIBridge instanceof MockUIBridge)) { + throw new Error("This method can only be used with expect(MockUIBridge)."); + } + + const calls = mockUIBridge.calls.filter((x) => x.method === "showResolvedCredentialOffer"); + if (calls.length === 0) { + return { pass: false, message: () => "The method showResolvedCredentialOffer was not called." }; + } + + return { pass: true, message: () => "" }; + }, + showResolvedCredentialOfferNotCalled(mockUIBridge: unknown) { + if (!(mockUIBridge instanceof MockUIBridge)) { + throw new Error("This method can only be used with expect(MockUIBridge)."); + } + + const calls = mockUIBridge.calls.filter((x) => x.method === "showResolvedCredentialOffer"); + if (calls.length > 0) { + return { pass: false, message: () => `The method showResolvedCredentialOffer was called: ${calls.map((c) => `'account id: ${c.account.id}'`)}` }; + } + + return { pass: true, message: () => "" }; + }, showFileCalled(mockUIBridge: unknown, id: string) { if (!(mockUIBridge instanceof MockUIBridge)) { throw new Error("This method can only be used with expect(MockUIBridge)."); @@ -199,6 +247,10 @@ declare global { enterPasswordNotCalled(): R; showRequestCalled(): R; showRequestNotCalled(): R; + showResolvedAuthorizationRequestCalled(): R; + showResolvedAuthorizationRequestNotCalled(): R; + showResolvedCredentialOfferCalled(): R; + showResolvedCredentialOfferNotCalled(): R; showFileCalled(id: string): R; showFileNotCalled(): R; showErrorCalled(code: string): R; diff --git a/packages/app-runtime/test/lib/MockUIBridge.ts b/packages/app-runtime/test/lib/MockUIBridge.ts index 6dcf81d08..d280cea5a 100644 --- a/packages/app-runtime/test/lib/MockUIBridge.ts +++ b/packages/app-runtime/test/lib/MockUIBridge.ts @@ -1,5 +1,6 @@ import { ApplicationError, Result } from "@js-soft/ts-utils"; -import { DeviceOnboardingInfoDTO, FileDVO, IdentityDVO, LocalRequestDVO, MailDVO, MessageDVO, RequestMessageDVO } from "@nmshd/runtime"; +import { OpenId4VciCredentialResponseJSON } from "@nmshd/consumption"; +import { DeviceOnboardingInfoDTO, FileDVO, IdentityDVO, LocalRequestDVO, MailDVO, MessageDVO, RequestMessageDVO, ResolveAuthorizationRequestResponse } from "@nmshd/runtime"; import { IUIBridge, LocalAccountDTO } from "../../src"; export type MockUIBridgeCall = @@ -8,6 +9,8 @@ export type MockUIBridgeCall = | { method: "showFile"; account: LocalAccountDTO; file: FileDVO } | { method: "showDeviceOnboarding"; deviceOnboardingInfo: DeviceOnboardingInfoDTO } | { method: "showRequest"; account: LocalAccountDTO; request: LocalRequestDVO } + | { method: "showResolvedAuthorizationRequest"; account: LocalAccountDTO; response: ResolveAuthorizationRequestResponse } + | { method: "showResolvedCredentialOffer"; account: LocalAccountDTO; credentialResponses: OpenId4VciCredentialResponseJSON[]; issuerDisplayInformation: any } | { method: "showError"; error: ApplicationError; account?: LocalAccountDTO } | { method: "requestAccountSelection"; possibleAccounts: LocalAccountDTO[]; title?: string; description?: string } | { method: "enterPassword"; passwordType: "pw" | "pin"; pinLength?: number; attempt?: number; passwordLocationIndicator?: number }; @@ -65,6 +68,18 @@ export class MockUIBridge implements IUIBridge { return Promise.resolve(Result.ok(undefined)); } + public showResolvedAuthorizationRequest(account: LocalAccountDTO, response: ResolveAuthorizationRequestResponse): Promise> { + this._calls.push({ method: "showResolvedAuthorizationRequest", account, response }); + + return Promise.resolve(Result.ok(undefined)); + } + + public showResolvedCredentialOffer(account: LocalAccountDTO, credentialResponses: OpenId4VciCredentialResponseJSON[], issuerDisplayInformation: any): Promise> { + this._calls.push({ method: "showResolvedCredentialOffer", account, credentialResponses, issuerDisplayInformation }); + + return Promise.resolve(Result.ok(undefined)); + } + public showError(error: ApplicationError, account?: LocalAccountDTO): Promise> { this._calls.push({ method: "showError", error, account }); diff --git a/packages/runtime/src/useCases/common/UseCase.ts b/packages/runtime/src/useCases/common/UseCase.ts index 8f24230bf..f9eff2c8e 100644 --- a/packages/runtime/src/useCases/common/UseCase.ts +++ b/packages/runtime/src/useCases/common/UseCase.ts @@ -3,6 +3,7 @@ import { ApplicationError, Result } from "@js-soft/ts-utils"; import { CoreError } from "@nmshd/core-types"; import { RequestError } from "@nmshd/transport"; import { Inject } from "@nmshd/typescript-ioc"; +import { Oauth2ClientErrorResponseError } from "@openid4vc/oauth2"; import stringifySafe from "json-stringify-safe"; import { AbstractCorrelator } from "./AbstractCorrelator"; import { PlatformErrorCodes } from "./PlatformErrorCodes"; @@ -64,6 +65,10 @@ export abstract class UseCase { return Result.fail(new ApplicationError(error.code, error.message)); } + if (error instanceof Oauth2ClientErrorResponseError) { + return Result.fail(new ApplicationError(`error.runtime.openid4vc.oauth.${error.errorResponse.error}`, error.message)); + } + return Result.fail(RuntimeErrors.general.unknown(`An error was thrown in a UseCase: ${error.message}`, error)); } From 294aec99c35dc3db1bfe144a119c65e19b374c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Mon, 15 Dec 2025 14:28:24 +0100 Subject: [PATCH 74/75] An error is shown when cancelling requesting a credential (#906) * chore: add check * fix: only show error on check * chore: trigger ci --- packages/app-runtime/src/AppStringProcessor.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/app-runtime/src/AppStringProcessor.ts b/packages/app-runtime/src/AppStringProcessor.ts index c87799699..c1e2ce7e3 100644 --- a/packages/app-runtime/src/AppStringProcessor.ts +++ b/packages/app-runtime/src/AppStringProcessor.ts @@ -129,7 +129,9 @@ export class AppStringProcessor { }); if (requestCredentialsResult.isError) { - await uiBridge.showError(requestCredentialsResult.error); + if (!requestCredentialsResult.error.equals(AppRuntimeErrors.appStringProcessor.passwordNotProvided())) { + await uiBridge.showError(requestCredentialsResult.error); + } return Result.ok(undefined); } From 5276cca3abc85b35a50b6a9ca6cd7637c6fbf3ef Mon Sep 17 00:00:00 2001 From: Jakob Erben <34318568+erbenjak@users.noreply.github.com> Date: Thu, 18 Dec 2025 18:48:42 +0100 Subject: [PATCH 75/75] Add support for openid4vci external auth flow (#892) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add pin secured VC test * working version * feat: add pin secured VC test * working version * fix: bad merge * fix: simplify token passing * fix: remov unnecessary linting directive * refactor: some initial code clean up * fx: remove accidental change * chore: readd missing test * fix: use correct version * chore: update schemas * fix: transfer token in a proper manner and only allow token or pin * feat: add pin secured VC test * working version * fix: bad merge * feat: add pin secured VC test * working version * fix: simplify token passing * refactor: some initial code clean up * fx: remove accidental change * chore: readd missing test * fix: use correct version * chore: update schemas * fix: transfer token in a proper manner and only allow token or pin * chore: update the lockfile * chore: undo changes * feat: call external authentication through UI bridge * feat: improve OAuth errors * feat: dont show error when auth is cancelled * fix:remove duplicate test * test if auth servers are empty * refactor: inline unecessary type object * refactor: inline unecessary type object * refactor: fix datatype for good * chore: improve ui bridge function naming * fix: simplify logic * fix: improve type safety * chore: remove unecessary comments and variables * chore: remove unecessary comments and variables --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: Julian König --- package-lock.json | 36 +++++++ packages/app-runtime/src/AppRuntimeErrors.ts | 4 + .../app-runtime/src/AppStringProcessor.ts | 35 ++++-- .../src/extensibility/ui/IUIBridge.ts | 1 + packages/app-runtime/test/lib/FakeUIBridge.ts | 4 + packages/app-runtime/test/lib/MockUIBridge.ts | 8 +- .../modules/openid4vc/OpenId4VcController.ts | 6 +- .../src/modules/openid4vc/local/Holder.ts | 24 +++-- packages/runtime/package.json | 2 + .../runtime/src/useCases/common/Schemas.ts | 82 +++++++++++--- .../openid4vc/RequestCredentials.ts | 14 +-- .../test/consumption/openid4vc.test.ts | 102 ++++++++++++++++-- 12 files changed, 268 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index bbbf1d0bd..b6df64187 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12107,6 +12107,16 @@ "node": ">=8" } }, + "node_modules/oauth4webapi": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.3.tgz", + "integrity": "sha512-pQ5BsX3QRTgnt5HxgHwgunIRaDXBdkT23tf8dfzmtTIL2LTpdmxgbpbBm0VgFWAIDlezQvQCTgnVIUmHupXHxw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -12183,6 +12193,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openid-client": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.1.tgz", + "integrity": "sha512-VoYT6enBo6Vj2j3Q5Ec0AezS+9YGzQo1f5Xc42lreMGlfP4ljiXPKVDvCADh+XHCV/bqPu/wWSiCVXbJKvrODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jose": "^6.1.0", + "oauth4webapi": "^3.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -16134,6 +16158,8 @@ "@types/json-stringify-safe": "^5.0.3", "@types/lodash": "^4.17.21", "@types/luxon": "^3.7.1", + "jwt-decode": "^4.0.0", + "openid-client": "^6.8.1", "ts-json-schema-generator": "2.4.0", "ts-mockito": "^2.6.1" } @@ -16169,6 +16195,16 @@ "version": "1.0.0", "license": "MIT" }, + "packages/runtime/node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "packages/transport": { "name": "@nmshd/transport", "license": "AGPL-3.0-or-later", diff --git a/packages/app-runtime/src/AppRuntimeErrors.ts b/packages/app-runtime/src/AppRuntimeErrors.ts index 41476ec10..345458e97 100644 --- a/packages/app-runtime/src/AppRuntimeErrors.ts +++ b/packages/app-runtime/src/AppRuntimeErrors.ts @@ -28,6 +28,10 @@ class AppStringProcessor { return new ApplicationError("error.appruntime.appStringProcessor.passwordNotProvided", "No password was provided."); } + public externalOauthRegistrationNotProvided(): ApplicationError { + return new ApplicationError("error.appruntime.appStringProcessor.externalOauthRegistrationNotProvided", "No external OAuth registration was provided."); + } + public passwordRetryLimitReached(): ApplicationError { return new ApplicationError("error.appruntime.appStringProcessor.passwordRetryLimitReached", "The maximum number of attempts to enter the password was reached."); } diff --git a/packages/app-runtime/src/AppStringProcessor.ts b/packages/app-runtime/src/AppStringProcessor.ts index c1e2ce7e3..ae82ff575 100644 --- a/packages/app-runtime/src/AppStringProcessor.ts +++ b/packages/app-runtime/src/AppStringProcessor.ts @@ -1,7 +1,7 @@ import { OpenId4VciResolvedCredentialOffer } from "@credo-ts/openid4vc"; import { ILogger, ILoggerFactory } from "@js-soft/logging-abstractions"; import { Serializable } from "@js-soft/ts-serval"; -import { ApplicationError, EventBus, Result } from "@js-soft/ts-utils"; +import { EventBus, Result } from "@js-soft/ts-utils"; import { ICoreAddress, Reference } from "@nmshd/core-types"; import { AnonymousServices, DeviceMapper, RuntimeServices } from "@nmshd/runtime"; import { BackboneIds, TokenContentDeviceSharedSecret } from "@nmshd/transport"; @@ -89,13 +89,36 @@ export class AppStringProcessor { } private async processAuthCodeOpenIDCredentialOffer( - _services: RuntimeServices, - _account: LocalAccountDTO, - _credentialOffer: OpenId4VciResolvedCredentialOffer + services: RuntimeServices, + account: LocalAccountDTO, + credentialOffer: OpenId4VciResolvedCredentialOffer ): Promise> { - // Not implemented yet const uiBridge = await this.runtime.uiBridge(); - await uiBridge.showError(new ApplicationError("error.app.openid4vc.authorizationCodeGrantNotSupported", "")); + + if (credentialOffer.metadata.authorizationServers.length === 0) { + await uiBridge.showError(AppRuntimeErrors.appStringProcessor.unsupportedOid4vcCredentialOfferGrantFound()); + return Result.ok(undefined); + } + + // TODO: Multiple authorization servers not supported yet + const tokenResult = await uiBridge.performOauthAuthentication(credentialOffer.metadata.authorizationServers[0].issuer); + if (tokenResult.isError) { + this.logger.error("Could not perform OAuth authentication", tokenResult.error); + return Result.ok(undefined); + } + + const requestCredentialsResult = await services.consumptionServices.openId4Vc.requestCredentials({ + credentialOffer: credentialOffer, + credentialConfigurationIds: credentialOffer.credentialOfferPayload.credential_configuration_ids, + accessToken: tokenResult.value + }); + + if (requestCredentialsResult.isError) { + await uiBridge.showError(requestCredentialsResult.error); + return Result.ok(undefined); + } + + await uiBridge.showResolvedCredentialOffer(account, requestCredentialsResult.value.credentialResponses, credentialOffer.metadata.credentialIssuer.display); return Result.ok(undefined); } diff --git a/packages/app-runtime/src/extensibility/ui/IUIBridge.ts b/packages/app-runtime/src/extensibility/ui/IUIBridge.ts index 237341b7e..56ec32ec9 100644 --- a/packages/app-runtime/src/extensibility/ui/IUIBridge.ts +++ b/packages/app-runtime/src/extensibility/ui/IUIBridge.ts @@ -26,4 +26,5 @@ export interface IUIBridge { showError(error: ApplicationError, account?: LocalAccountDTO): Promise>; requestAccountSelection(possibleAccounts: LocalAccountDTO[], title?: string, description?: string): Promise>; enterPassword(passwordType: "pw" | "pin", pinLength?: number, attempt?: number, passwordLocationIndicator?: number): Promise>; + performOauthAuthentication(authenticationServerUrl: string): Promise>; } diff --git a/packages/app-runtime/test/lib/FakeUIBridge.ts b/packages/app-runtime/test/lib/FakeUIBridge.ts index a233c1239..cdb74c689 100644 --- a/packages/app-runtime/test/lib/FakeUIBridge.ts +++ b/packages/app-runtime/test/lib/FakeUIBridge.ts @@ -41,4 +41,8 @@ export class FakeUIBridge implements IUIBridge { public enterPassword(_passwordType: "pw" | "pin", _pinLength?: number, _attempt?: number): Promise> { return Promise.resolve(Result.fail(new ApplicationError("not implemented", "not implemented"))); } + + public performOauthAuthentication(_authenticationServerUrl: string): Promise> { + return Promise.resolve(Result.fail(new ApplicationError("not implemented", "not implemented"))); + } } diff --git a/packages/app-runtime/test/lib/MockUIBridge.ts b/packages/app-runtime/test/lib/MockUIBridge.ts index d280cea5a..97ca2655b 100644 --- a/packages/app-runtime/test/lib/MockUIBridge.ts +++ b/packages/app-runtime/test/lib/MockUIBridge.ts @@ -13,7 +13,8 @@ export type MockUIBridgeCall = | { method: "showResolvedCredentialOffer"; account: LocalAccountDTO; credentialResponses: OpenId4VciCredentialResponseJSON[]; issuerDisplayInformation: any } | { method: "showError"; error: ApplicationError; account?: LocalAccountDTO } | { method: "requestAccountSelection"; possibleAccounts: LocalAccountDTO[]; title?: string; description?: string } - | { method: "enterPassword"; passwordType: "pw" | "pin"; pinLength?: number; attempt?: number; passwordLocationIndicator?: number }; + | { method: "enterPassword"; passwordType: "pw" | "pin"; pinLength?: number; attempt?: number; passwordLocationIndicator?: number } + | { method: "performOauthAuthentication "; url: string }; export class MockUIBridge implements IUIBridge { private _accountIdToReturn: string | undefined; @@ -105,4 +106,9 @@ export class MockUIBridge implements IUIBridge { return Promise.resolve(Result.ok(password)); } + + public performOauthAuthentication(url: string): Promise> { + this._calls.push({ method: "performOauthAuthentication ", url }); + return Promise.resolve(Result.ok("test-token")); + } } diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index bf1cc19d6..618ab3b40 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -39,7 +39,7 @@ export class OpenId4VcController extends ConsumptionBaseController { if (cachedCredentialResponses) return cachedCredentialResponses; const offer = await this.resolveCredentialOffer(credentialOfferUrl); - const credentialResponses = await this.requestCredentials(offer, offer.credentialOfferPayload.credential_configuration_ids); + const credentialResponses = await this.requestCredentials(offer, offer.credentialOfferPayload.credential_configuration_ids, { pinCode: undefined }); await this.requestedCredentialCache.set(credentialOfferUrl, credentialResponses); await this.parent.accountController.syncDatawallet(); @@ -54,9 +54,9 @@ export class OpenId4VcController extends ConsumptionBaseController { public async requestCredentials( credentialOffer: OpenId4VciResolvedCredentialOffer, credentialConfigurationIds: string[], - pinCode?: string + access: { pinCode?: string } | { accessToken: string } ): Promise { - const credentialResponses = await this.holder.requestCredentials(credentialOffer, { credentialConfigurationIds: credentialConfigurationIds, txCode: pinCode }); + const credentialResponses = await this.holder.requestCredentials(credentialOffer, credentialConfigurationIds, access); const mappedResponses = credentialResponses.map((response) => ({ claimFormat: response.record.firstCredential.claimFormat, diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index c93f11719..b13639f8c 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -36,19 +36,25 @@ export class Holder extends BaseAgent> public async requestCredentials( resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, - options: { - credentialConfigurationIds: string[]; - txCode?: string; - } + credentialConfigurationIds: string[], + access: { accessToken: string } | { pinCode?: string } ): Promise { - const tokenResponse = await this.agent.openid4vc.holder.requestToken({ - resolvedCredentialOffer, - txCode: options.txCode - }); + const tokenResponse = + "accessToken" in access + ? { + accessToken: access.accessToken, + accessTokenResponse: { + // eslint-disable-next-line @typescript-eslint/naming-convention + access_token: access.accessToken, + // eslint-disable-next-line @typescript-eslint/naming-convention + token_type: "bearer" + } + } + : await this.agent.openid4vc.holder.requestToken({ resolvedCredentialOffer, txCode: access.pinCode }); const credentialResponse = await this.agent.openid4vc.holder.requestCredentials({ resolvedCredentialOffer, - credentialConfigurationIds: options.credentialConfigurationIds, + credentialConfigurationIds: credentialConfigurationIds, credentialBindingResolver: async ({ supportedDidMethods, supportsAllDidMethods, proofTypes }) => { const key = await this.agent.kms.createKeyForSignatureAlgorithm({ algorithm: proofTypes.jwt?.supportedSignatureAlgorithms[0] ?? "EdDSA" diff --git a/packages/runtime/package.json b/packages/runtime/package.json index a87ec7db1..4e32fb55b 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -106,6 +106,8 @@ "@types/json-stringify-safe": "^5.0.3", "@types/lodash": "^4.17.21", "@types/luxon": "^3.7.1", + "jwt-decode": "^4.0.0", + "openid-client": "^6.8.1", "ts-json-schema-generator": "2.4.0", "ts-mockito": "^2.6.1" }, diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index a991e9dcc..161e90d48 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -17224,25 +17224,75 @@ export const RequestCredentialsRequest: any = { "$ref": "#/definitions/RequestCredentialsRequest", "definitions": { "RequestCredentialsRequest": { - "type": "object", - "additionalProperties": false, - "properties": { - "credentialOffer": { - "type": "object" + "$ref": "#/definitions/AbstractRequestCredentialsRequest%3Calias-2033348025-74138-74264-2033348025-0-218439%3Cstring%2Cany%3E%3E" + }, + "AbstractRequestCredentialsRequest>": { + "anyOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "credentialOffer": { + "type": "object" + }, + "credentialConfigurationIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "credentialConfigurationIds", + "credentialOffer" + ] }, - "pinCode": { - "type": "string" + { + "type": "object", + "additionalProperties": false, + "properties": { + "pinCode": { + "type": "string" + }, + "credentialOffer": { + "type": "object" + }, + "credentialConfigurationIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "credentialConfigurationIds", + "credentialOffer", + "pinCode" + ] }, - "credentialConfigurationIds": { - "type": "array", - "items": { - "type": "string" - } + { + "type": "object", + "additionalProperties": false, + "properties": { + "accessToken": { + "type": "string" + }, + "credentialOffer": { + "type": "object" + }, + "credentialConfigurationIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "accessToken", + "credentialConfigurationIds", + "credentialOffer" + ] } - }, - "required": [ - "credentialConfigurationIds", - "credentialOffer" ] } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts b/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts index b38cc2d48..51536f966 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/RequestCredentials.ts @@ -4,19 +4,18 @@ import { OpenId4VcController, OpenId4VciCredentialResponseJSON } from "@nmshd/co import { Inject } from "@nmshd/typescript-ioc"; import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; -export interface AbstractRequestCredentialsRequest { +export type AbstractRequestCredentialsRequest = { credentialOffer: T; - pinCode?: string; credentialConfigurationIds: string[]; -} +} & ({} | { pinCode: string } | { accessToken: string }); export interface RequestCredentialsResponse { credentialResponses: OpenId4VciCredentialResponseJSON[]; } -export interface RequestCredentialsRequest extends AbstractRequestCredentialsRequest {} +export type RequestCredentialsRequest = AbstractRequestCredentialsRequest; -export interface SchemaValidatableRequestCredentialsRequest extends AbstractRequestCredentialsRequest> {} +export type SchemaValidatableRequestCredentialsRequest = AbstractRequestCredentialsRequest>; class Validator extends SchemaValidator { public constructor(@Inject schemaRepository: SchemaRepository) { @@ -33,7 +32,8 @@ export class RequestCredentialsUseCase extends UseCase> { - const credentialResponses = await this.openId4VcController.requestCredentials(request.credentialOffer, request.credentialConfigurationIds, request.pinCode); - return Result.ok({ credentialResponses: credentialResponses }); + const access = "accessToken" in request ? { accessToken: request.accessToken } : { pinCode: "pinCode" in request ? request.pinCode : undefined }; + const credentialResponses = await this.openId4VcController.requestCredentials(request.credentialOffer, request.credentialConfigurationIds, access); + return Result.ok({ credentialResponses }); } } diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index 640fdaad2..83166975f 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -1,5 +1,7 @@ -import { VerifiableCredentialJSON } from "@nmshd/content"; +import { VerifiableCredential, VerifiableCredentialJSON } from "@nmshd/content"; import axios, { AxiosInstance } from "axios"; +import { jwtDecode } from "jwt-decode"; +import * as client from "openid-client"; import path from "path"; import { DockerComposeEnvironment, GenericContainer, StartedDockerComposeEnvironment, StartedTestContainer, Wait } from "testcontainers"; import { Agent as UndiciAgent, fetch as undiciFetch } from "undici"; @@ -70,10 +72,7 @@ describe("custom openid4vc service", () => { expect(result).toBeSuccessful(); - // analogously to the app code all presented credentials are accepted const credentialOffer = result.value.credentialOffer; - - // determine which credentials to pick from the offer for all supported types of offers const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; const credentialResponseResult = await runtimeServices1.consumption.openId4Vc.requestCredentials({ @@ -89,6 +88,96 @@ describe("custom openid4vc service", () => { expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); }); + test("should be able to process a credential offer with pin authentication", async () => { + const response = await axiosInstance.post("/issuance/credentialOffers", { + credentialConfigurationIds: ["EmployeeIdCard-sdjwt"], + authentication: "pin" + }); + + expect(response.status).toBe(200); + const responseData = await response.data; + + credentialOfferUrl = responseData.result.credentialOffer; + const pin = responseData.result.pin; + expect(pin).toBeDefined(); + + const result = await runtimeServices1.consumption.openId4Vc.resolveCredentialOffer({ + credentialOfferUrl + }); + + expect(result).toBeSuccessful(); + + const credentialOffer = result.value.credentialOffer; + const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; + + const requestResult = await runtimeServices1.consumption.openId4Vc.requestCredentials({ + credentialOffer, + credentialConfigurationIds: requestedCredentials, + pinCode: pin + }); + + const storeResult = await runtimeServices1.consumption.openId4Vc.storeCredentials({ credentialResponses: requestResult.value.credentialResponses }); + + expect(storeResult).toBeSuccessful(); + expect(typeof storeResult.value.id).toBe("string"); + + const credential = storeResult.value.content.value as unknown as VerifiableCredential; + expect(credential.displayInformation?.[0].logo).toBeDefined(); + expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); + }); + + test("should be able to process a credential offer with external authentication", async () => { + const response = await axiosInstance.post("/issuance/credentialOffers", { + credentialConfigurationIds: ["EmployeeIdCard-sdjwt"], + + authentication: "externalAuthentication" + }); + + expect(response.status).toBe(200); + + const responseData = await response.data; + + credentialOfferUrl = responseData.result.credentialOffer; + + const result = await runtimeServices1.consumption.openId4Vc.resolveCredentialOffer({ + credentialOfferUrl + }); + expect(result).toBeSuccessful(); + const credentialOffer = result.value.credentialOffer; + + const requestedCredentialIds = credentialOffer.credentialOfferPayload.credential_configuration_ids; + + const server = URL.parse("https://kc-openid4vc.is.enmeshed.eu/realms/enmeshed-openid4vci")!; + const clientId = "wallet"; + const config: client.Configuration = await client.discovery(server, clientId); + const grantReq = await client.genericGrantRequest(config, "password", { + username: "test", + password: "test", + scope: "wallet-demo" + }); + + const credentialRequestResult = await runtimeServices1.consumption.openId4Vc.requestCredentials({ + credentialOffer, + credentialConfigurationIds: requestedCredentialIds, + accessToken: grantReq.access_token + }); + const storeResult = await runtimeServices1.consumption.openId4Vc.storeCredentials({ credentialResponses: credentialRequestResult.value.credentialResponses }); + + expect(storeResult).toBeSuccessful(); + expect(typeof storeResult.value.id).toBe("string"); + + const credential = storeResult.value.content.value as unknown as VerifiableCredential; + expect(credential.displayInformation?.[0].logo).toBeDefined(); + expect(credential.displayInformation?.[0].name).toBe("Employee ID Card"); + + const encodedSdJwt = credential.value as string; + const decoded = jwtDecode<{ pernr: string; lob: string }>(encodedSdJwt); + + // these values are set in the test authorization server for the test user + expect(decoded.pernr).toBe("0019122023"); + expect(decoded.lob).toBe("Test BU"); + }); + test("should be able to process a given sd-jwt credential presentation", async () => { // Ensure the first test has completed expect(credentialOfferUrl).toBeDefined(); @@ -144,7 +233,7 @@ describe("custom openid4vc service", () => { const responseData = await response.data; const result = await runtimeServices1.consumption.openId4Vc.resolveAuthorizationRequest({ authorizationRequestUrl: responseData.result.presentationRequest }); - expect(result.value.matchingCredentials).toHaveLength(1); + expect(result.value.matchingCredentials).toHaveLength(3); const request = result.value.authorizationRequest; expect(request.presentationExchange!.credentialsForRequest.areRequirementsSatisfied).toBe(true); @@ -185,10 +274,7 @@ describe("custom openid4vc service", () => { expect(result).toBeSuccessful(); - // analogously to the app code all presented credentials are accepted const credentialOffer = result.value.credentialOffer; - - // determine which credentials to pick from the offer for all supported types of offers const requestedCredentials = credentialOffer.credentialOfferPayload.credential_configuration_ids; const credentialResponseResult = await runtimeServices1.consumption.openId4Vc.requestCredentials({

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 Toz<&L0KT2L(;h}!3g-U+{?+;N literal 0 HcmV?d00001 From 0ee56996a2febe5817bfdec3a83dc1dc70bbb9d1 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Fri, 10 Oct 2025 10:17:05 +0200 Subject: [PATCH 36/75] feature: overhaul to storring credentials in the repository --- .../modules/openid4vc/OpenId4VcController.ts | 33 +++- .../src/modules/openid4vc/local/BaseAgent.ts | 2 - .../openid4vc/local/EnmeshedStorageService.ts | 93 +++++++++-- .../src/modules/openid4vc/local/Holder.ts | 81 ++++++++-- .../attributes/types/VerifiableCredential.ts | 28 +++- .../consumption/VerifiableCredentialDTO.ts | 5 +- .../facades/consumption/OpenId4VcFacade.ts | 10 +- .../runtime/src/useCases/common/Schemas.ts | 150 ++++++++++++++---- .../GetVerifiableCredentialsUseCase.ts | 31 ++++ .../ResolveCredentialOfferUseCase.ts | 2 +- .../ResolveFetchedCredentialUseCase.ts | 7 +- .../test/consumption/openid4vc.test.ts | 29 +++- 12 files changed, 391 insertions(+), 80 deletions(-) create mode 100644 packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 1a09ff0b3..1a1cb1fe5 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -22,12 +22,16 @@ export class OpenId4VcController extends ConsumptionBaseController { await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const credentialOffer = JSON.parse(fetchedCredentialOffer); const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: requestedCredentialOffers, txCode: pinCode }); + + // TODO: support multiple credentials + const credential = credentials[0].content.value; + return { - status: "success", - message: "Credential offer processed successfully", - data: JSON.stringify(credentials), + data: credential.value, // multi credentials not supported yet - id: credentials.length > 0 ? credentials[0].id : undefined + id: credentials[0].id, + type: credential.type, + displayInformation: credential.displayInformation }; } @@ -38,8 +42,7 @@ export class OpenId4VcController extends ConsumptionBaseController { const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); return { - status: "success", - message: "Credential offer processed successfully", + id: credentials.length > 0 ? credentials[0].id : undefined, data: JSON.stringify(credentials) }; } @@ -65,4 +68,22 @@ export class OpenId4VcController extends ConsumptionBaseController { message: serverResponse.body }; } + + public async getVerifiableCredentials(ids: string[] | undefined): Promise { + const holder = new Holder(this.parent.accountController, this.parent.attributes); + await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); + // eslint-disable-next-line no-console + console.log("Fetching credentials with ids:", JSON.stringify(ids)); + const credentials = await holder.getVerifiableCredentials(ids); + const result = []; + for (const credential of credentials) { + result.push({ + id: credential.id.toString(), + data: credential.content.value.value.toString(), + displayInformation: credential.content.value.displayInformation ?? undefined, + type: credential.content.value.type ?? undefined + }); + } + return result; + } } diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index fb9a5f7d6..624788cd4 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -55,8 +55,6 @@ export class BaseAgent { }, dependencyManager ); - // only register the storrage service after the agent has been created - this.agent.dependencyManager.registerInstance(InjectionSymbols.StorageService, new EnmeshedStorageService(accountController, attributeController)); } public async initializeAgent(privateKey: string): Promise { diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index f1d46596c..8f5e524e6 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -1,4 +1,20 @@ -import { AgentContext, BaseRecord, BaseRecordConstructor, injectable, JsonTransformer, Query, QueryOptions, StorageService } from "@credo-ts/core"; +import { + AgentContext, + BaseRecord, + BaseRecordConstructor, + ClaimFormat, + injectable, + JsonTransformer, + Mdoc, + MdocRecord, + Query, + QueryOptions, + SdJwtVcRecord, + StorageService, + VerifiableCredential, + W3cCredentialRecord, + W3cJwtVerifiableCredential +} from "@credo-ts/core"; import { IdentityAttribute } from "@nmshd/content"; import { CoreId } from "@nmshd/core-types"; import { AccountController } from "@nmshd/transport"; @@ -24,17 +40,20 @@ export class EnmeshedStorageService implements StorageServ return; } - const value = JsonTransformer.serialize(record); + let value = (record as unknown as VerifiableCredential).encoded; + if (typeof value !== "string") { + agentContext.config.logger.warn(`Record is not a string, serializing to JSON`); + value = JSON.stringify(value); + } const owner = this.accountController.identity.address; agentContext.config.logger.debug(`Saving record with id ${record.id} and value ${value}`); const identityAttribute = IdentityAttribute.from({ value: { "@type": "VerifiableCredential", - value: value, title: (record as any).credential?.payload?.vct ?? "Credential", - description: JSON.stringify((record as any).credential?.payload ?? "No description"), - type: typeof record + value: value, + type: record.type }, owner: owner }); @@ -45,6 +64,25 @@ export class EnmeshedStorageService implements StorageServ return await Promise.resolve(); } + public async saveWithDisplay(agentContext: AgentContext, value: string, type: string, displayInformation: string, title: string): Promise { + const owner = this.accountController.identity.address; + const identityAttribute = IdentityAttribute.from({ + value: { + "@type": "VerifiableCredential", + value: value, + type: type, + displayInformation: displayInformation, + title: title + }, + owner: owner + }); + const result = await this.attributeController.createRepositoryAttribute({ + content: identityAttribute + }); + agentContext.config.logger.debug(`Saved record: ${JSON.stringify(result)}`); + return await Promise.resolve(result); + } + public async update(agentContext: AgentContext, record: T): Promise { agentContext.config.logger.debug(`Updating record with id ${record.id}`); const value = JsonTransformer.serialize(record); @@ -57,7 +95,7 @@ export class EnmeshedStorageService implements StorageServ "@type": "VerifiableCredential", value: value, title: "Employee ID Card", - description: "An employee ID card credential" + displayInformation: (oldAttribute.content.value as any).displayInformation }, owner: owner }); @@ -105,19 +143,52 @@ export class EnmeshedStorageService implements StorageServ public async getAll(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { const records: T[] = []; - const attributes = await this.attributeController.getLocalAttributes(); - agentContext.config.logger.debug(`Getting all records, found ${attributes.length} attributes`); + const attributes = await this.attributeController.getLocalAttributes({ "content.value.@type": "VerifiableCredential", shareInfo: { $exists: false } }); for (const attribute of attributes) { - const record = JsonTransformer.deserialize((attribute.content.value as any).value, recordClass); - // ToDo: think about how to handle this for different record types - if (record.type !== "SdJwtVcRecord") { + // TODO: Correct casting + const type = (attribute as any).content.value.type; + let record: T; + if (type === ClaimFormat.SdJwtDc.toString() && recordClass.name === SdJwtVcRecord.name) { + record = new SdJwtVcRecord({ id: (attribute as any).content.id, compactSdJwtVc: (attribute as any).content.value.value }) as unknown as T; + } else if (type === ClaimFormat.MsoMdoc.toString() && recordClass.name === MdocRecord.name) { + record = new MdocRecord({ id: (attribute as any).content.id, mdoc: Mdoc.fromBase64Url((attribute as any).content.value.value) }) as unknown as T; + } else if (type === ClaimFormat.SdJwtW3cVc.toString() && recordClass.name === W3cCredentialRecord.name) { + const credential = W3cJwtVerifiableCredential.fromSerializedJwt((attribute as any).content.value.value); + record = new W3cCredentialRecord({ + id: (attribute as any).content.id, + credential: credential, + tags: {} + }) as unknown as T; + } else { + agentContext.config.logger.info(`Skipping attribute with id ${attribute.id} and type ${type} as it does not match record class ${recordClass.name}`); continue; } + if ((attribute as any).content.value.key !== undefined) { + // TODO: Remove as this is only a workaround for demo purposes + agentContext.config.logger.info("Found keys to possibly import"); + const parsed = JSON.parse((attribute as any).content.value.key) as Map; + for (const [k, v] of parsed) { + const currentKeys = (globalThis as any).fakeKeyStorage as Map; + if (!currentKeys.has(k)) { + (globalThis as any).fakeKeyStorage.set(k, v); + agentContext.config.logger.info(`Added key ${k} to fake keystore`); + } else { + agentContext.config.logger.info(`Key ${k} already in fake keystore`); + } + } + } records.push(record); } return records; } + // should only be used for exporting data out of the credo environment + public async getAllAsAttributes(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { + agentContext.config.logger.debug(`Getting all records of type ${recordClass.name}`); + const attributes = await this.attributeController.getLocalAttributes({ "content.value.@type": "VerifiableCredential", shareInfo: { $exists: false } }); + return attributes; + } + public async findByQuery(agentContext: AgentContext, recordClass: BaseRecordConstructor, query: Query, queryOptions?: QueryOptions): Promise { agentContext.config.logger.debug(`Finding records by query ${JSON.stringify(query)} and options ${JSON.stringify(queryOptions)}`); const records: T[] = []; diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 95c78ca23..729a3b9af 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -1,5 +1,17 @@ -/* eslint-disable no-console */ -import { ClaimFormat, DidJwk, DidKey, JwkDidCreateOptions, KeyDidCreateOptions, Kms, Mdoc, MdocRecord, SdJwtVcRecord, X509Module } from "@credo-ts/core"; +import { + BaseRecord, + ClaimFormat, + DidJwk, + DidKey, + InjectionSymbols, + JwkDidCreateOptions, + KeyDidCreateOptions, + Kms, + Mdoc, + MdocRecord, + SdJwtVcRecord, + X509Module +} from "@credo-ts/core"; import { OpenId4VcModule, OpenId4VciAuthorizationFlow, @@ -12,12 +24,14 @@ import { import { AccountController } from "@nmshd/transport"; import { AttributesController } from "../../attributes"; import { BaseAgent } from "./BaseAgent"; +import { EnmeshedStorageService } from "./EnmeshedStorageService"; function getOpenIdHolderModules() { return { openid4vc: new OpenId4VcModule(), x509: new X509Module({ getTrustedCertificatesForVerification: (_agentContext, { certificateChain, verification }) => { + // eslint-disable-next-line no-console console.log(`dyncamically trusting certificate ${certificateChain[0].getIssuerNameField("C")} for verification of ${verification.type}`); return [certificateChain[0].toString("pem")]; } @@ -35,6 +49,15 @@ export class Holder extends BaseAgent> super(3000, `OpenId4VcHolder ${Math.random().toString()}`, getOpenIdHolderModules(), accountController, attributeController); } + public async getVerifiableCredentials(ids: string[] | undefined): Promise { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + const storageService = this.agent.dependencyManager.resolve(InjectionSymbols.StorageService) as EnmeshedStorageService; + const allCredentials = await storageService.getAllAsAttributes(this.agent.context, SdJwtVcRecord); + + if (!ids) return allCredentials; + return allCredentials.filter((vc) => ids.includes(vc.id.toString())); + } + public async resolveCredentialOffer(credentialOffer: string): Promise { return await this.agent.openid4vc.holder.resolveCredentialOffer(credentialOffer); } @@ -101,8 +124,6 @@ export class Holder extends BaseAgent> } ); - console.log("Token response:", JSON.stringify(tokenResponse)); - const credentialResponse = await this.agent.openid4vc.holder.requestCredentials({ resolvedCredentialOffer, clientId: options.clientId, @@ -151,24 +172,62 @@ export class Holder extends BaseAgent> ...tokenResponse }); - console.log("Credential response:", credentialResponse); + this.agent.config.logger.info("Credential response:", credentialResponse); const storedCredentials = await Promise.all( credentialResponse.credentials.map((response) => { // TODO: batch issuance not yet supported const credential = response.credentials[0]; - if (credential.claimFormat === ClaimFormat.MsoMdoc) { - return this.agent.mdoc.store(Mdoc.fromBase64Url(credential.base64Url)); + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + const enmeshedStorageService = this.agent.dependencyManager.resolve(InjectionSymbols.StorageService) as EnmeshedStorageService; + let credentialKey = ""; + for (const resolved in resolvedCredentialOffer.offeredCredentialConfigurations) { + credentialKey = resolved; } - if (credential.claimFormat === ClaimFormat.SdJwtDc) { - return this.agent.sdJwtVc.store(credential.compact); + const displayInfo = resolvedCredentialOffer.offeredCredentialConfigurations[credentialKey].display as any; + + // if the displayInfo does not provide a logo - we try to load a logo from the issuers attributes + if ( + displayInfo !== undefined && + displayInfo[0]?.logo === undefined && + resolvedCredentialOffer.metadata.credentialIssuer.display !== undefined && + (resolvedCredentialOffer.metadata.credentialIssuer.display as any)?.[0] !== undefined && + (resolvedCredentialOffer.metadata.credentialIssuer.display as any)?.[0]?.["logo"] !== undefined + ) { + const logoInformation = (resolvedCredentialOffer.metadata.credentialIssuer.display as any)?.[0]?.["logo"]; + displayInfo[0]["logo"] = logoInformation; + } + + if (credential.claimFormat === ClaimFormat.MsoMdoc) { + return enmeshedStorageService.saveWithDisplay( + this.agent.context, + credential.base64Url, + credential.claimFormat.toString(), + JSON.stringify(displayInfo), + credentialKey + ); + } else if (credential.claimFormat === ClaimFormat.SdJwtDc) { + return enmeshedStorageService.saveWithDisplay( + this.agent.context, + credential.compact, + credential.claimFormat.toString(), + JSON.stringify(displayInfo), + credentialKey + ); + } else if (credential.claimFormat === ClaimFormat.SdJwtW3cVc) { + return enmeshedStorageService.saveWithDisplay( + this.agent.context, + credential.encoded, + credential.claimFormat.toString(), + JSON.stringify(displayInfo), + credentialKey + ); } throw new Error("Unsupported credential format"); }) ); - console.log("Stored credentials:", storedCredentials); - + this.agent.config.logger.info(`Stored credentials: ${JSON.stringify(storedCredentials)}`); return storedCredentials; } diff --git a/packages/content/src/attributes/types/VerifiableCredential.ts b/packages/content/src/attributes/types/VerifiableCredential.ts index 14c89eef3..55e14dbfa 100644 --- a/packages/content/src/attributes/types/VerifiableCredential.ts +++ b/packages/content/src/attributes/types/VerifiableCredential.ts @@ -6,14 +6,18 @@ import { PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH, PROPRIETARY_ATTRIBUTE_MAX export interface VerifiableCredentialJSON extends AbstractAttributeValueJSON { "@type": "VerifiableCredential"; title: string; - description?: string; - value: unknown; + value: string; + type: string; + displayInformation?: string; + key?: string; } export interface IVerifiableCredential extends IAbstractAttributeValue { title: string; - description?: string; - value: unknown; + value: string; + type: string; + displayInformation?: string; + key?: string; } @type("VerifiableCredential") @@ -22,13 +26,21 @@ export class VerifiableCredential extends AbstractAttributeValue { @validate({ max: PROPRIETARY_ATTRIBUTE_MAX_TITLE_LENGTH }) public title: string; + @serialize({ any: true }) + @validate({ customValidator: validateValue }) + public value: string; + + @serialize() + @validate({ nullable: true }) + public type: string; + @serialize() @validate({ nullable: true, max: PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH }) - public description?: string; + public displayInformation?: string; - @serialize({ any: true }) - @validate({ customValidator: validateValue }) - public value: unknown; + @serialize() + @validate({ nullable: true, max: PROPRIETARY_ATTRIBUTE_MAX_DESCRIPTION_LENGTH }) + public key?: string; public static get valueHints(): ValueHints { return ValueHints.from({}); diff --git a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts index 82d301e99..e76745477 100644 --- a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts +++ b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts @@ -1,6 +1,7 @@ export interface VerifiableCredentialDTO { - status: string; - message: string; data: string; id: string; + type: string; + displayInformation: string | undefined; + key: string | undefined; } diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts index 74999f084..2e7f3b932 100644 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -13,6 +13,7 @@ import { ResolveCredentialOfferUseCase, ResolveFetchedCredentialOfferUseCase } from "../../../useCases"; +import { GetVerifiableCredentialsUseCase } from "../../../useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase"; export class OpenId4VcFacade { public constructor( @@ -20,7 +21,8 @@ export class OpenId4VcFacade { @Inject private readonly fetchOfferUseCase: FetchCredentialOfferUseCase, @Inject private readonly resolveFetchedOfferUseCase: ResolveFetchedCredentialOfferUseCase, @Inject private readonly fetchProofRequestUseCase: FetchProofRequestUseCase, - @Inject private readonly accepProofRequestUseCase: AcceptProofRequestUseCase + @Inject private readonly accepProofRequestUseCase: AcceptProofRequestUseCase, + @Inject private readonly getVerifiableCredentialsUseCase: GetVerifiableCredentialsUseCase ) {} public async resolveCredentialOffer(request: ResolveCredentialOfferRequest): Promise> { @@ -42,4 +44,10 @@ export class OpenId4VcFacade { public async acceptProofRequest(request: AcceptProofRequestRequest): Promise> { return await this.accepProofRequestUseCase.execute(request); } + + public async getVerifiableCredentials(ids: string[] | undefined): Promise> { + // eslint-disable-next-line no-console + console.log("OpenId4VcFacade: getVerifiableCredentials called with ids:", JSON.stringify(ids)); + return await this.getVerifiableCredentialsUseCase.execute({ ids }); + } } diff --git a/packages/runtime/src/useCases/common/Schemas.ts b/packages/runtime/src/useCases/common/Schemas.ts index 24be566d0..9b5eac00c 100644 --- a/packages/runtime/src/useCases/common/Schemas.ts +++ b/packages/runtime/src/useCases/common/Schemas.ts @@ -2220,14 +2220,23 @@ export const CanCreateOutgoingRequestRequest: any = { "title": { "type": "string" }, - "description": { + "value": { "type": "string" }, - "value": {} + "type": { + "type": "string" + }, + "displayInformation": { + "type": "string" + }, + "key": { + "type": "string" + } }, "required": [ "@type", "title", + "type", "value" ], "additionalProperties": false @@ -4699,14 +4708,23 @@ export const CompleteOutgoingRequestRequest: any = { "title": { "type": "string" }, - "description": { + "value": { "type": "string" }, - "value": {} + "type": { + "type": "string" + }, + "displayInformation": { + "type": "string" + }, + "key": { + "type": "string" + } }, "required": [ "@type", "title", + "type", "value" ], "additionalProperties": false @@ -7175,14 +7193,23 @@ export const CreateAndCompleteOutgoingRequestFromRelationshipTemplateResponseReq "title": { "type": "string" }, - "description": { + "value": { "type": "string" }, - "value": {} + "type": { + "type": "string" + }, + "displayInformation": { + "type": "string" + }, + "key": { + "type": "string" + } }, "required": [ "@type", "title", + "type", "value" ], "additionalProperties": false @@ -10265,14 +10292,23 @@ export const CreateOutgoingRequestRequest: any = { "title": { "type": "string" }, - "description": { + "value": { "type": "string" }, - "value": {} + "type": { + "type": "string" + }, + "displayInformation": { + "type": "string" + }, + "key": { + "type": "string" + } }, "required": [ "@type", "title", + "type", "value" ], "additionalProperties": false @@ -13747,14 +13783,23 @@ export const ReceivedIncomingRequestRequest: any = { "title": { "type": "string" }, - "description": { + "value": { "type": "string" }, - "value": {} + "type": { + "type": "string" + }, + "displayInformation": { + "type": "string" + }, + "key": { + "type": "string" + } }, "required": [ "@type", "title", + "type", "value" ], "additionalProperties": false @@ -18892,14 +18937,23 @@ export const SucceedRepositoryAttributeRequest: any = { "title": { "type": "string" }, - "description": { + "value": { "type": "string" }, - "value": {} + "type": { + "type": "string" + }, + "displayInformation": { + "type": "string" + }, + "key": { + "type": "string" + } }, "required": [ "@type", "title", + "type", "value" ], "additionalProperties": false @@ -19482,6 +19536,25 @@ export const SentNotificationRequest: any = { } } +export const AcceptProofRequestRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/AcceptProofRequestRequest", + "definitions": { + "AcceptProofRequestRequest": { + "type": "object", + "properties": { + "jsonEncodedRequest": { + "type": "string" + } + }, + "required": [ + "jsonEncodedRequest" + ], + "additionalProperties": false + } + } +} + export const FetchCredentialOfferRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/FetchCredentialOfferRequest", @@ -19568,27 +19641,6 @@ export const FetchedCredentialOfferRequest: any = { } } -export const AcceptProofRequestRequest: any = { - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/AcceptProofRequestRequest", - "definitions": { - "AcceptProofRequestRequest": { - "type": "object", - "properties": { - "jsonEncodedRequest": { - "type": "string" - }, - }, - "required": [ - "jsonEncodedRequest" - ], - "additionalProperties": false - } - } -} - - - export const CreateSettingRequest: any = { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/CreateSettingRequest", @@ -22881,6 +22933,25 @@ export const LoadPeerTokenRequest: any = { } } +export const GetVerifiableCredentialsRequest: any = { + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "#/definitions/GetVerifiableCredentialsRequest", + "definitions": { + "GetVerifiableCredentialsRequest": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + } +} + export const City: any = { "$schema": "http://json-schema.org/draft-07/schema#", "$ref": "#/definitions/City", @@ -24251,14 +24322,23 @@ export const VerifiableCredential: any = { "title": { "type": "string" }, - "description": { + "value": { "type": "string" }, - "value": {} + "type": { + "type": "string" + }, + "displayInformation": { + "type": "string" + }, + "key": { + "type": "string" + } }, "required": [ "@type", "title", + "type", "value" ], "additionalProperties": false diff --git a/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts new file mode 100644 index 000000000..2d7d6227f --- /dev/null +++ b/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts @@ -0,0 +1,31 @@ +import { Result } from "@js-soft/ts-utils"; +import { OpenId4VcController } from "@nmshd/consumption"; +import { VerifiableCredentialDTO } from "@nmshd/runtime-types"; +import { Inject } from "@nmshd/typescript-ioc"; +import { SchemaRepository, SchemaValidator, UseCase } from "../../common"; + +export interface GetVerifiableCredentialsRequest { + ids: string[] | undefined; +} + +class Validator extends SchemaValidator { + public constructor(@Inject schemaRepository: SchemaRepository) { + super(schemaRepository.getSchema("GetVerifiableCredentialsRequest")); + } +} + +export class GetVerifiableCredentialsUseCase extends UseCase { + public constructor( + @Inject private readonly openId4VcContoller: OpenId4VcController, + @Inject validator: Validator + ) { + super(validator); + } + + protected override async executeInternal(request: GetVerifiableCredentialsRequest): Promise> { + // eslint-disable-next-line no-console + console.log("GetVerifiableCredentialsUseCase called with ids:", JSON.stringify(request.ids)); + const credentials = await this.openId4VcContoller.getVerifiableCredentials(request.ids); + return Result.ok(credentials as VerifiableCredentialDTO[]); + } +} diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts index 85b7d78e4..5608569d6 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts @@ -24,6 +24,6 @@ export class ResolveCredentialOfferUseCase extends UseCase> { const result = await this.openId4VcContoller.processCredentialOffer(request.credentialOfferUrl); - return Result.ok({ status: result.status, message: result.message, data: result.data } as VerifiableCredentialDTO); + return Result.ok({ id: result.value.id, data: result.value.data } as VerifiableCredentialDTO); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts index 4a8f542b9..82aec1da4 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts @@ -26,6 +26,11 @@ export class ResolveFetchedCredentialOfferUseCase extends UseCase> { const result = await this.openId4VcContoller.processFetchedCredentialOffer(request.data, request.requestedCredentials, request.pinCode); - return Result.ok({ status: result.status, message: result.message, data: result.data, id: result.id } as VerifiableCredentialDTO); + return Result.ok({ + data: result.data, + id: result.id, + type: result.type, + displayInformation: result.displayInformation + } as VerifiableCredentialDTO); } } diff --git a/packages/runtime/test/consumption/openid4vc.test.ts b/packages/runtime/test/consumption/openid4vc.test.ts index c0ac4944d..24eb5d899 100644 --- a/packages/runtime/test/consumption/openid4vc.test.ts +++ b/packages/runtime/test/consumption/openid4vc.test.ts @@ -48,8 +48,8 @@ describe("OpenID4VCI and OpenID4VCP", () => { requestedCredentials: requestedCredentials }); - const status = acceptanceResult.value.status; - expect(status).toBe("success"); + const status = acceptanceResult.isSuccess; + expect(status).toBe(true); }, 10000000); test("should be able to process a given credential presentation", async () => { @@ -111,9 +111,34 @@ describe("OpenID4VCI and OpenID4VCP", () => { }); const jsonRepresentation = result.value.jsonRepresentation; + // parse json and determine if requirements Satisfied is true + const proofRequest = JSON.parse(jsonRepresentation); + expect(proofRequest.presentationExchange.credentialsForRequest.areRequirementsSatisfied).toBe(true); + const presentationResult = await consumptionServices.openId4Vc.acceptProofRequest({ jsonEncodedRequest: jsonRepresentation }); expect(presentationResult.value.status).toBe(200); }, 10000000); + + test("getting all verifiable credentials should not return an empy list", async () => { + // Ensure the first test has completed and credentialOfferUrl is set + expect(credentialOfferUrl).toBeDefined(); + const acceptanceResult = await consumptionServices.openId4Vc.getVerifiableCredentials(undefined); + expect(acceptanceResult.isError).toBe(false); + expect(acceptanceResult.value.length).toBeGreaterThan(0); + }, 10000000); + + test("getting the eralier created verifiable credential by id should return exactly one credential", async () => { + // Ensure the first test has completed and credentialOfferUrl is set + expect(credentialOfferUrl).toBeDefined(); + const allCredentialsResult = await consumptionServices.openId4Vc.getVerifiableCredentials(undefined); + expect(allCredentialsResult.isError).toBe(false); + expect(allCredentialsResult.value.length).toBeGreaterThan(0); + const firstCredentialId = allCredentialsResult.value[0].id; + const singleCredentialResult = await consumptionServices.openId4Vc.getVerifiableCredentials([firstCredentialId]); + expect(singleCredentialResult.isError).toBe(false); + expect(singleCredentialResult.value).toHaveLength(1); + expect(singleCredentialResult.value[0].id).toBe(firstCredentialId); + }, 10000000); }); From a41e459db648fc81e59a97c68ca4ec6aa3a4103e Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Mon, 13 Oct 2025 08:38:33 +0200 Subject: [PATCH 37/75] fix: unused comment --- packages/consumption/src/modules/openid4vc/local/BaseAgent.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index 624788cd4..9b4b9642e 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars import { Agent, ConsoleLogger, From cfa9e85d54753eae3b7a439ab694ddc18ad1b6f0 Mon Sep 17 00:00:00 2001 From: Jakob Erben Date: Fri, 17 Oct 2025 08:40:48 +0200 Subject: [PATCH 38/75] chore: patch case sensitive compare --- ...openid4vp+0.3.0-alpha-20250825150235.patch | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 patches/@openid4vc+openid4vp+0.3.0-alpha-20250825150235.patch diff --git a/patches/@openid4vc+openid4vp+0.3.0-alpha-20250825150235.patch b/patches/@openid4vc+openid4vp+0.3.0-alpha-20250825150235.patch new file mode 100644 index 000000000..c8b0ff0bc --- /dev/null +++ b/patches/@openid4vc+openid4vp+0.3.0-alpha-20250825150235.patch @@ -0,0 +1,21 @@ +diff --git a/node_modules/@openid4vc/openid4vp/dist/index.js b/node_modules/@openid4vc/openid4vp/dist/index.js +index 575e4fd..78bdf6b 100644 +--- a/node_modules/@openid4vc/openid4vp/dist/index.js ++++ b/node_modules/@openid4vc/openid4vp/dist/index.js +@@ -599,10 +599,12 @@ async function validateOpenid4vpClientId(options, parserConfig) { + if (!isOpenid4vpAuthorizationRequestDcApi(authorizationRequestPayload)) { + const uri = authorizationRequestPayload.redirect_uri ?? authorizationRequestPayload.response_uri; + if (!uri || new import_utils5.URL(uri).hostname !== clientIdIdentifier) { +- throw new import_oauth23.Oauth2ServerErrorResponseError({ +- error: import_oauth23.Oauth2ErrorCodes.InvalidRequest, +- error_description: "Invalid client identifier. The fully qualified domain name of the redirect_uri value MUST match the Client Identifier without the prefix x509_san_dns." +- }); ++ if(!uri || new import_utils5.URL(uri).hostname.toLowerCase() !== clientIdIdentifier.toLowerCase()){ ++ throw new import_oauth23.Oauth2ServerErrorResponseError({ ++ error: import_oauth23.Oauth2ErrorCodes.InvalidRequest, ++ error_description: "Invalid client identifier. The fully qualified domain name of the redirect_uri value MUST match the Client Identifier without the prefix x509_san_dns." ++ }); ++ } + } + } + } else if (clientIdPrefix === "x509_san_uri") { From 7287af0f7197bfe60805ed8ac1337711182a8f5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 23 Oct 2025 09:05:37 +0200 Subject: [PATCH 39/75] chore: add audit exclude --- .ci/runChecks.sh | 2 +- package-lock.json | 47 ----------------------------------------------- 2 files changed, 1 insertion(+), 48 deletions(-) diff --git a/.ci/runChecks.sh b/.ci/runChecks.sh index 3192c5be4..1618e86f8 100755 --- a/.ci/runChecks.sh +++ b/.ci/runChecks.sh @@ -6,4 +6,4 @@ npm run lint:eslint npm run lint:prettier npm run --workspaces cdep npx --workspaces license-check -npx better-npm-audit audit +npx better-npm-audit audit --exclude 1108959 diff --git a/package-lock.json b/package-lock.json index 1b5fc85bc..1ae0c2e7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9071,16 +9071,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/make-fetch-happen/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/make-fetch-happen/node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", @@ -9105,27 +9095,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/make-fetch-happen/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/make-fetch-happen/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -9133,22 +9102,6 @@ "dev": true, "license": "ISC" }, - "node_modules/make-fetch-happen/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/makeerror": { "version": "1.0.12", "dev": true, From 9174c2be8a90a0ad901224cb1b78fa04fe8672ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 23 Oct 2025 10:19:53 +0200 Subject: [PATCH 40/75] fix: export VerifiableCredential --- packages/content/src/attributes/types/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/content/src/attributes/types/index.ts b/packages/content/src/attributes/types/index.ts index dd989ca8b..8d60eee5a 100644 --- a/packages/content/src/attributes/types/index.ts +++ b/packages/content/src/attributes/types/index.ts @@ -15,3 +15,4 @@ export * from "./proprietary"; export * from "./relationship"; export * from "./statement"; export * from "./strings"; +export * from "./VerifiableCredential"; From e3ef816748157ef68ad12bec5ca511c2c4e4e62f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Thu, 23 Oct 2025 10:21:45 +0200 Subject: [PATCH 41/75] fix: type some functions --- .../src/modules/openid4vc/OpenId4VcController.ts | 11 ++++++++--- .../src/modules/openid4vc/local/BaseAgent.ts | 2 +- .../modules/openid4vc/local/EnmeshedStorageService.ts | 3 ++- .../consumption/src/modules/openid4vc/local/Holder.ts | 7 ++++--- .../src/consumption/VerifiableCredentialDTO.ts | 4 ++-- .../openid4vc/ResolveFetchedCredentialUseCase.ts | 2 +- packages/runtime/test/consumption/openid4vc.test.ts | 1 + 7 files changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 1a1cb1fe5..c4fcf5703 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -1,3 +1,4 @@ +import { VerifiableCredential } from "@nmshd/content"; import { ConsumptionBaseController } from "../../consumption/ConsumptionBaseController"; import { ConsumptionController } from "../../consumption/ConsumptionController"; import { ConsumptionControllerName } from "../../consumption/ConsumptionControllerName"; @@ -17,19 +18,23 @@ export class OpenId4VcController extends ConsumptionBaseController { }; } - public async processFetchedCredentialOffer(fetchedCredentialOffer: string, requestedCredentialOffers: string[], pinCode?: string): Promise { + public async processFetchedCredentialOffer( + fetchedCredentialOffer: string, + requestedCredentialOffers: string[], + pinCode?: string + ): Promise<{ data: string; id: string; type: string; displayInformation: string | undefined }> { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const credentialOffer = JSON.parse(fetchedCredentialOffer); const credentials = await holder.requestAndStoreCredentials(credentialOffer, { credentialsToRequest: requestedCredentialOffers, txCode: pinCode }); // TODO: support multiple credentials - const credential = credentials[0].content.value; + const credential = credentials[0].content.value as VerifiableCredential; return { data: credential.value, // multi credentials not supported yet - id: credentials[0].id, + id: credentials[0].id.toString(), type: credential.type, displayInformation: credential.displayInformation }; diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index 9b4b9642e..7ed15b177 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -56,7 +56,7 @@ export class BaseAgent { ); } - public async initializeAgent(privateKey: string): Promise { + public async initializeAgent(privateKey: string): Promise { // as we are not using askar we need to set the storage version const storrage = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); const versionRecord = { id: "STORAGE_VERSION_RECORD_ID", storageVersion: "0.5.0", value: "0.5.0" }; diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 8f5e524e6..735d87d0c 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -19,6 +19,7 @@ import { IdentityAttribute } from "@nmshd/content"; import { CoreId } from "@nmshd/core-types"; import { AccountController } from "@nmshd/transport"; import { AttributesController } from "../../attributes/AttributesController"; +import { LocalAttribute } from "../../attributes/local/LocalAttribute"; @injectable() export class EnmeshedStorageService implements StorageService { @@ -64,7 +65,7 @@ export class EnmeshedStorageService implements StorageServ return await Promise.resolve(); } - public async saveWithDisplay(agentContext: AgentContext, value: string, type: string, displayInformation: string, title: string): Promise { + public async saveWithDisplay(agentContext: AgentContext, value: string, type: string, displayInformation: string, title: string): Promise { const owner = this.accountController.identity.address; const identityAttribute = IdentityAttribute.from({ value: { diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 729a3b9af..def3cbdb6 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -22,7 +22,7 @@ import { type OpenId4VpResolvedAuthorizationRequest } from "@credo-ts/openid4vc"; import { AccountController } from "@nmshd/transport"; -import { AttributesController } from "../../attributes"; +import { AttributesController, LocalAttribute } from "../../attributes"; import { BaseAgent } from "./BaseAgent"; import { EnmeshedStorageService } from "./EnmeshedStorageService"; @@ -58,7 +58,7 @@ export class Holder extends BaseAgent> return allCredentials.filter((vc) => ids.includes(vc.id.toString())); } - public async resolveCredentialOffer(credentialOffer: string): Promise { + public async resolveCredentialOffer(credentialOffer: string): Promise { return await this.agent.openid4vc.holder.resolveCredentialOffer(credentialOffer); } @@ -74,6 +74,7 @@ export class Holder extends BaseAgent> preAuthorizedCode: grants[preAuthorizedCodeGrantIdentifier]["pre-authorized_code"] } as const; } + if (resolvedCredentialOffer.credentialOfferPayload.grants?.[authorizationCodeGrantIdentifier]) { const resolvedAuthorizationRequest = await this.agent.openid4vc.holder.resolveOpenId4VciAuthorizationRequest(resolvedCredentialOffer, { clientId: this.client.clientId, @@ -108,7 +109,7 @@ export class Holder extends BaseAgent> redirectUri?: string; txCode?: string; } - ): Promise { + ): Promise { const tokenResponse = await this.agent.openid4vc.holder.requestToken( options.code && options.clientId ? { diff --git a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts index e76745477..ff4fe7e2d 100644 --- a/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts +++ b/packages/runtime-types/src/consumption/VerifiableCredentialDTO.ts @@ -2,6 +2,6 @@ export interface VerifiableCredentialDTO { data: string; id: string; type: string; - displayInformation: string | undefined; - key: string | undefined; + displayInformation?: string; + key?: string; } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts index 82aec1da4..81d090b3a 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveFetchedCredentialUseCase.ts @@ -31,6 +31,6 @@ export class ResolveFetchedCredentialOfferUseCase extends UseCase { const status = acceptanceResult.isSuccess; expect(status).toBe(true); + expect(typeof acceptanceResult.value.id).toBe("string"); }, 10000000); test("should be able to process a given credential presentation", async () => { From 94c45fd4f50a0bc76184f56d67be8345ae288b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= Date: Mon, 3 Nov 2025 11:09:11 +0100 Subject: [PATCH 42/75] chore: audit fix --- .ci/runChecks.sh | 2 +- package-lock.json | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.ci/runChecks.sh b/.ci/runChecks.sh index 1618e86f8..3192c5be4 100755 --- a/.ci/runChecks.sh +++ b/.ci/runChecks.sh @@ -6,4 +6,4 @@ npm run lint:eslint npm run lint:prettier npm run --workspaces cdep npx --workspaces license-check -npx better-npm-audit audit --exclude 1108959 +npx better-npm-audit audit diff --git a/package-lock.json b/package-lock.json index 64244b416..d7c832890 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3595,7 +3595,6 @@ "version": "24.10.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.0.tgz", "integrity": "sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==", - "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -12734,7 +12733,9 @@ } }, "node_modules/validator": { - "version": "13.15.15", + "version": "13.15.20", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.20.tgz", + "integrity": "sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw==", "license": "MIT", "engines": { "node": ">= 0.10" From 7f1b597f54bea45b716c970ca00f0eea2b0e1ca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Mon, 10 Nov 2025 12:44:39 +0100 Subject: [PATCH 43/75] Update formatting and naming (#835) * chore: update formatting * chore: rename storrage to storage * refactor: properly query OwnIdentityAttributes * chore: rm some console logs --- .../modules/openid4vc/OpenId4VcController.ts | 3 +-- .../src/modules/openid4vc/local/BaseAgent.ts | 4 ++-- .../local/EnmeshedHolderKeyManagmentService.ts | 12 +++++++++--- .../openid4vc/local/EnmeshedStorageService.ts | 18 +++++++++--------- .../facades/consumption/OpenId4VcFacade.ts | 2 -- .../GetVerifiableCredentialsUseCase.ts | 2 -- 6 files changed, 21 insertions(+), 20 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index c4fcf5703..03d958ff8 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -77,8 +77,7 @@ export class OpenId4VcController extends ConsumptionBaseController { public async getVerifiableCredentials(ids: string[] | undefined): Promise { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); - // eslint-disable-next-line no-console - console.log("Fetching credentials with ids:", JSON.stringify(ids)); + const credentials = await holder.getVerifiableCredentials(ids); const result = []; for (const credential of credentials) { diff --git a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts index 7ed15b177..8188c87ea 100644 --- a/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts +++ b/packages/consumption/src/modules/openid4vc/local/BaseAgent.ts @@ -58,9 +58,9 @@ export class BaseAgent { public async initializeAgent(privateKey: string): Promise { // as we are not using askar we need to set the storage version - const storrage = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); + const storage = this.agent.dependencyManager.resolve>(InjectionSymbols.StorageService); const versionRecord = { id: "STORAGE_VERSION_RECORD_ID", storageVersion: "0.5.0", value: "0.5.0" }; - await storrage.save(this.agent.context, versionRecord); + await storage.save(this.agent.context, versionRecord); const kmsConfig = this.agent.dependencyManager.resolve(KeyManagementModuleConfig); kmsConfig.registerBackend(new EnmshedHolderKeyManagmentService()); diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts index 269d0cdf4..bce63ae53 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedHolderKeyManagmentService.ts @@ -64,9 +64,9 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { this.updateGlobalInstance(this.keystore); } - public updateGlobalInstance(storrage: Map): void { - // console.log(`FKM: updating global instance ${JSON.stringify(Array.from(storrage.entries()))}`); - (globalThis as any).fakeKeyStorage = storrage; + public updateGlobalInstance(storage: Map): void { + // console.log(`FKM: updating global instance ${JSON.stringify(Array.from(storage.entries()))}`); + (globalThis as any).fakeKeyStorage = storage; // console.log(`FKM: global instance state ${JSON.stringify(Array.from((globalThis as any).fakeKeyStorage.entries()))}`); } @@ -98,6 +98,7 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { } return false; } + public getPublicKey(agentContext: AgentContext, keyId: string): Promise { const keyPair = this.keystore.get(keyId); if (!keyPair) { @@ -107,6 +108,7 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { return Promise.resolve((JSON.parse(keyPair) as JwkKeyPair).publicKey as KmsJwkPublic); } + public async createKey(agentContext: AgentContext, options: KmsCreateKeyOptions): Promise> { options.keyId ??= "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { // Use libsodium's randombytes_uniform for secure random number generation @@ -187,10 +189,12 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { publicJwk: publicJwk as KmsJwkPublic } as KmsCreateKeyReturn); } + public importKey(agentContext: AgentContext, options: KmsImportKeyOptions): Promise> { agentContext.config.logger.debug(`EKM: Importing key with ${JSON.stringify(options)}`); throw new Error("Method not implemented."); } + public deleteKey(agentContext: AgentContext, options: KmsDeleteKeyOptions): Promise { if (this.keystore.has(options.keyId)) { agentContext.config.logger.debug(`EKM: Deleting key with id ${options.keyId}`); @@ -200,6 +204,7 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { } throw new Error(`key with id ${options.keyId} not found. and cannot be deleted`); } + public async sign(agentContext: AgentContext, options: KmsSignOptions): Promise { agentContext.config.logger.debug(`EKM: Signing data with key id ${options.keyId} using algorithm ${options.algorithm}`); @@ -436,6 +441,7 @@ export class EnmshedHolderKeyManagmentService implements KeyManagementService { agentContext.config.logger.debug(`EKM: Decrypting data with key id ${options.key.keyId} using options ${options}`); throw new Error("Method not implemented."); } + public randomBytes(agentContext: AgentContext, options: KmsRandomBytesOptions): KmsRandomBytesReturn { agentContext.config.logger.debug(`EKM: Generating ${options.length} random bytes`); return _sodium.randombytes_buf(options.length); // Uint8Array diff --git a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts index 566931911..80af38f70 100644 --- a/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts +++ b/packages/consumption/src/modules/openid4vc/local/EnmeshedStorageService.ts @@ -23,7 +23,7 @@ import { AttributesController } from "../../attributes/AttributesController"; @injectable() export class EnmeshedStorageService implements StorageService { - public storrage: Map = new Map(); + public storage: Map = new Map(); public constructor( public accountController: AccountController, @@ -32,12 +32,12 @@ export class EnmeshedStorageService implements StorageServ public async save(agentContext: AgentContext, record: T): Promise { if (record.id === "STORAGE_VERSION_RECORD_ID") { - this.storrage.set(record.id, record); + this.storage.set(record.id, record); return; } if (record.type === "DidRecord") { - this.storrage.set(record.id, record); + this.storage.set(record.id, record); return; } @@ -126,8 +126,8 @@ export class EnmeshedStorageService implements StorageServ } public async getById(agentContext: AgentContext, recordClass: BaseRecordConstructor, id: string): Promise { - if (this.storrage.has(id)) { - const record = this.storrage.get(id); + if (this.storage.has(id)) { + const record = this.storage.get(id); if (!record) throw new Error(`Record with id ${id} not found`); return record; } @@ -144,7 +144,7 @@ export class EnmeshedStorageService implements StorageServ public async getAll(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { const records: T[] = []; - const attributes = await this.attributeController.getLocalAttributes({ "content.value.@type": "VerifiableCredential", shareInfo: { $exists: false } }); + const attributes = await this.attributeController.getLocalAttributes({ "@type": "OwnIdentityAttribute", "content.value.@type": "VerifiableCredential" }); for (const attribute of attributes) { // TODO: Correct casting const type = (attribute as any).content.value.type; @@ -186,7 +186,7 @@ export class EnmeshedStorageService implements StorageServ // should only be used for exporting data out of the credo environment public async getAllAsAttributes(agentContext: AgentContext, recordClass: BaseRecordConstructor): Promise { agentContext.config.logger.debug(`Getting all records of type ${recordClass.name}`); - const attributes = await this.attributeController.getLocalAttributes({ "content.value.@type": "VerifiableCredential", shareInfo: { $exists: false } }); + const attributes = await this.attributeController.getLocalAttributes({ "@type": "OwnIdentityAttribute", "content.value.@type": "VerifiableCredential" }); return attributes; } @@ -206,8 +206,8 @@ export class EnmeshedStorageService implements StorageServ } } if (records.length === 0) { - // try to recover over local storrage - temporary fix - for (const record of this.storrage.values()) { + // try to recover over local storage - temporary fix + for (const record of this.storage.values()) { let match = true; // there may be keys labeled with an $or - solve them accordingly // TODO: $or and other operators not yet supported diff --git a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts index 2e7f3b932..13e24589c 100644 --- a/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts +++ b/packages/runtime/src/extensibility/facades/consumption/OpenId4VcFacade.ts @@ -46,8 +46,6 @@ export class OpenId4VcFacade { } public async getVerifiableCredentials(ids: string[] | undefined): Promise> { - // eslint-disable-next-line no-console - console.log("OpenId4VcFacade: getVerifiableCredentials called with ids:", JSON.stringify(ids)); return await this.getVerifiableCredentialsUseCase.execute({ ids }); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts index 2d7d6227f..725d55578 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/GetVerifiableCredentialsUseCase.ts @@ -23,8 +23,6 @@ export class GetVerifiableCredentialsUseCase extends UseCase> { - // eslint-disable-next-line no-console - console.log("GetVerifiableCredentialsUseCase called with ids:", JSON.stringify(request.ids)); const credentials = await this.openId4VcContoller.getVerifiableCredentials(request.ids); return Result.ok(credentials as VerifiableCredentialDTO[]); } From f608d24831730dcc7f9ece3696f09b170bced981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Mon, 10 Nov 2025 15:17:38 +0100 Subject: [PATCH 44/75] Resolve credential offer is throwing an error (#836) * fix. update controller * fix: update usecases * fix: get rid of more anys * fix: properly parse message --- .../modules/openid4vc/OpenId4VcController.ts | 27 +++++++----- .../src/modules/openid4vc/local/Holder.ts | 44 ++++++++++++++++--- .../openid4vc/AcceptProofRequestUseCase.ts | 2 +- .../openid4vc/FetchCredentialOfferUseCase.ts | 2 +- .../ResolveCredentialOfferUseCase.ts | 2 +- 5 files changed, 57 insertions(+), 20 deletions(-) diff --git a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts index 03d958ff8..3ed6bd2a0 100644 --- a/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts +++ b/packages/consumption/src/modules/openid4vc/OpenId4VcController.ts @@ -9,7 +9,7 @@ export class OpenId4VcController extends ConsumptionBaseController { super(ConsumptionControllerName.OpenId4VcController, parent); } - public async fetchCredentialOffer(credentialOfferUrl: string): Promise { + public async fetchCredentialOffer(credentialOfferUrl: string): Promise<{ data: string }> { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOfferUrl); @@ -40,19 +40,25 @@ export class OpenId4VcController extends ConsumptionBaseController { }; } - public async processCredentialOffer(credentialOffer: string): Promise { + public async processCredentialOffer(credentialOffer: string): Promise<{ data: string; id: string; type: string; displayInformation: string | undefined }> { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveCredentialOffer(credentialOffer); - const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: ["EmployeeIdCard-sdjwt"] }); + const credentials = await holder.requestAndStoreCredentials(res, { credentialsToRequest: Object.keys(res.offeredCredentialConfigurations) }); + + // TODO: support multiple credentials + const credential = credentials[0].content.value as VerifiableCredential; return { - id: credentials.length > 0 ? credentials[0].id : undefined, - data: JSON.stringify(credentials) + data: credential.value, + // multi credentials not supported yet + id: credentials[0].id.toString(), + type: credential.type, + displayInformation: credential.displayInformation }; } - public async fetchProofRequest(proofRequestUrl: string): Promise { + public async fetchProofRequest(proofRequestUrl: string): Promise<{ data: string }> { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const res = await holder.resolveProofRequest(proofRequestUrl); @@ -61,17 +67,16 @@ export class OpenId4VcController extends ConsumptionBaseController { }; } - public async acceptProofRequest(jsonEncodedRequest: string): Promise { + public async acceptProofRequest(jsonEncodedRequest: string): Promise<{ status: number; message: string | Record | null }> { const holder = new Holder(this.parent.accountController, this.parent.attributes); await holder.initializeAgent("96213c3d7fc8d4d6754c7a0fd969598e"); const fetchedRequest = JSON.parse(jsonEncodedRequest); // parse the credential type to be sdjwt const serverResponse = await holder.acceptPresentationRequest(fetchedRequest); - return { - status: serverResponse.status, - message: serverResponse.body - }; + if (!serverResponse) throw new Error("No response from server"); + + return { status: serverResponse.status, message: serverResponse.body }; } public async getVerifiableCredentials(ids: string[] | undefined): Promise { diff --git a/packages/consumption/src/modules/openid4vc/local/Holder.ts b/packages/consumption/src/modules/openid4vc/local/Holder.ts index 78801f349..fac99f5f6 100644 --- a/packages/consumption/src/modules/openid4vc/local/Holder.ts +++ b/packages/consumption/src/modules/openid4vc/local/Holder.ts @@ -15,6 +15,7 @@ import { import { OpenId4VcModule, OpenId4VciAuthorizationFlow, + OpenId4VciDpopRequestOptions, authorizationCodeGrantIdentifier, preAuthorizedCodeGrantIdentifier, type OpenId4VciMetadata, @@ -66,7 +67,29 @@ export class Holder extends BaseAgent> return await this.agent.openid4vc.holder.resolveIssuerMetadata(credentialIssuer); } - public async initiateAuthorization(resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, credentialsToRequest: string[]): Promise { + public async initiateAuthorization( + resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, + credentialsToRequest: string[] + ): Promise< + | { + readonly authorizationFlow: "PreAuthorized"; + readonly preAuthorizedCode: string; + } + | { + readonly authorizationFlow: "PresentationDuringIssuance"; + readonly openid4vpRequestUrl: string; + readonly authSession: string; + readonly dpop?: OpenId4VciDpopRequestOptions; + readonly preAuthorizedCode?: undefined; + } + | { + readonly authorizationFlow: "Oauth2Redirect"; + readonly authorizationRequestUrl: string; + readonly codeVerifier?: string; + readonly dpop?: OpenId4VciDpopRequestOptions; + readonly preAuthorizedCode?: undefined; + } + > { const grants = resolvedCredentialOffer.credentialOfferPayload.grants; if (grants?.[preAuthorizedCodeGrantIdentifier]) { return { @@ -232,13 +255,23 @@ export class Holder extends BaseAgent> return storedCredentials; } - public async resolveProofRequest(proofRequest: string): Promise { + public async resolveProofRequest(proofRequest: string): Promise { const resolvedProofRequest = await this.agent.openid4vc.holder.resolveOpenId4VpAuthorizationRequest(proofRequest); return resolvedProofRequest; } - public async acceptPresentationRequest(resolvedPresentationRequest: OpenId4VpResolvedAuthorizationRequest): Promise { + public async acceptPresentationRequest(resolvedPresentationRequest: OpenId4VpResolvedAuthorizationRequest): Promise< + | { + readonly status: number; + readonly body: string | Record | null; + } + | { + readonly status: number; + readonly body: Record; + } + | undefined + > { if (!resolvedPresentationRequest.presentationExchange && !resolvedPresentationRequest.dcql) { throw new Error("Missing presentation exchange or dcql on resolved authorization request"); } @@ -293,12 +326,11 @@ export class Holder extends BaseAgent> return submissionResult.serverResponse; } - public async exit(): Promise { + public async exit(): Promise { await this.shutdown(); - process.exit(0); } - public async restart(): Promise { + public async restart(): Promise { await this.shutdown(); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts index 590488332..bba2b291d 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/AcceptProofRequestUseCase.ts @@ -24,6 +24,6 @@ export class AcceptProofRequestUseCase extends UseCase> { const result = await this.openId4VcContoller.acceptProofRequest(request.jsonEncodedRequest); - return Result.ok({ status: result.status, message: result.success } as AcceptProofRequestDTO); + return Result.ok({ status: result.status, message: JSON.stringify(result.message) } as AcceptProofRequestDTO); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts index 9396a7ab3..6d1067aad 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/FetchCredentialOfferUseCase.ts @@ -10,7 +10,7 @@ export interface FetchCredentialOfferRequest { class Validator extends SchemaValidator { public constructor(@Inject schemaRepository: SchemaRepository) { - super(schemaRepository.getSchema("ResolveCredentialOfferRequest")); + super(schemaRepository.getSchema("FetchCredentialOfferRequest")); } } diff --git a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts index 5608569d6..4a29eb874 100644 --- a/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts +++ b/packages/runtime/src/useCases/consumption/openid4vc/ResolveCredentialOfferUseCase.ts @@ -24,6 +24,6 @@ export class ResolveCredentialOfferUseCase extends UseCase> { const result = await this.openId4VcContoller.processCredentialOffer(request.credentialOfferUrl); - return Result.ok({ id: result.value.id, data: result.value.data } as VerifiableCredentialDTO); + return Result.ok(result); } } From f3949828cd915181a73c3bcf3907e34257e11bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6nig?= <33655937+jkoenig134@users.noreply.github.com> Date: Tue, 11 Nov 2025 10:19:01 +0100 Subject: [PATCH 45/75] Remove zipped libraries (#838) * chore: remove consumption * chore: remove content * chore: remove runtime --- .../nmshd-consumption-7.0.0-oid4vc.1.tgz | Bin 227267 -> 0 bytes .../content/nmshd-content-7.0.0-oid4vc.1.tgz | Bin 138873 -> 0 bytes .../runtime/nmshd-runtime-7.0.0-oid4vc.1.tgz | Bin 352119 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/consumption/nmshd-consumption-7.0.0-oid4vc.1.tgz delete mode 100644 packages/content/nmshd-content-7.0.0-oid4vc.1.tgz delete mode 100644 packages/runtime/nmshd-runtime-7.0.0-oid4vc.1.tgz diff --git a/packages/consumption/nmshd-consumption-7.0.0-oid4vc.1.tgz b/packages/consumption/nmshd-consumption-7.0.0-oid4vc.1.tgz deleted file mode 100644 index 54d8671687c4c5672c70e256204858f0d165b1be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227267 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