From ee841bf8181ddce23483ccf847cd0e90bb64daa7 Mon Sep 17 00:00:00 2001 From: Rishabh Singh Date: Thu, 13 Aug 2026 17:58:35 +0530 Subject: [PATCH 1/7] feat: pay on behalf --- decrypted.json | 1 + package-lock.json | 353 ++++++++++++++- package.json | 10 +- .../gasless/admin/add-authorized-caller.ts | 29 ++ src/commands/gasless/admin/add-registry.ts | 25 ++ .../gasless/admin/add-title-escrow.ts | 29 ++ src/commands/gasless/admin/common.ts | 85 ++++ src/commands/gasless/admin/delegate-user.ts | 81 ++++ src/commands/gasless/admin/fund-paymaster.ts | 45 ++ src/commands/gasless/admin/index.ts | 11 + .../gasless/admin/remove-authorized-caller.ts | 29 ++ src/commands/gasless/admin/remove-registry.ts | 24 + .../gasless/admin/remove-title-escrow.ts | 28 ++ .../admin/remove-user-from-whitelist.ts | 29 ++ src/commands/gasless/admin/set-daily-limit.ts | 35 ++ .../gasless/admin/set-user-whitelist.ts | 45 ++ src/commands/gasless/admin/stake-paymaster.ts | 56 +++ src/commands/gasless/client.ts | 98 ++++ src/commands/gasless/common.ts | 202 +++++++++ src/commands/gasless/config.ts | 104 +++++ .../deploy/deploy-platform-paymaster.ts | 125 ++++++ .../deploy/deploy-token-registry-gasless.ts | 150 +++++++ src/commands/gasless/eligibility.ts | 253 +++++++++++ src/commands/gasless/index.ts | 20 + .../title-escrow/accept-return-to-issuer.ts | 83 ++++ src/commands/gasless/title-escrow/nominate.ts | 92 ++++ .../title-escrow/reject-return-to-issuer.ts | 83 ++++ .../reject-transfer-beneficiary.ts | 90 ++++ .../title-escrow/reject-transfer-holder.ts | 90 ++++ .../title-escrow/reject-transfer-owners.ts | 90 ++++ .../gasless/title-escrow/return-to-issuer.ts | 88 ++++ .../title-escrow/transfer-beneficiary.ts | 92 ++++ .../gasless/title-escrow/transfer-holder.ts | 91 ++++ .../gasless/title-escrow/transfer-owners.ts | 98 ++++ src/commands/gasless/token-regitsry/mint.ts | 126 ++++++ src/commands/gasless/types.ts | 63 +++ .../title-escrow/accept-return-to-issuer.ts | 20 +- .../title-escrow/endorse-transfer-owner.ts | 20 +- .../title-escrow/nominate-transfer-owner.ts | 17 +- .../title-escrow/reject-return-to-issuer.ts | 20 +- .../title-escrow/reject-transfer-holder.ts | 20 +- .../reject-transfer-owner-holder.ts | 20 +- .../title-escrow/reject-transfer-owner.ts | 20 +- src/commands/title-escrow/return-to-issuer.ts | 17 +- src/commands/title-escrow/transfer-holder.ts | 17 +- .../title-escrow/transfer-owner-holder.ts | 17 +- src/commands/token-registry/deploy.ts | 21 +- src/commands/token-registry/mint.ts | 18 +- .../admin/add-authorized-caller.test.ts | 122 +++++ .../gasless/admin/add-registry.test.ts | 122 +++++ .../gasless/admin/add-title-escrow.test.ts | 122 +++++ tests/commands/gasless/admin/common.test.ts | 191 ++++++++ .../gasless/admin/delegate-user.test.ts | 198 +++++++++ .../gasless/admin/fund-paymaster.test.ts | 168 +++++++ .../admin/remove-authorized-caller.test.ts | 122 +++++ .../gasless/admin/remove-registry.test.ts | 129 ++++++ .../gasless/admin/remove-title-escrow.test.ts | 129 ++++++ .../admin/remove-user-from-whitelist.test.ts | 129 ++++++ .../gasless/admin/set-daily-limit.test.ts | 144 ++++++ .../gasless/admin/set-user-whitelist.test.ts | 168 +++++++ .../gasless/admin/stake-paymaster.test.ts | 182 ++++++++ tests/commands/gasless/client.test.ts | 230 ++++++++++ tests/commands/gasless/common.test.ts | 348 +++++++++++++++ tests/commands/gasless/config.test.ts | 252 +++++++++++ .../deploy/deploy-platform-paymaster.test.ts | 389 ++++++++++++++++ .../deploy-token-registry-gasless.test.ts | 420 ++++++++++++++++++ tests/commands/gasless/eligibility.test.ts | 382 ++++++++++++++++ .../accept-return-to-issuer.test.ts | 223 ++++++++++ .../gasless/title-escrow/nominate.test.ts | 217 +++++++++ .../reject-return-to-issuer.test.ts | 223 ++++++++++ .../reject-transfer-beneficiary.test.ts | 226 ++++++++++ .../reject-transfer-holder.test.ts | 226 ++++++++++ .../reject-transfer-owners.test.ts | 226 ++++++++++ .../title-escrow/return-to-issuer.test.ts | 213 +++++++++ .../title-escrow/transfer-beneficiary.test.ts | 217 +++++++++ .../title-escrow/transfer-holder.test.ts | 217 +++++++++ .../title-escrow/transfer-owners.test.ts | 225 ++++++++++ .../gasless/token-regitsry/mint.test.ts | 328 ++++++++++++++ tsconfig.json | 4 +- w3c-website-fixtures/signed/signed_vc.json | 47 ++ wr/didKeyPairs.json | 8 + wr/operative/signed_vc.json | 109 +++++ wr/operative/vc.json | 88 ++++ wr/signed_vc.json | 75 ++++ wr/vc.json | 67 +++ 85 files changed, 10050 insertions(+), 16 deletions(-) create mode 100644 decrypted.json create mode 100644 src/commands/gasless/admin/add-authorized-caller.ts create mode 100644 src/commands/gasless/admin/add-registry.ts create mode 100644 src/commands/gasless/admin/add-title-escrow.ts create mode 100644 src/commands/gasless/admin/common.ts create mode 100644 src/commands/gasless/admin/delegate-user.ts create mode 100644 src/commands/gasless/admin/fund-paymaster.ts create mode 100644 src/commands/gasless/admin/index.ts create mode 100644 src/commands/gasless/admin/remove-authorized-caller.ts create mode 100644 src/commands/gasless/admin/remove-registry.ts create mode 100644 src/commands/gasless/admin/remove-title-escrow.ts create mode 100644 src/commands/gasless/admin/remove-user-from-whitelist.ts create mode 100644 src/commands/gasless/admin/set-daily-limit.ts create mode 100644 src/commands/gasless/admin/set-user-whitelist.ts create mode 100644 src/commands/gasless/admin/stake-paymaster.ts create mode 100644 src/commands/gasless/client.ts create mode 100644 src/commands/gasless/common.ts create mode 100644 src/commands/gasless/config.ts create mode 100644 src/commands/gasless/deploy/deploy-platform-paymaster.ts create mode 100644 src/commands/gasless/deploy/deploy-token-registry-gasless.ts create mode 100644 src/commands/gasless/eligibility.ts create mode 100644 src/commands/gasless/index.ts create mode 100644 src/commands/gasless/title-escrow/accept-return-to-issuer.ts create mode 100644 src/commands/gasless/title-escrow/nominate.ts create mode 100644 src/commands/gasless/title-escrow/reject-return-to-issuer.ts create mode 100644 src/commands/gasless/title-escrow/reject-transfer-beneficiary.ts create mode 100644 src/commands/gasless/title-escrow/reject-transfer-holder.ts create mode 100644 src/commands/gasless/title-escrow/reject-transfer-owners.ts create mode 100644 src/commands/gasless/title-escrow/return-to-issuer.ts create mode 100644 src/commands/gasless/title-escrow/transfer-beneficiary.ts create mode 100644 src/commands/gasless/title-escrow/transfer-holder.ts create mode 100644 src/commands/gasless/title-escrow/transfer-owners.ts create mode 100644 src/commands/gasless/token-regitsry/mint.ts create mode 100644 src/commands/gasless/types.ts create mode 100644 tests/commands/gasless/admin/add-authorized-caller.test.ts create mode 100644 tests/commands/gasless/admin/add-registry.test.ts create mode 100644 tests/commands/gasless/admin/add-title-escrow.test.ts create mode 100644 tests/commands/gasless/admin/common.test.ts create mode 100644 tests/commands/gasless/admin/delegate-user.test.ts create mode 100644 tests/commands/gasless/admin/fund-paymaster.test.ts create mode 100644 tests/commands/gasless/admin/remove-authorized-caller.test.ts create mode 100644 tests/commands/gasless/admin/remove-registry.test.ts create mode 100644 tests/commands/gasless/admin/remove-title-escrow.test.ts create mode 100644 tests/commands/gasless/admin/remove-user-from-whitelist.test.ts create mode 100644 tests/commands/gasless/admin/set-daily-limit.test.ts create mode 100644 tests/commands/gasless/admin/set-user-whitelist.test.ts create mode 100644 tests/commands/gasless/admin/stake-paymaster.test.ts create mode 100644 tests/commands/gasless/client.test.ts create mode 100644 tests/commands/gasless/common.test.ts create mode 100644 tests/commands/gasless/config.test.ts create mode 100644 tests/commands/gasless/deploy/deploy-platform-paymaster.test.ts create mode 100644 tests/commands/gasless/deploy/deploy-token-registry-gasless.test.ts create mode 100644 tests/commands/gasless/eligibility.test.ts create mode 100644 tests/commands/gasless/title-escrow/accept-return-to-issuer.test.ts create mode 100644 tests/commands/gasless/title-escrow/nominate.test.ts create mode 100644 tests/commands/gasless/title-escrow/reject-return-to-issuer.test.ts create mode 100644 tests/commands/gasless/title-escrow/reject-transfer-beneficiary.test.ts create mode 100644 tests/commands/gasless/title-escrow/reject-transfer-holder.test.ts create mode 100644 tests/commands/gasless/title-escrow/reject-transfer-owners.test.ts create mode 100644 tests/commands/gasless/title-escrow/return-to-issuer.test.ts create mode 100644 tests/commands/gasless/title-escrow/transfer-beneficiary.test.ts create mode 100644 tests/commands/gasless/title-escrow/transfer-holder.test.ts create mode 100644 tests/commands/gasless/title-escrow/transfer-owners.test.ts create mode 100644 tests/commands/gasless/token-regitsry/mint.test.ts create mode 100644 w3c-website-fixtures/signed/signed_vc.json create mode 100644 wr/didKeyPairs.json create mode 100644 wr/operative/signed_vc.json create mode 100644 wr/operative/vc.json create mode 100644 wr/signed_vc.json create mode 100644 wr/vc.json diff --git a/decrypted.json b/decrypted.json new file mode 100644 index 0000000..08c0000 --- /dev/null +++ b/decrypted.json @@ -0,0 +1 @@ +{"version":"https://schema.openattestation.com/3.0/schema.json","@context":["https://www.w3.org/2018/credentials/v1","https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json","https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json","https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json"],"reference":"SERIAL_NUMBER_123","name":"Republic of Singapore Driving Licence","issuanceDate":"2010-01-01T19:23:24Z","validFrom":"2010-01-01T19:23:24Z","issuer":{"id":"https://example.com","name":"DEMO STORE","type":"OpenAttestationIssuer"},"type":["VerifiableCredential","DrivingLicenceCredential","OpenAttestationCredential"],"credentialSubject":{"id":"did:example:JOHN_DOE_DID","licenseNumber":"S1234567a","birthDate":"1977-02-22","name":"John Doe","class":[{"type":"3","effectiveDate":"2010-01-01T19:23:24Z"},{"type":"3A","effectiveDate":"2010-01-01T19:23:24Z"}]},"openAttestationMetadata":{"template":{"name":"DRIVING_LICENSE","type":"EMBEDDED_RENDERER","url":"https://tutorial-renderer.openattestation.com"},"proof":{"type":"OpenAttestationProofMethod","method":"DID","value":"did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89","revocation":{"type":"NONE"}},"identityProof":{"type":"DNS-DID","identifier":"example.tradetrust.io"}},"attachments":[{"fileName":"sample.pdf","mimeType":"application/pdf","data":"BASE64_ENCODED_FILE"}]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c99d33f..d740d17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,38 @@ { "name": "@trustvc/trustvc-cli", +<<<<<<< HEAD "version": "1.2.0-beta.2", +======= + "version": "1.1.0", +>>>>>>> 37fcadf (feat: pay on behalf) "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@trustvc/trustvc-cli", +<<<<<<< HEAD "version": "1.2.0-beta.2", "license": "Apache-2.0", "dependencies": { "@inquirer/prompts": "^5.3.8", "@trustvc/trustvc": "2.16.0-beta.3", +======= + "version": "1.1.0", + "license": "Apache-2.0", + "dependencies": { + "@inquirer/prompts": "^5.3.8", + "@trustvc/trustvc": "^2.16.0-beta.4", +>>>>>>> 37fcadf (feat: pay on behalf) "@types/yargs": "^17.0.32", "chalk": "^4.1.2", "dotenv": "^16.0.0", "ethers": "^6.15.0", "inquirer": "^13.1.0", "node-fetch": "^3.3.2", + "ox": "0.14.29", + "permissionless": "0.3.6", "signale": "^1.4.0", + "viem": "2.53.1", "yargs": "^17.7.2" }, "bin": { @@ -112,6 +127,7 @@ "license": "MIT" }, "node_modules/@aws-sdk/client-kms": { +<<<<<<< HEAD "version": "3.1102.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.1102.0.tgz", "integrity": "sha512-NNWPWGSq3cYGmmqrEx18PfSbC3ZRBDrV/bejOTq/g51Jxf7/rZ0eBhQfJqdTX9GU+MNUuEC3eTGynWTC+Fs9kQ==", @@ -120,6 +136,16 @@ "@aws-sdk/core": "^3.977.5", "@aws-sdk/credential-provider-node": "^3.972.77", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.1109.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.1109.0.tgz", + "integrity": "sha512-sdS3n7WQdCN3G/Hu+fWJea1KXCgcnW7z78dNZ/q+jQKy4+K2IUhentQ3o2LLlvClTO/MS3+1qbMG/vgoyGgSoQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/credential-provider-node": "^3.972.79", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", @@ -131,6 +157,7 @@ } }, "node_modules/@aws-sdk/core": { +<<<<<<< HEAD "version": "3.977.5", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.5.tgz", "integrity": "sha512-O5otOc1c6UZh5HsHAaPdYBcUUR9HL6mtnKqvc8nxN/CKDGUBUpsdh0q8K04Uz/dd1i0TaGyIQuQNqoO7+ad2TQ==", @@ -138,6 +165,15 @@ "dependencies": { "@aws-sdk/types": "^3.974.2", "@aws-sdk/xml-builder": "^3.972.37", +======= + "version": "3.977.7", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.7.tgz", + "integrity": "sha512-I88Iov89NVmjSmJLKSv7Cn9M2J+a2942OkA8nZCbz+sl4ZeY4zEOcoLOrbt1GRfQ8zEQKnjAJdXixA3J/p1fDQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.974.3", + "@aws-sdk/xml-builder": "^3.972.38", +>>>>>>> 37fcadf (feat: pay on behalf) "@aws/lambda-invoke-store": "^0.3.0", "@smithy/core": "^3.31.1", "@smithy/signature-v4": "^5.6.12", @@ -150,6 +186,7 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { +<<<<<<< HEAD "version": "3.972.66", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.66.tgz", "integrity": "sha512-bOzP2+zdJ0XrghywB4FaJXtGZCx9yS0AGps+VJ5yEgg30wVyHNmVDBwVDXcRypzQY5iLGCS3NSn0nsuISqjFCQ==", @@ -157,6 +194,15 @@ "dependencies": { "@aws-sdk/core": "^3.977.5", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.972.68", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.68.tgz", + "integrity": "sha512-2a20A/IdNOwUvaDq91iqqS7BA0XlNMfW3iLGZGZLJv0EbUqhSxB0PIx4rQQqssvWj1uXImb3/UCCdHz/+1dOiA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -166,6 +212,7 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { +<<<<<<< HEAD "version": "3.972.68", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.68.tgz", "integrity": "sha512-lkunS8X+H6V76WE+t/uGQm/U8v0JXK5mLfNFTUAMlE1kqaCjwlmqKJrgCVtqjK/vqnlrSWsLK4Lr4NANBWlfTQ==", @@ -173,6 +220,15 @@ "dependencies": { "@aws-sdk/core": "^3.977.5", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.972.70", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.70.tgz", + "integrity": "sha512-0yRem2Fs52r/Nn6UAqIlpjexfaYj8ziEozOe9tamtAVT/5bzFLKx8O2r7MaRqgS3hGKHIa1Jij9nKHSsNnb04A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", @@ -184,6 +240,7 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { +<<<<<<< HEAD "version": "3.973.11", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.11.tgz", "integrity": "sha512-KoDEolYtLHG/8C+IiZpXbJWyBOMkrHV+j66Kb9PBXmLv5euGb7aELvuCmLenoGAV6gBW2wM7TsG/1e5iulH4kA==", @@ -198,6 +255,22 @@ "@aws-sdk/credential-provider-web-identity": "^3.972.72", "@aws-sdk/nested-clients": "^3.997.40", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.973.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.13.tgz", + "integrity": "sha512-2M39DE02XpYYaSWYk/4AsImXYUU/1L2xmTMLUpMMWq7DfLv191/vCRy3baKtdr45AkJQyVgSjmuVOLm15SwrRQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/credential-provider-env": "^3.972.68", + "@aws-sdk/credential-provider-http": "^3.972.70", + "@aws-sdk/credential-provider-login": "^3.972.75", + "@aws-sdk/credential-provider-process": "^3.972.68", + "@aws-sdk/credential-provider-sso": "^3.973.12", + "@aws-sdk/credential-provider-web-identity": "^3.972.74", + "@aws-sdk/nested-clients": "^3.997.42", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.16.1", @@ -208,6 +281,7 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { +<<<<<<< HEAD "version": "3.972.73", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.73.tgz", "integrity": "sha512-tjsxMkTAFkmiV9ycmymapb9nLECWVOwFs0bZMQ9gB9bnbY8/HwfukHZlWbXZZp7qkPU6EXAfOcMm3DioFFEywA==", @@ -216,6 +290,16 @@ "@aws-sdk/core": "^3.977.5", "@aws-sdk/nested-clients": "^3.997.40", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.972.75", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.75.tgz", + "integrity": "sha512-jaTESuJlQsoUZ44f/i2puyPt8VlF/dMMJ9HM3cStYtk7eKX4N9UWi83OLixUkoOJH3BwWlPLCq9YIK9nfWhVBg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/nested-clients": "^3.997.42", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -225,6 +309,7 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { +<<<<<<< HEAD "version": "3.972.77", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.77.tgz", "integrity": "sha512-l4nitYCN/Ls57vtUfdextCjTjW41JD7lQiAnuR0RTbdByFc/6OmEAzwGd+lrp6CUtiXGQL1FCaYiamfHASrwBw==", @@ -237,6 +322,20 @@ "@aws-sdk/credential-provider-sso": "^3.973.10", "@aws-sdk/credential-provider-web-identity": "^3.972.72", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.972.79", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.79.tgz", + "integrity": "sha512-RIw5dof1EHkWubrZzPC941CDtnFG1iAXsxbFgLkhdYZXHc4icU13c/uxSMI0J5eUx9bxa7LjfpdjfClBB1QsDA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.68", + "@aws-sdk/credential-provider-http": "^3.972.70", + "@aws-sdk/credential-provider-ini": "^3.973.13", + "@aws-sdk/credential-provider-process": "^3.972.68", + "@aws-sdk/credential-provider-sso": "^3.973.12", + "@aws-sdk/credential-provider-web-identity": "^3.972.74", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.16.1", @@ -247,6 +346,7 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { +<<<<<<< HEAD "version": "3.972.66", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.66.tgz", "integrity": "sha512-YOnX6bIhdjx0QfaENu2PB0eFm5MEc9ft8XNGQ+NxMfeLSq9aE+XjWCwDupEnV4UWv5ZFpBLJbTREIx7KNOoqpQ==", @@ -254,6 +354,15 @@ "dependencies": { "@aws-sdk/core": "^3.977.5", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.972.68", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.68.tgz", + "integrity": "sha512-nLP3Pda2MQTFJ25hKBMmUuB9Uv+bTZQNlufbeCwklP549Vwnkd8bRLJoCKp5k6xjmdyptrPrOfGOhN0mKuca8A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -263,6 +372,7 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { +<<<<<<< HEAD "version": "3.973.10", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.10.tgz", "integrity": "sha512-IsXnQ35j5VE+3ZK6aIhT5ypB+Jim3zRwVz0nYuVwyBKZyu/SYx+O2/LQpng8c2EiuwyqceabsDlYrICHDlJPsA==", @@ -272,6 +382,17 @@ "@aws-sdk/nested-clients": "^3.997.40", "@aws-sdk/token-providers": "3.1102.0", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.973.12", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.12.tgz", + "integrity": "sha512-EmgyyHn+f9WCcelp3L/vci+LGbX8GigWaVphRArjVo5Pktkr9YnLy/mQ6VDkDyBD72dtfRNTgHmD2ts4rTDXKQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/nested-clients": "^3.997.42", + "@aws-sdk/token-providers": "3.1108.0", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -281,6 +402,7 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { +<<<<<<< HEAD "version": "3.972.72", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.72.tgz", "integrity": "sha512-nj9Zlsy7ya+fy+jhWTJwgfr7YdtDM4xHyZvgKuftuny0UgROVx9lxwvsWJSLvpKk4lig0m0tHng3k1fEnt0LeA==", @@ -289,6 +411,16 @@ "@aws-sdk/core": "^3.977.5", "@aws-sdk/nested-clients": "^3.997.40", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.972.74", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.74.tgz", + "integrity": "sha512-0YfczxGXF3RjGj8z7QG/Ho2HnLGKDHfPSHiTs47UU1U/+mmwISDN+rvGKt2zh+3FX8NdT4xd95LGBGyhQw2dgQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/nested-clients": "^3.997.42", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -298,6 +430,7 @@ } }, "node_modules/@aws-sdk/nested-clients": { +<<<<<<< HEAD "version": "3.997.40", "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.40.tgz", "integrity": "sha512-hEdHT0PBR4fkGxWhwKG5EtEYKnAM7HKkp0vD10ufk4YcXejH4r4q6G/XhPzjUc6Yxo5kBS2vHg7llj4ViR9VTQ==", @@ -306,6 +439,16 @@ "@aws-sdk/core": "^3.977.5", "@aws-sdk/signature-v4-multi-region": "^3.996.43", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.997.42", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.42.tgz", + "integrity": "sha512-XWRyon2MTHXD/zMoo0Mbge6Vwf+iE0qQaM/RyGO6NfZ9WukCFiQL27nQVZjYy2JwSIg+iXZxKOX95OBXqlSM4w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/signature-v4-multi-region": "^3.996.44", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", @@ -317,12 +460,21 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { +<<<<<<< HEAD "version": "3.996.43", "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.43.tgz", "integrity": "sha512-lKekx8bLBXSv4O+cslk9Zfnw2XKSkWBs3uWL5QGhH2ZAQfNS7FE0vcSSN2vD/AhxX54ZTywWxR4STThoeOXlBA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.974.2", +======= + "version": "3.996.44", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.44.tgz", + "integrity": "sha512-ZSfQ35Qn4MhSY+A0Whyr+KBx+wJKZUyBsOrjB2pSHOafRzbFe47T8XcXM8hZqUAC69qnqIy0C9ArxTuud0CC2w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/signature-v4": "^5.6.12", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -332,6 +484,7 @@ } }, "node_modules/@aws-sdk/token-providers": { +<<<<<<< HEAD "version": "3.1102.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1102.0.tgz", "integrity": "sha512-Ua700vVvM1q105yABSUQWkCK6FeTrNfU6ORGetJe5BzkZWY7QhkF7SVTOlmDGWRDNd6jbyY0Dv5e+E4bMBEmLg==", @@ -340,6 +493,16 @@ "@aws-sdk/core": "^3.977.5", "@aws-sdk/nested-clients": "^3.997.40", "@aws-sdk/types": "^3.974.2", +======= + "version": "3.1108.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1108.0.tgz", + "integrity": "sha512-rI80zxDxGJ6904eC/YbjkdjY6JdaZvQ01kOmrMvw7cFQGIHo27fhnIVbMSVDS4T6foQImjxYSRoOu/uSJscXDw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.7", + "@aws-sdk/nested-clients": "^3.997.42", + "@aws-sdk/types": "^3.974.3", +>>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -349,9 +512,15 @@ } }, "node_modules/@aws-sdk/types": { +<<<<<<< HEAD "version": "3.974.2", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.2.tgz", "integrity": "sha512-3W6IUtSxFbH6X7Wb7DzGCV5QiFQsd0g8bOfntpmDxQlzBoKWUMBu/JPQR0DwkE+Hpnxd6db1tXbOwdeHddG6cA==", +======= + "version": "3.974.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.3.tgz", + "integrity": "sha512-ECAqfpNsef+7MO8qtR0h9KcFIBAygaE7Cm6UOiQl+ft+uVap+1G7bNEjs4mdJE2OnA4m6k7i8peH8uGIAsOMGw==", +>>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.16.1", @@ -362,9 +531,15 @@ } }, "node_modules/@aws-sdk/xml-builder": { +<<<<<<< HEAD "version": "3.972.37", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.37.tgz", "integrity": "sha512-zKq4HQum8JwDyEuyfuI4bbiAcU0KxP6qy+9PR/IsR92IyE/DaBAikzAS50tjxip4bqIIANpCcG+Yyj6CVhXupg==", +======= + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.38.tgz", + "integrity": "sha512-grf7mzfVxBS5AlsuTvBN7uDpzqohFww9fRPCO+EBSUdvtsYMcPSKdz54h/7XiscqNcUM1Ae1MF7JLHmiYYuzbQ==", +>>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.16.1", @@ -456,6 +631,21 @@ "node": ">=18" } }, + "node_modules/@digitalbazaar/bbs-signatures/node_modules/@noble/curves": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.3.0.tgz", + "integrity": "sha512-v7cY+4oWYPQszRj6ZFGzTVL7uP2TaLo1xMhWHzYC5wj0ZhOXQ5x+sBre8rF3hi8cAoi0bh1qXoovoOkdFtvqEg==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "2.3.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@digitalbazaar/bls12-381-multikey": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@digitalbazaar/bls12-381-multikey/-/bls12-381-multikey-2.2.0.tgz", @@ -472,6 +662,21 @@ "node": ">=22" } }, + "node_modules/@digitalbazaar/bls12-381-multikey/node_modules/@noble/curves": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.3.0.tgz", + "integrity": "sha512-v7cY+4oWYPQszRj6ZFGzTVL7uP2TaLo1xMhWHzYC5wj0ZhOXQ5x+sBre8rF3hi8cAoi0bh1qXoovoOkdFtvqEg==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "2.3.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@digitalbazaar/data-integrity": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@digitalbazaar/data-integrity/-/data-integrity-2.5.0.tgz", @@ -2722,15 +2927,36 @@ } }, "node_modules/@noble/curves": { +<<<<<<< HEAD "version": "2.3.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.3.0.tgz", "integrity": "sha512-v7cY+4oWYPQszRj6ZFGzTVL7uP2TaLo1xMhWHzYC5wj0ZhOXQ5x+sBre8rF3hi8cAoi0bh1qXoovoOkdFtvqEg==", "license": "MIT", "dependencies": { "@noble/hashes": "2.3.0" +======= + "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" +>>>>>>> 37fcadf (feat: pay on behalf) }, "engines": { - "node": ">= 20.19.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/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/" @@ -3383,6 +3609,7 @@ "url": "https://paulmillr.com/funding/" } }, +<<<<<<< HEAD "node_modules/@scure/bip32/node_modules/@noble/curves": { "version": "1.9.7", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", @@ -3398,6 +3625,8 @@ "url": "https://paulmillr.com/funding/" } }, +======= +>>>>>>> 37fcadf (feat: pay on behalf) "node_modules/@scure/bip32/node_modules/@noble/hashes": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", @@ -4062,12 +4291,21 @@ } }, "node_modules/@smithy/core": { +<<<<<<< HEAD "version": "3.31.1", "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.31.1.tgz", "integrity": "sha512-CyogUINxvi7C7LDsh8Syo6hVJOT9ckz4rG8dRZfTJ8r91HkMY59PnNooaj7WcHyxEkxPfBAmbgztZU+xTo76lg==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.16.1", +======= + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.32.0.tgz", + "integrity": "sha512-NAiCSC78fzbNIEWoheoF74Ob5ZorLijCHpMY26Fqvqg/+9LuyIqMfHDg2p8Yk1rqOyowtiL3y7WX0AW+teL6zw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.17.0", +>>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4075,6 +4313,7 @@ } }, "node_modules/@smithy/credential-provider-imds": { +<<<<<<< HEAD "version": "4.4.16", "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.4.16.tgz", "integrity": "sha512-QfuLWAkLzptffFW980AFeHZFdqds2B64rpEd3uJ6lgs3xVn9QegGMUgUcj+4d7dRrAsya3r58ZKpku97WcFb4w==", @@ -4082,6 +4321,15 @@ "dependencies": { "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", +======= + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.0.tgz", + "integrity": "sha512-2jsPi+7Zv2hSzD9IXR9D7DTqSn7mv4XalzRm+bESh53jiaUS3NKEUbpQFTJP0HhQy9qzZvluxQ3yS24zdRrqsA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.32.0", + "@smithy/types": "^4.17.0", +>>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4089,6 +4337,7 @@ } }, "node_modules/@smithy/fetch-http-handler": { +<<<<<<< HEAD "version": "5.6.13", "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.6.13.tgz", "integrity": "sha512-4fW86pEUOMbrD5nkbyl/tTvPHHWJFbuB2odl6ps9lWfHoXf9HWh3Q/Smh59qH1g7+c/BSZghX6bbUk4gsiMs8A==", @@ -4096,6 +4345,15 @@ "dependencies": { "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", +======= + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.7.0.tgz", + "integrity": "sha512-W/exA8T0LEzCQtJ02w4IzaEQPIspgarqZprb7W8FwnYiDowgCrjl2fTQ6FvuSSUnJORuepBF81abmBJwqh+0XQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.32.0", + "@smithy/types": "^4.17.0", +>>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4103,6 +4361,7 @@ } }, "node_modules/@smithy/node-http-handler": { +<<<<<<< HEAD "version": "4.9.13", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.9.13.tgz", "integrity": "sha512-Nmd/Nl35zfYrd+a6OO2cDJb3GPh9bgTjIUhcM+JFfjpp8/osCgboDV5nCT1I01Pv6R13eSKDKLSoVa5ZB6Zsfw==", @@ -4110,6 +4369,15 @@ "dependencies": { "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", +======= + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.10.0.tgz", + "integrity": "sha512-nrh7VxqzPQS/ip1hS293aI/OAWDWARQvjUxCfuKhyrfHa2gTdk28066RNeWLI1uuoHXaKAkOF8IcSAHuOp0+SA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.32.0", + "@smithy/types": "^4.17.0", +>>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4117,6 +4385,7 @@ } }, "node_modules/@smithy/signature-v4": { +<<<<<<< HEAD "version": "5.6.12", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.6.12.tgz", "integrity": "sha512-I6KLtq3H0qqSuV9vLglfi8puHqzygzWHOnI4z/Rdoo+q50vvo18vBRdPAvvEtcaKROz7Zn6qnPa14kRfPH6PcQ==", @@ -4124,6 +4393,15 @@ "dependencies": { "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", +======= + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.7.0.tgz", + "integrity": "sha512-hCynhm22wMJ8wTF9crcwu8mxggtUrSLLJgDcGUvYFBqpofxycYJCGKOMYg4xtPPFtgNiDJSYmhsWLTrcU/g59Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.32.0", + "@smithy/types": "^4.17.0", +>>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4131,9 +4409,15 @@ } }, "node_modules/@smithy/types": { +<<<<<<< HEAD "version": "4.16.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", +======= + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.17.0.tgz", + "integrity": "sha512-Aw4joiM0ZdErpo39lCj8phT2lxoiKZV+KZzBxnnQhWVtU2Is/WffQSL04uUWRcXUse9Ln8vXZK6V/FwqRVnQpg==", +>>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4266,9 +4550,15 @@ }, "node_modules/@tradetrust-tt/token-registry-v5": { "name": "@tradetrust-tt/token-registry", +<<<<<<< HEAD "version": "5.6.0-beta.1", "resolved": "https://registry.npmjs.org/@tradetrust-tt/token-registry/-/token-registry-5.6.0-beta.1.tgz", "integrity": "sha512-EtxZw/WnvGQMb/MB243eHy4ejSTN8bkV7I7Y9f19xk9v/mOojFL74C/tD1zjsZUUjiQi9rzLRYlzSUNbZBN2gg==", +======= + "version": "5.6.0-beta.3", + "resolved": "https://registry.npmjs.org/@tradetrust-tt/token-registry/-/token-registry-5.6.0-beta.3.tgz", + "integrity": "sha512-1YJDuuBN5P2mx94aVrhbQ3wXt0Kb9eqIPjabHeZCkFjH87ZV1rtdXTmy1T2Af8Y7zROCWAD1V/8JpCFqC3u/JA==", +>>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "ethers": "^6.13.4" @@ -4625,9 +4915,15 @@ "license": "Apache-2.0" }, "node_modules/@trustvc/eip7702": { +<<<<<<< HEAD "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/@trustvc/eip7702/-/eip7702-1.0.0-beta.1.tgz", "integrity": "sha512-cOGuZVLHd0+Uu7rZ/Dp2iF1VuNq+L+pWWGe+tPD/u74rSvCAzIc17dIk5HOwRBiC5awh1rXG46vLG8IRc5O01Q==", +======= + "version": "1.1.0-beta.2", + "resolved": "https://registry.npmjs.org/@trustvc/eip7702/-/eip7702-1.1.0-beta.2.tgz", + "integrity": "sha512-yo82l4fDCE6ZuTPeuDxBSgcRxAUOmVm51y16dJQH4xpM2ZkEKPXfPsMjpiPa636uOEVan+e38v/IQfy2HPg9sA==", +>>>>>>> 37fcadf (feat: pay on behalf) "license": "MIT", "dependencies": { "@account-abstraction/contracts": "^0.8.0", @@ -4635,19 +4931,33 @@ } }, "node_modules/@trustvc/trustvc": { +<<<<<<< HEAD "version": "2.16.0-beta.3", "resolved": "https://registry.npmjs.org/@trustvc/trustvc/-/trustvc-2.16.0-beta.3.tgz", "integrity": "sha512-spuYfT78ZYY5Xg60yTrnDjbGsxwv5QNAyfEhWzp0mcBTRZRPJRiH8mVWTp4AZeAHO6ph9ZyOY0ZVl3f7/cBcvw==", +======= + "version": "2.16.0-beta.4", + "resolved": "https://registry.npmjs.org/@trustvc/trustvc/-/trustvc-2.16.0-beta.4.tgz", + "integrity": "sha512-KJZUl5LCDX4KqgiBbyK6tUdXoAVxGyyKtJm+kiY8bsnl23h0hI7IfJZlUcgIFaoH8OER4+EI8i5NNDCsiMSOMg==", +>>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "@tradetrust-tt/dnsprove": "^2.18.0", "@tradetrust-tt/ethers-aws-kms-signer": "^2.1.4", "@tradetrust-tt/token-registry-v4": "npm:@tradetrust-tt/token-registry@^4.16.0", +<<<<<<< HEAD "@tradetrust-tt/token-registry-v5": "npm:@tradetrust-tt/token-registry@^5.6.0-beta.1", "@tradetrust-tt/tradetrust": "^6.10.3", "@tradetrust-tt/tt-verify": "^9.7.5", "@trustvc/document-store": "^1.0.3", "@trustvc/eip7702": "^1.0.0-beta.1", +======= + "@tradetrust-tt/token-registry-v5": "npm:@tradetrust-tt/token-registry@^5.6.0-beta.2", + "@tradetrust-tt/tradetrust": "^6.10.3", + "@tradetrust-tt/tt-verify": "^9.7.5", + "@trustvc/document-store": "^1.0.3", + "@trustvc/eip7702": "^1.1.0-beta.2", +>>>>>>> 37fcadf (feat: pay on behalf) "@trustvc/w3c": "^2.4.2", "@trustvc/w3c-context": "^2.4.0", "@trustvc/w3c-credential-status": "^2.4.0", @@ -13439,9 +13749,15 @@ } }, "node_modules/ox": { +<<<<<<< HEAD "version": "0.14.33", "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.33.tgz", "integrity": "sha512-rooA/4o7bBof4Ge2VH/eovfNPb/AEEYyrNj03wggc55g5HZD8Pjs/OeWhttgjic3dDcqn0r29bDuvQEdTiUemQ==", +======= + "version": "0.14.29", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.29.tgz", + "integrity": "sha512-M5j87Ec4V99MQdRct/g09eWXW60g6zhHTUs1lr4deUtrPDnezBdCJTgKd7pxqTpSZBFveV0ALi9jMMuT1qKyNg==", +>>>>>>> 37fcadf (feat: pay on behalf) "funding": [ { "type": "github", @@ -13765,9 +14081,15 @@ "license": "MIT" }, "node_modules/permissionless": { +<<<<<<< HEAD "version": "0.3.7", "resolved": "https://registry.npmjs.org/permissionless/-/permissionless-0.3.7.tgz", "integrity": "sha512-r1UGWkVMqFzzJ0UcKEVHh6XvOm7+SfTvy7AoGA7ZlxpE96XR+zbtb+rRAA3DOQuq6/ifov5NvUyt1xf4zxbR0g==", +======= + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/permissionless/-/permissionless-0.3.6.tgz", + "integrity": "sha512-7RstRCNwJc/kO9Q/ZJpgSPclXez8CaGU77PeYNaWpHCU1kRetu+7kqEUFcIFLdz47F7jpOwtsbAU56hn27c4mg==", +>>>>>>> 37fcadf (feat: pay on behalf) "license": "MIT", "peerDependencies": { "ox": "^0.11.3", @@ -14727,9 +15049,15 @@ "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" }, "node_modules/semantic-release": { +<<<<<<< HEAD "version": "25.0.8", "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.8.tgz", "integrity": "sha512-w/iZ0bur36rKffXZYmIUmy068eoBY3Ij1DCCddx2JwWEM5Tg+eU9ld/E9qSInVvPASyyR2Ln/XGfQ9OZrMlhtw==", +======= + "version": "25.0.9", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.9.tgz", + "integrity": "sha512-bxve7csK0/Txr++CkfrmV+X1r4jqiSOw2WsSad9E2S68R+ZfLBwDn8IceM8WfiOmKQIHgsQc1cNA8Dzg7U75pg==", +>>>>>>> 37fcadf (feat: pay on behalf) "dev": true, "license": "MIT", "dependencies": { @@ -16441,9 +16769,15 @@ } }, "node_modules/tsx": { +<<<<<<< HEAD "version": "4.23.5", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.5.tgz", "integrity": "sha512-rw55FUaqOoI7RvlQwLbhO4nSDApnQ4/CykPuiQ/EPvtrX3WA9Ig55jIt9VvbBJbzJuj12ueRu4PMZ2SxPVbihg==", +======= + "version": "4.23.7", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.7.tgz", + "integrity": "sha512-3f/u/+UDCNQ7iwUZW9FCMnNGIHzElGJYh0S/yy8IvWSsn5O7fEO/897FaG7FA2W8yryiRyuwXZ1PYLAKYaqSuQ==", +>>>>>>> 37fcadf (feat: pay on behalf) "dev": true, "license": "MIT", "dependencies": { @@ -17436,9 +17770,15 @@ } }, "node_modules/viem": { +<<<<<<< HEAD "version": "2.55.10", "resolved": "https://registry.npmjs.org/viem/-/viem-2.55.10.tgz", "integrity": "sha512-Q9Ba+/ma81U2M5o5P2AQ7Ux8rTIwmCZvUcr8rKdQ22bV0IBFHllM2m5gWDP8hFaUN2nH2oW3QG44amRazflYNQ==", +======= + "version": "2.53.1", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.53.1.tgz", + "integrity": "sha512-FhfJ/SW73CVosiyVLmIMVgKDRKYV1AGCLzZoHYvmNayyVff63Qi1ocPCk59LqC/cNw244RbBJjHnmxqXkE7NpA==", +>>>>>>> 37fcadf (feat: pay on behalf) "funding": [ { "type": "github", @@ -17453,8 +17793,13 @@ "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", +<<<<<<< HEAD "ox": "0.14.33", "ws": "8.21.0" +======= + "ox": "0.14.29", + "ws": "8.20.1" +>>>>>>> 37fcadf (feat: pay on behalf) }, "peerDependencies": { "typescript": ">=5.0.4" @@ -17493,9 +17838,15 @@ } }, "node_modules/viem/node_modules/ws": { +<<<<<<< HEAD "version": "8.21.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", +======= + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", +>>>>>>> 37fcadf (feat: pay on behalf) "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index bb1e92b..75810d4 100644 --- a/package.json +++ b/package.json @@ -35,16 +35,24 @@ }, "dependencies": { "@inquirer/prompts": "^5.3.8", - "@trustvc/trustvc": "2.16.0-beta.3", + "@trustvc/trustvc": "^2.16.0-beta.4", "@types/yargs": "^17.0.32", "chalk": "^4.1.2", "dotenv": "^16.0.0", "ethers": "^6.15.0", "inquirer": "^13.1.0", "node-fetch": "^3.3.2", + "ox": "0.14.29", + "permissionless": "0.3.6", "signale": "^1.4.0", + "viem": "2.53.1", "yargs": "^17.7.2" }, + "overrides": { + "permissionless": { + "ox": "$ox" + } + }, "devDependencies": { "@semantic-release/changelog": "^6.0.3", "@semantic-release/git": "^10.0.1", diff --git a/src/commands/gasless/admin/add-authorized-caller.ts b/src/commands/gasless/admin/add-authorized-caller.ts new file mode 100644 index 0000000..98d6f8d --- /dev/null +++ b/src/commands/gasless/admin/add-authorized-caller.ts @@ -0,0 +1,29 @@ +import { error } from 'signale'; +import { addAuthorizedCaller } from '@trustvc/trustvc'; +import { promptAddress } from '../../../utils'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'add-authorized-caller'; + +export const describe = + 'Authorizes an address to trigger sponsored holder/beneficiary title-escrow or registry calls (Path A) on a PlatformPaymaster'; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + const caller = await promptAddress('caller', 'address to authorize on the paymaster'); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Authorizing caller ${caller}`, + execute: (wallet) => + addAuthorizedCaller( + wallet, + base.paymasterAddress as `0x${string}`, + caller as `0x${string}`, + ), + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/add-registry.ts b/src/commands/gasless/admin/add-registry.ts new file mode 100644 index 0000000..3619913 --- /dev/null +++ b/src/commands/gasless/admin/add-registry.ts @@ -0,0 +1,25 @@ +import { error } from 'signale'; +import { addRegistry } from '@trustvc/trustvc'; +import { promptAddress } from '../../../utils'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'add-registry'; + +export const describe = + 'Authorizes a token registry so its calls can be sponsored by a PlatformPaymaster'; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + const registry = await promptAddress('registry', 'token registry address to authorize'); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Authorizing registry ${registry}`, + execute: (wallet) => + addRegistry(wallet, base.paymasterAddress as `0x${string}`, registry as `0x${string}`), + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/add-title-escrow.ts b/src/commands/gasless/admin/add-title-escrow.ts new file mode 100644 index 0000000..37e91b2 --- /dev/null +++ b/src/commands/gasless/admin/add-title-escrow.ts @@ -0,0 +1,29 @@ +import { error } from 'signale'; +import { addTitleEscrow } from '@trustvc/trustvc'; +import { promptAddress } from '../../../utils'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'add-title-escrow'; + +export const describe = + 'Authorizes a title escrow so its calls can be sponsored by a PlatformPaymaster'; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + const titleEscrow = await promptAddress('title escrow', 'title escrow address to authorize'); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Authorizing title escrow ${titleEscrow}`, + execute: (wallet) => + addTitleEscrow( + wallet, + base.paymasterAddress as `0x${string}`, + titleEscrow as `0x${string}`, + ), + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/common.ts b/src/commands/gasless/admin/common.ts new file mode 100644 index 0000000..6441e36 --- /dev/null +++ b/src/commands/gasless/admin/common.ts @@ -0,0 +1,85 @@ +import { error, info, success } from 'signale'; +import { + getErrorMessage, + getEtherscanAddress, + getWalletOrSigner, + promptAddress, + promptNetworkSelection, + promptWalletSelection, +} from '../../../utils'; +import { assertGaslessSupportedNetwork } from '../config'; +import { GaslessWalletOption } from '../types'; + +/** + * PlatformPaymaster admin functions (add/remove authorized caller, registry, title escrow; + * user whitelist credits; daily limit) are all owner-only, regular (non-gasless) transactions — + * the owner pays gas directly to configure their own paymaster. + */ +export type PaymasterAdminWalletCommand = GaslessWalletOption & { + network: string; + paymasterAddress: string; +}; + +export const promptForPaymasterAdminWalletInputs = + async (): Promise => { + const network = await promptNetworkSelection(); + assertGaslessSupportedNetwork(network); + + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract to administer', + ); + + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + + return { + network, + paymasterAddress: paymasterAddress as string, + encryptedWalletPath, + key, + keyFile, + }; + }; + +export interface RunPaymasterAdminActionArgs extends PaymasterAdminWalletCommand { + actionLabel: string; + /** Wallet is a raw ethers Signer here, not a viem WalletClient — no smart account involved. */ + execute: (wallet: Awaited>) => Promise<`0x${string}`>; +} + +/** + * Shared runner for every paymaster admin action: resolves a regular wallet, runs the given + * on-chain call, and reports the transaction hash. Errors are caught and logged here, so callers + * only need to guard their own prompting step. + */ +export const runPaymasterAdminAction = async ({ + network, + paymasterAddress, + encryptedWalletPath, + key, + keyFile, + actionLabel, + execute, +}: RunPaymasterAdminActionArgs): Promise => { + try { + const assertedNetwork = assertGaslessSupportedNetwork(network); + + const wallet = await getWalletOrSigner({ + network: assertedNetwork, + encryptedWalletPath, + key, + keyFile, + }); + + info(`${actionLabel} on PlatformPaymaster ${paymasterAddress}...`); + + const txHash = await execute(wallet); + + success(`${actionLabel} — done`); + info(`Find more details at ${getEtherscanAddress({ network: assertedNetwork })}/tx/${txHash}`); + + return txHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/admin/delegate-user.ts b/src/commands/gasless/admin/delegate-user.ts new file mode 100644 index 0000000..49cab77 --- /dev/null +++ b/src/commands/gasless/admin/delegate-user.ts @@ -0,0 +1,81 @@ +import { error, info, success } from 'signale'; +import { createWalletClient, http } from 'viem'; +import { privateKeyToAccount } from 'viem/accounts'; +import { + getErrorMessage, + getEtherscanAddress, + getWalletOrSigner, + promptNetworkSelection, + promptWalletSelection, +} from '../../../utils'; +import { + assertGaslessSupportedNetwork, + getEip7702ImplementationAddress, + getGaslessRpcUrl, + getViemChain, +} from '../config'; + +// Submits a standalone EIP-7702 authorization for a user's own EOA — the first of the three +// setup steps ("Delegate" in the README) needed before an account can act as a smart account. +// Regular, non-gasless transaction: the user pays gas to delegate their own account. Every gasless +// command already bundles this automatically with its first sponsored UserOperation, so running +// this separately is only needed to set delegation up ahead of time. +export const command = 'delegate-user'; + +export const describe = + "Delegates a user's EOA to the deployed EIP7702Implementation contract via a standalone EIP-7702 authorization. Regular transaction — the user pays gas to delegate their own account."; + +export const handler = async (): Promise => { + try { + const network = await promptNetworkSelection(); + const assertedNetwork = assertGaslessSupportedNetwork(network); + + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + + // Only used to recover the raw private key: viem needs a LocalAccount to sign the + // authorization, not an ethers Signer. + const wallet = await getWalletOrSigner({ + network: assertedNetwork, + encryptedWalletPath, + key, + keyFile, + }); + + const privateKey = (wallet as { privateKey?: string }).privateKey; + if (!privateKey) { + throw new Error( + 'Delegating requires direct access to a private key (encrypted wallet file, --key, --key-file, or OA_PRIVATE_KEY). AWS KMS signers are not supported.', + ); + } + + const implementationAddress = getEip7702ImplementationAddress(assertedNetwork); + const account = privateKeyToAccount(privateKey as `0x${string}`); + const walletClient = createWalletClient({ + account, + chain: getViemChain(assertedNetwork), + transport: http(getGaslessRpcUrl(assertedNetwork)), + }); + + info(`Delegating ${account.address} to ${implementationAddress} on ${assertedNetwork}...`); + + // `executor: 'self'` tells viem the account signing the authorization is also the one + // submitting the transaction, so it correctly uses nonce + 1 rather than the current nonce. + const authorization = await walletClient.signAuthorization({ + contractAddress: implementationAddress, + executor: 'self', + }); + + const txHash = await walletClient.sendTransaction({ + authorizationList: [authorization], + to: account.address, + value: 0n, + }); + + success(`Account ${account.address} delegated to ${implementationAddress}`); + info(`Find more details at ${getEtherscanAddress({ network: assertedNetwork })}/tx/${txHash}`); + + return txHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/admin/fund-paymaster.ts b/src/commands/gasless/admin/fund-paymaster.ts new file mode 100644 index 0000000..8dc715e --- /dev/null +++ b/src/commands/gasless/admin/fund-paymaster.ts @@ -0,0 +1,45 @@ +import { error } from 'signale'; +import { input } from '@inquirer/prompts'; +import { ethers } from 'ethers'; +import { eip7702Abis } from '@trustvc/trustvc'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'fund-paymaster'; + +export const describe = + "Deposits ETH into a PlatformPaymaster's EntryPoint gas balance so it can sponsor UserOperations. Regular transaction — the caller pays the deposited amount plus gas."; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + + const amountEth = await input({ + message: 'Enter the amount to deposit in ETH:', + required: true, + validate: (value: string) => { + if (!/^\d*\.?\d+$/.test(value) || Number(value) <= 0) { + return 'Amount must be a positive number (ETH)'; + } + return true; + }, + }); + const amount = ethers.parseEther(amountEth); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Depositing ${amountEth} ETH`, + execute: async (wallet) => { + const contract = new ethers.Contract( + base.paymasterAddress, + eip7702Abis.platformPaymasterAbi, + wallet, + ); + const tx = await contract.deposit({ value: amount }); + const receipt = await tx.wait(); + return receipt.hash as `0x${string}`; + }, + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/index.ts b/src/commands/gasless/admin/index.ts new file mode 100644 index 0000000..d26b587 --- /dev/null +++ b/src/commands/gasless/admin/index.ts @@ -0,0 +1,11 @@ +import { Argv } from 'yargs'; + +export const command = 'paymaster-admin '; + +export const describe = + 'Administer a PlatformPaymaster contract (owner-only; regular, non-gasless transactions)'; + +export const builder = (yargs: Argv): Argv => + yargs.commandDir(__dirname, { extensions: ['ts', 'js'] }); + +export const handler = (): void => {}; diff --git a/src/commands/gasless/admin/remove-authorized-caller.ts b/src/commands/gasless/admin/remove-authorized-caller.ts new file mode 100644 index 0000000..20d0864 --- /dev/null +++ b/src/commands/gasless/admin/remove-authorized-caller.ts @@ -0,0 +1,29 @@ +import { error } from 'signale'; +import { removeAuthorizedCaller } from '@trustvc/trustvc'; +import { promptAddress } from '../../../utils'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'remove-authorized-caller'; + +export const describe = + 'Removes an address from the authorized-caller list (Path A) on a PlatformPaymaster'; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + const caller = await promptAddress('caller', 'address to remove from the paymaster'); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Removing caller ${caller}`, + execute: (wallet) => + removeAuthorizedCaller( + wallet, + base.paymasterAddress as `0x${string}`, + caller as `0x${string}`, + ), + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/remove-registry.ts b/src/commands/gasless/admin/remove-registry.ts new file mode 100644 index 0000000..5fc8afa --- /dev/null +++ b/src/commands/gasless/admin/remove-registry.ts @@ -0,0 +1,24 @@ +import { error } from 'signale'; +import { removeRegistry } from '@trustvc/trustvc'; +import { promptAddress } from '../../../utils'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'remove-registry'; + +export const describe = 'Deauthorizes a token registry from a PlatformPaymaster'; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + const registry = await promptAddress('registry', 'token registry address to deauthorize'); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Deauthorizing registry ${registry}`, + execute: (wallet) => + removeRegistry(wallet, base.paymasterAddress as `0x${string}`, registry as `0x${string}`), + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/remove-title-escrow.ts b/src/commands/gasless/admin/remove-title-escrow.ts new file mode 100644 index 0000000..455888f --- /dev/null +++ b/src/commands/gasless/admin/remove-title-escrow.ts @@ -0,0 +1,28 @@ +import { error } from 'signale'; +import { removeTitleEscrow } from '@trustvc/trustvc'; +import { promptAddress } from '../../../utils'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'remove-title-escrow'; + +export const describe = 'Deauthorizes a title escrow from a PlatformPaymaster'; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + const titleEscrow = await promptAddress('title escrow', 'title escrow address to deauthorize'); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Deauthorizing title escrow ${titleEscrow}`, + execute: (wallet) => + removeTitleEscrow( + wallet, + base.paymasterAddress as `0x${string}`, + titleEscrow as `0x${string}`, + ), + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/remove-user-from-whitelist.ts b/src/commands/gasless/admin/remove-user-from-whitelist.ts new file mode 100644 index 0000000..9275805 --- /dev/null +++ b/src/commands/gasless/admin/remove-user-from-whitelist.ts @@ -0,0 +1,29 @@ +import { error } from 'signale'; +import { removeUserFromWhitelist } from '@trustvc/trustvc'; +import { promptAddress } from '../../../utils'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'remove-user-from-whitelist'; + +export const describe = + 'Removes a user from the PlatformPaymaster whitelist (sets their deployment credits to 0)'; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + const user = await promptAddress('user', 'address to remove from the whitelist'); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Removing user ${user} from whitelist`, + execute: (wallet) => + removeUserFromWhitelist( + wallet, + base.paymasterAddress as `0x${string}`, + user as `0x${string}`, + ), + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/set-daily-limit.ts b/src/commands/gasless/admin/set-daily-limit.ts new file mode 100644 index 0000000..e2183f0 --- /dev/null +++ b/src/commands/gasless/admin/set-daily-limit.ts @@ -0,0 +1,35 @@ +import { error } from 'signale'; +import { input } from '@inquirer/prompts'; +import { setDailyLimit } from '@trustvc/trustvc'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'set-daily-limit'; + +export const describe = + 'Sets the global daily sponsored-gas spend limit per user on a PlatformPaymaster'; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + + const dailyLimit = await input({ + message: 'Enter the new daily limit in wei (0 = unlimited):', + required: true, + validate: (value: string) => { + if (!/^\d+$/.test(value)) { + return 'Daily limit must be a non-negative integer (wei)'; + } + return true; + }, + }); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Setting daily limit to ${dailyLimit} wei`, + execute: (wallet) => + setDailyLimit(wallet, base.paymasterAddress as `0x${string}`, BigInt(dailyLimit)), + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/set-user-whitelist.ts b/src/commands/gasless/admin/set-user-whitelist.ts new file mode 100644 index 0000000..b59fa79 --- /dev/null +++ b/src/commands/gasless/admin/set-user-whitelist.ts @@ -0,0 +1,45 @@ +import { error } from 'signale'; +import { input } from '@inquirer/prompts'; +import { setUserWhitelist } from '@trustvc/trustvc'; +import { promptAddress } from '../../../utils'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'set-user-whitelist'; + +export const describe = + 'Whitelists a user on a PlatformPaymaster and sets their token-registry deployment credit allowance (0-3)'; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + const user = await promptAddress( + 'user', + 'address to whitelist for gasless registry deployment', + ); + + const credits = await input({ + message: 'Enter the deployment credit allowance (0-3):', + required: true, + validate: (value: string) => { + if (!/^[0-3]$/.test(value)) { + return 'Credits must be an integer between 0 and 3'; + } + return true; + }, + }); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Whitelisting user ${user} with ${credits} credit(s)`, + execute: (wallet) => + setUserWhitelist( + wallet, + base.paymasterAddress as `0x${string}`, + user as `0x${string}`, + BigInt(credits), + ), + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/admin/stake-paymaster.ts b/src/commands/gasless/admin/stake-paymaster.ts new file mode 100644 index 0000000..8a4ee22 --- /dev/null +++ b/src/commands/gasless/admin/stake-paymaster.ts @@ -0,0 +1,56 @@ +import { error } from 'signale'; +import { input } from '@inquirer/prompts'; +import { ethers } from 'ethers'; +import { eip7702Abis } from '@trustvc/trustvc'; +import { promptForPaymasterAdminWalletInputs, runPaymasterAdminAction } from './common'; + +export const command = 'stake-paymaster'; + +export const describe = + "Stakes ETH for a PlatformPaymaster on the EntryPoint — an anti-spam bond many bundlers (including Pimlico) require before they'll accept UserOperations sponsored by it. Regular transaction — the caller pays the staked amount plus gas."; + +export const handler = async (): Promise => { + try { + const base = await promptForPaymasterAdminWalletInputs(); + + const amountEth = await input({ + message: 'Enter the amount to stake in ETH:', + required: true, + validate: (value: string) => { + if (!/^\d*\.?\d+$/.test(value) || Number(value) <= 0) { + return 'Amount must be a positive number (ETH)'; + } + return true; + }, + }); + const amount = ethers.parseEther(amountEth); + + const unstakeDelaySec = await input({ + message: 'Enter the unstake delay in seconds (optional, defaults to 86400 = 1 day):', + default: '86400', + validate: (value: string) => { + if (!/^\d+$/.test(value) || Number(value) <= 0) { + return 'Unstake delay must be a positive integer (seconds)'; + } + return true; + }, + }); + + return await runPaymasterAdminAction({ + ...base, + actionLabel: `Staking ${amountEth} ETH with a ${unstakeDelaySec}s unstake delay`, + execute: async (wallet) => { + const contract = new ethers.Contract( + base.paymasterAddress, + eip7702Abis.platformPaymasterAbi, + wallet, + ); + const tx = await contract.addStake(Number(unstakeDelaySec), { value: amount }); + const receipt = await tx.wait(); + return receipt.hash as `0x${string}`; + }, + }); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/client.ts b/src/commands/gasless/client.ts new file mode 100644 index 0000000..9eae6c9 --- /dev/null +++ b/src/commands/gasless/client.ts @@ -0,0 +1,98 @@ +import { createPublicClient, Hex, http } from 'viem'; +import { privateKeyToAccount } from 'viem/accounts'; +import { entryPoint08Address } from 'viem/account-abstraction'; +import { to7702SimpleSmartAccount } from 'permissionless/accounts'; +import { createSmartAccountClient } from 'permissionless'; +import { createPimlicoClient } from 'permissionless/clients/pimlico'; +import { + GaslessSupportedNetwork, + getEip7702ImplementationAddress, + getGaslessRpcUrl, + getPimlicoApiKey, + getPimlicoBundlerUrl, + getViemChain, +} from './config'; + +/** + * Minimal client shape required by @trustvc/trustvc's `*Gasless` functions: given the raw + * call, sign and submit a sponsored UserOperation and resolve once it has been mined. + */ +export interface GaslessSmartAccountClient { + sendTransaction(args: { + to: `0x${string}`; + value: bigint; + data: `0x${string}`; + }): Promise<`0x${string}`>; +} + +export interface BuildGaslessSmartAccountClientArgs { + network: GaslessSupportedNetwork; + /** Raw private key (hex) of the current holder/beneficiary EOA that will delegate via EIP-7702. */ + privateKey: string; + paymasterAddress: `0x${string}`; +} + +export interface GaslessSmartAccountClientResult { + smartAccountClient: GaslessSmartAccountClient; + smartAccountAddress: `0x${string}`; +} + +// Conservative stub limits used while the bundler estimates gas for the sponsored UserOperation. +const PAYMASTER_VERIFICATION_GAS_LIMIT = 150_000n; +const PAYMASTER_POST_OP_GAS_LIMIT = 50_000n; + +/** + * Builds an EIP-7702 smart account client (holder's EOA delegated to the deployed + * EIP7702Implementation contract) wired to Pimlico's bundler, with gas sponsored on-chain by the + * PlatformPaymaster at `paymasterAddress`. + */ +export const buildGaslessSmartAccountClient = async ({ + network, + privateKey, + paymasterAddress, +}: BuildGaslessSmartAccountClientArgs): Promise => { + const chain = getViemChain(network); + const rpcUrl = getGaslessRpcUrl(network); + const implementationAddress = getEip7702ImplementationAddress(network); + const bundlerUrl = getPimlicoBundlerUrl(network, getPimlicoApiKey()); + + const publicClient = createPublicClient({ chain, transport: http(rpcUrl) }); + const owner = privateKeyToAccount(privateKey as Hex); + + const smartAccount = await to7702SimpleSmartAccount({ + client: publicClient, + owner, + accountLogicAddress: implementationAddress, + }); + + const pimlicoClient = createPimlicoClient({ + transport: http(bundlerUrl), + entryPoint: { address: entryPoint08Address, version: '0.8' }, + }); + + const smartAccountClient = createSmartAccountClient({ + account: smartAccount, + chain, + bundlerTransport: http(bundlerUrl), + paymaster: { + getPaymasterStubData: async () => ({ + paymaster: paymasterAddress, + paymasterData: '0x', + paymasterVerificationGasLimit: PAYMASTER_VERIFICATION_GAS_LIMIT, + paymasterPostOpGasLimit: PAYMASTER_POST_OP_GAS_LIMIT, + }), + getPaymasterData: async () => ({ + paymaster: paymasterAddress, + paymasterData: '0x', + }), + }, + userOperation: { + estimateFeesPerGas: async () => (await pimlicoClient.getUserOperationGasPrice()).fast, + }, + }); + + return { + smartAccountClient, + smartAccountAddress: smartAccount.address, + }; +}; diff --git a/src/commands/gasless/common.ts b/src/commands/gasless/common.ts new file mode 100644 index 0000000..397efeb --- /dev/null +++ b/src/commands/gasless/common.ts @@ -0,0 +1,202 @@ +import { warn, success } from 'signale'; +import { ethers } from 'ethers'; +import { v5Contracts } from '@trustvc/trustvc'; +import { getSupportedNetwork, getWalletOrSigner } from '../../utils'; +import { assertGaslessSupportedNetwork, GaslessSupportedNetwork } from './config'; +import { buildGaslessSmartAccountClient, GaslessSmartAccountClient } from './client'; +import { checkGaslessEligibility } from './eligibility'; +import { GaslessWalletOption } from './types'; + +const { TitleEscrow__factory, TradeTrustToken__factory } = v5Contracts; + +/** Title escrow role(s) the connected wallet must currently hold to run a given gasless action. */ +export type TitleEscrowRole = 'holder' | 'beneficiary'; + +export const resolveTitleEscrowAddress = async ({ + tokenRegistryAddress, + tokenId, + network, +}: { + tokenRegistryAddress: string; + tokenId: string; + network: string; +}): Promise => { + const provider = getSupportedNetwork(network).provider(); + const tokenRegistry = new ethers.Contract( + tokenRegistryAddress, + TradeTrustToken__factory.abi, + provider, + ); + const titleEscrowAddress: string = await tokenRegistry.ownerOf(tokenId); + + if (!titleEscrowAddress || titleEscrowAddress === ethers.ZeroAddress) { + throw new Error(`Unable to resolve the title escrow address for tokenId ${tokenId}`); + } + + return titleEscrowAddress; +}; + +export type PrepareGaslessRunArgs = GaslessWalletOption & { + network: string; + tokenRegistryAddress: string; + tokenId: string; + paymasterAddress: string; + /** Role(s) the connected wallet must currently hold on the title escrow (checked before submitting). */ + requiredRoles: TitleEscrowRole[]; +}; + +export interface GaslessRunContext { + network: GaslessSupportedNetwork; + titleEscrowAddress: `0x${string}`; + callerAddress: `0x${string}`; + smartAccountClient: GaslessSmartAccountClient; +} + +/** + * Shared setup for every gasless title-escrow action: resolves the title escrow, recovers the + * caller's raw private key, verifies the caller currently holds the required role(s), runs the + * paymaster eligibility check, then builds the EIP-7702 smart account client. + */ +export const prepareGaslessRun = async ({ + network, + tokenRegistryAddress, + tokenId, + paymasterAddress, + encryptedWalletPath, + key, + keyFile, + requiredRoles, +}: PrepareGaslessRunArgs): Promise => { + const assertedNetwork = assertGaslessSupportedNetwork(network); + + const titleEscrowAddress = await resolveTitleEscrowAddress({ + tokenRegistryAddress, + tokenId, + network: assertedNetwork, + }); + + // This wallet is only used to recover the raw private key for the smart-account owner; no + // transaction is ever signed or sent with it directly. + const wallet = await getWalletOrSigner({ + network: assertedNetwork, + encryptedWalletPath, + key, + keyFile, + }); + + const privateKey = (wallet as { privateKey?: string }).privateKey; + if (!privateKey) { + throw new Error( + 'Gasless transactions require direct access to a private key (encrypted wallet file, --key, --key-file, or OA_PRIVATE_KEY). AWS KMS signers are not supported.', + ); + } + + const callerAddress = await wallet.getAddress(); + + const titleEscrow = new ethers.Contract( + titleEscrowAddress, + TitleEscrow__factory.abi, + getSupportedNetwork(assertedNetwork).provider(), + ); + + for (const role of requiredRoles) { + const currentRoleHolder: string = await titleEscrow[role](); + if (currentRoleHolder.toLowerCase() !== callerAddress.toLowerCase()) { + throw new Error( + `The connected wallet (${callerAddress}) is not the current ${role} (${currentRoleHolder}) of this transferable record.`, + ); + } + } + + warn('Checking whether this account is eligible for a gasless (sponsored) transaction...'); + await checkGaslessEligibility({ + network: assertedNetwork, + paymasterAddress: paymasterAddress as `0x${string}`, + callerAddress: callerAddress as `0x${string}`, + titleEscrowAddress: titleEscrowAddress as `0x${string}`, + }); + success('Account is eligible for a gasless transaction'); + + const { smartAccountClient } = await buildGaslessSmartAccountClient({ + network: assertedNetwork, + privateKey, + paymasterAddress: paymasterAddress as `0x${string}`, + }); + + return { + network: assertedNetwork, + titleEscrowAddress: titleEscrowAddress as `0x${string}`, + callerAddress: callerAddress as `0x${string}`, + smartAccountClient, + }; +}; + +export type PrepareGaslessRegistryRunArgs = GaslessWalletOption & { + network: string; + tokenRegistryAddress: string; + paymasterAddress: string; +}; + +export interface GaslessRegistryRunContext { + network: GaslessSupportedNetwork; + callerAddress: `0x${string}`; + smartAccountClient: GaslessSmartAccountClient; +} + +/** + * Shared setup for gasless actions that operate directly on the token registry contract rather + * than a specific title escrow (e.g. accepting/rejecting a returned document, which the registry + * admin performs). Recovers the caller's raw private key, runs the paymaster eligibility check + * against the registry address, then builds the EIP-7702 smart account client. Unlike + * `prepareGaslessRun`, there is no title-escrow role to check here — the registry contract itself + * enforces who may call these functions. + */ +export const prepareGaslessRegistryRun = async ({ + network, + tokenRegistryAddress, + paymasterAddress, + encryptedWalletPath, + key, + keyFile, +}: PrepareGaslessRegistryRunArgs): Promise => { + const assertedNetwork = assertGaslessSupportedNetwork(network); + + // This wallet is only used to recover the raw private key for the smart-account owner; no + // transaction is ever signed or sent with it directly. + const wallet = await getWalletOrSigner({ + network: assertedNetwork, + encryptedWalletPath, + key, + keyFile, + }); + + const privateKey = (wallet as { privateKey?: string }).privateKey; + if (!privateKey) { + throw new Error( + 'Gasless transactions require direct access to a private key (encrypted wallet file, --key, --key-file, or OA_PRIVATE_KEY). AWS KMS signers are not supported.', + ); + } + + const callerAddress = await wallet.getAddress(); + + warn('Checking whether this account is eligible for a gasless (sponsored) transaction...'); + await checkGaslessEligibility({ + network: assertedNetwork, + paymasterAddress: paymasterAddress as `0x${string}`, + callerAddress: callerAddress as `0x${string}`, + registryAddress: tokenRegistryAddress as `0x${string}`, + }); + success('Account is eligible for a gasless transaction'); + + const { smartAccountClient } = await buildGaslessSmartAccountClient({ + network: assertedNetwork, + privateKey, + paymasterAddress: paymasterAddress as `0x${string}`, + }); + + return { + network: assertedNetwork, + callerAddress: callerAddress as `0x${string}`, + smartAccountClient, + }; +}; diff --git a/src/commands/gasless/config.ts b/src/commands/gasless/config.ts new file mode 100644 index 0000000..9ccf8bc --- /dev/null +++ b/src/commands/gasless/config.ts @@ -0,0 +1,104 @@ +import { Chain } from 'viem'; +import { polygonAmoy, sepolia } from 'viem/chains'; +import { gaslessConstants } from '@trustvc/trustvc'; +import { NetworkCmdName } from '../../utils'; + +/** + * Gasless (EIP-7702 + Pimlico sponsored) transactions depend on a PlatformPaymaster and an + * EIP7702Implementation contract being deployed on the target chain. Today those are only + * deployed on Sepolia and Amoy, so gasless support is intentionally limited to these networks. + */ +export const GASLESS_SUPPORTED_NETWORKS = [NetworkCmdName.Sepolia, NetworkCmdName.Amoy] as const; + +export type GaslessSupportedNetwork = (typeof GASLESS_SUPPORTED_NETWORKS)[number]; + +export const isGaslessSupportedNetwork = (network: string): network is GaslessSupportedNetwork => + (GASLESS_SUPPORTED_NETWORKS as readonly string[]).includes(network); + +export const assertGaslessSupportedNetwork = (network: string): GaslessSupportedNetwork => { + if (!isGaslessSupportedNetwork(network)) { + throw new Error( + `Gasless transactions are only supported on: ${GASLESS_SUPPORTED_NETWORKS.join(', ')}. ` + + `The document resolved to network "${network}", which is not supported. Re-run without --gasless to send a regular transaction.`, + ); + } + return network; +}; + +const VIEM_CHAIN: Record = { + [NetworkCmdName.Sepolia]: sepolia, + [NetworkCmdName.Amoy]: polygonAmoy, +}; + +export const getViemChain = (network: GaslessSupportedNetwork): Chain => VIEM_CHAIN[network]; + +const DEFAULT_RPC_URL: Record = { + [NetworkCmdName.Sepolia]: 'https://ethereum-sepolia-rpc.publicnode.com', + [NetworkCmdName.Amoy]: 'https://polygon-amoy-bor-rpc.publicnode.com', +}; + +/** Reads the Pimlico API key from the environment. Required for every gasless transaction. */ +export const getPimlicoApiKey = (): string => { + const apiKey = process.env.PIMLICO_API_KEY; + if (!apiKey) { + throw new Error( + 'PIMLICO_API_KEY environment variable is required for gasless transactions. ' + + 'Get an API key from https://dashboard.pimlico.io and set it in your environment.', + ); + } + return apiKey; +}; + +/** + * Reads the deployed EIP7702Implementation contract address for the given network from the + * environment. Checked first as `{NETWORK}_EIP7702_IMPL_ADDRESS`, falling back to the generic + * `EIP7702_IMPL_ADDRESS` if set. + */ +export const getEip7702ImplementationAddress = ( + network: GaslessSupportedNetwork, +): `0x${string}` => { + const scopedEnvVar = `${network.toUpperCase()}_EIP7702_IMPL_ADDRESS`; + const address = process.env[scopedEnvVar] || process.env.EIP7702_IMPL_ADDRESS; + + if (!address) { + throw new Error( + `Missing EIP-7702 implementation address for ${network}. Set the ${scopedEnvVar} ` + + `(or generic EIP7702_IMPL_ADDRESS) environment variable to the deployed EIP7702Implementation contract address.`, + ); + } + + if (!/^0x[a-fA-F0-9]{40}$/.test(address)) { + throw new Error( + `Invalid EIP-7702 implementation address in ${scopedEnvVar}/EIP7702_IMPL_ADDRESS: ${address}`, + ); + } + + return address as `0x${string}`; +}; + +/** RPC URL used for gasless reads/client setup, overridable via `{NETWORK}_RPC`. */ +export const getGaslessRpcUrl = (network: GaslessSupportedNetwork): string => { + const scopedEnvVar = `${network.toUpperCase()}_RPC`; + return process.env[scopedEnvVar] || DEFAULT_RPC_URL[network]; +}; + +// Pimlico's v2 bundler/paymaster endpoint accepts a chain identifier segment; the numeric chain +// ID is used here (rather than a hand-maintained slug table) since it works for any chain and +// never goes stale as Pimlico adds/renames network slugs. +export const getPimlicoBundlerUrl = (network: GaslessSupportedNetwork, apiKey: string): string => + `https://api.pimlico.io/v2/${getViemChain(network).id}/rpc?apikey=${apiKey}`; + +/** + * PlatformAccountFactory address for the given network, from @trustvc/trustvc's own + * `gaslessConstants`. Deliberately not left for `deployPlatformPaymaster` to default itself — + * its internal fallback (`@trustvc/eip7702`'s bundled constants) is stale for Sepolia and has no + * entry at all for Amoy. Looked up lazily (not at module load) so this file stays importable + * even against a partial `@trustvc/trustvc` mock that doesn't stub `gaslessConstants`. + */ +export const getGaslessFactoryAddress = (network: GaslessSupportedNetwork): `0x${string}` => { + const factoryAddress: Record = { + [NetworkCmdName.Sepolia]: gaslessConstants.GASLESS_FACTORY_ADDRESS_SEPOLIA, + [NetworkCmdName.Amoy]: gaslessConstants.GASLESS_FACTORY_ADDRESS_AMOY, + }; + return factoryAddress[network] as `0x${string}`; +}; diff --git a/src/commands/gasless/deploy/deploy-platform-paymaster.ts b/src/commands/gasless/deploy/deploy-platform-paymaster.ts new file mode 100644 index 0000000..babf65b --- /dev/null +++ b/src/commands/gasless/deploy/deploy-platform-paymaster.ts @@ -0,0 +1,125 @@ +import { Argv } from 'yargs'; +import { error, info, success } from 'signale'; +import { input } from '@inquirer/prompts'; +import { id } from 'ethers'; +import { deployPlatformPaymaster } from '@trustvc/trustvc'; +import { + getErrorMessage, + getEtherscanAddress, + getSupportedNetwork, + getWalletOrSigner, + promptAddress, + promptNetworkSelection, + promptWalletSelection, +} from '../../../utils'; +import { assertGaslessSupportedNetwork, getGaslessFactoryAddress } from '../config'; +import { GaslessWalletOption } from '../types'; + +// Deploys the PlatformPaymaster itself — this is a regular, non-gasless transaction. Someone has +// to pay real gas to bootstrap the paymaster before it can sponsor anything else. +export const command = 'deploy-platform-paymaster'; + +export const describe = + 'Deploys a PlatformPaymaster contract that sponsors gasless title-escrow and token-registry transactions. This is a regular transaction — you pay gas directly to deploy it.'; + +export const builder = (yargs: Argv): Argv => yargs; + +export type DeployPlatformPaymasterCommand = GaslessWalletOption & { + network: string; + salt: string; + platformAddress?: string; + dailyLimit?: string; +}; + +export const promptForDeployPlatformPaymasterInputs = + async (): Promise => { + const network = await promptNetworkSelection(); + assertGaslessSupportedNetwork(network); + + const saltInput = await input({ + message: + 'Enter a salt to deterministically derive the paymaster address (0x-prefixed 32-byte hex, or any string — it will be hashed into one):', + required: true, + validate: (value: string) => { + if (value.startsWith('0x') && !/^0x[a-fA-F0-9]{64}$/.test(value)) { + return 'A 0x-prefixed salt must be a 32-byte (64 hex character) value'; + } + return true; + }, + }); + + // A 0x-prefixed value is used as-is (already validated above); anything else is hashed into + // a deterministic bytes32 value. + const salt = saltInput.startsWith('0x') ? saltInput : id(saltInput); + + const platformAddress = await promptAddress( + 'platform owner', + 'defaults to your own deployer address if left blank', + true, + ); + + const dailyLimit = await input({ + message: 'Enter the daily sponsored-gas limit in wei (optional, 0 = unlimited):', + required: false, + default: '0', + validate: (value: string) => { + if (value && !/^\d+$/.test(value)) { + return 'Daily limit must be a non-negative integer (wei)'; + } + return true; + }, + }); + + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + + return { + network, + salt, + platformAddress, + dailyLimit: dailyLimit || undefined, + encryptedWalletPath, + key, + keyFile, + }; + }; + +export const runDeployPlatformPaymaster = async ( + args: DeployPlatformPaymasterCommand, +): Promise => { + try { + const network = assertGaslessSupportedNetwork(args.network); + + const wallet = await getWalletOrSigner({ + network, + encryptedWalletPath: args.encryptedWalletPath, + key: args.key, + keyFile: args.keyFile, + }); + + info(`Deploying PlatformPaymaster on ${network}...`); + + const { txHash, paymasterAddress } = await deployPlatformPaymaster(wallet, { + chainId: getSupportedNetwork(network).networkId, + salt: args.salt as `0x${string}`, + platformAddress: args.platformAddress as `0x${string}` | undefined, + factoryAddress: getGaslessFactoryAddress(network), + dailyLimit: args.dailyLimit ? BigInt(args.dailyLimit) : undefined, + }); + + success(`PlatformPaymaster deployed at ${paymasterAddress}`); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${txHash}`); + + return paymasterAddress; + } catch (e) { + error(getErrorMessage(e)); + } +}; + +export const handler = async (): Promise => { + try { + const answers = await promptForDeployPlatformPaymasterInputs(); + return await runDeployPlatformPaymaster(answers); + } catch (err: unknown) { + error(err instanceof Error ? err.message : String(err)); + } +}; diff --git a/src/commands/gasless/deploy/deploy-token-registry-gasless.ts b/src/commands/gasless/deploy/deploy-token-registry-gasless.ts new file mode 100644 index 0000000..e507d0c --- /dev/null +++ b/src/commands/gasless/deploy/deploy-token-registry-gasless.ts @@ -0,0 +1,150 @@ +import { error, info, success, warn } from 'signale'; +import { input } from '@inquirer/prompts'; +import { createPublicClient, http, parseEventLogs } from 'viem'; +import { deployTokenRegistryGasless, eip7702Abis, v5ContractAddress } from '@trustvc/trustvc'; +import { + getErrorMessage, + getEtherscanAddress, + getWalletOrSigner, + promptAddress, + promptNetworkSelection, + promptWalletSelection, +} from '../../../utils'; +import { assertGaslessSupportedNetwork, getGaslessRpcUrl, getViemChain } from '../config'; +import { buildGaslessSmartAccountClient } from '../client'; +import { checkGaslessDeployEligibility } from '../eligibility'; +import { GaslessWalletOption } from '../types'; + +// Deploys a new token registry gaslessly via the PlatformPaymaster's deployRegistry(). Wired into +// `token-registry deploy --gasless` (see ../../token-registry/deploy.ts) rather than being its +// own top-level command, matching every other gasless action. +export type DeployTokenRegistryGaslessCommand = GaslessWalletOption & { + network: string; + registryName: string; + registrySymbol: string; + paymasterAddress: string; + tokenRegistryImplAddress: string; +}; + +export const promptForDeployTokenRegistryGaslessInputs = + async (): Promise => { + const network = await promptNetworkSelection(); + const assertedNetwork = assertGaslessSupportedNetwork(network); + + const registryName = await input({ + message: 'Enter the name of the token registry:', + required: true, + validate: (value: string) => (value.trim() === '' ? 'Registry name is required' : true), + }); + + const registrySymbol = await input({ + message: 'Enter the symbol of the token registry:', + required: true, + validate: (value: string) => (value.trim() === '' ? 'Registry symbol is required' : true), + }); + + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this deployment', + ); + + const chainId = getViemChain(assertedNetwork).id; + const defaultImplAddress = v5ContractAddress.TokenImplementation[chainId]; + const tokenRegistryImplAddress = await promptAddress( + 'token registry implementation', + defaultImplAddress + ? `optional — defaults to ${defaultImplAddress} for this network` + : 'the deployed TradeTrustToken implementation contract to clone', + Boolean(defaultImplAddress), + ); + + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + + return { + network, + registryName, + registrySymbol, + paymasterAddress: paymasterAddress as string, + tokenRegistryImplAddress: (tokenRegistryImplAddress ?? defaultImplAddress) as string, + encryptedWalletPath, + key, + keyFile, + }; + }; + +export const runDeployTokenRegistryGasless = async ( + args: DeployTokenRegistryGaslessCommand, +): Promise => { + try { + const network = assertGaslessSupportedNetwork(args.network); + + // This wallet is only used to recover the raw private key for the smart-account owner; no + // transaction is ever signed or sent with it directly. + const wallet = await getWalletOrSigner({ + network, + encryptedWalletPath: args.encryptedWalletPath, + key: args.key, + keyFile: args.keyFile, + }); + + const privateKey = (wallet as { privateKey?: string }).privateKey; + if (!privateKey) { + throw new Error( + 'Gasless transactions require direct access to a private key (encrypted wallet file, --key, --key-file, or OA_PRIVATE_KEY). AWS KMS signers are not supported.', + ); + } + + const callerAddress = await wallet.getAddress(); + + warn('Checking whether this account is eligible to deploy gaslessly...'); + await checkGaslessDeployEligibility({ + network, + paymasterAddress: args.paymasterAddress as `0x${string}`, + callerAddress: callerAddress as `0x${string}`, + }); + success('Account is eligible to deploy gaslessly'); + + const { smartAccountClient } = await buildGaslessSmartAccountClient({ + network, + privateKey, + paymasterAddress: args.paymasterAddress as `0x${string}`, + }); + + info( + `Submitting gasless deployment of token registry ${args.registryName} (${args.registrySymbol}). Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await deployTokenRegistryGasless( + args.registryName, + args.registrySymbol, + smartAccountClient, + { + paymasterAddress: args.paymasterAddress as `0x${string}`, + tokenRegistryImplAddress: args.tokenRegistryImplAddress as `0x${string}`, + }, + ); + + const publicClient = createPublicClient({ + chain: getViemChain(network), + transport: http(getGaslessRpcUrl(network)), + }); + const receipt = await publicClient.getTransactionReceipt({ hash: transactionHash }); + const [deployedEvent] = parseEventLogs({ + abi: eip7702Abis.platformPaymasterAbi, + logs: receipt.logs, + eventName: 'RegistryDeployed', + }); + const deployedAddress = deployedEvent?.args?.deployed; + + if (deployedAddress) { + success(`Token registry ${args.registryName} deployed at ${deployedAddress}`); + } else { + success(`Token registry ${args.registryName} deployment submitted`); + } + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return deployedAddress ?? transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/eligibility.ts b/src/commands/gasless/eligibility.ts new file mode 100644 index 0000000..ef332ef --- /dev/null +++ b/src/commands/gasless/eligibility.ts @@ -0,0 +1,253 @@ +import { createPublicClient, http } from 'viem'; +import { eip7702Abis, v5Contracts, v5RoleHash } from '@trustvc/trustvc'; +import { GaslessSupportedNetwork, getGaslessRpcUrl, getViemChain } from './config'; + +export type CheckGaslessEligibilityArgs = { + network: GaslessSupportedNetwork; + paymasterAddress: `0x${string}`; + callerAddress: `0x${string}`; +} & ( + | { titleEscrowAddress: `0x${string}`; registryAddress?: never } + | { titleEscrowAddress?: never; registryAddress: `0x${string}` } +); + +/** + * Verifies that the PlatformPaymaster will actually sponsor this transaction before we build a + * smart account client and submit a UserOperation. Checks, against the paymaster contract: + * - it is a deployed contract at the given address + * - the title escrow (or, for registry-level actions, the token registry) being acted on is authorized + * - the caller is an authorized caller + * - the caller's daily sponsored-gas spend limit has not been reached + * - the paymaster has a non-zero deposit at the EntryPoint to draw gas from + * + * Throws a descriptive error naming the failed check; does nothing on success. + */ +export const checkGaslessEligibility = async ({ + network, + paymasterAddress, + callerAddress, + titleEscrowAddress, + registryAddress, +}: CheckGaslessEligibilityArgs): Promise => { + const publicClient = createPublicClient({ + chain: getViemChain(network), + transport: http(getGaslessRpcUrl(network)), + }); + const abi = eip7702Abis.platformPaymasterAbi; + + const paymasterCode = await publicClient.getCode({ address: paymasterAddress }); + if (!paymasterCode || paymasterCode === '0x') { + throw new Error( + `No PlatformPaymaster contract found at ${paymasterAddress} on ${network}. Check the address and try again.`, + ); + } + + const [isActedOnAddressAuthorized, isCallerAuthorized, dailySpend, deposit] = await Promise.all([ + publicClient.readContract( + titleEscrowAddress + ? { + address: paymasterAddress, + abi, + functionName: 'authorizedTitleEscrows', + args: [titleEscrowAddress], + } + : { + address: paymasterAddress, + abi, + functionName: 'authorizedRegistries', + args: [registryAddress], + }, + ), + publicClient.readContract({ + address: paymasterAddress, + abi, + functionName: 'authorizedCallers', + args: [callerAddress], + }), + publicClient.readContract({ + address: paymasterAddress, + abi, + functionName: 'getUserDailySpend', + args: [callerAddress], + }), + publicClient.readContract({ + address: paymasterAddress, + abi, + functionName: 'getDeposit', + }), + ]); + + if (!isActedOnAddressAuthorized) { + throw new Error( + titleEscrowAddress + ? `This account cannot perform a gasless transaction: title escrow ${titleEscrowAddress} is not ` + + `authorized on the PlatformPaymaster (${paymasterAddress}). Ask the paymaster owner to call addTitleEscrow first.` + : `This account cannot perform a gasless transaction: token registry ${registryAddress} is not ` + + `authorized on the PlatformPaymaster (${paymasterAddress}). Ask the paymaster owner to call addRegistry first.`, + ); + } + + if (!isCallerAuthorized) { + throw new Error( + `This account cannot perform a gasless transaction: caller ${callerAddress} is not an authorized ` + + `caller on the PlatformPaymaster (${paymasterAddress}). Ask the paymaster owner to call addAuthorizedCaller first.`, + ); + } + + const [spent, limit] = dailySpend as unknown as [bigint, bigint, bigint]; + if (limit > 0n && spent >= limit) { + throw new Error( + `This account cannot perform a gasless transaction: daily sponsored-gas limit reached for ` + + `${callerAddress} (spent ${spent.toString()} of ${limit.toString()} wei). Try again after the daily limit resets.`, + ); + } + + if ((deposit as unknown as bigint) <= 0n) { + throw new Error( + `This account cannot perform a gasless transaction: the PlatformPaymaster (${paymasterAddress}) has ` + + `no ETH deposited at the EntryPoint, so it cannot sponsor gas. Ask the paymaster owner to fund it.`, + ); + } +}; + +export interface CheckGaslessDeployEligibilityArgs { + network: GaslessSupportedNetwork; + paymasterAddress: `0x${string}`; + callerAddress: `0x${string}`; +} + +/** + * Verifies eligibility for `deployRegistry` on the PlatformPaymaster ("Path B" — credit-gated, + * unrelated to `authorizedCallers`/`authorizedTitleEscrows`/`authorizedRegistries`). Checks: + * - it is a deployed contract at the given address + * - the caller has at least one deployment credit (`userWhitelist`) + * - the paymaster has a non-zero deposit at the EntryPoint to draw gas from + * + * Throws a descriptive error naming the failed check; does nothing on success. + */ +export const checkGaslessDeployEligibility = async ({ + network, + paymasterAddress, + callerAddress, +}: CheckGaslessDeployEligibilityArgs): Promise => { + const publicClient = createPublicClient({ + chain: getViemChain(network), + transport: http(getGaslessRpcUrl(network)), + }); + const abi = eip7702Abis.platformPaymasterAbi; + + const paymasterCode = await publicClient.getCode({ address: paymasterAddress }); + if (!paymasterCode || paymasterCode === '0x') { + throw new Error( + `No PlatformPaymaster contract found at ${paymasterAddress} on ${network}. Check the address and try again.`, + ); + } + + const [credits, deposit] = await Promise.all([ + publicClient.readContract({ + address: paymasterAddress, + abi, + functionName: 'userWhitelist', + args: [callerAddress], + }), + publicClient.readContract({ + address: paymasterAddress, + abi, + functionName: 'getDeposit', + }), + ]); + + if ((credits as unknown as bigint) <= 0n) { + throw new Error( + `This account cannot deploy a token registry gaslessly: caller ${callerAddress} has no deployment ` + + `credits on the PlatformPaymaster (${paymasterAddress}). Ask the paymaster owner to call setUserWhitelist first.`, + ); + } + + if ((deposit as unknown as bigint) <= 0n) { + throw new Error( + `This account cannot deploy a token registry gaslessly: the PlatformPaymaster (${paymasterAddress}) has ` + + `no ETH deposited at the EntryPoint, so it cannot sponsor gas. Ask the paymaster owner to fund it.`, + ); + } +}; + +export interface CheckGaslessMintEligibilityArgs { + network: GaslessSupportedNetwork; + paymasterAddress: `0x${string}`; + registryAddress: `0x${string}`; +} + +/** + * Verifies eligibility for `mintDocument` on the PlatformPaymaster ("Path B" — `mintDocument` has + * no caller restriction of its own; it just requires `authorizedRegistries[registry]` and then + * calls `registry.mint(...)`, which succeeds only if the token registry has granted the + * PlatformPaymaster contract itself the `MINTER_ROLE`. Granting that role is the token registry + * owner's call, not the paymaster owner's). Checks: + * - it is a deployed contract at the given address + * - the token registry being minted on is authorized + * - the token registry has granted the PlatformPaymaster the `MINTER_ROLE` + * - the paymaster has a non-zero deposit at the EntryPoint to draw gas from + * + * Throws a descriptive error naming the failed check; does nothing on success. + */ +export const checkGaslessMintEligibility = async ({ + network, + paymasterAddress, + registryAddress, +}: CheckGaslessMintEligibilityArgs): Promise => { + const publicClient = createPublicClient({ + chain: getViemChain(network), + transport: http(getGaslessRpcUrl(network)), + }); + const abi = eip7702Abis.platformPaymasterAbi; + + const paymasterCode = await publicClient.getCode({ address: paymasterAddress }); + if (!paymasterCode || paymasterCode === '0x') { + throw new Error( + `No PlatformPaymaster contract found at ${paymasterAddress} on ${network}. Check the address and try again.`, + ); + } + + const [isPaymasterMinter, isRegistryAuthorized, deposit] = await Promise.all([ + publicClient.readContract({ + address: registryAddress, + abi: v5Contracts.TradeTrustToken__factory.abi, + functionName: 'hasRole', + args: [v5RoleHash.MinterRole, paymasterAddress], + }), + publicClient.readContract({ + address: paymasterAddress, + abi, + functionName: 'authorizedRegistries', + args: [registryAddress], + }), + publicClient.readContract({ + address: paymasterAddress, + abi, + functionName: 'getDeposit', + }), + ]); + + if (!isPaymasterMinter) { + throw new Error( + `This account cannot mint gaslessly: the PlatformPaymaster (${paymasterAddress}) does not hold ` + + `MINTER_ROLE on token registry ${registryAddress}. Ask the token registry's owner to grant it ` + + `(e.g. via grantRole).`, + ); + } + + if (!isRegistryAuthorized) { + throw new Error( + `This account cannot mint gaslessly: token registry ${registryAddress} is not authorized on the ` + + `PlatformPaymaster (${paymasterAddress}). Ask the paymaster owner to call addRegistry first.`, + ); + } + + if ((deposit as unknown as bigint) <= 0n) { + throw new Error( + `This account cannot mint gaslessly: the PlatformPaymaster (${paymasterAddress}) has no ETH deposited ` + + `at the EntryPoint, so it cannot sponsor gas. Ask the paymaster owner to fund it.`, + ); + } +}; diff --git a/src/commands/gasless/index.ts b/src/commands/gasless/index.ts new file mode 100644 index 0000000..b9d6877 --- /dev/null +++ b/src/commands/gasless/index.ts @@ -0,0 +1,20 @@ +// Shared gasless (EIP-7702 + Pimlico sponsored) transaction utilities and handlers. +// Not a yargs command directory: no module here exports `command`/`handler`, so main.ts's +// recursive commandDir scan skips this folder entirely. +export * from './config'; +export * from './client'; +export * from './eligibility'; +export * from './types'; +export * from './common'; +export * from './title-escrow/transfer-holder'; +export * from './title-escrow/transfer-beneficiary'; +export * from './title-escrow/nominate'; +export * from './title-escrow/transfer-owners'; +export * from './title-escrow/reject-transfer-holder'; +export * from './title-escrow/reject-transfer-beneficiary'; +export * from './title-escrow/reject-transfer-owners'; +export * from './title-escrow/return-to-issuer'; +export * from './title-escrow/accept-return-to-issuer'; +export * from './title-escrow/reject-return-to-issuer'; +export * from './token-regitsry/mint'; +export * from './deploy/deploy-token-registry-gasless'; diff --git a/src/commands/gasless/title-escrow/accept-return-to-issuer.ts b/src/commands/gasless/title-escrow/accept-return-to-issuer.ts new file mode 100644 index 0000000..59e5459 --- /dev/null +++ b/src/commands/gasless/title-escrow/accept-return-to-issuer.ts @@ -0,0 +1,83 @@ +import { error, info, success } from 'signale'; +import { acceptReturnedGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRegistryRun } from '../common'; +import { TokenRegistryReturnedDocumentGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly accept a returned transferable record. */ +export const promptForGaslessAcceptReturnToIssuerInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless accept-return-to-issuer transaction end to end: this acts directly on the token + * registry contract (the registry admin burns the token) rather than a title escrow, so there is + * no title-escrow role check — the on-chain contract enforces who may call it. Recovers the + * caller's raw private key, checks the account is eligible for sponsorship, then submits the + * sponsored UserOperation via @trustvc/trustvc's `acceptReturnedGasless`. + */ +export const runAcceptReturnToIssuerGasless = async ( + args: TokenRegistryReturnedDocumentGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // acceptReturnedGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + const { network, smartAccountClient } = await prepareGaslessRegistryRun(args); + + info( + `Submitting gasless acceptance of the returned document with tokenId ${args.tokenId}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await acceptReturnedGasless( + { tokenRegistryAddress: args.tokenRegistryAddress }, + smartAccountClient, + { tokenId: args.tokenId, remarks: args.remark }, + { id: args.encryptionKey }, + ); + + success(`Returned transferable record with tokenId ${args.tokenId} has been accepted.`); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/title-escrow/nominate.ts b/src/commands/gasless/title-escrow/nominate.ts new file mode 100644 index 0000000..8267a5f --- /dev/null +++ b/src/commands/gasless/title-escrow/nominate.ts @@ -0,0 +1,92 @@ +import { error, info, success } from 'signale'; +import { nominateGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRun } from '../common'; +import { TitleEscrowNominateBeneficiaryGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly nominate a new beneficiary for a transferable record. */ +export const promptForGaslessNominateInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const newBeneficiary = await promptAddress('beneficiary', 'new beneficiary (owner)'); + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + newBeneficiary: newBeneficiary as string, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless beneficiary nomination end to end: resolves the title escrow, recovers the + * caller's raw private key, checks the account is eligible for sponsorship, then submits the + * sponsored UserOperation via @trustvc/trustvc's `nominateGasless`. + */ +export const runNominateGasless = async ( + args: TitleEscrowNominateBeneficiaryGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // nominateGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + info( + `Resolving title escrow for tokenId ${args.tokenId} on registry ${args.tokenRegistryAddress}`, + ); + // Nominating requires the caller to currently be the beneficiary (mirrors the non-gasless flow). + const { network, titleEscrowAddress, smartAccountClient } = await prepareGaslessRun({ + ...args, + requiredRoles: ['beneficiary'], + }); + + info( + `Submitting gasless nomination for tokenId ${args.tokenId} to new owner at ${args.newBeneficiary}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await nominateGasless( + { titleEscrowAddress }, + smartAccountClient, + { newBeneficiaryAddress: args.newBeneficiary, remarks: args.remark }, + { id: args.encryptionKey }, + ); + + success( + `Transferable record with tokenId ${args.tokenId}'s holder has been successfully nominated to new owner with address ${args.newBeneficiary}`, + ); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/title-escrow/reject-return-to-issuer.ts b/src/commands/gasless/title-escrow/reject-return-to-issuer.ts new file mode 100644 index 0000000..51a66fe --- /dev/null +++ b/src/commands/gasless/title-escrow/reject-return-to-issuer.ts @@ -0,0 +1,83 @@ +import { error, info, success } from 'signale'; +import { rejectReturnedGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRegistryRun } from '../common'; +import { TokenRegistryReturnedDocumentGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly reject a returned transferable record. */ +export const promptForGaslessRejectReturnToIssuerInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless reject-return-to-issuer transaction end to end: this acts directly on the token + * registry contract (the registry admin restores the token) rather than a title escrow, so there + * is no title-escrow role check — the on-chain contract enforces who may call it. Recovers the + * caller's raw private key, checks the account is eligible for sponsorship, then submits the + * sponsored UserOperation via @trustvc/trustvc's `rejectReturnedGasless`. + */ +export const runRejectReturnToIssuerGasless = async ( + args: TokenRegistryReturnedDocumentGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // rejectReturnedGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + const { network, smartAccountClient } = await prepareGaslessRegistryRun(args); + + info( + `Submitting gasless rejection of the returned document with tokenId ${args.tokenId}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await rejectReturnedGasless( + { tokenRegistryAddress: args.tokenRegistryAddress }, + smartAccountClient, + { tokenId: args.tokenId, remarks: args.remark }, + { id: args.encryptionKey }, + ); + + success(`Returned transferable record with tokenId ${args.tokenId} has been rejected.`); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/title-escrow/reject-transfer-beneficiary.ts b/src/commands/gasless/title-escrow/reject-transfer-beneficiary.ts new file mode 100644 index 0000000..3006fb4 --- /dev/null +++ b/src/commands/gasless/title-escrow/reject-transfer-beneficiary.ts @@ -0,0 +1,90 @@ +import { error, info, success } from 'signale'; +import { rejectTransferBeneficiaryGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRun } from '../common'; +import { TitleEscrowRejectTransferGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly reject a pending owner (beneficiary) transfer. */ +export const promptForGaslessRejectTransferOwnerInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless reject-transfer-owner transaction end to end: resolves the title escrow, + * recovers the caller's raw private key, checks the account is eligible for sponsorship, then + * submits the sponsored UserOperation via @trustvc/trustvc's `rejectTransferBeneficiaryGasless`. + */ +export const runRejectTransferOwnerGasless = async ( + args: TitleEscrowRejectTransferGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // rejectTransferBeneficiaryGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + info( + `Resolving title escrow for tokenId ${args.tokenId} on registry ${args.tokenRegistryAddress}`, + ); + // Rejecting an owner (beneficiary) transfer requires the caller to currently be the beneficiary. + const { network, titleEscrowAddress, smartAccountClient } = await prepareGaslessRun({ + ...args, + requiredRoles: ['beneficiary'], + }); + + info( + `Submitting gasless rejection of the pending owner transfer for tokenId ${args.tokenId}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await rejectTransferBeneficiaryGasless( + { titleEscrowAddress }, + smartAccountClient, + { remarks: args.remark }, + { id: args.encryptionKey }, + ); + + success( + `Transferable record with tokenId ${args.tokenId}'s owner transfer has been successfully rejected to previous owner`, + ); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/title-escrow/reject-transfer-holder.ts b/src/commands/gasless/title-escrow/reject-transfer-holder.ts new file mode 100644 index 0000000..c79084e --- /dev/null +++ b/src/commands/gasless/title-escrow/reject-transfer-holder.ts @@ -0,0 +1,90 @@ +import { error, info, success } from 'signale'; +import { rejectTransferHolderGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRun } from '../common'; +import { TitleEscrowRejectTransferGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly reject a pending holder transfer. */ +export const promptForGaslessRejectTransferHolderInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless reject-transfer-holder transaction end to end: resolves the title escrow, + * recovers the caller's raw private key, checks the account is eligible for sponsorship, then + * submits the sponsored UserOperation via @trustvc/trustvc's `rejectTransferHolderGasless`. + */ +export const runRejectTransferHolderGasless = async ( + args: TitleEscrowRejectTransferGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // rejectTransferHolderGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + info( + `Resolving title escrow for tokenId ${args.tokenId} on registry ${args.tokenRegistryAddress}`, + ); + // Rejecting a holder transfer requires the caller to currently be the holder. + const { network, titleEscrowAddress, smartAccountClient } = await prepareGaslessRun({ + ...args, + requiredRoles: ['holder'], + }); + + info( + `Submitting gasless rejection of the pending holder transfer for tokenId ${args.tokenId}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await rejectTransferHolderGasless( + { titleEscrowAddress }, + smartAccountClient, + { remarks: args.remark }, + { id: args.encryptionKey }, + ); + + success( + `Transferable record with tokenId ${args.tokenId}'s holder transfer has been successfully rejected to previous holder`, + ); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/title-escrow/reject-transfer-owners.ts b/src/commands/gasless/title-escrow/reject-transfer-owners.ts new file mode 100644 index 0000000..7b9dec1 --- /dev/null +++ b/src/commands/gasless/title-escrow/reject-transfer-owners.ts @@ -0,0 +1,90 @@ +import { error, info, success } from 'signale'; +import { rejectTransferOwnersGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRun } from '../common'; +import { TitleEscrowRejectTransferGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly reject a pending owner-and-holder transfer. */ +export const promptForGaslessRejectTransferOwnerHolderInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless reject-transfer-owner-holder transaction end to end: resolves the title escrow, + * recovers the caller's raw private key, checks the account is eligible for sponsorship, then + * submits the sponsored UserOperation via @trustvc/trustvc's `rejectTransferOwnersGasless`. + */ +export const runRejectTransferOwnerHolderGasless = async ( + args: TitleEscrowRejectTransferGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // rejectTransferOwnersGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + info( + `Resolving title escrow for tokenId ${args.tokenId} on registry ${args.tokenRegistryAddress}`, + ); + // Rejecting an owner+holder transfer requires the caller to currently be both. + const { network, titleEscrowAddress, smartAccountClient } = await prepareGaslessRun({ + ...args, + requiredRoles: ['holder', 'beneficiary'], + }); + + info( + `Submitting gasless rejection of the pending owner and holder transfer for tokenId ${args.tokenId}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await rejectTransferOwnersGasless( + { titleEscrowAddress }, + smartAccountClient, + { remarks: args.remark }, + { id: args.encryptionKey }, + ); + + success( + `Transferable record with tokenId ${args.tokenId}'s owner and holder transfer has been successfully rejected to previous owner and holder`, + ); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/title-escrow/return-to-issuer.ts b/src/commands/gasless/title-escrow/return-to-issuer.ts new file mode 100644 index 0000000..eed6ce0 --- /dev/null +++ b/src/commands/gasless/title-escrow/return-to-issuer.ts @@ -0,0 +1,88 @@ +import { error, info, success } from 'signale'; +import { returnToIssuerGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRun } from '../common'; +import { TitleEscrowReturnDocumentGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly return a transferable record to the issuer. */ +export const promptForGaslessReturnToIssuerInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless return-to-issuer transaction end to end: resolves the title escrow, recovers the + * caller's raw private key, checks the account is eligible for sponsorship, then submits the + * sponsored UserOperation via @trustvc/trustvc's `returnToIssuerGasless`. + */ +export const runReturnToIssuerGasless = async ( + args: TitleEscrowReturnDocumentGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // returnToIssuerGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + info( + `Resolving title escrow for tokenId ${args.tokenId} on registry ${args.tokenRegistryAddress}`, + ); + // Returning to the issuer requires the caller to currently be both the holder and beneficiary. + const { network, titleEscrowAddress, smartAccountClient } = await prepareGaslessRun({ + ...args, + requiredRoles: ['holder', 'beneficiary'], + }); + + info( + `Submitting gasless return to issuer for tokenId ${args.tokenId}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await returnToIssuerGasless( + { titleEscrowAddress }, + smartAccountClient, + { remarks: args.remark }, + { id: args.encryptionKey }, + ); + + success(`Transferable record with tokenId ${args.tokenId} has been returned.`); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/title-escrow/transfer-beneficiary.ts b/src/commands/gasless/title-escrow/transfer-beneficiary.ts new file mode 100644 index 0000000..0824966 --- /dev/null +++ b/src/commands/gasless/title-escrow/transfer-beneficiary.ts @@ -0,0 +1,92 @@ +import { error, info, success } from 'signale'; +import { transferBeneficiaryGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRun } from '../common'; +import { TitleEscrowTransferBeneficiaryGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly endorse (transfer) the beneficiary of a transferable record. */ +export const promptForGaslessTransferBeneficiaryInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const newBeneficiary = await promptAddress('new beneficiary', 'new owner'); + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + newBeneficiary: newBeneficiary as string, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless beneficiary transfer end to end: resolves the title escrow, recovers the + * caller's raw private key, checks the account is eligible for sponsorship, then submits the + * sponsored UserOperation via @trustvc/trustvc's `transferBeneficiaryGasless`. + */ +export const runTransferBeneficiaryGasless = async ( + args: TitleEscrowTransferBeneficiaryGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // transferBeneficiaryGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + info( + `Resolving title escrow for tokenId ${args.tokenId} on registry ${args.tokenRegistryAddress}`, + ); + // transferBeneficiary requires the caller to currently be the holder (mirrors the non-gasless flow). + const { network, titleEscrowAddress, smartAccountClient } = await prepareGaslessRun({ + ...args, + requiredRoles: ['holder'], + }); + + info( + `Submitting gasless beneficiary transfer for tokenId ${args.tokenId} to ${args.newBeneficiary}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await transferBeneficiaryGasless( + { titleEscrowAddress }, + smartAccountClient, + { newBeneficiaryAddress: args.newBeneficiary, remarks: args.remark }, + { id: args.encryptionKey }, + ); + + success( + `Transferable record with tokenId ${args.tokenId}'s holder has been successfully endorsed to approved beneficiary at ${args.newBeneficiary}`, + ); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/title-escrow/transfer-holder.ts b/src/commands/gasless/title-escrow/transfer-holder.ts new file mode 100644 index 0000000..e99911a --- /dev/null +++ b/src/commands/gasless/title-escrow/transfer-holder.ts @@ -0,0 +1,91 @@ +import { error, info, success } from 'signale'; +import { transferHolderGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRun } from '../common'; +import { TitleEscrowTransferHolderGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly transfer the holder of a transferable record. */ +export const promptForGaslessTransferHolderInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const newHolder = await promptAddress('new holder', 'new holder'); + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + newHolder: newHolder as string, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless transfer-holder transaction end to end: resolves the title escrow, recovers the + * caller's raw private key, checks the account is eligible for sponsorship, then submits the + * sponsored UserOperation via @trustvc/trustvc's `transferHolderGasless`. + */ +export const runTransferHolderGasless = async ( + args: TitleEscrowTransferHolderGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // transferHolderGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + info( + `Resolving title escrow for tokenId ${args.tokenId} on registry ${args.tokenRegistryAddress}`, + ); + const { network, titleEscrowAddress, smartAccountClient } = await prepareGaslessRun({ + ...args, + requiredRoles: ['holder'], + }); + + info( + `Submitting gasless transfer of holder for tokenId ${args.tokenId} to ${args.newHolder}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await transferHolderGasless( + { titleEscrowAddress }, + smartAccountClient, + { holderAddress: args.newHolder, remarks: args.remark }, + { id: args.encryptionKey }, + ); + + success( + `Transferable record with tokenId ${args.tokenId}'s holder has been successfully changed to holder with address: ${args.newHolder}`, + ); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/title-escrow/transfer-owners.ts b/src/commands/gasless/title-escrow/transfer-owners.ts new file mode 100644 index 0000000..3b69723 --- /dev/null +++ b/src/commands/gasless/title-escrow/transfer-owners.ts @@ -0,0 +1,98 @@ +import { error, info, success } from 'signale'; +import { transferOwnersGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { prepareGaslessRun } from '../common'; +import { TitleEscrowTransferOwnersGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly transfer both the owner and holder of a transferable record. */ +export const promptForGaslessTransferOwnersInputs = + async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const newOwner = await promptAddress('new owner', 'new beneficiary'); + const newHolder = await promptAddress('new holder', 'new holder'); + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + newOwner: newOwner as string, + newHolder: newHolder as string, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; + }; + +/** + * Runs a gasless owner+holder transfer end to end: resolves the title escrow, recovers the + * caller's raw private key, checks the account is eligible for sponsorship, then submits the + * sponsored UserOperation via @trustvc/trustvc's `transferOwnersGasless`. + */ +export const runTransferOwnersGasless = async ( + args: TitleEscrowTransferOwnersGaslessCommand, +): Promise => { + try { + // Validates remark length up front; the encrypted value returned here is unused because + // transferOwnersGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + info( + `Resolving title escrow for tokenId ${args.tokenId} on registry ${args.tokenRegistryAddress}`, + ); + // Requires the caller to currently be both the holder and the beneficiary (mirrors the non-gasless flow). + const { network, titleEscrowAddress, smartAccountClient } = await prepareGaslessRun({ + ...args, + requiredRoles: ['holder', 'beneficiary'], + }); + + info( + `Submitting gasless transfer of owner and holder for tokenId ${args.tokenId} to new owner at ${args.newOwner} and new holder at ${args.newHolder}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await transferOwnersGasless( + { titleEscrowAddress }, + smartAccountClient, + { + newBeneficiaryAddress: args.newOwner, + newHolderAddress: args.newHolder, + remarks: args.remark, + }, + { id: args.encryptionKey }, + ); + + success( + `Transferable record with tokenId ${args.tokenId}'s holder has been successfully endorsed to new owner with address ${args.newOwner} and new holder with address: ${args.newHolder}`, + ); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/token-regitsry/mint.ts b/src/commands/gasless/token-regitsry/mint.ts new file mode 100644 index 0000000..a7ed9f9 --- /dev/null +++ b/src/commands/gasless/token-regitsry/mint.ts @@ -0,0 +1,126 @@ +import { error, info, success, warn } from 'signale'; +import { mintGasless } from '@trustvc/trustvc'; +import { + extractDocumentInfo, + getErrorMessage, + getEtherscanAddress, + getWalletOrSigner, + promptAddress, + promptAndReadDocument, + promptRemark, + promptWalletSelection, + verifyDocumentSignature, +} from '../../../utils'; +import { validateAndEncryptRemark } from '../../helpers'; +import { assertGaslessSupportedNetwork } from '../config'; +import { buildGaslessSmartAccountClient } from '../client'; +import { checkGaslessMintEligibility } from '../eligibility'; +import { TokenRegistryMintGaslessCommand } from '../types'; + +/** Prompt for all inputs needed to gaslessly mint a hash to a token registry. */ +export const promptForGaslessMintInputs = async (): Promise => { + const document = await promptAndReadDocument(); + await verifyDocumentSignature(document); + + const { tokenRegistry, tokenId, network, documentId, registryVersion } = + await extractDocumentInfo(document); + assertGaslessSupportedNetwork(network); + + const beneficiary = await promptAddress('beneficiary', 'initial recipient'); + const holder = await promptAddress('holder', 'initial holder'); + const paymasterAddress = await promptAddress( + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + const { encryptedWalletPath, key, keyFile } = await promptWalletSelection(); + const remark = await promptRemark(registryVersion); + + return { + network, + tokenRegistryAddress: tokenRegistry, + tokenId, + beneficiary: beneficiary as string, + holder: holder as string, + paymasterAddress: paymasterAddress as string, + remark, + encryptionKey: documentId, + encryptedWalletPath, + key, + keyFile, + }; +}; + +/** + * Runs a gasless mint end to end. Unlike title-escrow gasless actions, minting acts directly on + * the PlatformPaymaster (mintDocument), which has no title escrow to resolve beforehand and is + * gated by whether the token registry has granted the PlatformPaymaster the MINTER_ROLE, rather + * than an authorized-caller list. Recovers the caller's raw private key, checks the account is + * eligible for sponsorship, then submits the sponsored UserOperation via @trustvc/trustvc's + * `mintGasless`. + */ +export const runMintGasless = async ( + args: TokenRegistryMintGaslessCommand, +): Promise => { + try { + const network = assertGaslessSupportedNetwork(args.network); + + // Validates remark length up front; the encrypted value returned here is unused because + // mintGasless() re-derives and encrypts the remark itself from the raw string. + validateAndEncryptRemark(args.remark, args.encryptionKey); + + // This wallet is only used to recover the raw private key for the smart-account owner; no + // transaction is ever signed or sent with it directly. + const wallet = await getWalletOrSigner({ + network, + encryptedWalletPath: args.encryptedWalletPath, + key: args.key, + keyFile: args.keyFile, + }); + + const privateKey = (wallet as { privateKey?: string }).privateKey; + if (!privateKey) { + throw new Error( + 'Gasless transactions require direct access to a private key (encrypted wallet file, --key, --key-file, or OA_PRIVATE_KEY). AWS KMS signers are not supported.', + ); + } + + warn('Checking whether this account is eligible for a gasless (sponsored) transaction...'); + await checkGaslessMintEligibility({ + network, + paymasterAddress: args.paymasterAddress as `0x${string}`, + registryAddress: args.tokenRegistryAddress as `0x${string}`, + }); + success('Account is eligible for a gasless transaction'); + + const { smartAccountClient } = await buildGaslessSmartAccountClient({ + network, + privateKey, + paymasterAddress: args.paymasterAddress as `0x${string}`, + }); + + info( + `Submitting gasless mint of tokenId ${args.tokenId} to registry ${args.tokenRegistryAddress} with beneficiary ${args.beneficiary} and holder ${args.holder}. Gas is sponsored by the PlatformPaymaster — no ETH is required from your wallet.`, + ); + + const transactionHash = await mintGasless( + { paymasterAddress: args.paymasterAddress, tokenRegistryAddress: args.tokenRegistryAddress }, + smartAccountClient, + { + beneficiaryAddress: args.beneficiary, + holderAddress: args.holder, + tokenId: args.tokenId, + remarks: args.remark, + }, + { id: args.encryptionKey }, + ); + + success( + `Token with hash ${args.tokenId} has been minted on ${args.tokenRegistryAddress} with the initial recipient being ${args.beneficiary} and initial holder ${args.holder}`, + ); + info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); + + return transactionHash; + } catch (e) { + error(getErrorMessage(e)); + } +}; diff --git a/src/commands/gasless/types.ts b/src/commands/gasless/types.ts new file mode 100644 index 0000000..1025871 --- /dev/null +++ b/src/commands/gasless/types.ts @@ -0,0 +1,63 @@ +/** + * Gasless transactions sign an EIP-7702 authorization and a UserOperation locally, so only wallet + * inputs that expose a raw private key are supported (no AWS KMS remote signer). All three fields + * are optional and set together (never a union) since every gasless prompt flow passes all of + * them through from `promptWalletSelection()` regardless of which one is actually populated. + */ +export type GaslessWalletOption = { + encryptedWalletPath?: string; + key?: string; + keyFile?: string; +}; + +export type BaseGaslessTitleEscrowCommand = GaslessWalletOption & { + network: string; + tokenRegistryAddress: string; + tokenId: string; + /** PlatformPaymaster contract address sponsoring gas; always prompted, never read from env. */ + paymasterAddress: string; + remark?: string; + encryptionKey?: string; +}; + +/** Reject commands only cancel a pending transfer; no address inputs beyond the base fields. */ +export type TitleEscrowRejectTransferGaslessCommand = BaseGaslessTitleEscrowCommand; + +export type TitleEscrowTransferHolderGaslessCommand = BaseGaslessTitleEscrowCommand & { + newHolder: string; +}; + +export type TitleEscrowTransferBeneficiaryGaslessCommand = BaseGaslessTitleEscrowCommand & { + newBeneficiary: string; +}; + +export type TitleEscrowNominateBeneficiaryGaslessCommand = BaseGaslessTitleEscrowCommand & { + newBeneficiary: string; +}; + +export type TitleEscrowTransferOwnersGaslessCommand = BaseGaslessTitleEscrowCommand & { + newOwner: string; + newHolder: string; +}; + +/** Returning a document to the issuer is a title-escrow action; same shape as the reject commands. */ +export type TitleEscrowReturnDocumentGaslessCommand = BaseGaslessTitleEscrowCommand; + +/** + * Accepting/rejecting a returned document acts directly on the token registry (the registry admin + * burns or restores the token) rather than on a title escrow, but the input shape is identical. + */ +export type TokenRegistryReturnedDocumentGaslessCommand = BaseGaslessTitleEscrowCommand; + +/** Minting creates a new title escrow, so there is no existing one to resolve beforehand. */ +export type TokenRegistryMintGaslessCommand = GaslessWalletOption & { + network: string; + tokenRegistryAddress: string; + tokenId: string; + beneficiary: string; + holder: string; + /** PlatformPaymaster contract address sponsoring gas; always prompted, never read from env. */ + paymasterAddress: string; + remark?: string; + encryptionKey?: string; +}; diff --git a/src/commands/title-escrow/accept-return-to-issuer.ts b/src/commands/title-escrow/accept-return-to-issuer.ts index 560f5cf..b4bc9b8 100644 --- a/src/commands/title-escrow/accept-return-to-issuer.ts +++ b/src/commands/title-escrow/accept-return-to-issuer.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, success, info } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -21,13 +22,30 @@ import { verifyDocumentSignature, } from '../../utils'; import { connectToTokenRegistry, validateAndEncryptRemark } from '../helpers'; +import { + promptForGaslessAcceptReturnToIssuerInputs, + runAcceptReturnToIssuerGasless, +} from '../gasless'; export const command = 'accept-return-to-issuer'; export const describe = 'Accepts a returned transferable record on the blockchain'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this acceptance as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessAcceptReturnToIssuerInputs(); + return await runAcceptReturnToIssuerGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/title-escrow/endorse-transfer-owner.ts b/src/commands/title-escrow/endorse-transfer-owner.ts index b17c589..a092832 100644 --- a/src/commands/title-escrow/endorse-transfer-owner.ts +++ b/src/commands/title-escrow/endorse-transfer-owner.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, info, success, warn } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -26,14 +27,31 @@ import { validateAndEncryptRemark, validateNominateBeneficiary, } from '../helpers'; +import { + promptForGaslessTransferBeneficiaryInputs, + runTransferBeneficiaryGasless, +} from '../gasless'; export const command = 'endorse-transfer-owner'; export const describe = 'Endorses the transfer of owner of transferable record to an approved owner and approved holder address'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this transfer as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessTransferBeneficiaryInputs(); + return await runTransferBeneficiaryGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/title-escrow/nominate-transfer-owner.ts b/src/commands/title-escrow/nominate-transfer-owner.ts index bcaefa4..7d5fd3d 100644 --- a/src/commands/title-escrow/nominate-transfer-owner.ts +++ b/src/commands/title-escrow/nominate-transfer-owner.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, info, success, warn } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -26,13 +27,27 @@ import { validateAndEncryptRemark, validateNominateBeneficiary, } from '../helpers'; +import { promptForGaslessNominateInputs, runNominateGasless } from '../gasless'; export const command = 'nominate-transfer-owner'; export const describe = 'Nominates the transfer of owner of transferable record to another address'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this nomination as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessNominateInputs(); + return await runNominateGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/title-escrow/reject-return-to-issuer.ts b/src/commands/title-escrow/reject-return-to-issuer.ts index 8e076cf..90a642b 100644 --- a/src/commands/title-escrow/reject-return-to-issuer.ts +++ b/src/commands/title-escrow/reject-return-to-issuer.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, success, info } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -21,13 +22,30 @@ import { verifyDocumentSignature, } from '../../utils'; import { connectToTokenRegistry, validateAndEncryptRemark } from '../helpers'; +import { + promptForGaslessRejectReturnToIssuerInputs, + runRejectReturnToIssuerGasless, +} from '../gasless'; export const command = 'reject-return-to-issuer'; export const describe = 'Rejects a returned transferable record on the blockchain'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this rejection as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessRejectReturnToIssuerInputs(); + return await runRejectReturnToIssuerGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/title-escrow/reject-transfer-holder.ts b/src/commands/title-escrow/reject-transfer-holder.ts index 1bcb7a2..178ff18 100644 --- a/src/commands/title-escrow/reject-transfer-holder.ts +++ b/src/commands/title-escrow/reject-transfer-holder.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, info, success, warn } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -21,13 +22,30 @@ import { verifyDocumentSignature, } from '../../utils'; import { connectToTitleEscrow, validatePreviousHolder, validateAndEncryptRemark } from '../helpers'; +import { + promptForGaslessRejectTransferHolderInputs, + runRejectTransferHolderGasless, +} from '../gasless'; export const command = 'reject-transfer-holder'; export const describe = 'Reject the transfer of the holder of a transferable record'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this rejection as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessRejectTransferHolderInputs(); + return await runRejectTransferHolderGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/title-escrow/reject-transfer-owner-holder.ts b/src/commands/title-escrow/reject-transfer-owner-holder.ts index 0309a1d..c750a14 100644 --- a/src/commands/title-escrow/reject-transfer-owner-holder.ts +++ b/src/commands/title-escrow/reject-transfer-owner-holder.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, info, success, warn } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -26,13 +27,30 @@ import { validatePreviousHolder, validateAndEncryptRemark, } from '../helpers'; +import { + promptForGaslessRejectTransferOwnerHolderInputs, + runRejectTransferOwnerHolderGasless, +} from '../gasless'; export const command = 'reject-transfer-owner-holder'; export const describe = 'Reject the transfer of the owner and holder of a transferable record'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this rejection as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessRejectTransferOwnerHolderInputs(); + return await runRejectTransferOwnerHolderGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/title-escrow/reject-transfer-owner.ts b/src/commands/title-escrow/reject-transfer-owner.ts index f0a9c64..249969b 100644 --- a/src/commands/title-escrow/reject-transfer-owner.ts +++ b/src/commands/title-escrow/reject-transfer-owner.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, info, success, warn } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -28,13 +29,30 @@ import { validateAndEncryptRemark, validatePreviousBeneficiary, } from '../helpers'; +import { + promptForGaslessRejectTransferOwnerInputs, + runRejectTransferOwnerGasless, +} from '../gasless'; export const command = 'reject-transfer-owner'; export const describe = 'Reject the transfer of the owner of a transferable record'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this rejection as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessRejectTransferOwnerInputs(); + return await runRejectTransferOwnerGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/title-escrow/return-to-issuer.ts b/src/commands/title-escrow/return-to-issuer.ts index 0f8fffc..0c34e32 100644 --- a/src/commands/title-escrow/return-to-issuer.ts +++ b/src/commands/title-escrow/return-to-issuer.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, success, info } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -21,13 +22,27 @@ import { verifyDocumentSignature, } from '../../utils'; import { connectToTitleEscrow, validateAndEncryptRemark } from '../helpers'; +import { promptForGaslessReturnToIssuerInputs, runReturnToIssuerGasless } from '../gasless'; export const command = 'return-to-issuer'; export const describe = 'Returns a document on the blockchain'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this return as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessReturnToIssuerInputs(); + return await runReturnToIssuerGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/title-escrow/transfer-holder.ts b/src/commands/title-escrow/transfer-holder.ts index 593168d..3fe5bf8 100644 --- a/src/commands/title-escrow/transfer-holder.ts +++ b/src/commands/title-escrow/transfer-holder.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, info, success, warn } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -22,13 +23,27 @@ import { verifyDocumentSignature, } from '../../utils'; import { connectToTitleEscrow, validateAndEncryptRemark } from '../helpers'; +import { promptForGaslessTransferHolderInputs, runTransferHolderGasless } from '../gasless'; export const command = 'transfer-holder'; export const describe = 'Transfers the holder of the transferable record to another address'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this transfer as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessTransferHolderInputs(); + return await runTransferHolderGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/title-escrow/transfer-owner-holder.ts b/src/commands/title-escrow/transfer-owner-holder.ts index 6d8cc7f..e3283a4 100644 --- a/src/commands/title-escrow/transfer-owner-holder.ts +++ b/src/commands/title-escrow/transfer-owner-holder.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, info, success, warn } from 'signale'; import signale from 'signale'; import { TransactionReceipt } from 'ethers'; @@ -26,14 +27,28 @@ import { validateAndEncryptRemark, validateEndorseChangeOwner, } from '../helpers'; +import { promptForGaslessTransferOwnersInputs, runTransferOwnersGasless } from '../gasless'; export const command = 'transfer-owner-holder'; export const describe = 'Endorses the change of ownership and holdership of transferable record to another address'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this transfer as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessTransferOwnersInputs(); + return await runTransferOwnersGasless(gaslessAnswers); + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/token-registry/deploy.ts b/src/commands/token-registry/deploy.ts index 1cef3ff..2bf973f 100644 --- a/src/commands/token-registry/deploy.ts +++ b/src/commands/token-registry/deploy.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import { error, info, success } from 'signale'; import { CHAIN_ID, deployTokenRegistry, v5Utils, v5ContractAddress } from '@trustvc/trustvc'; import { input, confirm } from '@inquirer/prompts'; @@ -20,13 +21,31 @@ import { waitForTransaction, } from '../helpers'; import { TransactionReceipt, Provider } from 'ethers'; +import { + promptForDeployTokenRegistryGaslessInputs, + runDeployTokenRegistryGasless, +} from '../gasless'; export const command = 'deploy'; export const describe = 'Deploys a document store contract on the blockchain'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Deploy this token registry as a gasless (EIP-7702 + Pimlico sponsored) transaction via a PlatformPaymaster instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address. The caller must already be whitelisted (deployment credits) on the paymaster.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForDeployTokenRegistryGaslessInputs(); + await runDeployTokenRegistryGasless(gaslessAnswers); + return; + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/src/commands/token-registry/mint.ts b/src/commands/token-registry/mint.ts index 348705e..5d71dcf 100644 --- a/src/commands/token-registry/mint.ts +++ b/src/commands/token-registry/mint.ts @@ -1,3 +1,4 @@ +import { Argv } from 'yargs'; import signale, { error, info, success } from 'signale'; import { TokenRegistryMintCommand } from '../../types'; import { @@ -20,13 +21,28 @@ import { import { connectToTokenRegistry, validateAndEncryptRemark } from '../helpers'; import { TransactionReceipt } from 'ethers'; import { mint } from '@trustvc/trustvc'; +import { promptForGaslessMintInputs, runMintGasless } from '../gasless'; export const command = 'mint'; export const describe = 'Mint a hash to a token registry deployed on the blockchain'; -export const handler = async (): Promise => { +export const builder = (yargs: Argv): Argv => + yargs.option('gasless', { + type: 'boolean', + default: false, + description: + 'Perform this mint as a gasless (EIP-7702 + Pimlico sponsored) transaction instead of paying gas directly. Requires PIMLICO_API_KEY and an EIP7702 implementation address to be set in the environment; you will be prompted for the PlatformPaymaster address. The caller must be the paymaster owner and the registry must be authorized on it.', + }); + +export const handler = async (argv: { gasless?: boolean } = {}): Promise => { try { + if (argv.gasless) { + const gaslessAnswers = await promptForGaslessMintInputs(); + await runMintGasless(gaslessAnswers); + return; + } + const answers = await promptForInputs(); if (!answers) return; diff --git a/tests/commands/gasless/admin/add-authorized-caller.test.ts b/tests/commands/gasless/admin/add-authorized-caller.test.ts new file mode 100644 index 0000000..bb40cd4 --- /dev/null +++ b/tests/commands/gasless/admin/add-authorized-caller.test.ts @@ -0,0 +1,122 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/add-authorized-caller'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + addAuthorizedCaller: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptAddress: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +describe('gasless/admin/add-authorized-caller', () => { + const base = { + network: 'sepolia', + paymasterAddress: '0xpaymaster000000000000000000000000000000', + encryptedWalletPath: './wallet.json', + }; + const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + it('should authorize the prompted caller against the prompted paymaster', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue(base); + (common.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const utils = await import('../../../../src/utils'); + const callerAddress = '0x1234567890123456789012345678901234567890'; + (utils.promptAddress as MockedFunction).mockResolvedValue(callerAddress); + + const trustvc = await import('@trustvc/trustvc'); + (trustvc.addAuthorizedCaller as MockedFunction).mockResolvedValue('0xtxhash'); + + const result = await handler(); + + expect(utils.promptAddress).toHaveBeenCalledWith( + 'caller', + 'address to authorize on the paymaster', + ); + expect(trustvc.addAuthorizedCaller).toHaveBeenCalledWith( + mockWallet, + base.paymasterAddress, + callerAddress, + ); + expect(common.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...base, + actionLabel: `Authorizing caller ${callerAddress}`, + execute: expect.any(Function), + }), + ); + expect(result).toBe('0xtxhash'); + }); + + it('should log an error and return undefined when prompting fails', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('network not supported'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('network not supported'); + }); + + it('should log a non-Error rejection message', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue('boom'); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('boom'); + }); +}); diff --git a/tests/commands/gasless/admin/add-registry.test.ts b/tests/commands/gasless/admin/add-registry.test.ts new file mode 100644 index 0000000..60578e0 --- /dev/null +++ b/tests/commands/gasless/admin/add-registry.test.ts @@ -0,0 +1,122 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/add-registry'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + addRegistry: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptAddress: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +describe('gasless/admin/add-registry', () => { + const base = { + network: 'sepolia', + paymasterAddress: '0xpaymaster000000000000000000000000000000', + encryptedWalletPath: './wallet.json', + }; + const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + it('should authorize the prompted registry against the prompted paymaster', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue(base); + (common.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const utils = await import('../../../../src/utils'); + const registryAddress = '0x1234567890123456789012345678901234567890'; + (utils.promptAddress as MockedFunction).mockResolvedValue(registryAddress); + + const trustvc = await import('@trustvc/trustvc'); + (trustvc.addRegistry as MockedFunction).mockResolvedValue('0xtxhash'); + + const result = await handler(); + + expect(utils.promptAddress).toHaveBeenCalledWith( + 'registry', + 'token registry address to authorize', + ); + expect(trustvc.addRegistry).toHaveBeenCalledWith( + mockWallet, + base.paymasterAddress, + registryAddress, + ); + expect(common.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...base, + actionLabel: `Authorizing registry ${registryAddress}`, + execute: expect.any(Function), + }), + ); + expect(result).toBe('0xtxhash'); + }); + + it('should log an error and return undefined when prompting fails', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('network not supported'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('network not supported'); + }); + + it('should log a non-Error rejection message', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue('boom'); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('boom'); + }); +}); diff --git a/tests/commands/gasless/admin/add-title-escrow.test.ts b/tests/commands/gasless/admin/add-title-escrow.test.ts new file mode 100644 index 0000000..a2e2984 --- /dev/null +++ b/tests/commands/gasless/admin/add-title-escrow.test.ts @@ -0,0 +1,122 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/add-title-escrow'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + addTitleEscrow: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptAddress: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +describe('gasless/admin/add-title-escrow', () => { + const base = { + network: 'sepolia', + paymasterAddress: '0xpaymaster000000000000000000000000000000', + encryptedWalletPath: './wallet.json', + }; + const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + it('should authorize the prompted title escrow against the prompted paymaster', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue(base); + (common.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const utils = await import('../../../../src/utils'); + const titleEscrowAddress = '0x1234567890123456789012345678901234567890'; + (utils.promptAddress as MockedFunction).mockResolvedValue(titleEscrowAddress); + + const trustvc = await import('@trustvc/trustvc'); + (trustvc.addTitleEscrow as MockedFunction).mockResolvedValue('0xtxhash'); + + const result = await handler(); + + expect(utils.promptAddress).toHaveBeenCalledWith( + 'title escrow', + 'title escrow address to authorize', + ); + expect(trustvc.addTitleEscrow).toHaveBeenCalledWith( + mockWallet, + base.paymasterAddress, + titleEscrowAddress, + ); + expect(common.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...base, + actionLabel: `Authorizing title escrow ${titleEscrowAddress}`, + execute: expect.any(Function), + }), + ); + expect(result).toBe('0xtxhash'); + }); + + it('should log an error and return undefined when prompting fails', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('network not supported'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('network not supported'); + }); + + it('should log a non-Error rejection message', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue('boom'); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('boom'); + }); +}); diff --git a/tests/commands/gasless/admin/common.test.ts b/tests/commands/gasless/admin/common.test.ts new file mode 100644 index 0000000..a7d4564 --- /dev/null +++ b/tests/commands/gasless/admin/common.test.ts @@ -0,0 +1,191 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForPaymasterAdminWalletInputs, + runPaymasterAdminAction, +} from '../../../../src/commands/gasless/admin/common'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('../../../../src/utils/wallet', () => ({ + getWalletOrSigner: vi.fn(), +})); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptAddress: vi.fn(), + promptNetworkSelection: vi.fn(), + promptWalletSelection: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://sepolia.etherscan.io'), + }; +}); + +describe('gasless/admin/common', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('promptForPaymasterAdminWalletInputs', () => { + it('should resolve with the prompted wallet inputs for a supported network', async () => { + const utils = await import('../../../../src/utils'); + (utils.promptNetworkSelection as MockedFunction).mockResolvedValue('sepolia'); + (utils.promptAddress as MockedFunction).mockResolvedValue( + '0x1111111111111111111111111111111111111111', + ); + (utils.promptWalletSelection as MockedFunction).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + + const result = await promptForPaymasterAdminWalletInputs(); + + expect(result).toEqual({ + network: 'sepolia', + paymasterAddress: '0x1111111111111111111111111111111111111111', + encryptedWalletPath: './wallet.json', + key: undefined, + keyFile: undefined, + }); + }); + + it('should resolve with an amoy network', async () => { + const utils = await import('../../../../src/utils'); + (utils.promptNetworkSelection as MockedFunction).mockResolvedValue('amoy'); + (utils.promptAddress as MockedFunction).mockResolvedValue( + '0x2222222222222222222222222222222222222222', + ); + (utils.promptWalletSelection as MockedFunction).mockResolvedValue({ + key: '0xprivatekey', + }); + + const result = await promptForPaymasterAdminWalletInputs(); + + expect(result.network).toBe('amoy'); + expect(result.key).toBe('0xprivatekey'); + }); + + it('should reject when the network is not gasless-supported', async () => { + const utils = await import('../../../../src/utils'); + (utils.promptNetworkSelection as MockedFunction).mockResolvedValue('mainnet'); + + await expect(promptForPaymasterAdminWalletInputs()).rejects.toThrow( + /Gasless transactions are only supported on/, + ); + + expect(utils.promptAddress).not.toHaveBeenCalled(); + expect(utils.promptWalletSelection).not.toHaveBeenCalled(); + }); + }); + + describe('runPaymasterAdminAction', () => { + let getWalletOrSignerMock: MockedFunction; + let mockWallet: any; + + beforeEach(async () => { + const walletModule = await import('../../../../src/utils/wallet'); + getWalletOrSignerMock = walletModule.getWalletOrSigner as MockedFunction; + mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + getWalletOrSignerMock.mockResolvedValue(mockWallet); + + const utils = await import('../../../../src/utils'); + (utils.getErrorMessage as MockedFunction).mockImplementation((e: any) => + e instanceof Error ? e.message : String(e), + ); + (utils.getEtherscanAddress as MockedFunction).mockReturnValue( + 'https://sepolia.etherscan.io', + ); + }); + + it('should resolve with the tx hash and report success/info on a successful execute', async () => { + const execute = vi.fn().mockResolvedValue('0xtxhash'); + + const result = await runPaymasterAdminAction({ + network: 'sepolia', + paymasterAddress: '0xpaymaster', + actionLabel: 'Doing thing', + execute, + }); + + expect(result).toBe('0xtxhash'); + expect(execute).toHaveBeenCalledWith(mockWallet); + + const signale = await import('signale'); + expect(signale.success).toHaveBeenCalledWith('Doing thing — done'); + expect(signale.info).toHaveBeenCalled(); + }); + + it('should catch an Error thrown by execute, log it, and return undefined', async () => { + const execute = vi.fn().mockRejectedValue(new Error('execute blew up')); + + const result = await runPaymasterAdminAction({ + network: 'sepolia', + paymasterAddress: '0xpaymaster', + actionLabel: 'Doing thing', + execute, + }); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('execute blew up'); + }); + + it('should catch a non-Error rejection from execute, log it, and return undefined', async () => { + const execute = vi.fn().mockRejectedValue('string failure'); + + const result = await runPaymasterAdminAction({ + network: 'sepolia', + paymasterAddress: '0xpaymaster', + actionLabel: 'Doing thing', + execute, + }); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('string failure'); + }); + + it('should not call execute and should log an error for an unsupported network', async () => { + const execute = vi.fn(); + + const result = await runPaymasterAdminAction({ + network: 'mainnet', + paymasterAddress: '0xpaymaster', + actionLabel: 'Doing thing', + execute, + }); + + expect(result).toBeUndefined(); + expect(execute).not.toHaveBeenCalled(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith( + expect.stringMatching(/Gasless transactions are only supported on/), + ); + }); + }); +}); diff --git a/tests/commands/gasless/admin/delegate-user.test.ts b/tests/commands/gasless/admin/delegate-user.test.ts new file mode 100644 index 0000000..bbea46e --- /dev/null +++ b/tests/commands/gasless/admin/delegate-user.test.ts @@ -0,0 +1,198 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/delegate-user'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +const { signAuthorizationMock, sendTransactionMock, createWalletClientMock } = vi.hoisted(() => { + const signAuthorizationMock = vi.fn(); + const sendTransactionMock = vi.fn(); + const createWalletClientMock = vi.fn().mockImplementation(() => ({ + signAuthorization: signAuthorizationMock, + sendTransaction: sendTransactionMock, + })); + return { signAuthorizationMock, sendTransactionMock, createWalletClientMock }; +}); + +vi.mock('viem', async () => { + const actual = await vi.importActual('viem'); + return { + ...actual, + createWalletClient: createWalletClientMock, + http: vi.fn(() => 'http-transport'), + }; +}); + +vi.mock('viem/accounts', async () => { + const actual = await vi.importActual('viem/accounts'); + return { + ...actual, + privateKeyToAccount: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils/wallet', () => ({ + getWalletOrSigner: vi.fn(), +})); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptNetworkSelection: vi.fn(), + promptWalletSelection: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://sepolia.etherscan.io'), + }; +}); + +vi.mock('../../../../src/commands/gasless/config', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getEip7702ImplementationAddress: vi.fn(), + getGaslessRpcUrl: vi.fn(), + getViemChain: vi.fn(), + }; +}); + +describe('gasless/admin/delegate-user', () => { + beforeEach(async () => { + vi.clearAllMocks(); + vi.resetAllMocks(); + + createWalletClientMock.mockImplementation(() => ({ + signAuthorization: signAuthorizationMock, + sendTransaction: sendTransactionMock, + })); + + const viemModule = await import('viem'); + (viemModule.http as MockedFunction).mockReturnValue('http-transport'); + + const utils = await import('../../../../src/utils'); + (utils.getErrorMessage as MockedFunction).mockImplementation((e: any) => + e instanceof Error ? e.message : String(e), + ); + (utils.getEtherscanAddress as MockedFunction).mockReturnValue( + 'https://sepolia.etherscan.io', + ); + + const config = await import('../../../../src/commands/gasless/config'); + (config.getEip7702ImplementationAddress as MockedFunction).mockReturnValue( + '0xImplementationAddress00000000000000000000', + ); + (config.getGaslessRpcUrl as MockedFunction).mockReturnValue('https://rpc.example'); + (config.getViemChain as MockedFunction).mockReturnValue({ id: 11155111 }); + }); + + it('should delegate the user account via a standalone EIP-7702 authorization', async () => { + const utils = await import('../../../../src/utils'); + (utils.promptNetworkSelection as MockedFunction).mockResolvedValue('sepolia'); + (utils.promptWalletSelection as MockedFunction).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + + const walletModule = await import('../../../../src/utils/wallet'); + (walletModule.getWalletOrSigner as MockedFunction).mockResolvedValue({ + privateKey: '0xprivatekey00000000000000000000000000000000000000000000000000', + }); + + const accountsModule = await import('viem/accounts'); + const account = { address: '0xAccountAddress0000000000000000000000000' }; + (accountsModule.privateKeyToAccount as MockedFunction).mockReturnValue(account); + + signAuthorizationMock.mockResolvedValue({ authorization: 'signed' }); + sendTransactionMock.mockResolvedValue('0xtxhash'); + + const result = await handler(); + + expect(createWalletClientMock).toHaveBeenCalledWith( + expect.objectContaining({ + account, + chain: { id: 11155111 }, + transport: 'http-transport', + }), + ); + expect(signAuthorizationMock).toHaveBeenCalledWith({ + contractAddress: '0xImplementationAddress00000000000000000000', + executor: 'self', + }); + expect(sendTransactionMock).toHaveBeenCalledWith({ + authorizationList: [{ authorization: 'signed' }], + to: account.address, + value: 0n, + }); + expect(result).toBe('0xtxhash'); + + const signale = await import('signale'); + expect(signale.success).toHaveBeenCalled(); + }); + + it('should log an error and return undefined when the wallet has no private key', async () => { + const utils = await import('../../../../src/utils'); + (utils.promptNetworkSelection as MockedFunction).mockResolvedValue('sepolia'); + (utils.promptWalletSelection as MockedFunction).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + + const walletModule = await import('../../../../src/utils/wallet'); + (walletModule.getWalletOrSigner as MockedFunction).mockResolvedValue({}); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith( + expect.stringContaining('Delegating requires direct access to a private key'), + ); + expect(createWalletClientMock).not.toHaveBeenCalled(); + }); + + it('should log an error and return undefined for an unsupported network', async () => { + const utils = await import('../../../../src/utils'); + (utils.promptNetworkSelection as MockedFunction).mockResolvedValue('mainnet'); + + const result = await handler(); + + expect(result).toBeUndefined(); + expect(utils.promptWalletSelection).not.toHaveBeenCalled(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith( + expect.stringMatching(/Gasless transactions are only supported on/), + ); + }); + + it('should log a non-Error rejection message', async () => { + const utils = await import('../../../../src/utils'); + (utils.promptNetworkSelection as MockedFunction).mockRejectedValue('boom'); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('boom'); + }); +}); diff --git a/tests/commands/gasless/admin/fund-paymaster.test.ts b/tests/commands/gasless/admin/fund-paymaster.test.ts new file mode 100644 index 0000000..6b762f7 --- /dev/null +++ b/tests/commands/gasless/admin/fund-paymaster.test.ts @@ -0,0 +1,168 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/fund-paymaster'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@inquirer/prompts', () => ({ + input: vi.fn(), +})); + +const { contractDepositMock, ContractMock } = vi.hoisted(() => { + const contractDepositMock = vi.fn(); + const ContractMock = vi.fn().mockImplementation(() => ({ + deposit: contractDepositMock, + })); + return { contractDepositMock, ContractMock }; +}); + +vi.mock('ethers', async () => { + const actual = await vi.importActual('ethers'); + return { + ...actual, + ethers: { + ...actual.ethers, + Contract: ContractMock, + parseEther: vi.fn((value: string) => `wei(${value})`), + }, + }; +}); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +describe('gasless/admin/fund-paymaster', () => { + const base = { + network: 'sepolia', + paymasterAddress: '0xpaymaster000000000000000000000000000000', + encryptedWalletPath: './wallet.json', + }; + const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + + beforeEach(async () => { + vi.clearAllMocks(); + vi.resetAllMocks(); + ContractMock.mockImplementation(() => ({ + deposit: contractDepositMock, + })); + + const { ethers } = await import('ethers'); + (ethers.parseEther as MockedFunction).mockImplementation( + (value: string) => `wei(${value})`, + ); + }); + + it('should deposit the entered ETH amount into the paymaster contract', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue(base); + (common.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const { input } = await import('@inquirer/prompts'); + (input as MockedFunction).mockResolvedValue('1.5'); + + const receipt = { hash: '0xtxhash' }; + contractDepositMock.mockResolvedValue({ wait: vi.fn().mockResolvedValue(receipt) }); + + const result = await handler(); + + expect(ContractMock).toHaveBeenCalledWith(base.paymasterAddress, expect.anything(), mockWallet); + expect(contractDepositMock).toHaveBeenCalledWith({ value: 'wei(1.5)' }); + expect(common.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...base, + actionLabel: 'Depositing 1.5 ETH', + execute: expect.any(Function), + }), + ); + expect(result).toBe('0xtxhash'); + }); + + it('should log an error and return undefined when prompting fails', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('network not supported'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('network not supported'); + }); + + it('should log a non-Error rejection message', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue('boom'); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('boom'); + }); + + describe('amount validation', () => { + let validate: (value: string) => string | boolean; + + beforeEach(async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue(base); + (common.runPaymasterAdminAction as MockedFunction).mockResolvedValue('0xtxhash'); + + const { input } = await import('@inquirer/prompts'); + (input as MockedFunction).mockImplementation(async (options: any) => { + validate = options.validate; + return '1'; + }); + + await handler(); + }); + + it('should reject a non-numeric value', () => { + expect(validate('abc')).toBe('Amount must be a positive number (ETH)'); + }); + + it('should reject zero', () => { + expect(validate('0')).toBe('Amount must be a positive number (ETH)'); + }); + + it('should reject a negative value', () => { + expect(validate('-1')).toBe('Amount must be a positive number (ETH)'); + }); + + it('should accept a positive integer', () => { + expect(validate('1')).toBe(true); + }); + + it('should accept a positive decimal', () => { + expect(validate('0.5')).toBe(true); + }); + }); +}); diff --git a/tests/commands/gasless/admin/remove-authorized-caller.test.ts b/tests/commands/gasless/admin/remove-authorized-caller.test.ts new file mode 100644 index 0000000..100ad97 --- /dev/null +++ b/tests/commands/gasless/admin/remove-authorized-caller.test.ts @@ -0,0 +1,122 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/remove-authorized-caller'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + removeAuthorizedCaller: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptAddress: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +describe('gasless/admin/remove-authorized-caller', () => { + const base = { + network: 'sepolia', + paymasterAddress: '0xpaymaster000000000000000000000000000000', + encryptedWalletPath: './wallet.json', + }; + const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + it('should remove the prompted caller from the prompted paymaster', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue(base); + (common.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const utils = await import('../../../../src/utils'); + const callerAddress = '0x1234567890123456789012345678901234567890'; + (utils.promptAddress as MockedFunction).mockResolvedValue(callerAddress); + + const trustvc = await import('@trustvc/trustvc'); + (trustvc.removeAuthorizedCaller as MockedFunction).mockResolvedValue('0xtxhash'); + + const result = await handler(); + + expect(utils.promptAddress).toHaveBeenCalledWith( + 'caller', + 'address to remove from the paymaster', + ); + expect(trustvc.removeAuthorizedCaller).toHaveBeenCalledWith( + mockWallet, + base.paymasterAddress, + callerAddress, + ); + expect(common.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...base, + actionLabel: `Removing caller ${callerAddress}`, + execute: expect.any(Function), + }), + ); + expect(result).toBe('0xtxhash'); + }); + + it('should log an error and return undefined when prompting fails', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('network not supported'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('network not supported'); + }); + + it('should log a non-Error rejection message', async () => { + const common = await import('../../../../src/commands/gasless/admin/common'); + (common.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue('boom'); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signale = await import('signale'); + expect(signale.error).toHaveBeenCalledWith('boom'); + }); +}); diff --git a/tests/commands/gasless/admin/remove-registry.test.ts b/tests/commands/gasless/admin/remove-registry.test.ts new file mode 100644 index 0000000..62d88b8 --- /dev/null +++ b/tests/commands/gasless/admin/remove-registry.test.ts @@ -0,0 +1,129 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/remove-registry'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + removeRegistry: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptAddress: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +const baseInputs = { + network: 'sepolia', + paymasterAddress: '0x1111111111111111111111111111111111111111', + encryptedWalletPath: './wallet.json', +}; + +const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + +describe('gasless/admin/remove-registry', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('handler', () => { + it('removes the registry with the prompted address and returns the tx hash', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + const utilsModule = await import('../../../../src/utils'); + const trustvcModule = await import('@trustvc/trustvc'); + + const registryAddress = '0x2222222222222222222222222222222222222222'; + + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue( + baseInputs, + ); + (utilsModule.promptAddress as MockedFunction).mockResolvedValue(registryAddress); + (trustvcModule.removeRegistry as MockedFunction).mockResolvedValue('0xtxhash'); + (commonModule.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const result = await handler(); + + expect(result).toBe('0xtxhash'); + expect(utilsModule.promptAddress).toHaveBeenCalledWith( + 'registry', + 'token registry address to deauthorize', + ); + expect(trustvcModule.removeRegistry).toHaveBeenCalledWith( + mockWallet, + baseInputs.paymasterAddress, + registryAddress, + ); + expect(commonModule.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...baseInputs, + actionLabel: `Deauthorizing registry ${registryAddress}`, + execute: expect.any(Function), + }), + ); + }); + + it('logs an error and returns undefined when prompting fails', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('wallet selection failed'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('wallet selection failed'); + }); + + it('logs a string error when a non-Error is thrown during prompting', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + 'raw string failure', + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw string failure'); + }); + }); +}); diff --git a/tests/commands/gasless/admin/remove-title-escrow.test.ts b/tests/commands/gasless/admin/remove-title-escrow.test.ts new file mode 100644 index 0000000..56935cb --- /dev/null +++ b/tests/commands/gasless/admin/remove-title-escrow.test.ts @@ -0,0 +1,129 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/remove-title-escrow'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + removeTitleEscrow: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptAddress: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +const baseInputs = { + network: 'sepolia', + paymasterAddress: '0x1111111111111111111111111111111111111111', + encryptedWalletPath: './wallet.json', +}; + +const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + +describe('gasless/admin/remove-title-escrow', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('handler', () => { + it('removes the title escrow with the prompted address and returns the tx hash', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + const utilsModule = await import('../../../../src/utils'); + const trustvcModule = await import('@trustvc/trustvc'); + + const titleEscrowAddress = '0x3333333333333333333333333333333333333333'; + + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue( + baseInputs, + ); + (utilsModule.promptAddress as MockedFunction).mockResolvedValue(titleEscrowAddress); + (trustvcModule.removeTitleEscrow as MockedFunction).mockResolvedValue('0xtxhash'); + (commonModule.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const result = await handler(); + + expect(result).toBe('0xtxhash'); + expect(utilsModule.promptAddress).toHaveBeenCalledWith( + 'title escrow', + 'title escrow address to deauthorize', + ); + expect(trustvcModule.removeTitleEscrow).toHaveBeenCalledWith( + mockWallet, + baseInputs.paymasterAddress, + titleEscrowAddress, + ); + expect(commonModule.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...baseInputs, + actionLabel: `Deauthorizing title escrow ${titleEscrowAddress}`, + execute: expect.any(Function), + }), + ); + }); + + it('logs an error and returns undefined when prompting fails', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('wallet selection failed'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('wallet selection failed'); + }); + + it('logs a string error when a non-Error is thrown during prompting', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + 'raw string failure', + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw string failure'); + }); + }); +}); diff --git a/tests/commands/gasless/admin/remove-user-from-whitelist.test.ts b/tests/commands/gasless/admin/remove-user-from-whitelist.test.ts new file mode 100644 index 0000000..609c3ad --- /dev/null +++ b/tests/commands/gasless/admin/remove-user-from-whitelist.test.ts @@ -0,0 +1,129 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/remove-user-from-whitelist'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + removeUserFromWhitelist: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptAddress: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +const baseInputs = { + network: 'sepolia', + paymasterAddress: '0x1111111111111111111111111111111111111111', + encryptedWalletPath: './wallet.json', +}; + +const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + +describe('gasless/admin/remove-user-from-whitelist', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('handler', () => { + it('removes the user from the whitelist with the prompted address and returns the tx hash', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + const utilsModule = await import('../../../../src/utils'); + const trustvcModule = await import('@trustvc/trustvc'); + + const userAddress = '0x4444444444444444444444444444444444444444'; + + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue( + baseInputs, + ); + (utilsModule.promptAddress as MockedFunction).mockResolvedValue(userAddress); + (trustvcModule.removeUserFromWhitelist as MockedFunction).mockResolvedValue('0xtxhash'); + (commonModule.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const result = await handler(); + + expect(result).toBe('0xtxhash'); + expect(utilsModule.promptAddress).toHaveBeenCalledWith( + 'user', + 'address to remove from the whitelist', + ); + expect(trustvcModule.removeUserFromWhitelist).toHaveBeenCalledWith( + mockWallet, + baseInputs.paymasterAddress, + userAddress, + ); + expect(commonModule.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...baseInputs, + actionLabel: `Removing user ${userAddress} from whitelist`, + execute: expect.any(Function), + }), + ); + }); + + it('logs an error and returns undefined when prompting fails', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('wallet selection failed'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('wallet selection failed'); + }); + + it('logs a string error when a non-Error is thrown during prompting', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + 'raw string failure', + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw string failure'); + }); + }); +}); diff --git a/tests/commands/gasless/admin/set-daily-limit.test.ts b/tests/commands/gasless/admin/set-daily-limit.test.ts new file mode 100644 index 0000000..8a504eb --- /dev/null +++ b/tests/commands/gasless/admin/set-daily-limit.test.ts @@ -0,0 +1,144 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/set-daily-limit'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + setDailyLimit: vi.fn(), + }; +}); + +vi.mock('@inquirer/prompts', () => ({ + input: vi.fn(), +})); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +const baseInputs = { + network: 'sepolia', + paymasterAddress: '0x1111111111111111111111111111111111111111', + encryptedWalletPath: './wallet.json', +}; + +const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + +describe('gasless/admin/set-daily-limit', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('handler', () => { + it('sets the daily limit with the prompted value and returns the tx hash', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + const inquirerModule = await import('@inquirer/prompts'); + const trustvcModule = await import('@trustvc/trustvc'); + + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue( + baseInputs, + ); + (inquirerModule.input as MockedFunction).mockResolvedValue('5000'); + (trustvcModule.setDailyLimit as MockedFunction).mockResolvedValue('0xtxhash'); + (commonModule.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const result = await handler(); + + expect(result).toBe('0xtxhash'); + expect(trustvcModule.setDailyLimit).toHaveBeenCalledWith( + mockWallet, + baseInputs.paymasterAddress, + BigInt('5000'), + ); + expect(commonModule.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...baseInputs, + actionLabel: 'Setting daily limit to 5000 wei', + execute: expect.any(Function), + }), + ); + }); + + it('logs an error and returns undefined when prompting fails', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('wallet selection failed'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('wallet selection failed'); + }); + + it('logs a string error when a non-Error is thrown during prompting', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + 'raw string failure', + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw string failure'); + }); + }); + + describe('daily limit validate()', () => { + it('captures the validate callback passed to input()', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + const inquirerModule = await import('@inquirer/prompts'); + + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue( + baseInputs, + ); + (inquirerModule.input as MockedFunction).mockResolvedValue('0'); + (commonModule.runPaymasterAdminAction as MockedFunction).mockResolvedValue('0xtxhash'); + + await handler(); + + const call = (inquirerModule.input as MockedFunction).mock.calls[0][0]; + const validate = call.validate as (value: string) => string | true; + + expect(validate('0')).toBe(true); + expect(validate('12345')).toBe(true); + expect(validate('-1')).not.toBe(true); + expect(validate('1.5')).not.toBe(true); + expect(validate('abc')).not.toBe(true); + expect(validate('')).not.toBe(true); + }); + }); +}); diff --git a/tests/commands/gasless/admin/set-user-whitelist.test.ts b/tests/commands/gasless/admin/set-user-whitelist.test.ts new file mode 100644 index 0000000..3fc027d --- /dev/null +++ b/tests/commands/gasless/admin/set-user-whitelist.test.ts @@ -0,0 +1,168 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { handler } from '../../../../src/commands/gasless/admin/set-user-whitelist'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + setUserWhitelist: vi.fn(), + }; +}); + +vi.mock('@inquirer/prompts', () => ({ + input: vi.fn(), +})); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + promptAddress: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +const baseInputs = { + network: 'sepolia', + paymasterAddress: '0x1111111111111111111111111111111111111111', + encryptedWalletPath: './wallet.json', +}; + +const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + +describe('gasless/admin/set-user-whitelist', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('handler', () => { + it('whitelists the user with the prompted address and credits, returning the tx hash', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + const utilsModule = await import('../../../../src/utils'); + const inquirerModule = await import('@inquirer/prompts'); + const trustvcModule = await import('@trustvc/trustvc'); + + const userAddress = '0x5555555555555555555555555555555555555555'; + + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue( + baseInputs, + ); + (utilsModule.promptAddress as MockedFunction).mockResolvedValue(userAddress); + (inquirerModule.input as MockedFunction).mockResolvedValue('2'); + (trustvcModule.setUserWhitelist as MockedFunction).mockResolvedValue('0xtxhash'); + (commonModule.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const result = await handler(); + + expect(result).toBe('0xtxhash'); + expect(utilsModule.promptAddress).toHaveBeenCalledWith( + 'user', + 'address to whitelist for gasless registry deployment', + ); + expect(trustvcModule.setUserWhitelist).toHaveBeenCalledWith( + mockWallet, + baseInputs.paymasterAddress, + userAddress, + BigInt('2'), + ); + expect(commonModule.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...baseInputs, + actionLabel: `Whitelisting user ${userAddress} with 2 credit(s)`, + execute: expect.any(Function), + }), + ); + }); + + it('logs an error and returns undefined when prompting fails', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('wallet selection failed'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('wallet selection failed'); + }); + + it('logs a string error when a non-Error is thrown during prompting', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + 'raw string failure', + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw string failure'); + }); + }); + + describe('credits validate()', () => { + it('only accepts integers between 0 and 3', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + const utilsModule = await import('../../../../src/utils'); + const inquirerModule = await import('@inquirer/prompts'); + + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue( + baseInputs, + ); + (utilsModule.promptAddress as MockedFunction).mockResolvedValue( + '0x5555555555555555555555555555555555555555', + ); + (inquirerModule.input as MockedFunction).mockResolvedValue('1'); + (commonModule.runPaymasterAdminAction as MockedFunction).mockResolvedValue('0xtxhash'); + + await handler(); + + const call = (inquirerModule.input as MockedFunction).mock.calls[0][0]; + const validate = call.validate as (value: string) => string | true; + + expect(validate('0')).toBe(true); + expect(validate('1')).toBe(true); + expect(validate('2')).toBe(true); + expect(validate('3')).toBe(true); + expect(validate('4')).not.toBe(true); + expect(validate('-1')).not.toBe(true); + expect(validate('10')).not.toBe(true); + expect(validate('abc')).not.toBe(true); + expect(validate('')).not.toBe(true); + }); + }); +}); diff --git a/tests/commands/gasless/admin/stake-paymaster.test.ts b/tests/commands/gasless/admin/stake-paymaster.test.ts new file mode 100644 index 0000000..56fabbb --- /dev/null +++ b/tests/commands/gasless/admin/stake-paymaster.test.ts @@ -0,0 +1,182 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { eip7702Abis } from '@trustvc/trustvc'; +import { ethers } from 'ethers'; +import { handler } from '../../../../src/commands/gasless/admin/stake-paymaster'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('ethers', async () => { + const actual = await vi.importActual('ethers'); + return { + ...actual, + ethers: { + ...actual.ethers, + Contract: vi.fn(), + }, + }; +}); + +vi.mock('@inquirer/prompts', () => ({ + input: vi.fn(), +})); + +vi.mock('../../../../src/commands/gasless/admin/common', () => ({ + promptForPaymasterAdminWalletInputs: vi.fn(), + runPaymasterAdminAction: vi.fn(), +})); + +const baseInputs = { + network: 'sepolia', + paymasterAddress: '0x1111111111111111111111111111111111111111', + encryptedWalletPath: './wallet.json', +}; + +const mockWallet = { getAddress: vi.fn().mockResolvedValue('0xfrom') }; + +describe('gasless/admin/stake-paymaster', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('handler', () => { + it('stakes the parsed ETH amount with the prompted unstake delay and returns the receipt hash', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + const inquirerModule = await import('@inquirer/prompts'); + + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue( + baseInputs, + ); + (inquirerModule.input as MockedFunction) + .mockResolvedValueOnce('1.5') + .mockResolvedValueOnce('3600'); + + const addStakeMock = vi.fn().mockResolvedValue({ + wait: vi.fn().mockResolvedValue({ hash: '0xreceipthash' }), + }); + (ethers.Contract as unknown as MockedFunction).mockImplementation( + () => + ({ + addStake: addStakeMock, + }) as any, + ); + + (commonModule.runPaymasterAdminAction as MockedFunction).mockImplementation( + async ({ execute }: any) => execute(mockWallet), + ); + + const result = await handler(); + + expect(result).toBe('0xreceipthash'); + expect(ethers.Contract).toHaveBeenCalledWith( + baseInputs.paymasterAddress, + eip7702Abis.platformPaymasterAbi, + mockWallet, + ); + expect(addStakeMock).toHaveBeenCalledWith(3600, { value: ethers.parseEther('1.5') }); + expect(commonModule.runPaymasterAdminAction).toHaveBeenCalledWith( + expect.objectContaining({ + ...baseInputs, + actionLabel: 'Staking 1.5 ETH with a 3600s unstake delay', + execute: expect.any(Function), + }), + ); + }); + + it('logs an error and returns undefined when prompting fails', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + new Error('wallet selection failed'), + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('wallet selection failed'); + }); + + it('logs a string error when a non-Error is thrown during prompting', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockRejectedValue( + 'raw string failure', + ); + + const result = await handler(); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw string failure'); + }); + }); + + describe('amount and unstake delay validate()', () => { + it('captures both validate callbacks and rejects invalid input', async () => { + const commonModule = await import('../../../../src/commands/gasless/admin/common'); + const inquirerModule = await import('@inquirer/prompts'); + + (commonModule.promptForPaymasterAdminWalletInputs as MockedFunction).mockResolvedValue( + baseInputs, + ); + (inquirerModule.input as MockedFunction) + .mockResolvedValueOnce('1') + .mockResolvedValueOnce('86400'); + (ethers.Contract as unknown as MockedFunction).mockImplementation( + () => + ({ + addStake: vi + .fn() + .mockResolvedValue({ wait: vi.fn().mockResolvedValue({ hash: '0x1' }) }), + }) as any, + ); + (commonModule.runPaymasterAdminAction as MockedFunction).mockResolvedValue('0xtxhash'); + + await handler(); + + const amountCall = (inquirerModule.input as MockedFunction).mock.calls[0][0]; + const delayCall = (inquirerModule.input as MockedFunction).mock.calls[1][0]; + + expect(delayCall.default).toBe('86400'); + + const validateAmount = amountCall.validate as (value: string) => string | true; + expect(validateAmount('1')).toBe(true); + expect(validateAmount('0.5')).toBe(true); + expect(validateAmount('0')).not.toBe(true); + expect(validateAmount('-1')).not.toBe(true); + expect(validateAmount('abc')).not.toBe(true); + expect(validateAmount('')).not.toBe(true); + + const validateDelay = delayCall.validate as (value: string) => string | true; + expect(validateDelay('86400')).toBe(true); + expect(validateDelay('1')).toBe(true); + expect(validateDelay('0')).not.toBe(true); + expect(validateDelay('-100')).not.toBe(true); + expect(validateDelay('1.5')).not.toBe(true); + expect(validateDelay('abc')).not.toBe(true); + }); + }); +}); diff --git a/tests/commands/gasless/client.test.ts b/tests/commands/gasless/client.test.ts new file mode 100644 index 0000000..29ed8d7 --- /dev/null +++ b/tests/commands/gasless/client.test.ts @@ -0,0 +1,230 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { buildGaslessSmartAccountClient } from '../../../src/commands/gasless/client'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('../../../src/commands/gasless/config', () => ({ + getGaslessRpcUrl: vi.fn(), + getEip7702ImplementationAddress: vi.fn(), + getPimlicoBundlerUrl: vi.fn(), + getViemChain: vi.fn(), + getPimlicoApiKey: vi.fn(), +})); + +vi.mock('viem', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + createPublicClient: vi.fn(), + }; +}); + +vi.mock('viem/accounts', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + privateKeyToAccount: vi.fn(), + }; +}); + +vi.mock('viem/account-abstraction', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + entryPoint08Address: '0xentrypoint08', + }; +}); + +vi.mock('permissionless/accounts', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + to7702SimpleSmartAccount: vi.fn(), + }; +}); + +vi.mock('permissionless', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + createSmartAccountClient: vi.fn(), + }; +}); + +vi.mock('permissionless/clients/pimlico', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + createPimlicoClient: vi.fn(), + }; +}); + +const fakeChain = { id: 11155111, name: 'fake-chain' }; +const fakePublicClient = { __brand: 'publicClient' }; +const fakeOwner = { __brand: 'owner' }; +const fakeSmartAccount = { + address: '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', +}; +const fakeSmartAccountClient = { __brand: 'smartAccountClient' }; +const fakePimlicoGasPrice = { + fast: { maxFeePerGas: 100n, maxPriorityFeePerGas: 10n }, +}; + +describe('gasless/client', () => { + let getGaslessRpcUrlMock: MockedFunction; + let getEip7702ImplementationAddressMock: MockedFunction; + let getPimlicoBundlerUrlMock: MockedFunction; + let getViemChainMock: MockedFunction; + let getPimlicoApiKeyMock: MockedFunction; + let createPublicClientMock: MockedFunction; + let privateKeyToAccountMock: MockedFunction; + let to7702SimpleSmartAccountMock: MockedFunction; + let createSmartAccountClientMock: MockedFunction; + let createPimlicoClientMock: MockedFunction; + let getUserOperationGasPriceMock: MockedFunction; + + beforeEach(async () => { + vi.clearAllMocks(); + vi.resetAllMocks(); + + const configModule = await import('../../../src/commands/gasless/config'); + getGaslessRpcUrlMock = configModule.getGaslessRpcUrl as MockedFunction; + getEip7702ImplementationAddressMock = + configModule.getEip7702ImplementationAddress as MockedFunction; + getPimlicoBundlerUrlMock = configModule.getPimlicoBundlerUrl as MockedFunction; + getViemChainMock = configModule.getViemChain as MockedFunction; + getPimlicoApiKeyMock = configModule.getPimlicoApiKey as MockedFunction; + + const viemModule = await import('viem'); + createPublicClientMock = viemModule.createPublicClient as MockedFunction; + + const viemAccountsModule = await import('viem/accounts'); + privateKeyToAccountMock = viemAccountsModule.privateKeyToAccount as MockedFunction; + + const permissionlessAccountsModule = await import('permissionless/accounts'); + to7702SimpleSmartAccountMock = + permissionlessAccountsModule.to7702SimpleSmartAccount as MockedFunction; + + const permissionlessModule = await import('permissionless'); + createSmartAccountClientMock = + permissionlessModule.createSmartAccountClient as MockedFunction; + + const pimlicoModule = await import('permissionless/clients/pimlico'); + createPimlicoClientMock = pimlicoModule.createPimlicoClient as MockedFunction; + + getGaslessRpcUrlMock.mockReturnValue('https://fake-rpc.example.com'); + getEip7702ImplementationAddressMock.mockReturnValue( + '0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead', + ); + getPimlicoBundlerUrlMock.mockReturnValue('https://fake-bundler.example.com'); + getViemChainMock.mockReturnValue(fakeChain); + getPimlicoApiKeyMock.mockReturnValue('fake-api-key'); + + createPublicClientMock.mockReturnValue(fakePublicClient); + privateKeyToAccountMock.mockReturnValue(fakeOwner); + to7702SimpleSmartAccountMock.mockResolvedValue(fakeSmartAccount); + createSmartAccountClientMock.mockReturnValue(fakeSmartAccountClient); + getUserOperationGasPriceMock = vi.fn().mockResolvedValue(fakePimlicoGasPrice); + createPimlicoClientMock.mockReturnValue({ + getUserOperationGasPrice: getUserOperationGasPriceMock, + }); + }); + + it('builds a smart account client wired to the mocked collaborators', async () => { + const result = await buildGaslessSmartAccountClient({ + network: 'sepolia' as any, + privateKey: '0xprivatekey', + paymasterAddress: '0xpaymaster0000000000000000000000000000000', + }); + + expect(to7702SimpleSmartAccountMock).toHaveBeenCalledWith( + expect.objectContaining({ + client: fakePublicClient, + owner: fakeOwner, + accountLogicAddress: '0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead', + }), + ); + + expect(createSmartAccountClientMock).toHaveBeenCalledWith( + expect.objectContaining({ + account: fakeSmartAccount, + chain: fakeChain, + }), + ); + + expect(result).toEqual({ + smartAccountClient: fakeSmartAccountClient, + smartAccountAddress: fakeSmartAccount.address, + }); + }); + + it('resolves paymaster stub/data with the given paymaster address and delegates fee estimation to the pimlico client', async () => { + const paymasterAddress = '0xpaymaster0000000000000000000000000000000'; + + await buildGaslessSmartAccountClient({ + network: 'sepolia' as any, + privateKey: '0xprivatekey', + paymasterAddress: paymasterAddress as `0x${string}`, + }); + + expect(createSmartAccountClientMock).toHaveBeenCalledTimes(1); + const callArgs = createSmartAccountClientMock.mock.calls[0][0] as any; + + const stubData = await callArgs.paymaster.getPaymasterStubData(); + expect(stubData).toEqual( + expect.objectContaining({ + paymaster: paymasterAddress, + }), + ); + + const paymasterData = await callArgs.paymaster.getPaymasterData(); + expect(paymasterData).toEqual( + expect.objectContaining({ + paymaster: paymasterAddress, + }), + ); + + const estimatedFees = await callArgs.userOperation.estimateFeesPerGas(); + expect(estimatedFees).toBe(fakePimlicoGasPrice.fast); + expect(getUserOperationGasPriceMock).toHaveBeenCalled(); + }); + + it('passes the bundler url built from the mocked network and api key', async () => { + await buildGaslessSmartAccountClient({ + network: 'amoy' as any, + privateKey: '0xprivatekey', + paymasterAddress: '0xpaymaster0000000000000000000000000000000', + }); + + expect(getPimlicoBundlerUrlMock).toHaveBeenCalledWith('amoy', 'fake-api-key'); + expect(createSmartAccountClientMock).toHaveBeenCalledWith( + expect.objectContaining({ + bundlerTransport: expect.anything(), + }), + ); + }); +}); diff --git a/tests/commands/gasless/common.test.ts b/tests/commands/gasless/common.test.ts new file mode 100644 index 0000000..eace652 --- /dev/null +++ b/tests/commands/gasless/common.test.ts @@ -0,0 +1,348 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + resolveTitleEscrowAddress, + prepareGaslessRun, + prepareGaslessRegistryRun, +} from '../../../src/commands/gasless/common'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + }; +}); + +vi.mock('../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + getSupportedNetwork: vi.fn(), + }; +}); + +vi.mock('../../../src/utils/wallet', () => ({ + getWalletOrSigner: vi.fn(), +})); + +vi.mock('../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n: string) => n), +})); + +vi.mock('../../../src/commands/gasless/client', () => ({ + buildGaslessSmartAccountClient: vi.fn(), +})); + +vi.mock('../../../src/commands/gasless/eligibility', () => ({ + checkGaslessEligibility: vi.fn(), +})); + +vi.mock('ethers', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + ethers: { + ...actual.ethers, + Contract: vi.fn(), + }, + }; +}); + +describe('gasless/common', () => { + let getSupportedNetworkMock: MockedFunction; + let getWalletOrSignerMock: MockedFunction; + let assertGaslessSupportedNetworkMock: MockedFunction; + let buildGaslessSmartAccountClientMock: MockedFunction; + let checkGaslessEligibilityMock: MockedFunction; + let ContractMock: MockedFunction; + + const fakeProvider = { __brand: 'provider' }; + + beforeEach(async () => { + vi.clearAllMocks(); + vi.resetAllMocks(); + + const utilsModule = await import('../../../src/utils'); + getSupportedNetworkMock = utilsModule.getSupportedNetwork as MockedFunction; + getSupportedNetworkMock.mockReturnValue({ provider: () => fakeProvider }); + + const walletModule = await import('../../../src/utils/wallet'); + getWalletOrSignerMock = walletModule.getWalletOrSigner as MockedFunction; + + const configModule = await import('../../../src/commands/gasless/config'); + assertGaslessSupportedNetworkMock = + configModule.assertGaslessSupportedNetwork as MockedFunction; + assertGaslessSupportedNetworkMock.mockImplementation((n: string) => n); + + const clientModule = await import('../../../src/commands/gasless/client'); + buildGaslessSmartAccountClientMock = + clientModule.buildGaslessSmartAccountClient as MockedFunction; + + const eligibilityModule = await import('../../../src/commands/gasless/eligibility'); + checkGaslessEligibilityMock = eligibilityModule.checkGaslessEligibility as MockedFunction; + checkGaslessEligibilityMock.mockResolvedValue(undefined); + + const ethersModule = await import('ethers'); + ContractMock = ethersModule.ethers.Contract as MockedFunction; + }); + + describe('resolveTitleEscrowAddress', () => { + it('returns the resolved title escrow address from ownerOf', async () => { + const escrowAddress = '0xescrow000000000000000000000000000000000'; + ContractMock.mockImplementation(() => ({ + ownerOf: vi.fn().mockResolvedValue(escrowAddress), + })); + + const result = await resolveTitleEscrowAddress({ + tokenRegistryAddress: '0xregistry0000000000000000000000000000000', + tokenId: '0x1', + network: 'sepolia', + }); + + expect(result).toBe(escrowAddress); + }); + + it('throws when ownerOf resolves to the zero address', async () => { + const ethersModule = await import('ethers'); + ContractMock.mockImplementation(() => ({ + ownerOf: vi.fn().mockResolvedValue(ethersModule.ethers.ZeroAddress), + })); + + await expect( + resolveTitleEscrowAddress({ + tokenRegistryAddress: '0xregistry0000000000000000000000000000000', + tokenId: '0x1', + network: 'sepolia', + }), + ).rejects.toThrow(/Unable to resolve the title escrow address/); + }); + + it('throws when ownerOf resolves to a falsy value', async () => { + ContractMock.mockImplementation(() => ({ + ownerOf: vi.fn().mockResolvedValue(''), + })); + + await expect( + resolveTitleEscrowAddress({ + tokenRegistryAddress: '0xregistry0000000000000000000000000000000', + tokenId: '0x1', + network: 'sepolia', + }), + ).rejects.toThrow(/Unable to resolve the title escrow address/); + }); + }); + + describe('prepareGaslessRun', () => { + const titleEscrowAddress = '0xescrow000000000000000000000000000000000'; + const callerAddress = '0xCaLLeR000000000000000000000000000000000'; + const paymasterAddress = '0xpaymaster000000000000000000000000000000'; + + beforeEach(() => { + ContractMock.mockImplementation(() => ({ + ownerOf: vi.fn().mockResolvedValue(titleEscrowAddress), + holder: vi.fn().mockResolvedValue(callerAddress), + beneficiary: vi.fn().mockResolvedValue(callerAddress), + })); + + buildGaslessSmartAccountClientMock.mockResolvedValue({ + smartAccountClient: { __brand: 'smartAccountClient' }, + }); + }); + + it('throws when the resolved wallet has no privateKey', async () => { + getWalletOrSignerMock.mockResolvedValue({ + getAddress: vi.fn().mockResolvedValue(callerAddress), + }); + + await expect( + prepareGaslessRun({ + network: 'sepolia', + tokenRegistryAddress: '0xregistry0000000000000000000000000000000', + tokenId: '0x1', + paymasterAddress, + requiredRoles: ['holder'], + }), + ).rejects.toThrow(/Gasless transactions require direct access to a private key/); + }); + + it('throws when the caller address does not match the required role holder (case-insensitive compare still matches when equal)', async () => { + getWalletOrSignerMock.mockResolvedValue({ + privateKey: '0xprivatekey', + getAddress: vi.fn().mockResolvedValue('0xDIFFERENTADDRESS00000000000000000000000'), + }); + + await expect( + prepareGaslessRun({ + network: 'sepolia', + tokenRegistryAddress: '0xregistry0000000000000000000000000000000', + tokenId: '0x1', + paymasterAddress, + requiredRoles: ['holder'], + }), + ).rejects.toThrow(/is not the current holder/); + }); + + it('does not throw when the caller address matches the role holder in a different case', async () => { + getWalletOrSignerMock.mockResolvedValue({ + privateKey: '0xprivatekey', + getAddress: vi.fn().mockResolvedValue(callerAddress.toUpperCase()), + }); + + await expect( + prepareGaslessRun({ + network: 'sepolia', + tokenRegistryAddress: '0xregistry0000000000000000000000000000000', + tokenId: '0x1', + paymasterAddress, + requiredRoles: ['holder'], + }), + ).resolves.toBeDefined(); + }); + + it('calls checkGaslessEligibility with titleEscrowAddress (not registryAddress)', async () => { + getWalletOrSignerMock.mockResolvedValue({ + privateKey: '0xprivatekey', + getAddress: vi.fn().mockResolvedValue(callerAddress), + }); + + await prepareGaslessRun({ + network: 'sepolia', + tokenRegistryAddress: '0xregistry0000000000000000000000000000000', + tokenId: '0x1', + paymasterAddress, + requiredRoles: ['holder'], + }); + + expect(checkGaslessEligibilityMock).toHaveBeenCalledWith( + expect.objectContaining({ + titleEscrowAddress, + }), + ); + const callArgs = checkGaslessEligibilityMock.mock.calls[0][0] as any; + expect(callArgs.registryAddress).toBeUndefined(); + }); + + it('returns network, titleEscrowAddress, callerAddress, smartAccountClient on success', async () => { + const fakeSmartAccountClient = { __brand: 'smartAccountClient' }; + buildGaslessSmartAccountClientMock.mockResolvedValue({ + smartAccountClient: fakeSmartAccountClient, + }); + getWalletOrSignerMock.mockResolvedValue({ + privateKey: '0xprivatekey', + getAddress: vi.fn().mockResolvedValue(callerAddress), + }); + + const result = await prepareGaslessRun({ + network: 'sepolia', + tokenRegistryAddress: '0xregistry0000000000000000000000000000000', + tokenId: '0x1', + paymasterAddress, + requiredRoles: ['holder'], + }); + + expect(result).toEqual({ + network: 'sepolia', + titleEscrowAddress, + callerAddress, + smartAccountClient: fakeSmartAccountClient, + }); + }); + }); + + describe('prepareGaslessRegistryRun', () => { + const callerAddress = '0xCaLLeR000000000000000000000000000000000'; + const paymasterAddress = '0xpaymaster000000000000000000000000000000'; + const tokenRegistryAddress = '0xregistry0000000000000000000000000000000'; + + beforeEach(() => { + buildGaslessSmartAccountClientMock.mockResolvedValue({ + smartAccountClient: { __brand: 'smartAccountClient' }, + }); + }); + + it('throws when the resolved wallet has no privateKey', async () => { + getWalletOrSignerMock.mockResolvedValue({ + getAddress: vi.fn().mockResolvedValue(callerAddress), + }); + + await expect( + prepareGaslessRegistryRun({ + network: 'sepolia', + tokenRegistryAddress, + paymasterAddress, + }), + ).rejects.toThrow(/Gasless transactions require direct access to a private key/); + }); + + it('calls checkGaslessEligibility with registryAddress (not titleEscrowAddress) and never constructs a title escrow contract', async () => { + getWalletOrSignerMock.mockResolvedValue({ + privateKey: '0xprivatekey', + getAddress: vi.fn().mockResolvedValue(callerAddress), + }); + + await prepareGaslessRegistryRun({ + network: 'sepolia', + tokenRegistryAddress, + paymasterAddress, + }); + + expect(checkGaslessEligibilityMock).toHaveBeenCalledWith( + expect.objectContaining({ + registryAddress: tokenRegistryAddress, + }), + ); + const callArgs = checkGaslessEligibilityMock.mock.calls[0][0] as any; + expect(callArgs.titleEscrowAddress).toBeUndefined(); + expect(ContractMock).not.toHaveBeenCalled(); + }); + + it('returns network, callerAddress, smartAccountClient (no titleEscrowAddress field) on success', async () => { + const fakeSmartAccountClient = { __brand: 'smartAccountClient' }; + buildGaslessSmartAccountClientMock.mockResolvedValue({ + smartAccountClient: fakeSmartAccountClient, + }); + getWalletOrSignerMock.mockResolvedValue({ + privateKey: '0xprivatekey', + getAddress: vi.fn().mockResolvedValue(callerAddress), + }); + + const result = await prepareGaslessRegistryRun({ + network: 'sepolia', + tokenRegistryAddress, + paymasterAddress, + }); + + expect(result).toEqual({ + network: 'sepolia', + callerAddress, + smartAccountClient: fakeSmartAccountClient, + }); + expect(result).not.toHaveProperty('titleEscrowAddress'); + }); + }); +}); diff --git a/tests/commands/gasless/config.test.ts b/tests/commands/gasless/config.test.ts new file mode 100644 index 0000000..a8f14b2 --- /dev/null +++ b/tests/commands/gasless/config.test.ts @@ -0,0 +1,252 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { gaslessConstants } from '@trustvc/trustvc'; +import { sepolia, polygonAmoy } from 'viem/chains'; +import { NetworkCmdName } from '../../../src/utils'; +import { + isGaslessSupportedNetwork, + assertGaslessSupportedNetwork, + getViemChain, + getPimlicoApiKey, + getEip7702ImplementationAddress, + getGaslessRpcUrl, + getPimlicoBundlerUrl, + getGaslessFactoryAddress, +} from '../../../src/commands/gasless/config'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + }; +}); + +vi.mock('../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + }; +}); + +describe('gasless/config', () => { + let originalEnv: NodeJS.ProcessEnv; + + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + originalEnv = { ...process.env }; + }); + + afterEach(() => { + process.env = { ...originalEnv }; + }); + + describe('isGaslessSupportedNetwork', () => { + it('returns true for sepolia', () => { + expect(isGaslessSupportedNetwork(NetworkCmdName.Sepolia)).toBe(true); + }); + + it('returns true for amoy', () => { + expect(isGaslessSupportedNetwork(NetworkCmdName.Amoy)).toBe(true); + }); + + it('returns false for mainnet', () => { + expect(isGaslessSupportedNetwork(NetworkCmdName.Mainnet)).toBe(false); + }); + + it('returns false for an unrecognized network string', () => { + expect(isGaslessSupportedNetwork('not-a-network')).toBe(false); + }); + }); + + describe('assertGaslessSupportedNetwork', () => { + it('returns the network unchanged for sepolia', () => { + expect(assertGaslessSupportedNetwork(NetworkCmdName.Sepolia)).toBe(NetworkCmdName.Sepolia); + }); + + it('returns the network unchanged for amoy', () => { + expect(assertGaslessSupportedNetwork(NetworkCmdName.Amoy)).toBe(NetworkCmdName.Amoy); + }); + + it('throws for mainnet', () => { + expect(() => assertGaslessSupportedNetwork(NetworkCmdName.Mainnet)).toThrow( + /Gasless transactions are only supported on/, + ); + }); + + it('throws for an unsupported arbitrary network', () => { + expect(() => assertGaslessSupportedNetwork('mainnet')).toThrow(); + }); + }); + + describe('getViemChain', () => { + it('returns the sepolia viem chain for sepolia', () => { + expect(getViemChain(NetworkCmdName.Sepolia)).toBe(sepolia); + }); + + it('returns the polygonAmoy viem chain for amoy', () => { + expect(getViemChain(NetworkCmdName.Amoy)).toBe(polygonAmoy); + }); + }); + + describe('getPimlicoApiKey', () => { + it('throws when PIMLICO_API_KEY is not set', () => { + delete process.env.PIMLICO_API_KEY; + expect(() => getPimlicoApiKey()).toThrow( + 'PIMLICO_API_KEY environment variable is required for gasless transactions. ' + + 'Get an API key from https://dashboard.pimlico.io and set it in your environment.', + ); + }); + + it('returns the api key when set', () => { + process.env.PIMLICO_API_KEY = 'test-api-key'; + expect(getPimlicoApiKey()).toBe('test-api-key'); + }); + }); + + describe('getEip7702ImplementationAddress', () => { + const validAddress = '0x1234567890123456789012345678901234567890'; + + it('throws when neither scoped nor generic env var is set for sepolia', () => { + delete process.env.SEPOLIA_EIP7702_IMPL_ADDRESS; + delete process.env.EIP7702_IMPL_ADDRESS; + expect(() => getEip7702ImplementationAddress(NetworkCmdName.Sepolia)).toThrow( + /Missing EIP-7702 implementation address for sepolia/, + ); + }); + + it('throws when neither scoped nor generic env var is set for amoy', () => { + delete process.env.AMOY_EIP7702_IMPL_ADDRESS; + delete process.env.EIP7702_IMPL_ADDRESS; + expect(() => getEip7702ImplementationAddress(NetworkCmdName.Amoy)).toThrow( + /Missing EIP-7702 implementation address for amoy/, + ); + }); + + it('uses the scoped SEPOLIA_EIP7702_IMPL_ADDRESS env var when set', () => { + process.env.SEPOLIA_EIP7702_IMPL_ADDRESS = validAddress; + delete process.env.EIP7702_IMPL_ADDRESS; + expect(getEip7702ImplementationAddress(NetworkCmdName.Sepolia)).toBe(validAddress); + }); + + it('uses the scoped AMOY_EIP7702_IMPL_ADDRESS env var when set', () => { + process.env.AMOY_EIP7702_IMPL_ADDRESS = validAddress; + delete process.env.EIP7702_IMPL_ADDRESS; + expect(getEip7702ImplementationAddress(NetworkCmdName.Amoy)).toBe(validAddress); + }); + + it('falls back to the generic EIP7702_IMPL_ADDRESS when scoped is unset (sepolia)', () => { + delete process.env.SEPOLIA_EIP7702_IMPL_ADDRESS; + process.env.EIP7702_IMPL_ADDRESS = validAddress; + expect(getEip7702ImplementationAddress(NetworkCmdName.Sepolia)).toBe(validAddress); + }); + + it('falls back to the generic EIP7702_IMPL_ADDRESS when scoped is unset (amoy)', () => { + delete process.env.AMOY_EIP7702_IMPL_ADDRESS; + process.env.EIP7702_IMPL_ADDRESS = validAddress; + expect(getEip7702ImplementationAddress(NetworkCmdName.Amoy)).toBe(validAddress); + }); + + it('prefers the scoped env var over the generic one', () => { + const scopedAddress = '0x1111111111111111111111111111111111111111'; + process.env.SEPOLIA_EIP7702_IMPL_ADDRESS = scopedAddress; + process.env.EIP7702_IMPL_ADDRESS = validAddress; + expect(getEip7702ImplementationAddress(NetworkCmdName.Sepolia)).toBe(scopedAddress); + }); + + it('throws when the address is not a valid 0x + 40 hex char address', () => { + process.env.SEPOLIA_EIP7702_IMPL_ADDRESS = '0xnotavalidaddress'; + expect(() => getEip7702ImplementationAddress(NetworkCmdName.Sepolia)).toThrow( + /Invalid EIP-7702 implementation address/, + ); + }); + + it('throws when the address is missing the 0x prefix', () => { + process.env.SEPOLIA_EIP7702_IMPL_ADDRESS = '1234567890123456789012345678901234567890'; + expect(() => getEip7702ImplementationAddress(NetworkCmdName.Sepolia)).toThrow( + /Invalid EIP-7702 implementation address/, + ); + }); + }); + + describe('getGaslessRpcUrl', () => { + it('returns the SEPOLIA_RPC env var when set', () => { + process.env.SEPOLIA_RPC = 'https://custom-sepolia-rpc.example.com'; + expect(getGaslessRpcUrl(NetworkCmdName.Sepolia)).toBe( + 'https://custom-sepolia-rpc.example.com', + ); + }); + + it('returns the AMOY_RPC env var when set', () => { + process.env.AMOY_RPC = 'https://custom-amoy-rpc.example.com'; + expect(getGaslessRpcUrl(NetworkCmdName.Amoy)).toBe('https://custom-amoy-rpc.example.com'); + }); + + it('returns the hardcoded default for sepolia when env var unset', () => { + delete process.env.SEPOLIA_RPC; + expect(getGaslessRpcUrl(NetworkCmdName.Sepolia)).toBe( + 'https://ethereum-sepolia-rpc.publicnode.com', + ); + }); + + it('returns the hardcoded default for amoy when env var unset', () => { + delete process.env.AMOY_RPC; + expect(getGaslessRpcUrl(NetworkCmdName.Amoy)).toBe( + 'https://polygon-amoy-bor-rpc.publicnode.com', + ); + }); + }); + + describe('getPimlicoBundlerUrl', () => { + it('builds the exact expected URL for sepolia', () => { + expect(getPimlicoBundlerUrl(NetworkCmdName.Sepolia, 'my-api-key')).toBe( + `https://api.pimlico.io/v2/${sepolia.id}/rpc?apikey=my-api-key`, + ); + }); + + it('builds the exact expected URL for amoy', () => { + expect(getPimlicoBundlerUrl(NetworkCmdName.Amoy, 'my-api-key')).toBe( + `https://api.pimlico.io/v2/${polygonAmoy.id}/rpc?apikey=my-api-key`, + ); + }); + }); + + describe('getGaslessFactoryAddress', () => { + it('returns the real GASLESS_FACTORY_ADDRESS_SEPOLIA for sepolia', () => { + expect(getGaslessFactoryAddress(NetworkCmdName.Sepolia)).toBe( + gaslessConstants.GASLESS_FACTORY_ADDRESS_SEPOLIA, + ); + }); + + it('returns the real GASLESS_FACTORY_ADDRESS_AMOY for amoy', () => { + expect(getGaslessFactoryAddress(NetworkCmdName.Amoy)).toBe( + gaslessConstants.GASLESS_FACTORY_ADDRESS_AMOY, + ); + }); + }); +}); diff --git a/tests/commands/gasless/deploy/deploy-platform-paymaster.test.ts b/tests/commands/gasless/deploy/deploy-platform-paymaster.test.ts new file mode 100644 index 0000000..7b59cc3 --- /dev/null +++ b/tests/commands/gasless/deploy/deploy-platform-paymaster.test.ts @@ -0,0 +1,389 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { id } from 'ethers'; +import { + promptForDeployPlatformPaymasterInputs, + runDeployPlatformPaymaster, + handler, +} from '../../../../src/commands/gasless/deploy/deploy-platform-paymaster'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + deployPlatformPaymaster: vi.fn(), + }; +}); + +vi.mock('@inquirer/prompts', () => ({ + input: vi.fn(), +})); + +vi.mock('../../../../src/utils/wallet', () => ({ + getWalletOrSigner: vi.fn(), +})); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://sepolia.etherscan.io'), + getSupportedNetwork: vi.fn(() => ({ networkId: 11155111 })), + promptAddress: vi.fn(), + promptNetworkSelection: vi.fn(), + promptWalletSelection: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((network: string) => network), + getGaslessFactoryAddress: vi.fn(() => '0xfactoryfactoryfactoryfactoryfactoryfacto'), +})); + +const VALID_SALT = `0x${'11'.repeat(32)}`; + +describe('gasless/deploy/deploy-platform-paymaster', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('promptForDeployPlatformPaymasterInputs', () => { + it('returns the correct shape for a valid 0x-prefixed salt, keeping it as-is', async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + + (utils.promptNetworkSelection as any).mockResolvedValue('sepolia'); + (utils.promptAddress as any).mockResolvedValue('0x1234567890123456789012345678901234567890'); + (utils.promptWalletSelection as any).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (prompts.input as any).mockResolvedValueOnce(VALID_SALT).mockResolvedValueOnce('1000'); + + const result = await promptForDeployPlatformPaymasterInputs(); + + expect(result.network).toBe('sepolia'); + expect(result.salt).toBe(VALID_SALT); + expect(result.platformAddress).toBe('0x1234567890123456789012345678901234567890'); + expect(result.dailyLimit).toBe('1000'); + expect((result as any).encryptedWalletPath).toBe('./wallet.json'); + }); + + it('hashes a non-0x-prefixed salt into a bytes32 value distinct from the raw input', async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + + (utils.promptNetworkSelection as any).mockResolvedValue('sepolia'); + (utils.promptAddress as any).mockResolvedValue(undefined); + (utils.promptWalletSelection as any).mockResolvedValue({}); + (prompts.input as any).mockResolvedValueOnce('my-plain-salt').mockResolvedValueOnce(''); + + const result = await promptForDeployPlatformPaymasterInputs(); + + expect(result.salt).not.toBe('my-plain-salt'); + expect(result.salt).toBe(id('my-plain-salt')); + expect(/^0x[a-fA-F0-9]{64}$/.test(result.salt)).toBe(true); + }); + + it('maps an empty daily limit input to undefined', async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + + (utils.promptNetworkSelection as any).mockResolvedValue('sepolia'); + (utils.promptAddress as any).mockResolvedValue(undefined); + (utils.promptWalletSelection as any).mockResolvedValue({}); + (prompts.input as any).mockResolvedValueOnce(VALID_SALT).mockResolvedValueOnce(''); + + const result = await promptForDeployPlatformPaymasterInputs(); + + expect(result.dailyLimit).toBeUndefined(); + }); + + it('keeps a "0" daily limit input as the string "0" (non-empty strings are truthy)', async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + + (utils.promptNetworkSelection as any).mockResolvedValue('sepolia'); + (utils.promptAddress as any).mockResolvedValue(undefined); + (utils.promptWalletSelection as any).mockResolvedValue({}); + (prompts.input as any).mockResolvedValueOnce(VALID_SALT).mockResolvedValueOnce('0'); + + const result = await promptForDeployPlatformPaymasterInputs(); + + expect(result.dailyLimit).toBe('0'); + }); + + describe('salt input validate', () => { + const getSaltValidate = async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + + (utils.promptNetworkSelection as any).mockResolvedValue('sepolia'); + (utils.promptAddress as any).mockResolvedValue(undefined); + (utils.promptWalletSelection as any).mockResolvedValue({}); + (prompts.input as any).mockResolvedValueOnce(VALID_SALT).mockResolvedValueOnce(''); + + await promptForDeployPlatformPaymasterInputs(); + + return (prompts.input as MockedFunction).mock.calls[0][0].validate; + }; + + it('rejects a 0x-prefixed salt that is not exactly 64 hex characters', async () => { + const validate = await getSaltValidate(); + expect(validate('0x1234')).toBe( + 'A 0x-prefixed salt must be a 32-byte (64 hex character) value', + ); + }); + + it('accepts a valid 0x-prefixed 64-hex-character salt', async () => { + const validate = await getSaltValidate(); + expect(validate(VALID_SALT)).toBe(true); + }); + + it('accepts a non-0x-prefixed value as-is (hashed later, not at the prompt layer)', async () => { + const validate = await getSaltValidate(); + expect(validate('anything-goes-here')).toBe(true); + }); + }); + + describe('daily limit input validate', () => { + const getDailyLimitValidate = async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + + (utils.promptNetworkSelection as any).mockResolvedValue('sepolia'); + (utils.promptAddress as any).mockResolvedValue(undefined); + (utils.promptWalletSelection as any).mockResolvedValue({}); + (prompts.input as any).mockResolvedValueOnce(VALID_SALT).mockResolvedValueOnce(''); + + await promptForDeployPlatformPaymasterInputs(); + + return (prompts.input as MockedFunction).mock.calls[1][0].validate; + }; + + it('rejects a non-digit string', async () => { + const validate = await getDailyLimitValidate(); + expect(validate('abc')).toBe('Daily limit must be a non-negative integer (wei)'); + }); + + it('accepts a digit string', async () => { + const validate = await getDailyLimitValidate(); + expect(validate('12345')).toBe(true); + }); + + it('accepts an empty string', async () => { + const validate = await getDailyLimitValidate(); + expect(validate('')).toBe(true); + }); + }); + }); + + describe('runDeployPlatformPaymaster', () => { + let deployPlatformPaymasterMock: MockedFunction; + let getWalletOrSignerMock: MockedFunction; + let assertGaslessSupportedNetworkMock: MockedFunction; + + beforeEach(async () => { + vi.clearAllMocks(); + + const trustvcModule = await import('@trustvc/trustvc'); + deployPlatformPaymasterMock = trustvcModule.deployPlatformPaymaster as MockedFunction; + + const walletModule = await import('../../../../src/utils/wallet'); + getWalletOrSignerMock = walletModule.getWalletOrSigner as MockedFunction; + getWalletOrSignerMock.mockResolvedValue({ getAddress: vi.fn().mockResolvedValue('0xfrom') }); + + const configModule = await import('../../../../src/commands/gasless/config'); + assertGaslessSupportedNetworkMock = + configModule.assertGaslessSupportedNetwork as MockedFunction; + assertGaslessSupportedNetworkMock.mockImplementation((network: string) => network); + (configModule.getGaslessFactoryAddress as MockedFunction).mockReturnValue( + '0xfactoryfactoryfactoryfactoryfactoryfacto', + ); + + const utils = await import('../../../../src/utils'); + (utils.getSupportedNetwork as MockedFunction).mockReturnValue({ networkId: 11155111 }); + (utils.getEtherscanAddress as MockedFunction).mockReturnValue( + 'https://sepolia.etherscan.io', + ); + (utils.getErrorMessage as MockedFunction).mockImplementation((e: any) => + e instanceof Error ? e.message : String(e), + ); + }); + + const baseArgs = { + network: 'sepolia', + salt: VALID_SALT, + platformAddress: '0x1234567890123456789012345678901234567890', + dailyLimit: undefined, + encryptedWalletPath: './wallet.json', + }; + + it('deploys the paymaster with the correct arguments and returns the deployed address', async () => { + deployPlatformPaymasterMock.mockResolvedValue({ + txHash: '0xtxhash', + paymasterAddress: '0xpaymasteraddresspaymasteraddresspaymast', + }); + + const result = await runDeployPlatformPaymaster({ + ...baseArgs, + dailyLimit: '500', + }); + + expect(deployPlatformPaymasterMock).toHaveBeenCalledWith(expect.anything(), { + chainId: 11155111, + salt: VALID_SALT, + platformAddress: baseArgs.platformAddress, + factoryAddress: '0xfactoryfactoryfactoryfactoryfactoryfacto', + dailyLimit: 500n, + }); + expect(result).toBe('0xpaymasteraddresspaymasteraddresspaymast'); + }); + + it('passes dailyLimit as undefined when not provided', async () => { + deployPlatformPaymasterMock.mockResolvedValue({ + txHash: '0xtxhash', + paymasterAddress: '0xpaymasteraddresspaymasteraddresspaymast', + }); + + await runDeployPlatformPaymaster(baseArgs); + + expect(deployPlatformPaymasterMock).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ dailyLimit: undefined }), + ); + }); + + it('returns undefined and logs the error when the network is unsupported', async () => { + assertGaslessSupportedNetworkMock.mockImplementation(() => { + throw new Error('Gasless transactions are only supported on: sepolia, amoy.'); + }); + + const result = await runDeployPlatformPaymaster(baseArgs); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith( + 'Gasless transactions are only supported on: sepolia, amoy.', + ); + expect(deployPlatformPaymasterMock).not.toHaveBeenCalled(); + }); + + it('returns undefined and logs the error when deployPlatformPaymaster rejects with an Error', async () => { + deployPlatformPaymasterMock.mockRejectedValue(new Error('deployment reverted')); + + const result = await runDeployPlatformPaymaster(baseArgs); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith('deployment reverted'); + }); + + it('returns undefined and logs the error when deployPlatformPaymaster rejects with a non-Error', async () => { + deployPlatformPaymasterMock.mockRejectedValue('some string failure'); + + const result = await runDeployPlatformPaymaster(baseArgs); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith('some string failure'); + }); + }); + + describe('handler', () => { + beforeEach(async () => { + vi.clearAllMocks(); + + const walletModule = await import('../../../../src/utils/wallet'); + (walletModule.getWalletOrSigner as MockedFunction).mockResolvedValue({ + getAddress: vi.fn().mockResolvedValue('0xfrom'), + }); + + const configModule = await import('../../../../src/commands/gasless/config'); + (configModule.assertGaslessSupportedNetwork as MockedFunction).mockImplementation( + (network: string) => network, + ); + (configModule.getGaslessFactoryAddress as MockedFunction).mockReturnValue( + '0xfactoryfactoryfactoryfactoryfactoryfacto', + ); + + const utils = await import('../../../../src/utils'); + (utils.getSupportedNetwork as MockedFunction).mockReturnValue({ networkId: 11155111 }); + (utils.getEtherscanAddress as MockedFunction).mockReturnValue( + 'https://sepolia.etherscan.io', + ); + (utils.getErrorMessage as MockedFunction).mockImplementation((e: any) => + e instanceof Error ? e.message : String(e), + ); + }); + + it('wires promptForDeployPlatformPaymasterInputs into runDeployPlatformPaymaster', async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + const trustvcModule = await import('@trustvc/trustvc'); + + (utils.promptNetworkSelection as any).mockResolvedValue('sepolia'); + (utils.promptAddress as any).mockResolvedValue('0x1234567890123456789012345678901234567890'); + (utils.promptWalletSelection as any).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (prompts.input as any).mockResolvedValueOnce(VALID_SALT).mockResolvedValueOnce(''); + (trustvcModule.deployPlatformPaymaster as MockedFunction).mockResolvedValue({ + txHash: '0xtxhash', + paymasterAddress: '0xpaymasteraddresspaymasteraddresspaymast', + }); + + const result = await handler(); + + expect(result).toBe('0xpaymasteraddresspaymasteraddresspaymast'); + }); + + it('catches Error exceptions thrown while prompting', async () => { + const utils = await import('../../../../src/utils'); + (utils.promptNetworkSelection as any).mockRejectedValue(new Error('prompt blew up')); + + const result = await handler(); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith('prompt blew up'); + }); + + it('catches non-Error exceptions thrown while prompting', async () => { + const utils = await import('../../../../src/utils'); + (utils.promptNetworkSelection as any).mockRejectedValue('raw string failure'); + + const result = await handler(); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith('raw string failure'); + }); + }); +}); diff --git a/tests/commands/gasless/deploy/deploy-token-registry-gasless.test.ts b/tests/commands/gasless/deploy/deploy-token-registry-gasless.test.ts new file mode 100644 index 0000000..2db0844 --- /dev/null +++ b/tests/commands/gasless/deploy/deploy-token-registry-gasless.test.ts @@ -0,0 +1,420 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { v5ContractAddress } from '@trustvc/trustvc'; +import { + promptForDeployTokenRegistryGaslessInputs, + runDeployTokenRegistryGasless, +} from '../../../../src/commands/gasless/deploy/deploy-token-registry-gasless'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + deployTokenRegistryGasless: vi.fn(), + }; +}); + +vi.mock('viem', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + createPublicClient: vi.fn(), + http: vi.fn(), + parseEventLogs: vi.fn(), + }; +}); + +vi.mock('@inquirer/prompts', () => ({ + input: vi.fn(), +})); + +vi.mock('../../../../src/utils/wallet', () => ({ + getWalletOrSigner: vi.fn(), +})); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://sepolia.etherscan.io'), + promptAddress: vi.fn(), + promptNetworkSelection: vi.fn(), + promptWalletSelection: vi.fn(), + }; +}); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((network: string) => network), + getGaslessRpcUrl: vi.fn(() => 'https://sepolia.example-rpc.com'), + getViemChain: vi.fn(() => ({ id: 11155111 })), +})); + +vi.mock('../../../../src/commands/gasless/client', () => ({ + buildGaslessSmartAccountClient: vi.fn(), +})); + +vi.mock('../../../../src/commands/gasless/eligibility', () => ({ + checkGaslessDeployEligibility: vi.fn(), +})); + +// Real chain ID with a known default TokenImplementation address in @trustvc/trustvc's real +// v5ContractAddress map (kept real per instructions, not stubbed). +const CHAIN_ID_WITH_DEFAULT = 11155111; +const DEFAULT_IMPL_ADDRESS = v5ContractAddress.TokenImplementation[CHAIN_ID_WITH_DEFAULT]; +// A chain ID with no entry in the real map at all. +const CHAIN_ID_WITHOUT_DEFAULT = 999999; + +describe('gasless/deploy/deploy-token-registry-gasless', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('promptForDeployTokenRegistryGaslessInputs', () => { + beforeEach(async () => { + const utils = await import('../../../../src/utils'); + const configModule = await import('../../../../src/commands/gasless/config'); + + (utils.promptNetworkSelection as any).mockResolvedValue('sepolia'); + (utils.promptWalletSelection as any).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (configModule.getViemChain as MockedFunction).mockReturnValue({ + id: CHAIN_ID_WITH_DEFAULT, + }); + }); + + it('returns the correct shape for valid inputs', async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + + (prompts.input as any).mockResolvedValueOnce('My Registry').mockResolvedValueOnce('MTR'); + (utils.promptAddress as any) + .mockResolvedValueOnce('0xpaymasterpaymasterpaymasterpaymasterpay') + .mockResolvedValueOnce('0ximplimplimplimplimplimplimplimplimplim'); + + const result = await promptForDeployTokenRegistryGaslessInputs(); + + expect(result.network).toBe('sepolia'); + expect(result.registryName).toBe('My Registry'); + expect(result.registrySymbol).toBe('MTR'); + expect(result.paymasterAddress).toBe('0xpaymasterpaymasterpaymasterpaymasterpay'); + expect(result.tokenRegistryImplAddress).toBe('0ximplimplimplimplimplimplimplimplimplim'); + expect((result as any).encryptedWalletPath).toBe('./wallet.json'); + }); + + it('falls back to the default implementation address when the user leaves it blank', async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + + (prompts.input as any).mockResolvedValueOnce('My Registry').mockResolvedValueOnce('MTR'); + (utils.promptAddress as any) + .mockResolvedValueOnce('0xpaymasterpaymasterpaymasterpaymasterpay') + .mockResolvedValueOnce(undefined); + + const result = await promptForDeployTokenRegistryGaslessInputs(); + + expect(result.tokenRegistryImplAddress).toBe(DEFAULT_IMPL_ADDRESS); + }); + + it('marks the impl address prompt optional when a default exists for the resolved chain', async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + const configModule = await import('../../../../src/commands/gasless/config'); + + (configModule.getViemChain as MockedFunction).mockReturnValue({ + id: CHAIN_ID_WITH_DEFAULT, + }); + (prompts.input as any).mockResolvedValueOnce('My Registry').mockResolvedValueOnce('MTR'); + (utils.promptAddress as any) + .mockResolvedValueOnce('0xpaymasterpaymasterpaymasterpaymasterpay') + .mockResolvedValueOnce('0ximplimplimplimplimplimplimplimplimplim'); + + await promptForDeployTokenRegistryGaslessInputs(); + + const implCallArgs = (utils.promptAddress as MockedFunction).mock.calls[1]; + expect(implCallArgs[0]).toBe('token registry implementation'); + expect(implCallArgs[2]).toBe(true); + }); + + it('marks the impl address prompt required when no default exists for the resolved chain', async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + const configModule = await import('../../../../src/commands/gasless/config'); + + (configModule.getViemChain as MockedFunction).mockReturnValue({ + id: CHAIN_ID_WITHOUT_DEFAULT, + }); + (prompts.input as any).mockResolvedValueOnce('My Registry').mockResolvedValueOnce('MTR'); + (utils.promptAddress as any) + .mockResolvedValueOnce('0xpaymasterpaymasterpaymasterpaymasterpay') + .mockResolvedValueOnce('0xexplicitimpladdressexplicitimpladdres'); + + await promptForDeployTokenRegistryGaslessInputs(); + + const implCallArgs = (utils.promptAddress as MockedFunction).mock.calls[1]; + expect(implCallArgs[2]).toBe(false); + }); + + describe('registry name/symbol validate', () => { + const getValidateFns = async () => { + const utils = await import('../../../../src/utils'); + const prompts = await import('@inquirer/prompts'); + + (prompts.input as any).mockResolvedValueOnce('My Registry').mockResolvedValueOnce('MTR'); + (utils.promptAddress as any) + .mockResolvedValueOnce('0xpaymasterpaymasterpaymasterpaymasterpay') + .mockResolvedValueOnce('0ximplimplimplimplimplimplimplimplimplim'); + + await promptForDeployTokenRegistryGaslessInputs(); + + const calls = (prompts.input as MockedFunction).mock.calls as any[]; + return { nameValidate: calls[0][0].validate, symbolValidate: calls[1][0].validate }; + }; + + it('rejects a blank registry name', async () => { + const { nameValidate } = await getValidateFns(); + expect(nameValidate('')).toBe('Registry name is required'); + expect(nameValidate(' ')).toBe('Registry name is required'); + }); + + it('accepts a non-blank registry name', async () => { + const { nameValidate } = await getValidateFns(); + expect(nameValidate('My Registry')).toBe(true); + }); + + it('rejects a blank registry symbol', async () => { + const { symbolValidate } = await getValidateFns(); + expect(symbolValidate('')).toBe('Registry symbol is required'); + expect(symbolValidate(' ')).toBe('Registry symbol is required'); + }); + + it('accepts a non-blank registry symbol', async () => { + const { symbolValidate } = await getValidateFns(); + expect(symbolValidate('MTR')).toBe(true); + }); + }); + }); + + describe('runDeployTokenRegistryGasless', () => { + const baseArgs = { + network: 'sepolia', + registryName: 'My Registry', + registrySymbol: 'MTR', + paymasterAddress: '0xpaymasterpaymasterpaymasterpaymasterpay', + tokenRegistryImplAddress: '0ximplimplimplimplimplimplimplimplimplim', + encryptedWalletPath: './wallet.json', + }; + + const walletWithPrivateKey = { + privateKey: '0xprivatekeyprivatekeyprivatekeyprivatekeyprivatekeyprivatekey12', + getAddress: vi.fn().mockResolvedValue('0xcalleraddresscalleraddresscalleraddres'), + }; + + const smartAccountClientResult = { + smartAccountClient: { sendTransaction: vi.fn() }, + smartAccountAddress: '0xsmartaccountsmartaccountsmartaccounts', + }; + + beforeEach(async () => { + walletWithPrivateKey.getAddress.mockResolvedValue('0xcalleraddresscalleraddresscalleraddres'); + + const walletModule = await import('../../../../src/utils/wallet'); + (walletModule.getWalletOrSigner as MockedFunction).mockResolvedValue( + walletWithPrivateKey, + ); + + const configModule = await import('../../../../src/commands/gasless/config'); + (configModule.assertGaslessSupportedNetwork as MockedFunction).mockImplementation( + (network: any) => network, + ); + (configModule.getGaslessRpcUrl as MockedFunction).mockReturnValue( + 'https://sepolia.example-rpc.com', + ); + (configModule.getViemChain as MockedFunction).mockReturnValue({ + id: CHAIN_ID_WITH_DEFAULT, + }); + + const eligibilityModule = await import('../../../../src/commands/gasless/eligibility'); + (eligibilityModule.checkGaslessDeployEligibility as MockedFunction).mockResolvedValue( + undefined, + ); + + const clientModule = await import('../../../../src/commands/gasless/client'); + (clientModule.buildGaslessSmartAccountClient as MockedFunction).mockResolvedValue( + smartAccountClientResult, + ); + + const trustvcModule = await import('@trustvc/trustvc'); + (trustvcModule.deployTokenRegistryGasless as MockedFunction).mockResolvedValue( + '0xtransactionhashtransactionhashtransac', + ); + + const viemModule = await import('viem'); + (viemModule.createPublicClient as MockedFunction).mockReturnValue({ + getTransactionReceipt: vi.fn().mockResolvedValue({ logs: [{}] }), + }); + (viemModule.http as MockedFunction).mockReturnValue({}); + + const utils = await import('../../../../src/utils'); + (utils.getErrorMessage as MockedFunction).mockImplementation((e: any) => + e instanceof Error ? e.message : String(e), + ); + (utils.getEtherscanAddress as MockedFunction).mockReturnValue( + 'https://sepolia.etherscan.io', + ); + }); + + it('throws (internally caught) when the resolved wallet has no privateKey', async () => { + const walletModule = await import('../../../../src/utils/wallet'); + (walletModule.getWalletOrSigner as MockedFunction).mockResolvedValue({ + getAddress: vi.fn().mockResolvedValue('0xcalleraddresscalleraddresscalleraddres'), + }); + + const result = await runDeployTokenRegistryGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith( + expect.stringContaining('Gasless transactions require direct access to a private key'), + ); + + const eligibilityModule = await import('../../../../src/commands/gasless/eligibility'); + expect(eligibilityModule.checkGaslessDeployEligibility).not.toHaveBeenCalled(); + }); + + it('checks eligibility, builds the smart account client, deploys, and returns the deployed address when the event is found', async () => { + const viemModule = await import('viem'); + (viemModule.parseEventLogs as MockedFunction).mockReturnValue([ + { args: { deployed: '0xdeployedaddressdeployedaddressdeploye' } }, + ]); + + const eligibilityModule = await import('../../../../src/commands/gasless/eligibility'); + const clientModule = await import('../../../../src/commands/gasless/client'); + const trustvcModule = await import('@trustvc/trustvc'); + + const result = await runDeployTokenRegistryGasless(baseArgs); + + expect(eligibilityModule.checkGaslessDeployEligibility).toHaveBeenCalledWith({ + network: 'sepolia', + paymasterAddress: baseArgs.paymasterAddress, + callerAddress: '0xcalleraddresscalleraddresscalleraddres', + }); + expect(clientModule.buildGaslessSmartAccountClient).toHaveBeenCalledWith({ + network: 'sepolia', + privateKey: walletWithPrivateKey.privateKey, + paymasterAddress: baseArgs.paymasterAddress, + }); + expect(trustvcModule.deployTokenRegistryGasless).toHaveBeenCalledWith( + baseArgs.registryName, + baseArgs.registrySymbol, + smartAccountClientResult.smartAccountClient, + { + paymasterAddress: baseArgs.paymasterAddress, + tokenRegistryImplAddress: baseArgs.tokenRegistryImplAddress, + }, + ); + expect(result).toBe('0xdeployedaddressdeployedaddressdeploye'); + + const signaleModule = await import('signale'); + expect(signaleModule.success).toHaveBeenCalledWith( + expect.stringContaining('deployed at 0xdeployedaddressdeployedaddressdeploye'), + ); + }); + + it('falls back to returning the raw transaction hash when no matching event is found', async () => { + const viemModule = await import('viem'); + (viemModule.parseEventLogs as MockedFunction).mockReturnValue([]); + + const result = await runDeployTokenRegistryGasless(baseArgs); + + expect(result).toBe('0xtransactionhashtransactionhashtransac'); + + const signaleModule = await import('signale'); + expect(signaleModule.success).toHaveBeenCalledWith( + expect.stringContaining('deployment submitted'), + ); + expect(signaleModule.success).not.toHaveBeenCalledWith( + expect.stringContaining('deployed at'), + ); + }); + + it('returns undefined and logs the error when checkGaslessDeployEligibility rejects with an Error', async () => { + const eligibilityModule = await import('../../../../src/commands/gasless/eligibility'); + (eligibilityModule.checkGaslessDeployEligibility as MockedFunction).mockRejectedValue( + new Error('not whitelisted'), + ); + + const result = await runDeployTokenRegistryGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith('not whitelisted'); + }); + + it('returns undefined and logs the error when checkGaslessDeployEligibility rejects with a non-Error', async () => { + const eligibilityModule = await import('../../../../src/commands/gasless/eligibility'); + (eligibilityModule.checkGaslessDeployEligibility as MockedFunction).mockRejectedValue( + 'raw failure', + ); + + const result = await runDeployTokenRegistryGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith('raw failure'); + }); + + it('returns undefined and logs the error when deployTokenRegistryGasless rejects', async () => { + const trustvcModule = await import('@trustvc/trustvc'); + (trustvcModule.deployTokenRegistryGasless as MockedFunction).mockRejectedValue( + new Error('userop reverted'), + ); + + const result = await runDeployTokenRegistryGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith('userop reverted'); + }); + + it('returns undefined and logs the error when buildGaslessSmartAccountClient rejects', async () => { + const clientModule = await import('../../../../src/commands/gasless/client'); + (clientModule.buildGaslessSmartAccountClient as MockedFunction).mockRejectedValue( + new Error('client build failed'), + ); + + const result = await runDeployTokenRegistryGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(result).toBeUndefined(); + expect(signaleModule.error).toHaveBeenCalledWith('client build failed'); + }); + }); +}); diff --git a/tests/commands/gasless/eligibility.test.ts b/tests/commands/gasless/eligibility.test.ts new file mode 100644 index 0000000..537a257 --- /dev/null +++ b/tests/commands/gasless/eligibility.test.ts @@ -0,0 +1,382 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + checkGaslessEligibility, + checkGaslessDeployEligibility, + checkGaslessMintEligibility, +} from '../../../src/commands/gasless/eligibility'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + }; +}); + +vi.mock('../../../src/commands/gasless/config', () => ({ + getViemChain: vi.fn(), + getGaslessRpcUrl: vi.fn(), +})); + +vi.mock('viem', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + createPublicClient: vi.fn(), + }; +}); + +const network = 'sepolia' as any; +const paymasterAddress = '0xpaymaster000000000000000000000000000000' as `0x${string}`; +const callerAddress = '0xcaller00000000000000000000000000000000' as `0x${string}`; +const titleEscrowAddress = '0xescrow000000000000000000000000000000000' as `0x${string}`; +const registryAddress = '0xregistry0000000000000000000000000000000' as `0x${string}`; + +describe('gasless/eligibility', () => { + let getCodeMock: MockedFunction; + let readContractMock: MockedFunction; + + beforeEach(async () => { + vi.clearAllMocks(); + vi.resetAllMocks(); + + const configModule = await import('../../../src/commands/gasless/config'); + (configModule.getViemChain as MockedFunction).mockReturnValue({ id: 11155111 }); + (configModule.getGaslessRpcUrl as MockedFunction).mockReturnValue( + 'https://fake-rpc.example.com', + ); + + getCodeMock = vi.fn(); + readContractMock = vi.fn(); + + const viemModule = await import('viem'); + (viemModule.createPublicClient as MockedFunction).mockReturnValue({ + getCode: getCodeMock, + readContract: readContractMock, + }); + }); + + describe('checkGaslessEligibility', () => { + const allPassingReadContract = ({ functionName }: { functionName: string }) => { + switch (functionName) { + case 'authorizedTitleEscrows': + case 'authorizedRegistries': + case 'authorizedCallers': + return Promise.resolve(true); + case 'getUserDailySpend': + return Promise.resolve([0n, 100n]); + case 'getDeposit': + return Promise.resolve(1n); + default: + throw new Error(`Unexpected functionName: ${functionName}`); + } + }; + + it('throws when there is no contract code at the paymaster address', async () => { + getCodeMock.mockResolvedValue('0x'); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + titleEscrowAddress, + }), + ).rejects.toThrow(/No PlatformPaymaster contract found/); + + expect(readContractMock).not.toHaveBeenCalled(); + }); + + it('throws when there is undefined contract code at the paymaster address', async () => { + getCodeMock.mockResolvedValue(undefined); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + titleEscrowAddress, + }), + ).rejects.toThrow(/No PlatformPaymaster contract found/); + }); + + it('throws naming authorizedTitleEscrows when the title escrow is not authorized', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'authorizedTitleEscrows') return Promise.resolve(false); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + titleEscrowAddress, + }), + ).rejects.toThrow(/title escrow .* is not.*authorized/); + }); + + it('throws naming authorizedRegistries when the registry is not authorized', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'authorizedRegistries') return Promise.resolve(false); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + registryAddress, + }), + ).rejects.toThrow(/token registry .* is not.*authorized/); + }); + + it('throws when the caller is not authorized', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'authorizedCallers') return Promise.resolve(false); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + titleEscrowAddress, + }), + ).rejects.toThrow(/is not an authorized caller/); + }); + + it('throws when the daily limit has been reached (limit > 0 and spent >= limit)', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'getUserDailySpend') return Promise.resolve([100n, 100n]); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + titleEscrowAddress, + }), + ).rejects.toThrow(/daily sponsored-gas limit reached/); + }); + + it('never throws for the daily limit when limit === 0 (unlimited), even with huge spend', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'getUserDailySpend') { + return Promise.resolve([1_000_000_000n, 0n]); + } + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + titleEscrowAddress, + }), + ).resolves.toBeUndefined(); + }); + + it('throws when the paymaster has a zero deposit', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'getDeposit') return Promise.resolve(0n); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + titleEscrowAddress, + }), + ).rejects.toThrow(/no ETH deposited at the EntryPoint/); + }); + + it('resolves without throwing when all checks pass (title escrow variant)', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(allPassingReadContract); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + titleEscrowAddress, + }), + ).resolves.toBeUndefined(); + }); + + it('resolves without throwing when all checks pass (registry variant)', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(allPassingReadContract); + + await expect( + checkGaslessEligibility({ + network, + paymasterAddress, + callerAddress, + registryAddress, + }), + ).resolves.toBeUndefined(); + }); + }); + + describe('checkGaslessDeployEligibility', () => { + const allPassingReadContract = ({ functionName }: { functionName: string }) => { + switch (functionName) { + case 'userWhitelist': + return Promise.resolve(1n); + case 'getDeposit': + return Promise.resolve(1n); + default: + throw new Error(`Unexpected functionName: ${functionName}`); + } + }; + + it('throws when there is no contract code at the paymaster address', async () => { + getCodeMock.mockResolvedValue('0x'); + + await expect( + checkGaslessDeployEligibility({ network, paymasterAddress, callerAddress }), + ).rejects.toThrow(/No PlatformPaymaster contract found/); + }); + + it('throws when the caller has zero deployment credits', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'userWhitelist') return Promise.resolve(0n); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessDeployEligibility({ network, paymasterAddress, callerAddress }), + ).rejects.toThrow(/no deployment\s*credits/); + }); + + it('throws when the paymaster has a zero deposit', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'getDeposit') return Promise.resolve(0n); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessDeployEligibility({ network, paymasterAddress, callerAddress }), + ).rejects.toThrow(/no ETH deposited at the EntryPoint/); + }); + + it('resolves without throwing when all checks pass', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(allPassingReadContract); + + await expect( + checkGaslessDeployEligibility({ network, paymasterAddress, callerAddress }), + ).resolves.toBeUndefined(); + }); + }); + + describe('checkGaslessMintEligibility', () => { + const allPassingReadContract = ({ functionName }: { functionName: string }) => { + switch (functionName) { + case 'hasRole': + return Promise.resolve(true); + case 'authorizedRegistries': + return Promise.resolve(true); + case 'getDeposit': + return Promise.resolve(1n); + default: + throw new Error(`Unexpected functionName: ${functionName}`); + } + }; + + it('throws when there is no contract code at the paymaster address', async () => { + getCodeMock.mockResolvedValue('0x'); + + await expect( + checkGaslessMintEligibility({ network, paymasterAddress, registryAddress }), + ).rejects.toThrow(/No PlatformPaymaster contract found/); + }); + + it('throws when the paymaster lacks MINTER_ROLE on the registry', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'hasRole') return Promise.resolve(false); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessMintEligibility({ network, paymasterAddress, registryAddress }), + ).rejects.toThrow(/does not hold MINTER_ROLE/); + }); + + it('throws when the registry is not authorized on the paymaster', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'authorizedRegistries') return Promise.resolve(false); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessMintEligibility({ network, paymasterAddress, registryAddress }), + ).rejects.toThrow(/is not authorized on the/); + }); + + it('throws when the paymaster has a zero deposit', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { + if (functionName === 'getDeposit') return Promise.resolve(0n); + return allPassingReadContract({ functionName }); + }); + + await expect( + checkGaslessMintEligibility({ network, paymasterAddress, registryAddress }), + ).rejects.toThrow(/no ETH deposited at the EntryPoint/); + }); + + it('resolves without throwing when all checks pass', async () => { + getCodeMock.mockResolvedValue('0xcode'); + readContractMock.mockImplementation(allPassingReadContract); + + await expect( + checkGaslessMintEligibility({ network, paymasterAddress, registryAddress }), + ).resolves.toBeUndefined(); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/accept-return-to-issuer.test.ts b/tests/commands/gasless/title-escrow/accept-return-to-issuer.test.ts new file mode 100644 index 0000000..884cea8 --- /dev/null +++ b/tests/commands/gasless/title-escrow/accept-return-to-issuer.test.ts @@ -0,0 +1,223 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessAcceptReturnToIssuerInputs, + runAcceptReturnToIssuerGasless, +} from '../../../../src/commands/gasless/title-escrow/accept-return-to-issuer'; +import { TokenRegistryReturnedDocumentGaslessCommand } from '../../../../src/commands/gasless/types'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + acceptReturnedGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRegistryRun: vi.fn(), +})); + +describe('gasless/title-escrow/accept-return-to-issuer', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessAcceptReturnToIssuerInputs', () => { + it('should return correct answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { + id: mockInputs.documentId, + tokenRegistry: mockInputs.tokenRegistry, + }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as any).mockResolvedValue(mockInputs.paymasterAddress); + (utils.promptWalletSelection as any).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as any).mockResolvedValue(mockInputs.remark); + (config.assertGaslessSupportedNetwork as any).mockImplementation((n: string) => n); + + const result = await promptForGaslessAcceptReturnToIssuerInputs(); + + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect((result as any).encryptedWalletPath).toBe('./wallet.json'); + }); + + it('should reject when network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xabc' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: '0xabc', + tokenId: '0x1', + network: 'unsupported-network', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as any).mockImplementation(() => { + throw new Error('Unsupported network'); + }); + + await expect(promptForGaslessAcceptReturnToIssuerInputs()).rejects.toThrow( + 'Unsupported network', + ); + }); + }); + + describe('runAcceptReturnToIssuerGasless', () => { + let acceptReturnedGaslessMock: MockedFunction; + let prepareGaslessRegistryRunMock: MockedFunction; + + const baseArgs: TokenRegistryReturnedDocumentGaslessCommand = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + encryptionKey: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + const trustvcModule = await import('@trustvc/trustvc'); + acceptReturnedGaslessMock = trustvcModule.acceptReturnedGasless as MockedFunction; + + const commonModule = await import('../../../../src/commands/gasless/common'); + prepareGaslessRegistryRunMock = commonModule.prepareGaslessRegistryRun as MockedFunction; + }); + + it('should successfully run the gasless accept return to issuer flow', async () => { + prepareGaslessRegistryRunMock.mockResolvedValue({ + network: 'sepolia', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + acceptReturnedGaslessMock.mockResolvedValue('0xtxhash'); + + const result = await runAcceptReturnToIssuerGasless(baseArgs); + + const helpers = await import('../../../../src/commands/helpers'); + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + + expect(prepareGaslessRegistryRunMock).toHaveBeenCalledWith(baseArgs); + expect(prepareGaslessRegistryRunMock).toHaveBeenCalledWith( + expect.not.objectContaining({ requiredRoles: expect.anything() }), + ); + + expect(acceptReturnedGaslessMock).toHaveBeenCalledWith( + { tokenRegistryAddress: baseArgs.tokenRegistryAddress }, + { id: 'client' }, + { tokenId: baseArgs.tokenId, remarks: baseArgs.remark }, + { id: baseArgs.encryptionKey }, + ); + + expect(result).toBe('0xtxhash'); + }); + + it('should return undefined and log error message when prepareGaslessRegistryRun rejects with an Error', async () => { + prepareGaslessRegistryRunMock.mockRejectedValue(new Error('not eligible')); + + const result = await runAcceptReturnToIssuerGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not eligible'); + expect(result).toBeUndefined(); + }); + + it('should return undefined and log error message when the gasless call rejects with a non-Error', async () => { + prepareGaslessRegistryRunMock.mockResolvedValue({ + network: 'sepolia', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + acceptReturnedGaslessMock.mockRejectedValue('String error message'); + + const result = await runAcceptReturnToIssuerGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('String error message'); + expect(result).toBeUndefined(); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/nominate.test.ts b/tests/commands/gasless/title-escrow/nominate.test.ts new file mode 100644 index 0000000..ac5291f --- /dev/null +++ b/tests/commands/gasless/title-escrow/nominate.test.ts @@ -0,0 +1,217 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessNominateInputs, + runNominateGasless, +} from '../../../../src/commands/gasless/title-escrow/nominate'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + nominateGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n: string) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRun: vi.fn(), +})); + +describe('gasless/title-escrow/nominate', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessNominateInputs', () => { + it('returns correctly mapped answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + newBeneficiary: '0x0987654321098765432109876543210987654321', + paymasterAddress: '0x1111111111111111111111111111111111111111', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { id: mockInputs.documentId, tokenRegistry: mockInputs.tokenRegistry }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as MockedFunction) + .mockResolvedValueOnce(mockInputs.newBeneficiary) + .mockResolvedValueOnce(mockInputs.paymasterAddress); + (utils.promptWalletSelection as MockedFunction).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as MockedFunction).mockResolvedValue(mockInputs.remark); + + const result = await promptForGaslessNominateInputs(); + + expect(config.assertGaslessSupportedNetwork).toHaveBeenCalledWith(mockInputs.network); + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.newBeneficiary).toBe(mockInputs.newBeneficiary); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect(result.encryptedWalletPath).toBe('./wallet.json'); + }); + + it('rejects when the resolved network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xregistry' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: '0xregistry', + tokenId: '0xtokenid', + network: 'mainnet', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as MockedFunction).mockImplementation(() => { + throw new Error('Gasless transactions are only supported on: sepolia, amoy'); + }); + + await expect(promptForGaslessNominateInputs()).rejects.toThrow( + 'Gasless transactions are only supported on: sepolia, amoy', + ); + expect(utils.promptAddress).not.toHaveBeenCalled(); + }); + }); + + describe('runNominateGasless', () => { + const baseArgs = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + newBeneficiary: '0x0987654321098765432109876543210987654321', + paymasterAddress: '0x1111111111111111111111111111111111111111', + remark: 'Test remark', + encryptionKey: 'doc-id', + encryptedWalletPath: './wallet.json', + }; + + it('runs the gasless nomination and returns the transaction hash', async () => { + const helpers = await import('../../../../src/commands/helpers'); + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + const smartAccountClient = {}; + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient, + }); + (trustvc.nominateGasless as MockedFunction).mockResolvedValue('0xtxhash'); + + const result = await runNominateGasless(baseArgs); + + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + expect(common.prepareGaslessRun).toHaveBeenCalledWith( + expect.objectContaining({ ...baseArgs, requiredRoles: ['beneficiary'] }), + ); + expect(trustvc.nominateGasless).toHaveBeenCalledWith( + { titleEscrowAddress: '0xescrow' }, + smartAccountClient, + { newBeneficiaryAddress: baseArgs.newBeneficiary, remarks: baseArgs.remark }, + { id: baseArgs.encryptionKey }, + ); + expect(result).toBe('0xtxhash'); + }); + + it('returns undefined and logs the message when prepareGaslessRun rejects with an Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + (common.prepareGaslessRun as MockedFunction).mockRejectedValue( + new Error('not the current beneficiary'), + ); + + const result = await runNominateGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not the current beneficiary'); + }); + + it('returns undefined and logs the raw value when the gasless call rejects with a non-Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient: {}, + }); + (trustvc.nominateGasless as MockedFunction).mockRejectedValue('raw failure'); + + const result = await runNominateGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw failure'); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/reject-return-to-issuer.test.ts b/tests/commands/gasless/title-escrow/reject-return-to-issuer.test.ts new file mode 100644 index 0000000..b359e3c --- /dev/null +++ b/tests/commands/gasless/title-escrow/reject-return-to-issuer.test.ts @@ -0,0 +1,223 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessRejectReturnToIssuerInputs, + runRejectReturnToIssuerGasless, +} from '../../../../src/commands/gasless/title-escrow/reject-return-to-issuer'; +import { TokenRegistryReturnedDocumentGaslessCommand } from '../../../../src/commands/gasless/types'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + rejectReturnedGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRegistryRun: vi.fn(), +})); + +describe('gasless/title-escrow/reject-return-to-issuer', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessRejectReturnToIssuerInputs', () => { + it('should return correct answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { + id: mockInputs.documentId, + tokenRegistry: mockInputs.tokenRegistry, + }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as any).mockResolvedValue(mockInputs.paymasterAddress); + (utils.promptWalletSelection as any).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as any).mockResolvedValue(mockInputs.remark); + (config.assertGaslessSupportedNetwork as any).mockImplementation((n: string) => n); + + const result = await promptForGaslessRejectReturnToIssuerInputs(); + + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect((result as any).encryptedWalletPath).toBe('./wallet.json'); + }); + + it('should reject when network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xabc' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: '0xabc', + tokenId: '0x1', + network: 'unsupported-network', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as any).mockImplementation(() => { + throw new Error('Unsupported network'); + }); + + await expect(promptForGaslessRejectReturnToIssuerInputs()).rejects.toThrow( + 'Unsupported network', + ); + }); + }); + + describe('runRejectReturnToIssuerGasless', () => { + let rejectReturnedGaslessMock: MockedFunction; + let prepareGaslessRegistryRunMock: MockedFunction; + + const baseArgs: TokenRegistryReturnedDocumentGaslessCommand = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + encryptionKey: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + const trustvcModule = await import('@trustvc/trustvc'); + rejectReturnedGaslessMock = trustvcModule.rejectReturnedGasless as MockedFunction; + + const commonModule = await import('../../../../src/commands/gasless/common'); + prepareGaslessRegistryRunMock = commonModule.prepareGaslessRegistryRun as MockedFunction; + }); + + it('should successfully run the gasless reject return to issuer flow', async () => { + prepareGaslessRegistryRunMock.mockResolvedValue({ + network: 'sepolia', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + rejectReturnedGaslessMock.mockResolvedValue('0xtxhash'); + + const result = await runRejectReturnToIssuerGasless(baseArgs); + + const helpers = await import('../../../../src/commands/helpers'); + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + + expect(prepareGaslessRegistryRunMock).toHaveBeenCalledWith(baseArgs); + expect(prepareGaslessRegistryRunMock).toHaveBeenCalledWith( + expect.not.objectContaining({ requiredRoles: expect.anything() }), + ); + + expect(rejectReturnedGaslessMock).toHaveBeenCalledWith( + { tokenRegistryAddress: baseArgs.tokenRegistryAddress }, + { id: 'client' }, + { tokenId: baseArgs.tokenId, remarks: baseArgs.remark }, + { id: baseArgs.encryptionKey }, + ); + + expect(result).toBe('0xtxhash'); + }); + + it('should return undefined and log error message when prepareGaslessRegistryRun rejects with an Error', async () => { + prepareGaslessRegistryRunMock.mockRejectedValue(new Error('not eligible')); + + const result = await runRejectReturnToIssuerGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not eligible'); + expect(result).toBeUndefined(); + }); + + it('should return undefined and log error message when the gasless call rejects with a non-Error', async () => { + prepareGaslessRegistryRunMock.mockResolvedValue({ + network: 'sepolia', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + rejectReturnedGaslessMock.mockRejectedValue('String error message'); + + const result = await runRejectReturnToIssuerGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('String error message'); + expect(result).toBeUndefined(); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/reject-transfer-beneficiary.test.ts b/tests/commands/gasless/title-escrow/reject-transfer-beneficiary.test.ts new file mode 100644 index 0000000..f7c6abe --- /dev/null +++ b/tests/commands/gasless/title-escrow/reject-transfer-beneficiary.test.ts @@ -0,0 +1,226 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessRejectTransferOwnerInputs, + runRejectTransferOwnerGasless, +} from '../../../../src/commands/gasless/title-escrow/reject-transfer-beneficiary'; +import { TitleEscrowRejectTransferGaslessCommand } from '../../../../src/commands/gasless/types'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + rejectTransferBeneficiaryGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRun: vi.fn(), +})); + +describe('gasless/title-escrow/reject-transfer-beneficiary', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessRejectTransferOwnerInputs', () => { + it('should return correct answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { + id: mockInputs.documentId, + tokenRegistry: mockInputs.tokenRegistry, + }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as any).mockResolvedValue(mockInputs.paymasterAddress); + (utils.promptWalletSelection as any).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as any).mockResolvedValue(mockInputs.remark); + (config.assertGaslessSupportedNetwork as any).mockImplementation((n: string) => n); + + const result = await promptForGaslessRejectTransferOwnerInputs(); + + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect((result as any).encryptedWalletPath).toBe('./wallet.json'); + }); + + it('should reject when network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xabc' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: '0xabc', + tokenId: '0x1', + network: 'unsupported-network', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as any).mockImplementation(() => { + throw new Error('Unsupported network'); + }); + + await expect(promptForGaslessRejectTransferOwnerInputs()).rejects.toThrow( + 'Unsupported network', + ); + }); + }); + + describe('runRejectTransferOwnerGasless', () => { + let rejectTransferBeneficiaryGaslessMock: MockedFunction; + let prepareGaslessRunMock: MockedFunction; + + const baseArgs: TitleEscrowRejectTransferGaslessCommand = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + encryptionKey: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + const trustvcModule = await import('@trustvc/trustvc'); + rejectTransferBeneficiaryGaslessMock = + trustvcModule.rejectTransferBeneficiaryGasless as MockedFunction; + + const commonModule = await import('../../../../src/commands/gasless/common'); + prepareGaslessRunMock = commonModule.prepareGaslessRun as MockedFunction; + }); + + it('should successfully run the gasless reject transfer owner flow', async () => { + prepareGaslessRunMock.mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xTitleEscrow', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + rejectTransferBeneficiaryGaslessMock.mockResolvedValue('0xtxhash'); + + const result = await runRejectTransferOwnerGasless(baseArgs); + + const helpers = await import('../../../../src/commands/helpers'); + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + + expect(prepareGaslessRunMock).toHaveBeenCalledWith({ + ...baseArgs, + requiredRoles: ['beneficiary'], + }); + + expect(rejectTransferBeneficiaryGaslessMock).toHaveBeenCalledWith( + { titleEscrowAddress: '0xTitleEscrow' }, + { id: 'client' }, + { remarks: baseArgs.remark }, + { id: baseArgs.encryptionKey }, + ); + + expect(result).toBe('0xtxhash'); + }); + + it('should return undefined and log error message when prepareGaslessRun rejects with an Error', async () => { + prepareGaslessRunMock.mockRejectedValue(new Error('not the current beneficiary')); + + const result = await runRejectTransferOwnerGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not the current beneficiary'); + expect(result).toBeUndefined(); + }); + + it('should return undefined and log error message when the gasless call rejects with a non-Error', async () => { + prepareGaslessRunMock.mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xTitleEscrow', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + rejectTransferBeneficiaryGaslessMock.mockRejectedValue('String error message'); + + const result = await runRejectTransferOwnerGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('String error message'); + expect(result).toBeUndefined(); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/reject-transfer-holder.test.ts b/tests/commands/gasless/title-escrow/reject-transfer-holder.test.ts new file mode 100644 index 0000000..94c6399 --- /dev/null +++ b/tests/commands/gasless/title-escrow/reject-transfer-holder.test.ts @@ -0,0 +1,226 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessRejectTransferHolderInputs, + runRejectTransferHolderGasless, +} from '../../../../src/commands/gasless/title-escrow/reject-transfer-holder'; +import { TitleEscrowRejectTransferGaslessCommand } from '../../../../src/commands/gasless/types'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + rejectTransferHolderGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRun: vi.fn(), +})); + +describe('gasless/title-escrow/reject-transfer-holder', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessRejectTransferHolderInputs', () => { + it('should return correct answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { + id: mockInputs.documentId, + tokenRegistry: mockInputs.tokenRegistry, + }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as any).mockResolvedValue(mockInputs.paymasterAddress); + (utils.promptWalletSelection as any).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as any).mockResolvedValue(mockInputs.remark); + (config.assertGaslessSupportedNetwork as any).mockImplementation((n: string) => n); + + const result = await promptForGaslessRejectTransferHolderInputs(); + + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect((result as any).encryptedWalletPath).toBe('./wallet.json'); + }); + + it('should reject when network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xabc' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: '0xabc', + tokenId: '0x1', + network: 'unsupported-network', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as any).mockImplementation(() => { + throw new Error('Unsupported network'); + }); + + await expect(promptForGaslessRejectTransferHolderInputs()).rejects.toThrow( + 'Unsupported network', + ); + }); + }); + + describe('runRejectTransferHolderGasless', () => { + let rejectTransferHolderGaslessMock: MockedFunction; + let prepareGaslessRunMock: MockedFunction; + + const baseArgs: TitleEscrowRejectTransferGaslessCommand = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + encryptionKey: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + const trustvcModule = await import('@trustvc/trustvc'); + rejectTransferHolderGaslessMock = + trustvcModule.rejectTransferHolderGasless as MockedFunction; + + const commonModule = await import('../../../../src/commands/gasless/common'); + prepareGaslessRunMock = commonModule.prepareGaslessRun as MockedFunction; + }); + + it('should successfully run the gasless reject transfer holder flow', async () => { + prepareGaslessRunMock.mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xTitleEscrow', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + rejectTransferHolderGaslessMock.mockResolvedValue('0xtxhash'); + + const result = await runRejectTransferHolderGasless(baseArgs); + + const helpers = await import('../../../../src/commands/helpers'); + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + + expect(prepareGaslessRunMock).toHaveBeenCalledWith({ + ...baseArgs, + requiredRoles: ['holder'], + }); + + expect(rejectTransferHolderGaslessMock).toHaveBeenCalledWith( + { titleEscrowAddress: '0xTitleEscrow' }, + { id: 'client' }, + { remarks: baseArgs.remark }, + { id: baseArgs.encryptionKey }, + ); + + expect(result).toBe('0xtxhash'); + }); + + it('should return undefined and log error message when prepareGaslessRun rejects with an Error', async () => { + prepareGaslessRunMock.mockRejectedValue(new Error('not the current holder')); + + const result = await runRejectTransferHolderGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not the current holder'); + expect(result).toBeUndefined(); + }); + + it('should return undefined and log error message when the gasless call rejects with a non-Error', async () => { + prepareGaslessRunMock.mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xTitleEscrow', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + rejectTransferHolderGaslessMock.mockRejectedValue('String error message'); + + const result = await runRejectTransferHolderGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('String error message'); + expect(result).toBeUndefined(); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/reject-transfer-owners.test.ts b/tests/commands/gasless/title-escrow/reject-transfer-owners.test.ts new file mode 100644 index 0000000..ed45cef --- /dev/null +++ b/tests/commands/gasless/title-escrow/reject-transfer-owners.test.ts @@ -0,0 +1,226 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessRejectTransferOwnerHolderInputs, + runRejectTransferOwnerHolderGasless, +} from '../../../../src/commands/gasless/title-escrow/reject-transfer-owners'; +import { TitleEscrowRejectTransferGaslessCommand } from '../../../../src/commands/gasless/types'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + rejectTransferOwnersGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRun: vi.fn(), +})); + +describe('gasless/title-escrow/reject-transfer-owners', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessRejectTransferOwnerHolderInputs', () => { + it('should return correct answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { + id: mockInputs.documentId, + tokenRegistry: mockInputs.tokenRegistry, + }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as any).mockResolvedValue(mockInputs.paymasterAddress); + (utils.promptWalletSelection as any).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as any).mockResolvedValue(mockInputs.remark); + (config.assertGaslessSupportedNetwork as any).mockImplementation((n: string) => n); + + const result = await promptForGaslessRejectTransferOwnerHolderInputs(); + + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect((result as any).encryptedWalletPath).toBe('./wallet.json'); + }); + + it('should reject when network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xabc' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + document: mockDocument, + tokenRegistry: '0xabc', + tokenId: '0x1', + network: 'unsupported-network', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as any).mockImplementation(() => { + throw new Error('Unsupported network'); + }); + + await expect(promptForGaslessRejectTransferOwnerHolderInputs()).rejects.toThrow( + 'Unsupported network', + ); + }); + }); + + describe('runRejectTransferOwnerHolderGasless', () => { + let rejectTransferOwnersGaslessMock: MockedFunction; + let prepareGaslessRunMock: MockedFunction; + + const baseArgs: TitleEscrowRejectTransferGaslessCommand = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x9999999999999999999999999999999999999999', + remark: 'Test remark', + encryptionKey: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + beforeEach(async () => { + vi.clearAllMocks(); + + const trustvcModule = await import('@trustvc/trustvc'); + rejectTransferOwnersGaslessMock = + trustvcModule.rejectTransferOwnersGasless as MockedFunction; + + const commonModule = await import('../../../../src/commands/gasless/common'); + prepareGaslessRunMock = commonModule.prepareGaslessRun as MockedFunction; + }); + + it('should successfully run the gasless reject transfer owner and holder flow', async () => { + prepareGaslessRunMock.mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xTitleEscrow', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + rejectTransferOwnersGaslessMock.mockResolvedValue('0xtxhash'); + + const result = await runRejectTransferOwnerHolderGasless(baseArgs); + + const helpers = await import('../../../../src/commands/helpers'); + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + + expect(prepareGaslessRunMock).toHaveBeenCalledWith({ + ...baseArgs, + requiredRoles: ['holder', 'beneficiary'], + }); + + expect(rejectTransferOwnersGaslessMock).toHaveBeenCalledWith( + { titleEscrowAddress: '0xTitleEscrow' }, + { id: 'client' }, + { remarks: baseArgs.remark }, + { id: baseArgs.encryptionKey }, + ); + + expect(result).toBe('0xtxhash'); + }); + + it('should return undefined and log error message when prepareGaslessRun rejects with an Error', async () => { + prepareGaslessRunMock.mockRejectedValue(new Error('not the current holder/beneficiary')); + + const result = await runRejectTransferOwnerHolderGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not the current holder/beneficiary'); + expect(result).toBeUndefined(); + }); + + it('should return undefined and log error message when the gasless call rejects with a non-Error', async () => { + prepareGaslessRunMock.mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xTitleEscrow', + callerAddress: '0xCaller', + smartAccountClient: { id: 'client' }, + }); + rejectTransferOwnersGaslessMock.mockRejectedValue('String error message'); + + const result = await runRejectTransferOwnerHolderGasless(baseArgs); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('String error message'); + expect(result).toBeUndefined(); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/return-to-issuer.test.ts b/tests/commands/gasless/title-escrow/return-to-issuer.test.ts new file mode 100644 index 0000000..1ce31af --- /dev/null +++ b/tests/commands/gasless/title-escrow/return-to-issuer.test.ts @@ -0,0 +1,213 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessReturnToIssuerInputs, + runReturnToIssuerGasless, +} from '../../../../src/commands/gasless/title-escrow/return-to-issuer'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + returnToIssuerGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n: string) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRun: vi.fn(), +})); + +describe('gasless/title-escrow/return-to-issuer', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessReturnToIssuerInputs', () => { + it('returns correctly mapped answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x1111111111111111111111111111111111111111', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { id: mockInputs.documentId, tokenRegistry: mockInputs.tokenRegistry }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as MockedFunction).mockResolvedValue(mockInputs.paymasterAddress); + (utils.promptWalletSelection as MockedFunction).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as MockedFunction).mockResolvedValue(mockInputs.remark); + + const result = await promptForGaslessReturnToIssuerInputs(); + + expect(config.assertGaslessSupportedNetwork).toHaveBeenCalledWith(mockInputs.network); + expect(utils.promptAddress).toHaveBeenCalledTimes(1); + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect(result.encryptedWalletPath).toBe('./wallet.json'); + }); + + it('rejects when the resolved network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xregistry' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: '0xregistry', + tokenId: '0xtokenid', + network: 'mainnet', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as MockedFunction).mockImplementation(() => { + throw new Error('Gasless transactions are only supported on: sepolia, amoy'); + }); + + await expect(promptForGaslessReturnToIssuerInputs()).rejects.toThrow( + 'Gasless transactions are only supported on: sepolia, amoy', + ); + expect(utils.promptAddress).not.toHaveBeenCalled(); + }); + }); + + describe('runReturnToIssuerGasless', () => { + const baseArgs = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + paymasterAddress: '0x1111111111111111111111111111111111111111', + remark: 'Test remark', + encryptionKey: 'doc-id', + encryptedWalletPath: './wallet.json', + }; + + it('runs the gasless return and returns the transaction hash', async () => { + const helpers = await import('../../../../src/commands/helpers'); + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + const smartAccountClient = {}; + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient, + }); + (trustvc.returnToIssuerGasless as MockedFunction).mockResolvedValue('0xtxhash'); + + const result = await runReturnToIssuerGasless(baseArgs); + + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + expect(common.prepareGaslessRun).toHaveBeenCalledWith( + expect.objectContaining({ ...baseArgs, requiredRoles: ['holder', 'beneficiary'] }), + ); + expect(trustvc.returnToIssuerGasless).toHaveBeenCalledWith( + { titleEscrowAddress: '0xescrow' }, + smartAccountClient, + { remarks: baseArgs.remark }, + { id: baseArgs.encryptionKey }, + ); + expect(result).toBe('0xtxhash'); + }); + + it('returns undefined and logs the message when prepareGaslessRun rejects with an Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + (common.prepareGaslessRun as MockedFunction).mockRejectedValue( + new Error('not the current holder and beneficiary'), + ); + + const result = await runReturnToIssuerGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not the current holder and beneficiary'); + }); + + it('returns undefined and logs the raw value when the gasless call rejects with a non-Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient: {}, + }); + (trustvc.returnToIssuerGasless as MockedFunction).mockRejectedValue('raw failure'); + + const result = await runReturnToIssuerGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw failure'); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/transfer-beneficiary.test.ts b/tests/commands/gasless/title-escrow/transfer-beneficiary.test.ts new file mode 100644 index 0000000..4ee0581 --- /dev/null +++ b/tests/commands/gasless/title-escrow/transfer-beneficiary.test.ts @@ -0,0 +1,217 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessTransferBeneficiaryInputs, + runTransferBeneficiaryGasless, +} from '../../../../src/commands/gasless/title-escrow/transfer-beneficiary'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + transferBeneficiaryGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n: string) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRun: vi.fn(), +})); + +describe('gasless/title-escrow/transfer-beneficiary', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessTransferBeneficiaryInputs', () => { + it('returns correctly mapped answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + newBeneficiary: '0x0987654321098765432109876543210987654321', + paymasterAddress: '0x1111111111111111111111111111111111111111', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { id: mockInputs.documentId, tokenRegistry: mockInputs.tokenRegistry }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as MockedFunction) + .mockResolvedValueOnce(mockInputs.newBeneficiary) + .mockResolvedValueOnce(mockInputs.paymasterAddress); + (utils.promptWalletSelection as MockedFunction).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as MockedFunction).mockResolvedValue(mockInputs.remark); + + const result = await promptForGaslessTransferBeneficiaryInputs(); + + expect(config.assertGaslessSupportedNetwork).toHaveBeenCalledWith(mockInputs.network); + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.newBeneficiary).toBe(mockInputs.newBeneficiary); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect(result.encryptedWalletPath).toBe('./wallet.json'); + }); + + it('rejects when the resolved network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xregistry' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: '0xregistry', + tokenId: '0xtokenid', + network: 'mainnet', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as MockedFunction).mockImplementation(() => { + throw new Error('Gasless transactions are only supported on: sepolia, amoy'); + }); + + await expect(promptForGaslessTransferBeneficiaryInputs()).rejects.toThrow( + 'Gasless transactions are only supported on: sepolia, amoy', + ); + expect(utils.promptAddress).not.toHaveBeenCalled(); + }); + }); + + describe('runTransferBeneficiaryGasless', () => { + const baseArgs = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + newBeneficiary: '0x0987654321098765432109876543210987654321', + paymasterAddress: '0x1111111111111111111111111111111111111111', + remark: 'Test remark', + encryptionKey: 'doc-id', + encryptedWalletPath: './wallet.json', + }; + + it('runs the gasless transfer and returns the transaction hash', async () => { + const helpers = await import('../../../../src/commands/helpers'); + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + const smartAccountClient = {}; + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient, + }); + (trustvc.transferBeneficiaryGasless as MockedFunction).mockResolvedValue('0xtxhash'); + + const result = await runTransferBeneficiaryGasless(baseArgs); + + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + expect(common.prepareGaslessRun).toHaveBeenCalledWith( + expect.objectContaining({ ...baseArgs, requiredRoles: ['holder'] }), + ); + expect(trustvc.transferBeneficiaryGasless).toHaveBeenCalledWith( + { titleEscrowAddress: '0xescrow' }, + smartAccountClient, + { newBeneficiaryAddress: baseArgs.newBeneficiary, remarks: baseArgs.remark }, + { id: baseArgs.encryptionKey }, + ); + expect(result).toBe('0xtxhash'); + }); + + it('returns undefined and logs the message when prepareGaslessRun rejects with an Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + (common.prepareGaslessRun as MockedFunction).mockRejectedValue( + new Error('not the current holder'), + ); + + const result = await runTransferBeneficiaryGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not the current holder'); + }); + + it('returns undefined and logs the raw value when the gasless call rejects with a non-Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient: {}, + }); + (trustvc.transferBeneficiaryGasless as MockedFunction).mockRejectedValue('raw failure'); + + const result = await runTransferBeneficiaryGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw failure'); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/transfer-holder.test.ts b/tests/commands/gasless/title-escrow/transfer-holder.test.ts new file mode 100644 index 0000000..98b5efe --- /dev/null +++ b/tests/commands/gasless/title-escrow/transfer-holder.test.ts @@ -0,0 +1,217 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessTransferHolderInputs, + runTransferHolderGasless, +} from '../../../../src/commands/gasless/title-escrow/transfer-holder'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + transferHolderGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n: string) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRun: vi.fn(), +})); + +describe('gasless/title-escrow/transfer-holder', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessTransferHolderInputs', () => { + it('returns correctly mapped answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + newHolder: '0x0987654321098765432109876543210987654321', + paymasterAddress: '0x1111111111111111111111111111111111111111', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { id: mockInputs.documentId, tokenRegistry: mockInputs.tokenRegistry }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as MockedFunction) + .mockResolvedValueOnce(mockInputs.newHolder) + .mockResolvedValueOnce(mockInputs.paymasterAddress); + (utils.promptWalletSelection as MockedFunction).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as MockedFunction).mockResolvedValue(mockInputs.remark); + + const result = await promptForGaslessTransferHolderInputs(); + + expect(config.assertGaslessSupportedNetwork).toHaveBeenCalledWith(mockInputs.network); + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.newHolder).toBe(mockInputs.newHolder); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect(result.encryptedWalletPath).toBe('./wallet.json'); + }); + + it('rejects when the resolved network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xregistry' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: '0xregistry', + tokenId: '0xtokenid', + network: 'mainnet', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as MockedFunction).mockImplementation(() => { + throw new Error('Gasless transactions are only supported on: sepolia, amoy'); + }); + + await expect(promptForGaslessTransferHolderInputs()).rejects.toThrow( + 'Gasless transactions are only supported on: sepolia, amoy', + ); + expect(utils.promptAddress).not.toHaveBeenCalled(); + }); + }); + + describe('runTransferHolderGasless', () => { + const baseArgs = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + newHolder: '0x0987654321098765432109876543210987654321', + paymasterAddress: '0x1111111111111111111111111111111111111111', + remark: 'Test remark', + encryptionKey: 'doc-id', + encryptedWalletPath: './wallet.json', + }; + + it('runs the gasless transfer and returns the transaction hash', async () => { + const helpers = await import('../../../../src/commands/helpers'); + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + const smartAccountClient = {}; + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient, + }); + (trustvc.transferHolderGasless as MockedFunction).mockResolvedValue('0xtxhash'); + + const result = await runTransferHolderGasless(baseArgs); + + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + expect(common.prepareGaslessRun).toHaveBeenCalledWith( + expect.objectContaining({ ...baseArgs, requiredRoles: ['holder'] }), + ); + expect(trustvc.transferHolderGasless).toHaveBeenCalledWith( + { titleEscrowAddress: '0xescrow' }, + smartAccountClient, + { holderAddress: baseArgs.newHolder, remarks: baseArgs.remark }, + { id: baseArgs.encryptionKey }, + ); + expect(result).toBe('0xtxhash'); + }); + + it('returns undefined and logs the message when prepareGaslessRun rejects with an Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + (common.prepareGaslessRun as MockedFunction).mockRejectedValue( + new Error('not the current holder'), + ); + + const result = await runTransferHolderGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not the current holder'); + }); + + it('returns undefined and logs the raw value when the gasless call rejects with a non-Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient: {}, + }); + (trustvc.transferHolderGasless as MockedFunction).mockRejectedValue('raw failure'); + + const result = await runTransferHolderGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw failure'); + }); + }); +}); diff --git a/tests/commands/gasless/title-escrow/transfer-owners.test.ts b/tests/commands/gasless/title-escrow/transfer-owners.test.ts new file mode 100644 index 0000000..9f4f4d4 --- /dev/null +++ b/tests/commands/gasless/title-escrow/transfer-owners.test.ts @@ -0,0 +1,225 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessTransferOwnersInputs, + runTransferOwnersGasless, +} from '../../../../src/commands/gasless/title-escrow/transfer-owners'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + transferOwnersGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((n: string) => n), +})); + +vi.mock('../../../../src/commands/gasless/common', () => ({ + prepareGaslessRun: vi.fn(), +})); + +describe('gasless/title-escrow/transfer-owners', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('promptForGaslessTransferOwnersInputs', () => { + it('returns correctly mapped answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + newOwner: '0x1111111111111111111111111111111111111111', + newHolder: '0x0987654321098765432109876543210987654321', + paymasterAddress: '0x2222222222222222222222222222222222222222', + remark: 'Test remark', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { id: mockInputs.documentId, tokenRegistry: mockInputs.tokenRegistry }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as MockedFunction) + .mockResolvedValueOnce(mockInputs.newOwner) + .mockResolvedValueOnce(mockInputs.newHolder) + .mockResolvedValueOnce(mockInputs.paymasterAddress); + (utils.promptWalletSelection as MockedFunction).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as MockedFunction).mockResolvedValue(mockInputs.remark); + + const result = await promptForGaslessTransferOwnersInputs(); + + expect(config.assertGaslessSupportedNetwork).toHaveBeenCalledWith(mockInputs.network); + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.newOwner).toBe(mockInputs.newOwner); + expect(result.newHolder).toBe(mockInputs.newHolder); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect(result.encryptedWalletPath).toBe('./wallet.json'); + }); + + it('rejects when the resolved network is not gasless-supported', async () => { + const mockDocument = { id: 'doc-id', tokenRegistry: '0xregistry' }; + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + (utils.promptAndReadDocument as MockedFunction).mockResolvedValue(mockDocument); + (utils.extractDocumentInfo as MockedFunction).mockResolvedValue({ + tokenRegistry: '0xregistry', + tokenId: '0xtokenid', + network: 'mainnet', + documentId: 'doc-id', + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as MockedFunction).mockImplementation(() => { + throw new Error('Gasless transactions are only supported on: sepolia, amoy'); + }); + + await expect(promptForGaslessTransferOwnersInputs()).rejects.toThrow( + 'Gasless transactions are only supported on: sepolia, amoy', + ); + expect(utils.promptAddress).not.toHaveBeenCalled(); + }); + }); + + describe('runTransferOwnersGasless', () => { + const baseArgs = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + newOwner: '0x1111111111111111111111111111111111111111', + newHolder: '0x0987654321098765432109876543210987654321', + paymasterAddress: '0x2222222222222222222222222222222222222222', + remark: 'Test remark', + encryptionKey: 'doc-id', + encryptedWalletPath: './wallet.json', + }; + + it('runs the gasless transfer and returns the transaction hash', async () => { + const helpers = await import('../../../../src/commands/helpers'); + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + const smartAccountClient = {}; + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient, + }); + (trustvc.transferOwnersGasless as MockedFunction).mockResolvedValue('0xtxhash'); + + const result = await runTransferOwnersGasless(baseArgs); + + expect(helpers.validateAndEncryptRemark).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + expect(common.prepareGaslessRun).toHaveBeenCalledWith( + expect.objectContaining({ ...baseArgs, requiredRoles: ['holder', 'beneficiary'] }), + ); + expect(trustvc.transferOwnersGasless).toHaveBeenCalledWith( + { titleEscrowAddress: '0xescrow' }, + smartAccountClient, + { + newBeneficiaryAddress: baseArgs.newOwner, + newHolderAddress: baseArgs.newHolder, + remarks: baseArgs.remark, + }, + { id: baseArgs.encryptionKey }, + ); + expect(result).toBe('0xtxhash'); + }); + + it('returns undefined and logs the message when prepareGaslessRun rejects with an Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + (common.prepareGaslessRun as MockedFunction).mockRejectedValue( + new Error('not the current holder and beneficiary'), + ); + + const result = await runTransferOwnersGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('not the current holder and beneficiary'); + }); + + it('returns undefined and logs the raw value when the gasless call rejects with a non-Error', async () => { + const common = await import('../../../../src/commands/gasless/common'); + const trustvc = await import('@trustvc/trustvc'); + + (common.prepareGaslessRun as MockedFunction).mockResolvedValue({ + network: 'sepolia', + titleEscrowAddress: '0xescrow', + callerAddress: '0xcaller', + smartAccountClient: {}, + }); + (trustvc.transferOwnersGasless as MockedFunction).mockRejectedValue('raw failure'); + + const result = await runTransferOwnersGasless(baseArgs); + + expect(result).toBeUndefined(); + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('raw failure'); + }); + }); +}); diff --git a/tests/commands/gasless/token-regitsry/mint.test.ts b/tests/commands/gasless/token-regitsry/mint.test.ts new file mode 100644 index 0000000..9249aa4 --- /dev/null +++ b/tests/commands/gasless/token-regitsry/mint.test.ts @@ -0,0 +1,328 @@ +import { beforeEach, describe, expect, it, vi, MockedFunction } from 'vitest'; +import { + promptForGaslessMintInputs, + runMintGasless, +} from '../../../../src/commands/gasless/token-regitsry/mint'; +import { TokenRegistryMintGaslessCommand } from '../../../../src/commands/gasless/types'; + +vi.mock('signale', async (importOriginal) => { + const originalSignale = await importOriginal(); + return { + ...originalSignale, + Signale: class MockSignale { + await = vi.fn(); + success = vi.fn(); + error = vi.fn(); + info = vi.fn(); + warn = vi.fn(); + constructor() {} + }, + error: vi.fn(), + info: vi.fn(), + success: vi.fn(), + warn: vi.fn(), + default: { + await: vi.fn(), + success: vi.fn(), + error: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + }, + }; +}); + +vi.mock('@trustvc/trustvc', async () => { + const actual = await vi.importActual('@trustvc/trustvc'); + return { + ...actual, + mintGasless: vi.fn(), + }; +}); + +vi.mock('../../../../src/utils', async (importOriginal) => { + const originalUtils = await importOriginal(); + return { + ...originalUtils, + extractDocumentInfo: vi.fn(), + getErrorMessage: vi.fn((e: any) => (e instanceof Error ? e.message : String(e))), + getEtherscanAddress: vi.fn(() => 'https://etherscan.io'), + promptAddress: vi.fn(), + promptAndReadDocument: vi.fn(), + promptRemark: vi.fn(), + promptWalletSelection: vi.fn(), + verifyDocumentSignature: vi.fn().mockResolvedValue(undefined), + }; +}); + +vi.mock('../../../../src/utils/wallet', () => ({ + getWalletOrSigner: vi.fn(), +})); + +vi.mock('../../../../src/commands/helpers', () => ({ + validateAndEncryptRemark: vi.fn().mockReturnValue('encrypted-remark'), +})); + +vi.mock('../../../../src/commands/gasless/config', () => ({ + assertGaslessSupportedNetwork: vi.fn((network: string) => network), +})); + +vi.mock('../../../../src/commands/gasless/client', () => ({ + buildGaslessSmartAccountClient: vi.fn(), +})); + +vi.mock('../../../../src/commands/gasless/eligibility', () => ({ + checkGaslessMintEligibility: vi.fn(), +})); + +describe('gasless/token-registry mint', () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.resetAllMocks(); + }); + + describe('promptForGaslessMintInputs', () => { + it('should return correct answers for valid inputs', async () => { + const mockInputs = { + network: 'sepolia', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + beneficiary: '0x1111111111111111111111111111111111111111', + holder: '0x2222222222222222222222222222222222222222', + paymasterAddress: '0x3333333333333333333333333333333333333333', + remark: 'Test remark', + }; + + const mockDocument = { id: mockInputs.documentId, tokenRegistry: mockInputs.tokenRegistry }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (utils.promptAddress as any) + .mockResolvedValueOnce(mockInputs.beneficiary) + .mockResolvedValueOnce(mockInputs.holder) + .mockResolvedValueOnce(mockInputs.paymasterAddress); + (utils.promptWalletSelection as any).mockResolvedValue({ + encryptedWalletPath: './wallet.json', + }); + (utils.promptRemark as any).mockResolvedValue(mockInputs.remark); + + const result = await promptForGaslessMintInputs(); + + expect(config.assertGaslessSupportedNetwork).toHaveBeenCalledWith(mockInputs.network); + + expect(utils.promptAddress).toHaveBeenNthCalledWith(1, 'beneficiary', 'initial recipient'); + expect(utils.promptAddress).toHaveBeenNthCalledWith(2, 'holder', 'initial holder'); + expect(utils.promptAddress).toHaveBeenNthCalledWith( + 3, + 'paymaster', + 'PlatformPaymaster contract that will sponsor this gasless transaction', + ); + + expect(result.network).toBe(mockInputs.network); + expect(result.tokenRegistryAddress).toBe(mockInputs.tokenRegistry); + expect(result.tokenId).toBe(mockInputs.tokenId); + expect(result.beneficiary).toBe(mockInputs.beneficiary); + expect(result.holder).toBe(mockInputs.holder); + expect(result.paymasterAddress).toBe(mockInputs.paymasterAddress); + expect(result.remark).toBe(mockInputs.remark); + expect(result.encryptionKey).toBe(mockInputs.documentId); + expect((result as any).encryptedWalletPath).toBe('./wallet.json'); + }); + + it('should throw and not prompt for beneficiary/holder/paymaster when network is unsupported', async () => { + const mockInputs = { + network: 'mainnet', + tokenRegistry: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + documentId: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + }; + + const mockDocument = { id: mockInputs.documentId, tokenRegistry: mockInputs.tokenRegistry }; + + const utils = await import('../../../../src/utils'); + const config = await import('../../../../src/commands/gasless/config'); + + (utils.promptAndReadDocument as any).mockResolvedValue(mockDocument); + (utils.verifyDocumentSignature as any).mockResolvedValue(undefined); + (utils.extractDocumentInfo as any).mockResolvedValue({ + tokenRegistry: mockInputs.tokenRegistry, + tokenId: mockInputs.tokenId, + network: mockInputs.network, + documentId: mockInputs.documentId, + registryVersion: 'v5', + }); + (config.assertGaslessSupportedNetwork as any).mockImplementation(() => { + throw new Error('Gasless transactions are only supported on: sepolia, amoy.'); + }); + + await expect(promptForGaslessMintInputs()).rejects.toThrow( + 'Gasless transactions are only supported on: sepolia, amoy.', + ); + + expect(utils.promptAddress).not.toHaveBeenCalled(); + expect(utils.promptWalletSelection).not.toHaveBeenCalled(); + expect(utils.promptRemark).not.toHaveBeenCalled(); + }); + }); + + describe('runMintGasless', () => { + let mintGaslessMock: MockedFunction; + let getWalletOrSignerMock: MockedFunction; + let checkGaslessMintEligibilityMock: MockedFunction; + let buildGaslessSmartAccountClientMock: MockedFunction; + let validateAndEncryptRemarkMock: MockedFunction; + + const baseArgs: TokenRegistryMintGaslessCommand = { + network: 'sepolia', + tokenRegistryAddress: '0x1234567890123456789012345678901234567890', + tokenId: '0xabcdef1234567890', + beneficiary: '0x1111111111111111111111111111111111111111', + holder: '0x2222222222222222222222222222222222222222', + paymasterAddress: '0x3333333333333333333333333333333333333333', + remark: 'Test remark', + encryptionKey: 'urn:uuid:019b9ce6-5048-7669-b1bf-e15d1f085692', + encryptedWalletPath: './wallet.json', + }; + + beforeEach(async () => { + const utils = await import('../../../../src/utils'); + (utils.getErrorMessage as any).mockImplementation((e: any) => + e instanceof Error ? e.message : String(e), + ); + + const trustvcModule = await import('@trustvc/trustvc'); + mintGaslessMock = trustvcModule.mintGasless as MockedFunction; + + const walletModule = await import('../../../../src/utils/wallet'); + getWalletOrSignerMock = walletModule.getWalletOrSigner as MockedFunction; + + const eligibilityModule = await import('../../../../src/commands/gasless/eligibility'); + checkGaslessMintEligibilityMock = + eligibilityModule.checkGaslessMintEligibility as MockedFunction; + + const clientModule = await import('../../../../src/commands/gasless/client'); + buildGaslessSmartAccountClientMock = + clientModule.buildGaslessSmartAccountClient as MockedFunction; + + const helpersModule = await import('../../../../src/commands/helpers'); + validateAndEncryptRemarkMock = helpersModule.validateAndEncryptRemark as MockedFunction; + validateAndEncryptRemarkMock.mockReturnValue('encrypted-remark'); + + const configModule = await import('../../../../src/commands/gasless/config'); + (configModule.assertGaslessSupportedNetwork as any).mockImplementation( + (network: string) => network, + ); + + getWalletOrSignerMock.mockResolvedValue({ privateKey: '0xprivatekey' }); + checkGaslessMintEligibilityMock.mockResolvedValue(undefined); + buildGaslessSmartAccountClientMock.mockResolvedValue({ + smartAccountClient: { sendTransaction: vi.fn() }, + smartAccountAddress: '0xsmartaccount', + }); + mintGaslessMock.mockResolvedValue('0xtxhash'); + }); + + it('should throw and log an error when the resolved wallet has no privateKey (AWS KMS signer)', async () => { + getWalletOrSignerMock.mockResolvedValue({ provider: {} }); + + const result = await runMintGasless(baseArgs); + + expect(result).toBeUndefined(); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith( + 'Gasless transactions require direct access to a private key (encrypted wallet file, --key, --key-file, or OA_PRIVATE_KEY). AWS KMS signers are not supported.', + ); + expect(checkGaslessMintEligibilityMock).not.toHaveBeenCalled(); + expect(buildGaslessSmartAccountClientMock).not.toHaveBeenCalled(); + expect(mintGaslessMock).not.toHaveBeenCalled(); + }); + + it('should successfully run the gasless mint end to end', async () => { + const result = await runMintGasless(baseArgs); + + expect(validateAndEncryptRemarkMock).toHaveBeenCalledWith( + baseArgs.remark, + baseArgs.encryptionKey, + ); + + expect(getWalletOrSignerMock).toHaveBeenCalledWith({ + network: baseArgs.network, + encryptedWalletPath: baseArgs.encryptedWalletPath, + key: baseArgs.key, + keyFile: baseArgs.keyFile, + }); + + expect(checkGaslessMintEligibilityMock).toHaveBeenCalledWith({ + network: baseArgs.network, + paymasterAddress: baseArgs.paymasterAddress, + registryAddress: baseArgs.tokenRegistryAddress, + }); + + expect(buildGaslessSmartAccountClientMock).toHaveBeenCalledWith({ + network: baseArgs.network, + privateKey: '0xprivatekey', + paymasterAddress: baseArgs.paymasterAddress, + }); + + expect(mintGaslessMock).toHaveBeenCalledWith( + { + paymasterAddress: baseArgs.paymasterAddress, + tokenRegistryAddress: baseArgs.tokenRegistryAddress, + }, + expect.anything(), + { + beneficiaryAddress: baseArgs.beneficiary, + holderAddress: baseArgs.holder, + tokenId: baseArgs.tokenId, + remarks: baseArgs.remark, + }, + { id: baseArgs.encryptionKey }, + ); + + expect(result).toBe('0xtxhash'); + + const signaleModule = await import('signale'); + expect(signaleModule.success).toHaveBeenCalledWith(expect.stringContaining(baseArgs.tokenId)); + expect(signaleModule.info).toHaveBeenCalledWith(expect.stringContaining('0xtxhash')); + }); + + it('should log an error and return undefined when eligibility check rejects with an Error', async () => { + checkGaslessMintEligibilityMock.mockRejectedValue( + new Error('This account cannot mint gaslessly: not authorized'), + ); + + const result = await runMintGasless(baseArgs); + + expect(result).toBeUndefined(); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith( + 'This account cannot mint gaslessly: not authorized', + ); + expect(buildGaslessSmartAccountClientMock).not.toHaveBeenCalled(); + expect(mintGaslessMock).not.toHaveBeenCalled(); + }); + + it('should log an error and return undefined when mintGasless rejects with a non-Error', async () => { + mintGaslessMock.mockRejectedValue('String error message'); + + const result = await runMintGasless(baseArgs); + + expect(result).toBeUndefined(); + + const signaleModule = await import('signale'); + expect(signaleModule.error).toHaveBeenCalledWith('String error message'); + }); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index d6613e0..9b17db7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,9 @@ { "compilerOptions": { "target": "ES2020", - "module": "commonjs", + "module": "esnext", "lib": ["ES2020"], - "moduleResolution": "node", + "moduleResolution": "bundler", "esModuleInterop": true, "skipLibCheck": true, "strict": true, diff --git a/w3c-website-fixtures/signed/signed_vc.json b/w3c-website-fixtures/signed/signed_vc.json new file mode 100644 index 0000000..facaf84 --- /dev/null +++ b/w3c-website-fixtures/signed/signed_vc.json @@ -0,0 +1,47 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://w3id.org/security/data-integrity/v2" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "BillOfLadingCarrier" + ], + "blNumber": "232323", + "scac": "MAEU" + }, + "type": [ + "VerifiableCredential" + ], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 1337 + }, + "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "tokenId": "31884d9f2926120a5779cad07bc5c83ee4ddcf99e88307c8bddf78509cfb2467" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2022-04-28T03:31:39.440Z", + "id": "urn:uuid:019e9559-79e7-7332-aeea-8a661a265109", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-06-05T01:15:29Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAbJBU78Z228przCwJVyut6f6aSfJcs1id3fksuyDmsmpRRcPwoQcr6GHvy8zel8xQW0uBK9e-FXtK_blEHIY3JFgjgCQCFK-FrPumD5dYNQ7dAxaEuExm_aVZClEqRszUFPxMlxNYIK7IR8a3ErSikRe7ECZCuMOraaQc4hGgM5-9-BJ4OnLzjlhAeM8LkRLPknB3RRoVm0NBKfW1Bf-YhxKrI6JvCVAV_cWT9kBWBPlCW8JEJl1D5dyRKMyJAHGA5_MTlEOJeWLGYVhAOF9hcpFdJwTVwYEnWVChcOnM-jNtox9AmVubDVnr2w1QW3lu4Zi04JVY59MOK3KxqbM9liEdAfGxqVCXyIxDv1hAWR3BcA58YBMv5u3M2qYiYsitam7X4GewnSqTqTx_UMJiTF58uLAKFiFpWLZCpTLZPWh9-ucPZ0RW__7sr1tOtlhAbxtAIKsH4K0OYRXb52sZuUFp4qz57aGpxPuyHD3O_mYNPxX837ohqvVsAxT1Ra_C1iGvE5wQ_-qn-TFjkFd8M1hAa7sb8ETWCX4wb-GjJD_tsapJx-7Cju8Q1K7j0axQTS_o2PLmKF1g9s9-_zcs0xw-4eTcc1SfgVueuj6_w2IQxVhAwcWawns62ok0D0QHw8q0_D5PbNGNI2J_4XxfQu9N4bCV1ALjZCZqrNxrp3Yjlo83aeAp1cy7iFGjdGDHE8q35FhAHTNrrOepfgqXiDNnAu2vjxPpdf4B2E51EHotVWMe-xSvUf9etm1FcT7UhwA2oKHUSkarJLja0Xp7_Jy8Hxz-KFhAAyX05QrrQ7Sksd3FTzOVdSO4fvxK-Fb6LqkcU_1XlfdGUuXdknEQ5PczV-hahi4ZundhwBmEFOe5136JNo4ctlhAq_U8zntQlRXIT8Xu5CbWOFYXA6F8VRYaboxRyRc2sMhlhCU6RqDQPVNBS5Ck0HMIxqiotWE7Meh1tCmkLXc11lhAtuH8kXiQD6vdx27-5yhKZBY5bDcAat5RlIaG6rrhCOzqfxwXEAHlYwyw0EMutNBlRjZG1MhQoqupjxA3tGACg1hAijyXKUtd0szxLEy1ZUtyJ-2MprqPgXUDam99k647G_RZbP_HBGgskECl7NOzWGByZ5K96fBeJ3sxA9tnRO18_1hAhdYPqxdG9FUok1LNTjm8ghO_P_6mUnZk99u5YWD1z1cUAodjzQ97elIYLTPUgy4Iar-a2KHdSZXbdK2MpJDh1FhAZQr9ztpTF9QW1JA-CTEcOz0MKddqvIFFiGO2vPmXKm0Q5FEaWR3pRRJWTLT7nY64wsd_2ZH572maCA6AbLSPllhA9FwWgEkt36ZEAAB6Y-2GXtg1lGrz6ae2xhmhw2p4SfFyw7WoWAv1eRcHYcROKmdHKIRQnkj_OUDiggaG7p4lxIJnL2lzc3VlcmovdmFsaWRGcm9t" + } +} \ No newline at end of file diff --git a/wr/didKeyPairs.json b/wr/didKeyPairs.json new file mode 100644 index 0000000..11ec891 --- /dev/null +++ b/wr/didKeyPairs.json @@ -0,0 +1,8 @@ +{ + "@context": "https://w3id.org/security/multikey/v1", + "id": "did:web:trustvc.github.io:did:1#multikey-1", + "type": "Multikey", + "controller": "did:web:trustvc.github.io:did:1", + "publicKeyMultibase": "zDnaemDNwi4G5eTzGfRooFFu5Kns3be6yfyVNtiaMhWkZbwtc", + "secretKeyMultibase": "z42tmUXTVn3n9BihE6NhdMpvVBTnFTgmb6fw18o5Ud6puhRW" +} diff --git a/wr/operative/signed_vc.json b/wr/operative/signed_vc.json new file mode 100644 index 0000000..6bc2cf3 --- /dev/null +++ b/wr/operative/signed_vc.json @@ -0,0 +1,109 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "BillOfLadingCarrier" + ], + "shipperName": "MAERSK Co.", + "shipperAddressStreet": "101 ORCHARD ROAD", + "shipperAddressCountry": "Singapore", + "toOrderOfText": "TO ORDER", + "consigneeName": "ABC Natural Foods Inc.", + "notifyPartyName": "Amanda Green – Import Manager, ABC Natural Foods", + "packages": [ + { + "packagesDescription": "Organic Cashew Kernels (25kg bags)", + "packagesMeasurement": "100 Bags", + "packagesWeight": "2.65 MT" + }, + { + "packagesDescription": "Roasted Chickpeas (20kg packs)", + "packagesMeasurement": "60 Bundles", + "packagesWeight": "\t1.3" + } + ], + "blNumber": "SGCNM21566325", + "scac": "SGPU", + "carrierName": "Vikram Rao", + "logo": "data:image/png;base64,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", + "onwardInlandRouting": "Rail to Johor Port → Trucking to final inland delivery point (Long Beach, USA)", + "vessel": "MAERSK NATALIA", + "voyageNo": "7831W", + "portOfLoading": "Singapore", + "portOfDischarge": "LOS ANGELES, CA", + "placeOfReceipt": "JURONG PORT, SINGAPORE", + "placeOfDelivery": "Long Beach Distribution Center, CA", + "placeOfIssueBL": "Singapore", + "numberOfOriginalBL": "3", + "dateOfIssueBL": "2025-06-05", + "shippedOnBoardDate": "2025-06-05", + "signForTermsAndCondition": "The carrier accepts the goods as described in good order and condition for carriage under the terms stated herein and subject to the Carrier's standard Bill of Lading Terms and Conditions.", + "signedForCarrierText": "John Doe", + "carrierSignature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "termsOfCarriage": "All shipments are subject to the Hague-Visby Rules. The carrier assumes liability only for loss or damage due to its own negligence. Responsibility ceases at the time goods are delivered to the consignee or their agent. Claims must be submitted within 7 working days of delivery.", + "attachments": [ + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "blank.pdf", + "mimeType": "application/pdf" + }, + { + "data": "e30=", + "filename": "empty.json", + "mimeType": "application/json" + }, + { + "data": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "sample.pdf", + "mimeType": "application/pdf" + }, + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "mimeType": "application/pdf" + } + ] + }, + "type": [ + "VerifiableCredential" + ], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fbill-of-lading-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "ETH", + "chainId": 11155111 + }, + "tokenRegistry": "0x716a589E80E83360B288df6EfBbefcC00fDfd95A", + "tokenId": "7f2cb8f7ea323044f5b1d1e5e4c09dd269cf320c844ad059dfbbabf8699cd72e" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2025-06-05T11:29:32.860Z", + "id": "urn:uuid:019ff92b-a165-7dd1-8c14-08b7cbe3de0b", + "proof": { + "type": "DataIntegrityProof", + "created": "2026-08-13T03:30:13Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhArR5HuhH5Rbzrh1MkVnIpHaQo4SDZA2I3I-VGMQSKDtV7Nu0LKB2PYoNoAjVHe2s9PRqadyDhuI8EhPBBRkkYN1gjgCQDNecCFfpepqb0sbyDK1QZoJlWO12I8yLgHZgvjTOrLYNYIBmUwdyULWF_VnGIM-24qu5Dhi1oLLkWrIKfHx4QbIJHmDlYQLJh3aKld7isT8eLqN4p4EP9GbPL2LGdMQLeAsZ1RhLZUZvM_LZgy9pyDaulYbtN3cr7Q6osIEzJBHazj8f654ZYQDl72IsztXWN7EQ0vZfszrYNLgs-3tZeJuc8eQ9hW63w1fYEER7jqbfIrGXx5j1tIpL2nYiAHDJoT-wYxRka__tYQFEzptwWuqU8Ru2G9Hg_QSbgTnynXW8W_wKenpROYIQ9tsjpEvIXZdtEQ8VGHg8khgOdpENsqEwttaJuXPfHtaNYQBw5E6ev_2AmcYAKGAM5yWZxxY5sP8RN--IPHvwiDVR8T8RYvIyO--uKbd2VbnB4Astqn8mFPLKs7p9XBHoXILJYQHF84n4_RdbnkEovl-3TbBSmleZlrXnGUsaGpvh8d4Uo_r3WG1qPiZwIuVz23AefpDkNtI0-0NusbXnxFk5mmPpYQP-sQpvPZ7k_uYjZsp81LMkhPu2At09ff4GHe48A0nVX8a2GutDagnY4EJ9do7cbbQr4oZVi050asG8V6ABZH5xYQABgxArI1qOD7Kl0LnYERhZ_HVeXbxW6pNo1lZ7G1gFGz5PtWnOsLVlObt0cLe16MTwnPM4KNjpFiGKSmefinDtYQE58Tk9jvmw-1hgqEpSKtycJc0Y7lKxnjHRgPnIYG5TXMhCEpjMtPP6cSS1dWVMqmYKQ9Oi0gPkMdducKGqfjBNYQFCnvA_s5V7EyTbJUEBTBZ7yiAsLmmPzsfq9ilIh276NI1ZT4uaC1pfV3RhbUr9CuPOmMqvi3xpBYFTuAFXPUUxYQEtF_0J7H0RyxpENUCnfFsrEsVikK2WwdIZrePhRCiKkV0S0oiXuCFJ-vy76v_Dn7BU67qFYtk6N6awo34KbXRBYQOIzGY1J5MymdOiQROjVrzKLqD9JpLLy9C4rN3is5Ifm4n-m-GsVWNrCeEWEU58AfdFTf2Y0fJ90m2hB6UiFttRYQFJr2-u0Tm1eo9ykE3P-l0R9gOAYdk8Ga3uVKHmcQl2P2Q1a4uybB4WvgiugIkYqIqso8B1wxU6i-f90y9wE-XJYQMs6TbUqal_sC1cESu2ikv12Za7kT3tUhbwCJM-lEZLHYTG3e7yCMzK-nR_tB_6phyqo77Gr7_h490FUMiFegWNYQL8Dcuq92zT1gEW5lvUvzpZ8Gdn0sgdJ4qyWvT-H7vqNkb0uqKy2WeLwuv2w32VU_tkAjM770oZWWf0lpfY6rbdYQIZikfYstNFeN11OtTcTFoQagu2g51RT9g24EzCJseFgwWxLRKjDSyUtpkcN58zcW2uLEtzpnTwJmSNDqOlVNlpYQAHyC0EyI4NiNuBy5KkYqlX-odqMqfwRH5jrZozYKXv9tWES1CzylYFt2G0thAFOzXSF4xuYZfo5CbH4CUqp-KdYQMnGbWmy3Rm5uAKYyV76rE4lFn8aTNQXuMFbHLv_SaN54wOLPTNohQ9my5flUH1iwpFKZwN0q4iYxj58pxdBdlZYQJote54akQ7n0qPxdCHH8QEYRUsMP-hfGC5WkeDchPcK3zizllD2brg28qXLIZBz3EVQtUkzZPSSLW0qO0rlD2VYQAU1ALhEjwhHjOTpkzHtoYOtvDKigtDs1ef8vOJU5dbL6d0MdTJSbw9j78Iq3RT3g3TiR7-vBDJF4U0vDCHjIaxYQGvqdfoNymSZN7HUhY-ooU6uepQ6rlY2_p2f2ikis_79Y-OZfegqG4EG4N_j6415LA4thp7XAWchWVsdoUeWRFFYQJA6PZeJHHftOgm8UOYIkKIbYd-LAyPv3qpo_TKX6mJ4gsPrVcTZzZ-Lsuf1-8kY5fq2bmnP5dQvYTF6C1OW8E9YQJ8os7ot-hqaeWney-Hvezt1MNmjLSv6UDYdfCzkhiKkuxuWGI3qn9mDN9VebvAtMf8JdJR2zlVmlKEn5NPgwa1YQMO6YlLrM4fGbKl5wW4QN7-rCf5bGFBbxo1KPXzBo_RuAY36lVkq0Kqgs4jvw_LmCPw9chvjOvgjUAlmYFFVt0FYQHgA1EjF-8UG3QOyeujK5xbyUdLbcbWcqTc2wOs6xphRYxIe7VNjX9IL-nV_E6faPRXf8TXuvfNdoU-ptVOsaoFYQO_2FFLMbFv4k2AhSw0WLKrqXo67EWlsAAXxRWYaP-Yp8AGvp0os9yH7hQAmR8iqJ7Qgx2XV0spq_P_kPraKLslYQOBRssIm31McNhAJCLfHYLX__W_MYov4wQ_msjEVGYhaLAqbJmyxkv5jIoBBYsby74bcqD0Adsuz7Sss7mTcWzBYQOmoMbrZSxXfhKmtIQ4zsHqzqlGF7O8mDabpBdBfQif96yjWTkR2oPW4K1BaS7MVisAzHukGfPdgWroDI0SshDFYQJyKekenojrunnIMl2ev8Qja3hD4sguBiCuqPtAQiJwV448Tt0kuQBxlOEi9s5WRUoH3HfNxdLi6pGzbz-n_3M5YQC_bgTfJrz9wL46weLpfjghWgDUw_w20shMlUISSnKEXFLnDeTKs33m4mRxOceH79EcCZdqKHaeaQTPpyXMrNslYQErI1C6k5tEtUC7Q1SaxcwAISx4XSUA2xovwiBCDp0dPDiz9WHTrXvsn3YDBBWjZE9q1udsNcFTflL8lZt15UBNYQEmw9eVk-uB1vlrHLCDczFsxTK0f_4UTJk2qVegX29F159dyx_b3gsYQCsRcg7vWOJHsrV8Bdtq51hbeolLW1CJYQHROd16mvUp38tKUtc6Qm1A0jB-skOayZ6NpWSBGRdKEDchzDnmF7Ydquwi7H-l7rd7MWQ3QHHHwtYE4DmdHn_lYQF6HcPct2ZsJpAEgsYfdhupCeoAMjWJ6NhPn-RiaxfTxztBDEmNeqImy6JLM2KJ5Sk8CyjwooLn2t7ETVNggZWZYQHscAwPabSWPfD4-WSgtJpoaA1x1w3LGbXytX4Cu98f7qWbF-mvErEJHiTksP8A5wgFk4gDNXsT-olYwlUH_ahZYQA8kkj-tqzoY_FBxFvfxT56SN9ggNyNvT0eKLnVHsTrVg34fP3ybX-A3--Y6Wxsq4v3JAuYtZQ6dqXi6X06IOx9YQJpBxAwX-hp-q51HNwImS4hm9UvUYWMqEyFmP60xO3korTDWjn-msejT_oXDGmV-2YsdrHmMEpkxwYurxXvneDdYQIYSl63EYABXUmsyx1TWJZKna1qZwZLDHFQ_VaGA1Wakk0UUJ3z9TalCfiWAimqRjiOXTVuoE80ekVHpXGBCkedYQNi0hvgRh7L2PLgxWs-k1EdNGHKOEOlBFaF3CZE5AL00ehGan192NBNa44Mmh7H33h098WBWGubZtvpPDqgQWTlYQHrhIaHYG_AoVSGGPhskZQ0bMNN7-XVQ3KdUtr7u_hU8jQM6NNb3x_IzL5XKhe7A6i8Yw6GaZLs7bU4upTZUUgNYQBFYf_TuCeDAwBCNd-TpdFSDVfq64FqaJlgpWpGO5g2kBVXUVUBpX34A2sNivGrKqTcG2HsEAntw0RQWKALJzvRYQBRobmDyeN785I3CnBX9qJr_3wT9CJJdQBro3fRsAM7SN1q1J89Teop0OVLW3kw6efK1lIwlrxrqDG4bYsNutI1YQDzyWnALaDZUwxMK7j6Qp2e8u-omYyo3pZzjGrQEw-lk1w9rHQ8063LddcEs189ydh9vROl_fLOOM9MuXMJh65JYQFnFfKh77o8v57GvIkQiLGVKqCOtQdUME-NNK7aSj7hRTAfl6w9VmT6n6KdtouLj4EqmqA7ugAGItZ_8bkwT8l5YQGI7SjlQm5jAhlKKoyo3KHyfGxq93GQfu7AW0wxWlp9JeS0mqyn3t2FsdosgzaJRH8goy9q3dY-MPb3hi48dj8xYQMpMYHgfYRYf1a9vIwlyHF_LAYzuuX1XhS_8Cuig-7_GVAv_P4J3zoEltPk82SJoE9X2VHz5TzACdWZcki916iNYQKkym6OTVSrrdXQEdQACDmApkv85f8gpM9PR4NrVy_upbppWvpERTv0ePg9AxuBfBIcv59-EQcn7XAbzes2Le-tYQEaBTiTnftHM0Rpbc0gRaL5GOTbIFm0wcr5BwgZwJT6ZHHs03H2IAD7bv1CWS0u3wrpjTFoehmcnGnWUcY1tbuJYQLPFAEFWwwNo6mEzr0wRu-TcOjZlfAONRa9WnCVu9axEJO20Dw_X3MBAZe32muzXrIPlmdReEoArk_s6g_2HmjRYQEn4gyi8Pnc2ky_Uo7uh981RtfoU8HiEolM1RXRwdF9XI8Zvs77DCCpqtcdhdf0XpQ6U7efWDSHCIYy74b52451YQICAcMR6N9d08FGJiDtFKCItZ-BNL3m31DANU42WZ0CwRbHsEaSqwcM0qFCqj66wqKMiz4bhDNgEjPEBIRhnmdRYQBeEVnsHkM7qsPlJl2sUHWWnIa5s_aemIy5Niu1juErnshNz655yQW-ViIalRndYbsr1vCjrCROS_222RLOSTTZYQN73j4dL8VqJRLITcQI4Ft-LZiSTNbMHKbROTzqwMWK-jtFTuAX4Em5G8ZvXCpkPtNtS0mGBhsjaPXiyRbAifaZYQE_LUE6JLYMszfo4L7a684P4lQCk2uh5B27dNvFXe52tLUP1huk53PuMi3NDdBEFSwQwGd3UcSI15-CC4_juEvlYQC1VZF5GTqULv4yOvja87SoKZ44MI0wBK8XeQs9I1JDR285OG_DF6q6GX9f3jrKHx0_c_mOdMdS1fjVT_W7xngtYQKm461jENRUwd3cpTicnAfhgm-4XPFTb2JGUeHlCWJcxXTwekQEk72XUTzjy517OlIu2K8mpYbeMn-6vafLMKA9YQETUu9OtpkjhoZ4WVeg9ydtDzuPDEcCL-s8w8m4oZQadZ8hDw3Zdh97Gd7TqufN-aLbJwX09BdlM7nJNUFBOUG1YQNZ7zazKHuLdxeeUaBKTH3T73sttgnnQ92WEW0F2iEY5Bgt_2hqJTYBIgY7MrSDWoZBkZd73kd2zGCokENMUr3yDZy9pc3N1ZXJqL3ZhbGlkRnJvbXEvY3JlZGVudGlhbFN0YXR1cw" + } +} \ No newline at end of file diff --git a/wr/operative/vc.json b/wr/operative/vc.json new file mode 100644 index 0000000..d3c81f2 --- /dev/null +++ b/wr/operative/vc.json @@ -0,0 +1,88 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["BillOfLadingCarrier"], + "shipperName": "MAERSK Co.", + "shipperAddressStreet": "101 ORCHARD ROAD", + "shipperAddressCountry": "Singapore", + "toOrderOfText": "TO ORDER", + "consigneeName": "ABC Natural Foods Inc.", + "notifyPartyName": "Amanda Green – Import Manager, ABC Natural Foods", + "packages": [ + { + "packagesDescription": "Organic Cashew Kernels (25kg bags)", + "packagesMeasurement": "100 Bags", + "packagesWeight": "2.65 MT" + }, + { + "packagesDescription": "Roasted Chickpeas (20kg packs)", + "packagesMeasurement": "60 Bundles", + "packagesWeight": "\t1.3" + } + ], + "blNumber": "SGCNM21566325", + "scac": "SGPU", + "carrierName": "Vikram Rao", + "logo": "data:image/png;base64,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", + "onwardInlandRouting": "Rail to Johor Port → Trucking to final inland delivery point (Long Beach, USA)", + "vessel": "MAERSK NATALIA", + "voyageNo": "7831W", + "portOfLoading": "Singapore", + "portOfDischarge": "LOS ANGELES, CA", + "placeOfReceipt": "JURONG PORT, SINGAPORE", + "placeOfDelivery": "Long Beach Distribution Center, CA", + "placeOfIssueBL": "Singapore", + "numberOfOriginalBL": "3", + "dateOfIssueBL": "2025-06-05", + "shippedOnBoardDate": "2025-06-05", + "signForTermsAndCondition": "The carrier accepts the goods as described in good order and condition for carriage under the terms stated herein and subject to the Carrier's standard Bill of Lading Terms and Conditions.", + "signedForCarrierText": "John Doe", + "carrierSignature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "termsOfCarriage": "All shipments are subject to the Hague-Visby Rules. The carrier assumes liability only for loss or damage due to its own negligence. Responsibility ceases at the time goods are delivered to the consignee or their agent. Claims must be submitted within 7 working days of delivery.", + "attachments": [ + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "blank.pdf", + "mimeType": "application/pdf" + }, + { "data": "e30=", "filename": "empty.json", "mimeType": "application/json" }, + { + "data": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "sample.pdf", + "mimeType": "application/pdf" + }, + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "mimeType": "application/pdf" + } + ] + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fbill-of-lading-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { "chain": "ETH", "chainId": 11155111 }, + "tokenRegistry": "0x716a589E80E83360B288df6EfBbefcC00fDfd95A" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2025-06-05T11:29:32.860Z" +} diff --git a/wr/signed_vc.json b/wr/signed_vc.json new file mode 100644 index 0000000..f7537d0 --- /dev/null +++ b/wr/signed_vc.json @@ -0,0 +1,75 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://trustvc.io/context/warehouse-receipt.json", + "https://trustvc.io/context/render-method-context.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json", + "https://w3id.org/security/bbs/v1" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "WAREHOUSE_RECEIPT", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["WarehouseReceipt"], + "warehouseReceipt": "WR-998812-A", + "issuanceDate": "2025-06-06", + "ourRef": "ORF/SG/2025/556", + "rentStartDate": "2025-06-06", + "yourRef": "INV-56789 | PO-998877", + "commodity": "Shelled Cashew Kernels – Grade W320", + "order": "TO THE ORDER OF", + "account": "SunHarvest Distributors LLP", + "goods": [ + { + "brand": "GoldNut Premium", + "piles": "5", + "bundles": "25", + "pieces": "500", + "netWeight": "1.25", + "grossWeight": "1.30" + }, + { + "brand": "AgroChoice Classic", + "piles": "3", + "bundles": "18", + "pieces": "360", + "netWeight": "0.95", + "grossWeight": "1.00" + } + ], + "logo": "data:image/png;base64,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", + "spl": "SPL-20250604-003", + "totalNetWeight": "2.20 MT", + "warehouseAddress": "Nutra Storage Pvt. Ltd. Plot 44, Sector 18A Navi Mumbai, Maharashtra 400703 India", + "markings": "All goods inspected and stored at controlled humidity (below 65%) Packaging: Vacuum-sealed bags in fiberboard cartons Lot Nos: GNP-W320-2301 & AC-W320-2302", + "storageAndServicesTerms": "Stored under standard FSSAI-compliant food warehousing conditions. Charges are levied monthly and subject to late payment interest at 1.5%. Movement of goods requires written notice and clearance by the issuer.", + "signature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "termsAndConditions": "All goods are stored at the owner’s risk. The warehouse is not liable for damage due to force majeure, pest infestation, or improper declaration. Insurance must be arranged by the depositor unless otherwise agreed." + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fwarehouse-receipt-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fv5-token-registry.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { "chain": "FREE", "chainId": 101010 }, + "tokenRegistry": "0x7202363bBDb126036F7C3243Ebac310d9d145040", + "tokenId": "1ce97157c8270ff36011db64fefbd4321bdf2fd60573d0261e4802b05d7ffda7" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "issuanceDate": "2025-06-06T05:23:56.994Z", + "id": "urn:bnid:_:01978832-adc0-7777-b9ca-f1f13bee2eb2", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2025-06-19T12:38:32Z", + "proofPurpose": "assertionMethod", + "proofValue": "uSCg9NrwYbpEcROL+LlOonEeLqWMChYcbI/Ha15TFN+wpYWZSiVhroSmWCkMDea/OEdYas5s0mWFfxvv4xBbhNgGHvqUSlR1IxCDvGhmhN0Hn7mSVyyxyeEVmevgPxRMyByoBXIi11/X0DmGJSz/2Q==", + "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" + } +} diff --git a/wr/vc.json b/wr/vc.json new file mode 100644 index 0000000..c5722c3 --- /dev/null +++ b/wr/vc.json @@ -0,0 +1,67 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://trustvc.io/context/warehouse-receipt.json", + "https://trustvc.io/context/render-method-context.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json", + "https://w3id.org/security/bbs/v1" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "WAREHOUSE_RECEIPT", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["WarehouseReceipt"], + "warehouseReceipt": "WR-998812-A", + "issuanceDate": "2025-06-06", + "ourRef": "ORF/SG/2025/556", + "rentStartDate": "2025-06-06", + "yourRef": "INV-56789 | PO-998877", + "commodity": "Shelled Cashew Kernels – Grade W320", + "order": "TO THE ORDER OF", + "account": "SunHarvest Distributors LLP", + "goods": [ + { + "brand": "GoldNut Premium", + "piles": "5", + "bundles": "25", + "pieces": "500", + "netWeight": "1.25", + "grossWeight": "1.30" + }, + { + "brand": "AgroChoice Classic", + "piles": "3", + "bundles": "18", + "pieces": "360", + "netWeight": "0.95", + "grossWeight": "1.00" + } + ], + "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPMAAAA7CAYAAACuTbzmAAAACXBIWXMAACE3AAAhNwEzWJ96AAAMUklEQVR4nO2dvW8byRXA31IUpWMj/gda9weKhwBptQZSpElMQ02AK8QNDkgRBKZzAZLiCFNgiiDFWcIFsJEipIpDmhCmAbeBpTYIEIr5A271H4gNI4sSN5jVW3s4nJmd/aAoiu8H0DLJ/eDu7Jt5877G8n0f5sGoZTsA4OCh+8WG11OdJua2JQCoAQD7ewEAvWLD8+ZyEQSxRMxFmEctmwnjE+HjUwCoFhvehbBtBwD2xW2LDc8RPmPbVgDgBAC2uI+HrCMoNrx+phdBEEtGLuufO2rZTYkgM3YBoCls60gEOdgWjyPSEQQZ8P1JZhdAEEtK5sKMKrDpd1XNtlMj86hl2wCwo9h2CzsGglhZ5iHM25rvxFG1FOO4cbYliJVjHsJ8HuM7nXo8ZdTCOfHQdHuCWDXmIcyHmu86/Jtiw2PvzyTbDcX5NVJXHPeALNrEqjMvazYT6GfCx0fFhjcjjOhqqnNzZCaUTZVwjlp2lXNNMTrYKRDESjNPP7PNCegJjZwEMV/mJswEQdwt85gzEwSxAEiYCeKBQMJMEA+E/H24jHe//3Hts9ykupnzS5tw09vI3XQ+b/33wmBXgiCQhRvAvv+d09m0rvY3ctfwWW4CmzkfNuHmbCN345BAE4Q5C1WzX//259Urf2P/0i/Ah0ke/jfJweXEgktY27mcrOmCTwiCEJhRs8tulwVjsFRDb9Dei+Ub/umvjpy8dQ3vXn9tlMX0wS9MB5FM2D/X4PsTgLU1mxqLIMz5qGaX3a6DIZS73N4slro+aO8piwX86KtOqWBdN9fhurZuXW+tWzeQt66HmzDubVjj5vevGjMdwje/+aq0mRs3N6zxs4J1BRvB6wMUrA+waV1BwQpU7tOf/OnflAlFEIYEwlx2uyw8sq3Z5WjQ3psJxSz/8u+lnHVzsmbd7BSsMazDNaxb7BUINGzCGDas8WnBujopwBjWrTEUrCs7b42rBbje2swF34NCoA9+9ud/yeKzCYKQkEe1Omp++qzsdnuD9p6gPuebE/82x/iK/WMBAGdPu7x9vxuM9tPfDcGCtzCBPuSCOGsxbfLM4DcRBMFLIyYtiHnGMuozKYt+rgZWHiYopLcCbckE+pbb/x8wQf32L9+FlurmH5/t1/zbQgWsY+n5PnS+/PaELNkEEYM8GrtMmCoOUHa7laAT8HNwK9BW8PmnEdr6uC0KNEtrrLZftWaMY98cHXfE9EiCIOILc9IKHp/2CwQahBE6HJFvhfrSAucfr/5ARfcIYk7kYhTDm1J7Z+bPTKBhDSZ+Hm78Nbjy8zCGPIz94PX83euvSZAJYo4wCexFlOMJkRmkjqfeyQX69J9//TUZswhizuQwMERVjifkeNaSHVCfKfszLdDDKz+vq9ZJEERG8EEjVRx9eTcRG7EPB+09pb+Xc21N17+2JqcAN7XB335hFEXGlcrti4XyCYKIZibRAq3UgXFLMRrrhDq0jBuHgqIQd7hOhHUgdarrRRDxWGjWFNYJ6yv83E91a04RBDHNoosT6AJWaK5NEDFYdHECXcAKrWCRMTiFmvEsDNp7lNDyAFi0MPcVi8yB6NeWgZle7zP+TY/j2AqWjJKQFXdnjFp21vM5tvABJeJwZCLMZbdro1r80SLNjFqD9l5UoEgH3VsyVZt80wQRg9RzZkyf/AEAXmCvv4urWfyn7Ha1AomF8R1hDSpmzXaLDY+WaSUIDmYwHrXsOlv/XLbkcaqRGdVcXR40S51kbiqlUOOCcDYupA60aDpBTIPLPTnCksYzcpJWzTZRhZsm25EQE4QScd02KYmFGYNEVIuf82yxEXxORiXWATzWfC8zjp1FhK9SpzIfdO10qHiWdPvQ2mUCaUZm0zzouTFo713osr7Kblf28cUirNXoFmIvGy31rNPo4zVkdQ4Hz1HCh93L8lqFa4A459DZQEYtW3oPHordBIOjKpzMsOvysl5MMY0wP+gRDAVD5KPwYSx7BecydZnlHrWXOlr6xdJI4TYs86zJwl/LbleazKLzCqAngU1lqjKvQNntDnHkS+Qd4K5B5XUIz9ELryPJeZKCthYxJuGjoOD3YVv1+DBhLh+AR5kbgMsPywYx6T6jll3DthHb/gV+f4bLF/eE/RzOM6TCEYxgXmJhZg912e2eGajawyX128pU9Mdlt3uBLjX+umcCXHAU66mEmIMlqFTLbreu8AErg2fQk3AYUfZpCx+eWlyBxg6rY1BWaou/jkF77y7j6g8l9+0AjUYdIY5B7BSlbazR9iom+6DQ9wx8+uwZejNq2ceYjxB2CE4o8Bp2heOfpnVNRaVOAvZMD4UKNpq2A0NBPjEQ5JCtCK+A7BxhRVWT+m2Av+VlzOO/iXF8CK8D910kJbz/qoCkeWMiyDz7WZTNSiXMOOK6mk2OdG6pJaQZ9XCjWnoSUwhiYeASTHv8asrjt/EYi6JmaJzNHFSRk0TZPUG1PDGpg0ZQpXrEVBs21OPrCAC+kNXaXnJMBDRK7c2Cuamx2Bmpjj/Etn2KryNNlZoOHmsRzPv+61AJ5Bner1BORI5xRE9MJuGcaPRY+ThZNEbtK74eopCEDVZCw4xqe9U5lMY0jKRrcm6bMMw2zkihymQ7RmMcb+jpld1uU1qc4vYY9RV8LmTLKrG2d3gj2ahld/CeMcGuCZZtTxB4WfudC+65/r1Y0nUJOccHODSohH9VmgjrlasSSy8ThlDATUcT1TlkwgY4QnZidBqy458O2nvSEQfPV0M7gaja1hYszGIHeheWdk8hfBXeSFZseDUm0DL3G1rceau7LEmlIyaakDDH51j1YGt87zWVy4bZHXB0izROaQJ1zjW/iZ2jhvtqDUKoWchGfdNIvzfCZ9vsmHftrkLOxNHwjugrtJT3o5b9FjsW5iK7yNqPTsIcjzOd0Ch65OOo7DFmJETXVJT1W9VZmIx+TQPrrmrlzTeKABwT7AVFa1UXVEtOJ6BP8NUetexTFOxOVr9z0ZVGlo0khifT3jeN8SNyX+xQokoqLzyqLyPeZh1dZQrmGOg8PCG7qI15sgyoJGSVz+zgXMtBleIM85kfWk5ykqg30143ce8cIyT0ImJu/lCquyw0OpHNeTFEVax2KyMI6mHbFxteKnnJIp+5g1ExT7gHhc3rXpbdbn+B7on7gmlJnsSle9D4FLVNyeDBohzyjGAhmsWGx6YYz2dqy8t5OWrZqXzzafOZaxFW0h1UAVelxpQsvJWFODZ1oycKo4n7SDXi1A0KIJr4/FW/8SCpoC9hKG+SwUfZtjjaHmKyhRPhKqymmW6lVbNNdP1d9rAalBB6CMhCPbdR3ZIKW0SQxhSaePh9lqShionGziIq1jeYV5fd7rlkBHd0CyFw11FakOU6S3QCJW1DWS4+xmfX0XLdxzl84HLCKDGZOzKVzSKxmq1xY8hYlZFZJZSBsInqMNoa+jFDD1XnYCGUTX5aw/6Pbq84o6Ps+KxDVkZ0cR1SX/wN9xyZ+rvPSvOIH2KopUwLPVds28cOdGYejC4p2X2O8xzMCH6akVnlxpCxEvNmHNlOFWrULtZFCyN3KgnDDjuaGHH28LzA0fsiYYzwoSLdkT3ITtnt9rBzCFXLqhA19gKDSJp3nD2VBFXSzEsUaD6STjVw8dlSFUlG3e6oZfexzfp4LFsxyqu8DTJt7AlGkfXCtkhjAIujNq9SVYhahAtoG4UsUfxwGHEVsdlO0pK6eHzV/HobS9i8QaPne3wvXss2agr33dV1qGmrbS7NUKeB8tMPVVDPDt6zH/CeqbLdVOq9Stb2+bZILMzY6LKAcRkrs8yM4aqaac/Rm1lON9vjdzI4vnvf7SQ4j03TVi7vz0b1Oc19U7mmjKZJd5HPfJBlaZxlAIXBNVz3OuQozqVhJFqcfYZxHjQ8/kGc38ThLoGKHYBx0HHbClCQZ66RxVwnFGhXVdQSzxM5cKbNZ+5jKpzqRhxEWUEfKvgwVwwals2hnyZJF8V9Hhs09CkaIWMJGLbdFyyiynAXtt2jZRHkEBSWsK2ihJpt80i3SikK9HOZcUwCa5vHBqueVqPaOZNVINF6WcUHpsStaLHQubKiplbfRHDQCiyS6Jq4+yMaDXtZqaLoXXCEc1zgOVK3A14DXzCwgu0cFic8SaqBYYmfmfl1seFFekHQcize15M0SQyKGlzBNcaNo8ZAkLCYX2gIDu9Z4LaKeTy+ptknwzKA939aaNLK79QpqAAAAABJRU5ErkJggg==", + + "spl": "SPL-20250604-003", + "totalNetWeight": "2.20 MT", + "warehouseAddress": "Nutra Storage Pvt. Ltd. Plot 44, Sector 18A Navi Mumbai, Maharashtra 400703 India", + "markings": "All goods inspected and stored at controlled humidity (below 65%) Packaging: Vacuum-sealed bags in fiberboard cartons Lot Nos: GNP-W320-2301 & AC-W320-2302", + "storageAndServicesTerms": "Stored under standard FSSAI-compliant food warehousing conditions. Charges are levied monthly and subject to late payment interest at 1.5%. Movement of goods requires written notice and clearance by the issuer.", + "signature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "termsAndConditions": "All goods are stored at the owner’s risk. The warehouse is not liable for damage due to force majeure, pest infestation, or improper declaration. Insurance must be arranged by the depositor unless otherwise agreed." + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fwarehouse-receipt-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fv5-token-registry.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { "chain": "FREE", "chainId": 101010 }, + "tokenRegistry": "0x7202363bBDb126036F7C3243Ebac310d9d145040" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "issuanceDate": "2025-06-06T05:23:56.994Z" +} From 11c08f020ce1bf02354959d57c209f8b0a7f6bbd Mon Sep 17 00:00:00 2001 From: Rishabh Singh Date: Thu, 13 Aug 2026 18:08:14 +0530 Subject: [PATCH 2/7] chore: stop tracking wr/ and decrypted.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These are local scratch/test artifacts, not repo content — keep them on disk but drop them from version control going forward. --- .gitignore | 1 + decrypted.json | 1 - wr/didKeyPairs.json | 8 --- wr/operative/signed_vc.json | 109 ------------------------------------ wr/operative/vc.json | 88 ----------------------------- wr/signed_vc.json | 75 ------------------------- wr/vc.json | 67 ---------------------- 7 files changed, 1 insertion(+), 348 deletions(-) delete mode 100644 decrypted.json delete mode 100644 wr/didKeyPairs.json delete mode 100644 wr/operative/signed_vc.json delete mode 100644 wr/operative/vc.json delete mode 100644 wr/signed_vc.json delete mode 100644 wr/vc.json diff --git a/.gitignore b/.gitignore index 1d04dba..e30dc6a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ /signed_vp.json /raw_vc.json /decrypted.json +/wr/ # Verifiable Presentation manual-test fixtures — generated, deliberately not committed. # They carry throwaway private keys, and every credential and presentation is bound to the diff --git a/decrypted.json b/decrypted.json deleted file mode 100644 index 08c0000..0000000 --- a/decrypted.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"https://schema.openattestation.com/3.0/schema.json","@context":["https://www.w3.org/2018/credentials/v1","https://schemata.openattestation.com/com/openattestation/1.0/DrivingLicenceCredential.json","https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json","https://schemata.openattestation.com/com/openattestation/1.0/CustomContext.json"],"reference":"SERIAL_NUMBER_123","name":"Republic of Singapore Driving Licence","issuanceDate":"2010-01-01T19:23:24Z","validFrom":"2010-01-01T19:23:24Z","issuer":{"id":"https://example.com","name":"DEMO STORE","type":"OpenAttestationIssuer"},"type":["VerifiableCredential","DrivingLicenceCredential","OpenAttestationCredential"],"credentialSubject":{"id":"did:example:JOHN_DOE_DID","licenseNumber":"S1234567a","birthDate":"1977-02-22","name":"John Doe","class":[{"type":"3","effectiveDate":"2010-01-01T19:23:24Z"},{"type":"3A","effectiveDate":"2010-01-01T19:23:24Z"}]},"openAttestationMetadata":{"template":{"name":"DRIVING_LICENSE","type":"EMBEDDED_RENDERER","url":"https://tutorial-renderer.openattestation.com"},"proof":{"type":"OpenAttestationProofMethod","method":"DID","value":"did:ethr:0xE712878f6E8d5d4F9e87E10DA604F9cB564C9a89","revocation":{"type":"NONE"}},"identityProof":{"type":"DNS-DID","identifier":"example.tradetrust.io"}},"attachments":[{"fileName":"sample.pdf","mimeType":"application/pdf","data":"BASE64_ENCODED_FILE"}]} \ No newline at end of file diff --git a/wr/didKeyPairs.json b/wr/didKeyPairs.json deleted file mode 100644 index 11ec891..0000000 --- a/wr/didKeyPairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "https://w3id.org/security/multikey/v1", - "id": "did:web:trustvc.github.io:did:1#multikey-1", - "type": "Multikey", - "controller": "did:web:trustvc.github.io:did:1", - "publicKeyMultibase": "zDnaemDNwi4G5eTzGfRooFFu5Kns3be6yfyVNtiaMhWkZbwtc", - "secretKeyMultibase": "z42tmUXTVn3n9BihE6NhdMpvVBTnFTgmb6fw18o5Ud6puhRW" -} diff --git a/wr/operative/signed_vc.json b/wr/operative/signed_vc.json deleted file mode 100644 index 6bc2cf3..0000000 --- a/wr/operative/signed_vc.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/ns/credentials/v2", - "https://w3id.org/security/data-integrity/v2", - "https://trustvc.io/context/render-method-context-v2.json", - "https://trustvc.io/context/bill-of-lading-carrier.json", - "https://trustvc.io/context/attachments-context.json", - "https://trustvc.io/context/transferable-records-context.json", - "https://trustvc.io/context/qrcode-context.json" - ], - "renderMethod": [ - { - "type": "EMBEDDED_RENDERER", - "templateName": "BILL_OF_LADING_CARRIER", - "id": "https://generic-templates.tradetrust.io" - } - ], - "credentialSubject": { - "type": [ - "BillOfLadingCarrier" - ], - "shipperName": "MAERSK Co.", - "shipperAddressStreet": "101 ORCHARD ROAD", - "shipperAddressCountry": "Singapore", - "toOrderOfText": "TO ORDER", - "consigneeName": "ABC Natural Foods Inc.", - "notifyPartyName": "Amanda Green – Import Manager, ABC Natural Foods", - "packages": [ - { - "packagesDescription": "Organic Cashew Kernels (25kg bags)", - "packagesMeasurement": "100 Bags", - "packagesWeight": "2.65 MT" - }, - { - "packagesDescription": "Roasted Chickpeas (20kg packs)", - "packagesMeasurement": "60 Bundles", - "packagesWeight": "\t1.3" - } - ], - "blNumber": "SGCNM21566325", - "scac": "SGPU", - "carrierName": "Vikram Rao", - "logo": "data:image/png;base64,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", - "onwardInlandRouting": "Rail to Johor Port → Trucking to final inland delivery point (Long Beach, USA)", - "vessel": "MAERSK NATALIA", - "voyageNo": "7831W", - "portOfLoading": "Singapore", - "portOfDischarge": "LOS ANGELES, CA", - "placeOfReceipt": "JURONG PORT, SINGAPORE", - "placeOfDelivery": "Long Beach Distribution Center, CA", - "placeOfIssueBL": "Singapore", - "numberOfOriginalBL": "3", - "dateOfIssueBL": "2025-06-05", - "shippedOnBoardDate": "2025-06-05", - "signForTermsAndCondition": "The carrier accepts the goods as described in good order and condition for carriage under the terms stated herein and subject to the Carrier's standard Bill of Lading Terms and Conditions.", - "signedForCarrierText": "John Doe", - "carrierSignature": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABCwAAAG6CAYAAADDFddpAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3QHWoziWJtDoleX0ymJ6ZTO5splUVdDtcAASIKEn6f7n5MnqTgzSfcI2n4X4jx/+CBAgQIAAAQIECBAgQIAAAQLBBP4jWHs0hwABAgQIECBAgAABAgQIECDwQ2BhEBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAgTYC/+vHjx/pn//76582R7FXAgQIECBAgMCkAgKLSQurW90EPi9Q0v/+391a4sAECPQU+D+/worPNvyX94SeJXFsAgQIECBAYDQBgcVoFdPeyAJ7FyipvekiJf0JLyJXT9sI1BP4fye7SrMt/vZ+UA/bnggQIECAAIF5BQQW89ZWz94TSDMpfu78mrrXAr+wvlcXRyLQQyC9H6TwMvf3n24TyRH57wQIECBAgMDqAgKL1UeA/tcQOPs19Wj/KbhwX3sNffsgEEsgzaRKAWbJnwCzRMk2BAgQIECAwLICAotlS6/jlQSuXJzsHdLtIpUKYTcEgggc3Rp2Fl66XSxI8TSDAAECBAgQiCUgsIhVD60ZT+DO7Iq9XrqvfbzaazGBPYG9EDOd3+lWEaGFMUOAAAECBAgQuCAgsLiAZVMCXwJnsytyFyhnmO5tN9QIjCtw9HSQ1KOzW0XcHjJuzbWcAAECBAgQaCQgsGgEa7dLCJwFFtu5tU31Lr2nfYNz8bLEENLJCQX2AosthMwtyOm8n3BA6BIBAgQIECBwX0Bgcd/OKwkc3aueZlekC5TvvxRe/FX4NBHBhfFFYEyBs8Ai9SgXWphhNWbdtZoAAQIECBBoICCwaIBql8sIHK1fcRRYbDBXZ1341XWZIaWjEwjkAovUxdxivUKLCQaCLhAgQIAAAQLPBQQWzw3tYV2Bs6cBlFxwpF9a0z+lt4sILtYda3o+jkBJYFESWvh8HqfmWkqAAAECBAg0EvCFqBGs3S4hcBZY5GZZfAPlfnHdthdaLDG0dHJggb2ZV0cBZu4RqCXB58BUmk6AAAECBAgQOBcQWBghBO4L5C42roYLpWtcXN3v/R56JQECVwX23hfOPmvPHo18Nfi82lbbEyBAgAABAgRCCwgsQpdH44IL5BbPS82/Ey6UzLZIFzJp3+nf/ggQiCNwZYZFanXufL/zHhJHQ0sIECBAgAABAg8EBBYP8LyUwD/rT5z9OroB3Z3WnZvBkfZ/d9+KR4BAG4GrMyxSK3LnuvO8Ta3slQABAgQIEAguILAIXiDNCy+Qu9B4Glrkfn0VWoQfIhq4mMDVGRaJJzdby60hiw0i3SVAgAABAgT+LSCwMBIIPBPIXWhse39ywVESWpg2/qyOXk2glsCdGRbp2Lnw0zleq0L2Q4AAAQIECAwjILAYplQaGligJFBIzX8SWrigCTwANI3Ah0DpY02/0UrCT5/ZhhoBAgQIECCwlIAvP0uVW2cbCrwVWuSO41fYhkW2awIFAncDi7Rr53cBsE0IECBAgACBdQQEFuvUWk/bC+QuNrYWPA0Vcsd5uv/2Uo5AYF6BJ4FFUsndGmIBznnHjp4RIECAAAECXwICC0OCQF2B3MXGW6GFi5q6dbU3AqUCTwOL3K0hT28tK+2H7QgQIECAAAEC3QUEFt1LoAETCkQJLcy0mHBw6VJ4gaeBRepg7j3EuR1+GGggAQIECBAgUENAYFFD0T4I/Cmw92jDPaenFx6520PMtDA6CbwrsHdOXj3PS2ZZpH2m2Rb+CBAgQIAAAQLTCggspi2tjnUWyF1wfDbvaaiQCy2uXix1pnN4AkML7J37d87B3Hnt1pChh4nGEyBAgAABAiUCAosSJdsQuCcQKbR4GorcE/AqAusJ1Aosklxuppbzer3xpccECBAgQGApAYHFUuXW2Q4CuV9JtyalX0ufTvHOHevOr7wdyBySwNACe4HF3dkQudDz7n6HBtZ4AgQIECBAYB0BgcU6tdbTfgK5IOEztEi/mD75yx3LL7JPdL2WQF6gZmCRjpZbgNM5na+JLQgQIECAAIFBBQQWgxZOs4cTyAUJnx16el7mjmWmxXDDR4MHE9i7lePueW2WxWDF11wCBAgQIECgnsDdL1D1WmBPBNYRyAUJm8Qbt4c499cZd3r6vsDerIgn55xZFu/X0BEJECBAgACBAAJPvkAFaL4mEBhOIHfh8RlauD1kuPJqMIF/Ceyd509v3cgtwOnz3OAjQIAAAQIEphPwBWe6kurQAAKRQgvvAQMMGE0cTqBFYJGboeVWr+GGiQYTIECAAAECOQEXKzkh/51AfYF0T/rPHz9+pH/n/mo8BSB3ofP0l99cH/x3AqsJ1Hy06afd2SyLGu8Vq9VJfwkQIECAAIHgAgKL4AXSvKkFclO8Pzv/9Fw9Cy1c6Ew9zHSug0DtJ4VsXRA+diimQxIgQIAAAQL9BJ5eBPVruSMTmEPgyu0hacp3Chfu/uWOZabFXVmvI/C7QKvAIh3FLAujjQABAgQIEFhGQGCxTKl1NKjA1dtDnoYWfqENOhA0azqBmo82/cRxDk83VHSIAAECBAgQOBIQWBgbBPoL7P0ae9QqjzztXy8tIFAi0GLhze24ZlmUVMA2BAgQIECAwPACAovhS6gDkwhcCS1Sl58+EcDtIZMMHN0IK7A3E6LWbVfO37Bl17CFBbYZk3//MkjvAf4IECBA4KGAwOIhoJcTqCyQuxD5PNzT0CK3EOfT208q09gdgaEEWq5jkSDMshhqOGjspALpPE///LXz5C8LWk9adN0iQOBdAYHFu96ORqBE4M3QInesWr8Il/TbNgRmEmgdWDh3Zxot+jKaQOn6U09/WBjNRXsJECBQXUBgUZ3UDglUEchdjHwe5OkXIov4VSmZnRD4Q6DVwpvpQLnbyJ6+LygnAQJ/CpQGFdsrzbIwiggQIPBQQGDxENDLCTQUyAUJNUOLXEBipkXDQtv1tAJ751XNz92z89aF0rTDSsc6CFwNKj6bWPOc79B1hyRAgEBfAW+iff0dnUBOQGiRE/LfCcQVaLnwZup1bpaFoDHu2NCyMQS2NSp+3myumU434byMAAECm4DAwlggEF/gSmjx9FfV3LFcAMUfL1oYR2AvUKh9Dll8M069tWQugdznYUlva5/vJce0DQECBKYSEFhMVU6dmVjgyhcnocXEA0HXhhJovfBmwsi9N/icH2rIaGwAgdw5VdLE9DnsSVslUrYhQIBARsAXGUOEwDgCV79EPfllx5oW44wLLY0t8D0D4mmguNfbs1kWT94HYstqHYF6AtsaFWmP6X/f/dtCinSe+yNAgACBCgICiwqIdkHgRYHcPevfTXlysZJb0M+vRy8W3qGGFWi98GaCyZ2r6X3AHwECfwo8WUxz25vZFEYWAQIEGgoILBri2jWBhgK5GRCfh36y6JcLoYZFtOslBFovvJkQc0Hmk+ByiSLp5HICNYIKsymWGzY6TIBADwGBRQ91xyRQR+DKLSJPQouz47SY3l5Hx14IxBDYCxOenI9HvRIuxqi3VsQWqBFU+NyLXWOtI0BgMgGBxWQF1Z3lBN4KLVwMLTe0dLiSwBsLb+ZmWbjAqlRMuxlWQFAxbOk0nACB1QUEFquPAP2fQSA3Hfyzj09+2T0LLZ7sd4Ya6AOBM4G9RTFbfP5afNM4JPC7QI2gwuebUUWAAIGOAi2+MHXsjkMTWFqgdF2LJ7+2Ci2WHmI6f1Ng77xpsa6EmVA3C+Rl0wkIKqYrqQ4RILCqgMBi1crr96wCV24RuXv+n/2K65eoWUeWfj0ReGPhzdS+3GyrFiHJExevJVBbIJ0Dn48ovbN/T/24o+Y1BAgQaCRw94KlUXPslgCBCgJXQos7FzAuiioUyS6WEnhr4c2EahbUUkNLZz8Ernz27cE9mX2oEAQIECDQSEBg0QjWbgl0Fij94nb3l6Tc/r23dB4ADh9O4HtmUquLo7NAsdUxw2Fr0DICtW79SOdG+scfAQIECAQTcFERrCCaQ6CyQOm6FndmWnjcaeVi2d3UAm8FFgnx7Ly/c65PXRidG1KgVlCRPsf8ESBAgEBgAYFF4OJoGoFKArnZENth7qw/Yfp5pSLZzfQCb61jkSCFidMPp2U7WCOoMNNo2eGj4wQIjCggsBixatpM4LpAr9DCr7nXa+UVcwrshXstP4M94nTOcbRqrwQVq1ZevwkQWF6g5Zel5XEBEAgmkFss8+5MC/fMByu05oQU2DtPWv7Sa/ZTyGGgURcFngYV27oUKTz3R4AAAQIDCggsBiyaJhN4KFCyrsXV20POZnBc3dfD7nk5gZACbz4pJAHkAkqf/yGHiUb9EngaVKTd+OwxnAgQIDCBgC8sExRRFwjcECi5ReTql72zIMR7zY0iecl0At/nSMsZFgnP4pvTDaHpOySomL7EOkiAAIFrAi4irnnZmsBMArVDC7eGzDQ69KWFwNvrWDgnW1TRPlsI1AoqPJ60RXXskwABAh0FBBYd8R2aQACB3LTx1MQrMy3O9mcBzgAF14SuAm8+KWTrqMU3u5bcwU8EtpAibZL+992/9BklqLir53UECBAILiCwCF4gzSPwkkBuXYsrU9eP9nVlHy9122EIvCrw9joW24VgOif3/pyTr5bfwX4J1JhNkXYlqDCkCBAgsICAwGKBIusigUKB3C0ipTMtzmZZlO6jsMk2IzCUQI/AIgGZZTHUMJm2sYKKaUurYwQIEGgnILBoZ2vPBEYUyIUWpb/ImmUxYvW1+Q2BtxfeTH06O69Lz+k3bBxjPoHtVo+fD2/7SDJprG6zKuaT0iMCBAgQ2BUQWBgYBAh8C+RCi9JZEkehRenrVYbAjAJvL7y5GQoRZxxNcftUazZF6qFbP+LWWcsIECDQXEBg0ZzYAQgMKZALLUp+lT3aR8lrh0TTaAIFAnvnxRufxWfr1AgRCwpnkyKBWkFF+pz4+58jpvPFHwECBAgsLPDGl6SFeXWdwPACTy9yzLIYfgjoQGWBXutYpG6YZVG5mHb33wKCCoOBAAECBJoICCyasNopgakEntz/bpbFVENBZyoI9Awszs5lsywqFHexXdQKKRKb9SkWGzy6S4AAgVIBgUWplO0IrC3wZKbF0RMK/vPXl9S1ZfV+RYEeC28m57Mn+KT/7jvBiqPxWp/TGNqCimuv3N9aUFFD0T4IECAwsYAvJxMXV9cIVBbIrWtxFEAcXSRZy6JygexuGIG9EO+tz+Oz83jFEHF7isX2779+rZ2wDab0PpX+WfnvM6DYnJ56mNHzVNDrCRAgsIjAW1+QFuHUTQLTC5z9Qnu2SJpZFtMPDR28INDrSSGpiblzOIUWs//dvQDfgou0GOTn3/b/nynYuGuUGzuCipyQ/06AAAECvwkILAwIAgSuCqRfaNOvkEe/tO39SmuWxVVl288ssHc+vDm74ewWrzfb8WaNa663UNLu73BjhJkarYzc9lEyYmxDgAABArsCAgsDgwCBOwK5e+H3fkUzy+KOtNfMKNBz4c3kudIsi1zA+vb42maipeP2CjE+w+afvwBq3erx6SmoeHt0OR4BAgQmFBBYTFhUXSLwkkDu17jvX2o9MeSlwjhMeIHegUUCmnmWRe69KeoA+Q4zUj++bzPJ3XbyHTyk/zvNiNuCqjf6ngLrXmHMG/1zDAIECBB4UUBg8SK2QxGYVOBo5kTq7vdMC7MsJh0EunVZoNeTQraGns2yGHWdgVGDisuDJ+ALzKYIWBRNIkCAwAwCAosZqqgPBPoLnD154PPixyyL/rXSghgCPRfe3ATOwsaR1rIQVPQZ01tIkY6em/nRp4WOSoAAAQLDCwgshi+hDhAII3A2xfzzEaZ7F0kecRqmjBryksB3eNfjHJhhlkXuccsvlXOZw5hJsUypdZQAAQIxBAQWMeqgFQRmESiZaXEUbIw6DX2W2unHuwK9nxRSMssi+neEp2FFyQyBVKfPdSHeXg/i3VG5fzQhRYQqaAMBAgQWFYj+ZWTRsug2gaEFzi4itl+RzbIYusQaX0EgwsKbqRtn52vk20LuhhXbwpa1F4XcQo3vcKPF0zcqDL/sLoQUWSIbECBAgMAbAgKLN5Qdg8B6ArnHnh6JRL5AWq+Ketxa4Du46zH+c+dqxO8Jd8KKnk+u+JylkWZoRAsxtvUn/vZ0j9anvP0TIECAwFWBiF9ErvbB9gQIxBS4c1HR4z7+mHpatYLAd2DRa/yP9ojTs8VCP8dN9FkC37ebpLanQCMFBz9/hQc1wo1tVknadwpuPh+XarHMFd5p9JEAAQIDCwgsBi6ephMYQCD36+1eF7wvDVBYTawisHfh3WP8n52nvUKUI+CSIDR6UHF38HzedpL6uP3f2//+Dh+EEXelvY4AAQIEwgj0+GIUpvMaQoDAawKlv4imBkW7QHoNyYGWE9i7+O71uTzCLIuSsMLivcudRjpMgAABAjML9PpiNLOpvhEg8KfA1ZkW3puMohUE9i7Ae6xjkaxHmGWRCz6FFSucNfpIgAABAksJuChYqtw6S6C7QO6CY2tgr4u27kAasJTAXmDR86L7bJZF7+8LudkVPd2WGrQ6S4AAAQIE3hTo/QXkzb46FgECMQTOLoq2FrotJEattKK9QJSFN1NPo94WUjJDS8jZfqw6AgECBAgQeF1AYPE6uQMSIPCPQO7X0oTk/clQWUEgysKbm/XRLKieIWLu/cLsihXOFH0kQIAAgSUFXBAsWXadJhBCIHcR0vMCKQSQRiwhEGmGRcRZFrnZFd4nljhNdJIAAQIEVhUQWKxaef0mEEMgF1r45TRGnbSinUCkhTdTL6Mtvuk9ot3Ys2cCBAgQIBBeQGARvkQaSGB6gdwvqEKL6YfA0h3cWzei95iPtJbF2UK9vZ2WHrg6T4AAAQIE3hAQWLyh7BgECOQEhBY5If99VoG9sd/7QvxsVsObbTO7YtZRr18ECBAgQKBQQGBRCGUzAgSaC+QeeZruVU8XS+nf/gjMIrAXWPRelyHKbSFn7wm9jWYZf/pBgAABAgRCCwgsQpdH4wgsJZD7NXXDePMX3qUKoLNdBCIGFgmi920hufcD7wNdhquDEiBAgACBdwUEFu96OxoBAscCudtCPl/pYsVImklgbybBf3aeTdR7lkUusPD9ZaYzQF8IECBAgMCBgA98Q4MAgUgCZ7/qfrdTaBGpctryRGBv3PcOLFJ/zm7JaP39we0gT0aU1xIgQIAAgUkEWn/hmIRJNwgQeEngyiyL1CShxUuFcZimAnuBRYQ1Gs7Ox9bnnqeDNB1ydk6AAAECBMYQEFiMUSetJLCKwNXAQmixysiYu597tz+0DgRKRHPnY6vvELnbQSLMPinxsw0BAgQIECDwUKDVl42HzfJyAgQWFji6LST94pwuoPb+PEFk4QEzQdejLryZaHssvpkLLHx3mWDQ6wIBAgQIECgR8KFfomQbAgTeFDj6VTeFEn//c1/9z5PGRPhV+k0rx5pD4GjMR/iM7rH45llIEuFWmTlGnV4QIECAAIEBBCJ8GRqASRMJEHhZ4Oj+9fSelfv1VWjxcrEcropAxCeFbB17e5aFwKLKkLITAgQIECAwvoDAYvwa6gGBGQWOLli2e9dz99YLLWYcFXP3aW/MRxnHb8+yOAssopjMPRr1jgABAgQIBBEQWAQphGYQIPCbwNEsis/p4EILg2YmgahPCtmMz57aUXsRTE8ImWlk6wsBAgQIEHggILB4gOelBAg0EzgLI77ft85uEfFrbLMS2XFlgb1xHGm9hrPzrHY7BRaVB5fdESBAgACBUQUEFqNWTrsJzC9wdNGy92vumxdT88vf7+H3U1zShay/MoHIC29uPXhrloXAomzM2IoAAQIECEwvILCYvsQ6SGBYgaP72I9mTQgt3i91ushO//x18sjZ1CozXfK1OQosat9ukW/J8RZvnWMCiydV8loCBAgQIDCRgMBiomLqCoHJBM4eb5ou4vb+ck8Q8Z5XZ5BsQcXZI2b3jiS4OPeP/KSQreVvzLIQWNQ5T+2FAAECBAgML+DL+/Al1AECUwucPd70qOO5xTgj/WI9YvFyoVCuT+k2kb//2Sjtx9/vApGfFLK1tPUTPJy/zgoCBAgQIEDgvwUEFgYDAQKRBXKPNxVavFu93MXkldaYbfGnVvQnhWwtPpsB8fR7RW6MCRyvnGW2JUCAAAECgws8/WIxePc1nwCB4AJ3A4u3fg0Ozle1eU9nVuw1Rmjxu8qRcbTP6pZP5smNs2gWVU8yOyNAgAABAgR+F/DBb0QQIBBZ4M46Ft/9aT2FPbJfzbad/ar+5Di1H4n5pC29XzvCwpvJKDcL4sl3C4FF71Ho+AQIECBAIJDAky8VgbqhKQQITCpQI7BINC1/EZ6U/rdu5S4inxqYafFvwVECi9w59SSEyo0131uenm1eT4AAAQIEBhLwwT9QsTSVwKICdxbe3KMSWtwfQK1mV3y26MlF7v2exXvlnnVEm1azLM5mREV0iDeCtIgAAQIECEwkILCYqJi6QmBSgaOL5TuL7wktrg+S3C/e36FDegJI+vvr14yBK0c00+LHj1EW3kx1PRsbd8MFt3BdOWNsS4AAAQIEJhcQWExeYN0jMIHA04U3vwmEFtcGRUlgcRQ0lLz2uzV3L3Sv9Sru1qMsvJkEW8yyOJvNI9CKO261jAABAgQINBEQWDRhtVMCBCoKHAUWTy5ezi60nuy3YrfD7Cp3O0hJwHA1uFi5BiOtY5EGac1ZFrkA5M6sqjAnkoYQIECAAAEC1wUEFtfNvIIAgXcFji6IalzUtghD3tVpe7TcBWQ6emkdzqb67/WiJAhp2/s+ex8tsEhKZ6HW1ZCh5r76VNBRCRAgQIAAgWoCAotqlHZEgEAjgVpPCtlrXtr3z4O1FkovxBt1O8RuS2ZGXPkcKdnfZ8dXDS1GWXhzq9VZsHWlhjVna4Q4gTSCAAECBAgQeCZw5YvmsyN5NQECBO4JtAwsthYd/aq7emiRmxVx5WJ0s74aWqxYg5EW3tzqejZWSmdZ5MaG7yz33kO9igABAgQIDCvgw3/Y0mk4gaUE3vjF2e0hfw6p3PoVd8OE3IXpd0vuHmfUk+RoLEb+zK4xy8IMi1FHrHYTIECAAIFGApG//DTqst0SIDCgwBuBRWJpuV7GaOwl61eU/nK+13ehxfGIGHEdi9Sbs1kWJbNxnr5+tHNMewkQIECAAIGMgMDCECFAYASBo1/6W7yHmWnx7xFREig89S85xuf4XGWmxVFgEb3/T2dZCCxGeDfWRgIECBAg8KLA0y+bLzbVoQgQWFjgzcDi7GL9yYyC0cqXW7+i1sXz1dBilRq8Nauo9rh8EjqcvbbWeKvdX/sjQIAAAQIEGgoILBri2jUBAtUE3g4szkKLVS6c3goszqz3BlDJrQXVBl7HHY24jkXiyt1KdBY4PQk7OpbKoQkQIECAAIFWAgKLVrL2S4BATYGjC5nWv7Yf/frf+rg17e7uK7fgZm2DXEDy2Y8VQoteY/7uePl83d1bQ8ywqKFvHwQIECBAYCIBgcVExdQVAhML9Py1edWFOHOBRYvPjyuhxewzXUYPy87Gz1HYZYbFxG/iukaAAAECBO4ItPjCeacdXkOAAIEzgd6/No9+8XhndOUCi9ozLFIb0y/zP3/9u6TNLdpQctw3thl14c3N5s6tIQKLN0aWYxAgQIAAgYEEBBYDFUtTCSws0DuwSPSrzbTIzXZoFRbkLnQ/T4PZbw0ZdeHNrUZXA4ir2y/8lqjrBAgQIEBgDQGBxRp11ksCowtECCzOQotWF+8969YrsEh9vhJazHxrSM9boWqMvVwdvwMngUUNdfsgQIAAAQITCQgsJiqmrhCYWCBKYLFdTO/dtjDbhXPPwOIsHNob5rN+lkUa93ffXnKhxed5c3Yb0mzn111PryNAgAABAksJzPolb6ki6iyBBQSiXbitsKZF78AiDetcG7ahP+utIUcX+6PN6MnVMdVvCwOP3s4EFgu80esiAQIECBD4FhBYGBMECIwgEC2w2C6uZp5pkbvIfOvzI7f45zZ+R7uILznvjgKLEQOa3HjKeQgsckL+OwECBAgQmFDgrS+cE9LpEgECLwpEDCxS92eeaZELCt76/MjdUrANwxEv4ktOodEX3tz6WFrHI5O3xltJTWxDgAABAgQIvCTgC8BL0A5DgMAjgcjBwNGjOEf+RfjI+7OIb35+lLQntW1k86MTZPSFNz/7VVrHb4sZ6/roDdGLCRAgQIDAKgJvfuFcxVQ/CRCoLxB1hsXW01nWGtj6k7uw7HEBWXJLwYyzLKKP/atne25s7e1vxtt9rrrZngABAgQILCkgsFiy7DpNYDiByDMsPi/y//r1SM5P4B4X908LnLuo7NGn0lsKerTtqffZ60cY+1f7nxtfo58/Vz1sT4AAAQIECBwICCwMDQIERhAY5VfmWWZa5Nav6PWLd8ksizSee7Wvxbk008Kbnz6pX9vtVEdus4VPLcaHfRIgQIAAgakFBBZTl1fnCEwjMNKvzKmto8+0OAssel9E5sKUNOhnuzVkloU3996Q0vmS/tLeknM5AAAgAElEQVQTd7bapX+ncbY97nSaNzIdIUCAAAECBK4JCCyuedmaAIE+AiMFFkno6Ffx3hf7JdXL3XrRuw+59m19nGmWxUwLb5aMQdsQIECAAAECBP4lILAwEAgQGEFglFtCPi1HfXpIbn2BCJ8bJbeGzDTLYsTxP8L7ijYSIECAAAECwQUifPEMTqR5BAj8EkgX4Okv/Tvd8vD3r3/ngNJ233/pYvLKdO/RZlhs/R1xpkXk20E+XdMtBNuYPBqDs8yyGHX8594b/HcCBAgQIECAwKmAwMIAIUDgSOBzQbzcheFTxXSbwfa33dP+uc+jX5h7355Q2u+99kecAZCbXRHJO9fWrTYzfM7NuvBm6fljOwIECBAgQGBRgRm+yC1aOt0m0ETg6DaGJgfL7HQLMdKF/dHTBEb5Bf1spsXV2SatalESAET7zFjl1hCBRatRb78ECBAgQIBAaIFoXz5DY2kcgYkFSi5WI3Z/lMBis4s406I0pIo0u2LzLF2Ac4bPOgtvRnwH0iYCBAgQIECgqcAMX+KaAtk5gckFRg0qPsuyrYWR1srY/veV9THeLnGU9QhKg4rNJ+rnRckYjnj7zdVxJ7C4KmZ7AgQIECBAYHiBqF9Ah4fVAQIDCJRc6A3QjWwTvwONdKHeO9jouSbH1aAiAUecXfFZ+JJbQ0abjfM9sD0pJHuq24AAAQIECBCYTUBgMVtF9YdAmcAqYUWJxrZGRvr35xNN9hb/LNlf6TZHNWgZDpRc2H+3v2V7Sq1y261wa8hRH0cPYnK19d8JECBAgACBhQUEFgsXX9eXFrgaWBzdYvH5aNPtf3//O0G3fspIy2J+ztDYjlNrocw3Qos7Myq2fo4QVmxtLRnTo98asvfI2dH71PLctW8CBAgQIEBgcAGBxeAF1HwCNwVyv7Rvsw1azTJIF9GfIcZfA4ca3zMzrt5uUjO02EzTv5+YpqCiVihzc4heflnpLIuRZyQILC4PCy8gQIAAAQIERhYQWIxcPW0ncF/gLLDo/YvtTGHGd4U+Z2ukQGGbjXI0AyUFB5/bfe5vW4uj5uyV1kHV/RFb9srZZ1lYeLNsHNiKAAECBAgQmERAYDFJIXWDwEWBkgu7SL9EH7X381aVmhfuFzmH3zw5brMqRu9MbvZQ6l+ksX3F28KbV7RsS4AAAQIECAwvILAYvoQ6QOC2QMmFXZQ1DO7cNvF5e8SGlGYrpD/hxv88KWWWoGKrcemtISN+/kV5JO7tNx0vJECAAAECBAhcERjxC9uV/tmWAIFjgdILuwihxZ3AorT23+s+fF74lu5jpO1mmk1x5D5SGHdl7Byds71v47rSB9sSIECAAAECBIoFBBbFVDYkMK3ACBd3PX9Z/lx49MlClj0H0BZSpDYcPfGlZ/tqH7s0jBvx1hALb9YeLfZHgAABAgQIhBUQWIQtjYYReFWgZE2L1KBesy1azrC4C/19y8l2u0na31u3nKTwYVt887MfaTHPq08ruesQ9XUlY3rEmQkCi6gjTrsIECBAgACB6gICi+qkdkhgWIGSC7xeoUXEwOJqoXNP9djCh8/9pv/f0QyYXuHR1X733L5k9tBosywsvNlzRDk2AQIECBAg8KqAwOJVbgcjEF6gNLR4O7joeUtIhKLNENj0cCy5NWS0WRYebdpjJDkmAQIECBAg0EVAYNGF3UEJhBZIF3k/L9zW8MYv/S7Yf/xgcO+0KZll8cYYvtf6P191FMKM1IdaFvZDgAABAgQITC4gsJi8wLpH4IHAldkW6VfqtG7C5wKVDw79x0tdrP+bZPWZJnfG1GyzLAQWd0aB1xAgQIAAAQJDCggshiybRhN4TaDkYu+zMa2Ci6ML9dGm89conPDmuuJssywsvHl9DHgFAQIECBAgMKCAwGLAomkygQ4CV2ZbbM2rOUXdwpO/F11ocf0k2LvI/97LKAtwHvXFZ/r1ceEVBAgQIECAQGABX24CF0fTCAQU6BVcmGHx52AQWlw7QUrG7igzdiy8ea32tiZAgAABAgQGFRBYDFo4zSbQUSBd+P11YVHOzxkX6YIw/XP17+gCbZQLzKv9Ld3emhalUv/ebpZZFup+re62JkCAAAECBAYVEFgMWjjNJhBA4G5wcWedC7MJjgvu4rX8ZChZk2WEEMzCm+U1tyUBAgQIECAwsIDAYuDiaTqBIAIlU+2PmprWuSiZdWGGxXmx93xGuPDuMYRLFuCMvpbFUWCh5j1GlGMSIECAAAECzQQEFs1o7ZjAcgJ3Z1wkqBRcpL+jx6JadDM/nPaMai58mm/BGFvMMsvCk0LGGG9aSYAAAQIECDwQEFg8wPNSAgR2BbbQ4edNn71ZF2ZY5DHThXgyT//+/Is+WyDfs/pbzDDLwqya+uPCHgkQIECAAIFgAgKLYAXRHAKTCTy9XSRxpH2YYVE2MI5mDwgtfvebYZaFtUvKzglbESBAgAABAgMLCCwGLp6mExhI4ElwcdZNtzz8qbNnbW2DP51Gn2UhsBjoDVBTCRAgQIAAgXsCAot7bl5FgMB9gZrhhcBivw7Ws8iPz9FnWZhNk6+xLQgQIECAAIHBBQQWgxdQ8wkMLPB0rYvUdYHF8QDYCy3cGvK71+izLCy8OfAboKYTIECAAAECeQGBRd7IFgQItBV4GlyUPhq1bS/i7X3vF3i3hvxep9FnWQgs4p13WkSAAAECBAhUFBBYVMS0KwIEHgs8CS/Sxfjf/7Tg6NGojxs34A7cGpIv2sizLDwpJF9fWxAgQIAAAQIDCwgsBi6ephOYWCD98r09pvNON90q8j9qe7/Ce+//H5+RZ1lYePPOu4PXECBAgAABAsMI+NI6TKk0lMCyAiW/gB/huF3k3zNOfn4BCXR+BykZYxHX/zhqt8/2Zd8udZwAAQIECMwl4EvNXPXUGwIzCtR4qsjqt4uYZZE/M/aMPl8Vcf0PTwrJ19UWBAgQIECAwMACAouBi6fpBBYRKPn1+wrFirML9i5sV3Q4Gycl4yzaZ+ZRYBExXLlyjtqWAAECBAgQIPAvgWhfvpSFAAEC3wJnv3yni+6/fq13cVVutQv27wtyF7W/j5gR17I4avNqY/vquW97AgQIECBAYBABgcUghdJMAgsLHAUWnxfcTxbpXOXibu/WmojrMvQc6iPOsrCORc8R49gECBAgQIBAUwGBRVNeOydA4KHA2a/eR0HD3TUvVljn4jv8McvizwGaW8siWsB1FFgIox6++Xg5AQIECBAg0F9AYNG/BlpAgMCxwFn4kLtwTK91u8jvtnsXty5sfzfKBV7RQh6BhXdQAgQIECBAYFoBgcW0pdUxAlMInF08ll5oPw0uEmTaxwx/Ft/MV7FkLYvSsZc/2vMtLLz53NAeCBAgQIAAgaACAoughdEsAgT+JXA2Pf/q+9cWOvy8YTvT7SJuC8kPgNxaFpFmWRyFepHamBe3BQECBAgQIEBgR+DqF36IBAgQeEvg7JfuJxdjT4KL1Pd0K0r6G3XWhdtC8iN4pFkWZljk62kLAgQIECBAYFABgcWghdNsAgsIPFm/ooTnyZNFtv2PGF7sXeBGusWhpHZvbDPSLIujmUjq+sZIcQwCBAgQIECgmYDAohmtHRMg8FCgdWDx2bzcQoulXdkCjDQDJP0T9c9tIWWVyT0xJEogcNTO3MK0ZQq2IkCAAAECBAh0EhBYdIJ3WAIEsgI116/IHuzXBrWCi+1429oXW3gRJcT4tnVhuz9CcuPhya1JpWOyZLuj2SBR2lfSB9sQIECAAAECBP4QEFgYFAQIRBXoEVhsFk+eLFLiuc3ESNu+ORsj3Q6SFh1N//78E1jsV22UtSzOghWf8yVnpG0IECBAgACBkAK+yIQsi0YRWF7gzdtBzrBrrHNRWsxt9sXfHy+otbDnUVCxHcpnwXGVRphlUePxv6Xj1HYECBAgQIAAgdcEfEl9jdqBCBC4IBAlsPhs8tOni1zo/u6me4FG+v+lMCK1bQtXtv/fX7/28j2b4nvnZlecV2aEWRZnbYyyzsbT8e/1BAgQIECAwIICAosFi67LBAYQ6Hk7SAnPFg6kUCAXCJTsr9c2wooy+eizLM4CCzUuq7GtCBAgQIAAgYACAouARdEkAosLnF0cRl1EcJt9MVKA4UL22okW/YkhFt68Vk9bEyBAgAABAgMICCwGKJImElhMIOLtIFdLsM3ASK9Li1xG+kuhTworojyxJJLNWVtyt4b0DtOOAovUJ5/1o4wy7SRAgAABAgR+E/AlxoAgQCCawNkv2aPfj/+5iOZbszG2YEJI8Xykn4UCae89x+dZ23q267m6PRAgQIAAAQLLCggsli29jhMIKZD7FXvm96zvJ4KkQCM9MWRbPPOzYMkpBRGf/33739tTRragwkyKekM9Nz57zrKYYWZSvUrZEwECBAgQIDCFwMxf/qcokE4QWEzARddiBR+wu7lZFr0+V8/ClJ5ByoAl1mQCBAgQIEAgikCvL1ZR+q8dBAjEEji7GLRIZKxardqayLMsoj9dZ9Uxo98ECBAgQIDATQGBxU04LyNAoImAC64mrHZaWeAsWOs5m2Hm9V8ql9DuCBAgQIAAgREEBBYjVEkbCawh4HaQNeo8Sy/PwoFes4EsvDnL6NIPAgQIECBA4F8CAgsDgQCBKAICiyiV0I4SgYhrWUSd+VHiaRsCBAgQIECAwB8CAguDggCBKAJuB4lSCe0oFYi25oqFN0srZzsCBAgQIEBgCAGBxRBl0kgCSwgcBRY91wRYAl4nbwuczQpKO/3PX4+fvX2Aiy/MLQj6dnsuNt/mBAgQIECAAIHfBQQWRgQBAhEE3A4SoQracEcg2iwLC2/eqaLXECBAgAABAiEFBBYhy6JRBJYTsFjgciWfpsPRZjVYx2KaoaUjBAgQIECAgMDCGCBAIIKA9SsiVEEb7gpEmmUhsLhbRa8jQIAAAQIEwgkILMKVRIMILCfgdpDlSj5lh6PcipGb8eFzf8rhp1MECBAgQGBOAV9c5qyrXhEYSeAssLBI4EiVXLutUWY25AIL59Ta41TvCRAgQIDAUAICi6HKpbEEphRwO8iUZV2uU7mg4M3P27Nz6r/+qUwKCf0RIECAAAECBMILvPkFKjyGBhIg8LqA20FeJ3fAhgJRZllEaUdDarsmQIAAAQIEVhAQWKxQZX0kEFdAYBG3Nlp2XSA3y+Kt2zHOAovUK5/912vrFQQIECBAgEAHAV9aOqA7JAEC/y3gdhCDYTaBsxDu//748SOFFq3/ztqQjv1WcNK6n/ZPgAABAgQITC4gsJi8wLpHILDA2a/Rb13YBebRtEEFIsyyiNCGQcun2QQIECBAgEAkAYFFpGpoC4G1BCL8Er2WuN6+JRDhVqez2UsCwbdGguMQIECAAAECjwQEFo/4vJjAY4H0S+jPf6Zo//1rTyut3u9JBo+Hjx0EFYgww0FgEXRwaBYBAgQIECBQLiCwKLeyJYHaAnu/wq7yyMEIF3S162l/BD4Fes8gsvCm8UiAAAECBAgMLyCwGL6EOjCwwN4voKtM1c4tCui9aeCBren/EugdyuXOMQtvGqgECBAgQIBAeAEXBeFLpIETCxxN2V7hQuLs199VZplMPLR17ZdAz3HeOzAxCAgQIECAAAECjwUEFo8J7YDAbYGji5nZZ1nkLqQEFreHlBcGE8iN9ZbhZO7Ys7/PBBsKmkOAAAECBAjcERBY3FHzGgL1BI5Ci5YXMvVaf29Puanq3pfuuXpVTIGesywsvBlzTGgVAQIECBAgUCjgwqAQymYEGgkcXczMPMtAYNFoMNltSIHcTIeWn8MW3gw5JDSKAAECBAgQKBVo+UWptA22I7CywNnFzKznp8eZrjzi1+z7WXDQcjZVLrBoeew1K63XBAgQIECAQFWBWS+IqiLZGYHGAivNssjNrph5ZknjYWT3gQXOgsmWa0nkzjeBReBBo2kECBAgQIDAjx8CC6OAQH+Bs4uK2c5Rv/j2H29a0EegxyyL3O0oAsI+Y8FRCRAgQIAAgUKB2S6GCrttMwLhBFZZfPPsdpBUFO9J4YamBlUSOAsmW82yyAUWrY5bicxuCBAgQIAAgdUFXBysPgL0P4rACo84zU1P92tvlNGoHa0EzgK7VrdneFJIq2raLwECBAgQINBcQGDRnNgBCBQJnP0S2upCpqhhFTfK3Q4isKiIbVchBc5Cu1bj36ymkENBowgQIECAAIESAYFFiZJtCLwjMPssi9yF0yzBzDujxVFGFOix+GYuKPQ9YMSRpM0ECBAgQGARAV9UFim0bg4hMPMjTnO3g7iXfoghqpEVBN5efDMXWAgKKxTVLggQIECAAIE2AgKLNq72SuCuwNEshNEvKnKzK1pNh79bB68j0Erg7VkWubBw9PeWVnWyXwIECBAgQCCAgMAiQBE0gcCHwIy3heSeVJC676LJabCSwJuLb+YCC2HhSiNPXwkQIECAwGACAovBCqa50wvMuPhm7oIpFdV70fRDWwc/BN6cZZELDAUWhiYBAgQIECAQVsBFQtjSaNjCArPNsnA7yMKDWdcPBd6aZZELLKwfY5ASIECAAAECYQUEFmFLo2ELC5wtkjfaOVsyu8LtIAsP9oW7fnZu1AwRBBYLDzJdJ0CAAAECowuMdvEzurf2EygReHO6eEl7nmyTm12R9u196Imw144s8MYsC4HFyCNE2wkQIECAwOICLhQWHwC6H1bg7UcftoAomV3h/vkW8vY5isBbsyzOgpGaszlGcddOAgQIECBAYBABgcUghdLM5QTOLmRGucg3u2K5YavDFwVysx9qneu5c9F3gYuFszkBAgQIECDwjoAvKe84OwqBqwK5C5no6z6YXXG14rZfVSB3rtT4nD6bsZXcaxxj1frpNwECBAgQINBQwJeUhrh2TeChwNlFRvRp3LlfdBNN9NDlYfm8nECxQOtzXWBRXAobEiBAgAABApEEBBaRqqEtBH4XGHWWRe4X49TLWlPdjRkCMwi0PtcFFjOMEn0gQIAAAQILCggsFiy6Lg8lMOKFRsnsCoHFUMNQY18QaDnLYsT3kRfIHYIAAQIECBCILiCwiF4h7VtdIDdbIdqFf669qZ7Rb2dZfczpfx+B3CyLJ+d6LrBwe1afmjsqAQIECBAgkBEQWBgiBOIL5GYsRLnYKAkrkvaTC6/41dJCAvcFcufQ3XM9F1j4LnC/Zl5JgAABAgQINBTwJaUhrl0TqCSQu9iIMmMhF6wIKyoNCLuZWqDFrSG595C7QcjUhdA5AgQIECBAoL+AwKJ/DbSAQIlALgzofcGR+2V466P3nJJq22ZlgdytIXcCylxg4bxcecTpOwECBAgQCCzgS0rg4mgagQ+B3AVH2rRXaFEaVrgVxJAmUCaQO6eunuu191fWC1sRIECAAAECBB4KCCweAno5gZcEcr+6pmbc+eW1RvNzsz+2Y3i/qaFtH6sI5ELKK6FFzX2t4q+fBAgQIECAQAABFxABiqAJBAoFchcdaTdXLmIKD3u6We6X2+3FZlfU0LaP1QTOwsArAWXuPPVdYLWRpb8ECBAgQGAQAV9SBimUZhL4ZwZFySyLBPXWeZ27CBJWGLYEngnkzrHS0CIXdr4ddD5T8WoCBAgQIEBgGYG3LmyWAdVRAo0Fchce6fClFzFPm+pWkKeCXk8gL5ALLUrChtz7hu8C+TrYggABAgQIEOgg4EtKB3SHJPBAIMosi9xF1NZFt4I8KLaXEvglkAsccqHF09crBAECBAgQIECgi4DAogu7gxJ4JFASFrScZVFy/NRBYcWjMnsxgd8EcutZpPMtnfd7f7nAwncBg40AAQIECBAIKeBLSsiyaBSBU4GesyxKj5064P3FQCZQT6AkKDyaaZG7fcu5Wq9O9kSAAAECBAhUFPAlpSKmXRF4UaDk4qXFLIvcL7UbgdkVLw4Gh1pGoOS83zv3cuet7wLLDCEdJUCAAAECYwn4kjJWvbSWwKdA7lfTtG3u3vYroiUXS2l/woorqrYlcE0gFz58hoYptEz/5G4nSe8T/ggQIECAAAEC4QQEFuFKokEEigVKAoRasyxKjrU13PtKcQltSOCWwJXzseQAztkSJdsQIECAAAECrwv4kvI6uQMSqCrwxiyLKxdH3lOqltfOCBwKlM60yBHWCjVzx/HfCRAgQIAAAQKXBVxcXCbzAgKhBErDhLu3hpTuP6G4FSTU0NCYBQSunJ9HHM7bBQaKLhIgQIAAgVEFBBajVk67CfyPQMksizuBwpWLIRc9RiSBPgJXztO9Fvoe0KdujkqAAAECBAgUCPiiUoBkEwLBBa48anQLLrbF+L67lvaV/vl5sc/eSy6C2ZxAZYE7wYWgsXIR7I4AAQIECBCoK+Aio66nvRHoJfDkfvYUXqSQ4s5fem266En/9keAQH+BFFykv7PQ0Xnbv05aQIAAAQIECBQICCwKkGxCYACBq7MsanXp7toYtY5vPwQI7AtsIWT691+/Nvn7V7goYDRqCBAgQIAAgSEEBBZDlEkjCRQJvB1aCCuKymIjAgQIECBAgAABAgTuCAgs7qh5DYG4AnfuY7/TG/e+31HzGgIECBAgQIAAAQIEigUEFsVUNiQwjEDL0MK978MMAw0lQIAAAQIECBAgMLaAwGLs+mk9gTOB2sGFWRXGGwECBAgQIECAAAECrwkILF6jdiACXQTuPqb0s7FmVXQpnYMSIECAAAECBAgQWFtAYLF2/fV+LYGSxx1uIimkSE8U2F6zlpTeEiBAgAABAgQIECDQXUBg0b0EGkCgm8DnYw8/H3PokYfdSuLABAgQIECAAAECBAhsAgILY4EAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", - "termsOfCarriage": "All shipments are subject to the Hague-Visby Rules. The carrier assumes liability only for loss or damage due to its own negligence. Responsibility ceases at the time goods are delivered to the consignee or their agent. Claims must be submitted within 7 working days of delivery.", - "attachments": [ - { - "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "blank.pdf", - "mimeType": "application/pdf" - }, - { - "data": "e30=", - "filename": "empty.json", - "mimeType": "application/json" - }, - { - "data": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", - "filename": "sample.pdf", - "mimeType": "application/pdf" - }, - { - "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", - "mimeType": "application/pdf" - } - ] - }, - "type": [ - "VerifiableCredential" - ], - "qrCode": { - "type": "TrustVCQRCode", - "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fbill-of-lading-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - }, - "credentialStatus": { - "type": "TransferableRecords", - "tokenNetwork": { - "chain": "ETH", - "chainId": 11155111 - }, - "tokenRegistry": "0x716a589E80E83360B288df6EfBbefcC00fDfd95A", - "tokenId": "7f2cb8f7ea323044f5b1d1e5e4c09dd269cf320c844ad059dfbbabf8699cd72e" - }, - "issuer": "did:web:trustvc.github.io:did:1", - "validFrom": "2025-06-05T11:29:32.860Z", - "id": "urn:uuid:019ff92b-a165-7dd1-8c14-08b7cbe3de0b", - "proof": { - "type": "DataIntegrityProof", - "created": "2026-08-13T03:30:13Z", - "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", - "cryptosuite": "ecdsa-sd-2023", - "proofPurpose": "assertionMethod", - "proofValue": "u2V0AhVhArR5HuhH5Rbzrh1MkVnIpHaQo4SDZA2I3I-VGMQSKDtV7Nu0LKB2PYoNoAjVHe2s9PRqadyDhuI8EhPBBRkkYN1gjgCQDNecCFfpepqb0sbyDK1QZoJlWO12I8yLgHZgvjTOrLYNYIBmUwdyULWF_VnGIM-24qu5Dhi1oLLkWrIKfHx4QbIJHmDlYQLJh3aKld7isT8eLqN4p4EP9GbPL2LGdMQLeAsZ1RhLZUZvM_LZgy9pyDaulYbtN3cr7Q6osIEzJBHazj8f654ZYQDl72IsztXWN7EQ0vZfszrYNLgs-3tZeJuc8eQ9hW63w1fYEER7jqbfIrGXx5j1tIpL2nYiAHDJoT-wYxRka__tYQFEzptwWuqU8Ru2G9Hg_QSbgTnynXW8W_wKenpROYIQ9tsjpEvIXZdtEQ8VGHg8khgOdpENsqEwttaJuXPfHtaNYQBw5E6ev_2AmcYAKGAM5yWZxxY5sP8RN--IPHvwiDVR8T8RYvIyO--uKbd2VbnB4Astqn8mFPLKs7p9XBHoXILJYQHF84n4_RdbnkEovl-3TbBSmleZlrXnGUsaGpvh8d4Uo_r3WG1qPiZwIuVz23AefpDkNtI0-0NusbXnxFk5mmPpYQP-sQpvPZ7k_uYjZsp81LMkhPu2At09ff4GHe48A0nVX8a2GutDagnY4EJ9do7cbbQr4oZVi050asG8V6ABZH5xYQABgxArI1qOD7Kl0LnYERhZ_HVeXbxW6pNo1lZ7G1gFGz5PtWnOsLVlObt0cLe16MTwnPM4KNjpFiGKSmefinDtYQE58Tk9jvmw-1hgqEpSKtycJc0Y7lKxnjHRgPnIYG5TXMhCEpjMtPP6cSS1dWVMqmYKQ9Oi0gPkMdducKGqfjBNYQFCnvA_s5V7EyTbJUEBTBZ7yiAsLmmPzsfq9ilIh276NI1ZT4uaC1pfV3RhbUr9CuPOmMqvi3xpBYFTuAFXPUUxYQEtF_0J7H0RyxpENUCnfFsrEsVikK2WwdIZrePhRCiKkV0S0oiXuCFJ-vy76v_Dn7BU67qFYtk6N6awo34KbXRBYQOIzGY1J5MymdOiQROjVrzKLqD9JpLLy9C4rN3is5Ifm4n-m-GsVWNrCeEWEU58AfdFTf2Y0fJ90m2hB6UiFttRYQFJr2-u0Tm1eo9ykE3P-l0R9gOAYdk8Ga3uVKHmcQl2P2Q1a4uybB4WvgiugIkYqIqso8B1wxU6i-f90y9wE-XJYQMs6TbUqal_sC1cESu2ikv12Za7kT3tUhbwCJM-lEZLHYTG3e7yCMzK-nR_tB_6phyqo77Gr7_h490FUMiFegWNYQL8Dcuq92zT1gEW5lvUvzpZ8Gdn0sgdJ4qyWvT-H7vqNkb0uqKy2WeLwuv2w32VU_tkAjM770oZWWf0lpfY6rbdYQIZikfYstNFeN11OtTcTFoQagu2g51RT9g24EzCJseFgwWxLRKjDSyUtpkcN58zcW2uLEtzpnTwJmSNDqOlVNlpYQAHyC0EyI4NiNuBy5KkYqlX-odqMqfwRH5jrZozYKXv9tWES1CzylYFt2G0thAFOzXSF4xuYZfo5CbH4CUqp-KdYQMnGbWmy3Rm5uAKYyV76rE4lFn8aTNQXuMFbHLv_SaN54wOLPTNohQ9my5flUH1iwpFKZwN0q4iYxj58pxdBdlZYQJote54akQ7n0qPxdCHH8QEYRUsMP-hfGC5WkeDchPcK3zizllD2brg28qXLIZBz3EVQtUkzZPSSLW0qO0rlD2VYQAU1ALhEjwhHjOTpkzHtoYOtvDKigtDs1ef8vOJU5dbL6d0MdTJSbw9j78Iq3RT3g3TiR7-vBDJF4U0vDCHjIaxYQGvqdfoNymSZN7HUhY-ooU6uepQ6rlY2_p2f2ikis_79Y-OZfegqG4EG4N_j6415LA4thp7XAWchWVsdoUeWRFFYQJA6PZeJHHftOgm8UOYIkKIbYd-LAyPv3qpo_TKX6mJ4gsPrVcTZzZ-Lsuf1-8kY5fq2bmnP5dQvYTF6C1OW8E9YQJ8os7ot-hqaeWney-Hvezt1MNmjLSv6UDYdfCzkhiKkuxuWGI3qn9mDN9VebvAtMf8JdJR2zlVmlKEn5NPgwa1YQMO6YlLrM4fGbKl5wW4QN7-rCf5bGFBbxo1KPXzBo_RuAY36lVkq0Kqgs4jvw_LmCPw9chvjOvgjUAlmYFFVt0FYQHgA1EjF-8UG3QOyeujK5xbyUdLbcbWcqTc2wOs6xphRYxIe7VNjX9IL-nV_E6faPRXf8TXuvfNdoU-ptVOsaoFYQO_2FFLMbFv4k2AhSw0WLKrqXo67EWlsAAXxRWYaP-Yp8AGvp0os9yH7hQAmR8iqJ7Qgx2XV0spq_P_kPraKLslYQOBRssIm31McNhAJCLfHYLX__W_MYov4wQ_msjEVGYhaLAqbJmyxkv5jIoBBYsby74bcqD0Adsuz7Sss7mTcWzBYQOmoMbrZSxXfhKmtIQ4zsHqzqlGF7O8mDabpBdBfQif96yjWTkR2oPW4K1BaS7MVisAzHukGfPdgWroDI0SshDFYQJyKekenojrunnIMl2ev8Qja3hD4sguBiCuqPtAQiJwV448Tt0kuQBxlOEi9s5WRUoH3HfNxdLi6pGzbz-n_3M5YQC_bgTfJrz9wL46weLpfjghWgDUw_w20shMlUISSnKEXFLnDeTKs33m4mRxOceH79EcCZdqKHaeaQTPpyXMrNslYQErI1C6k5tEtUC7Q1SaxcwAISx4XSUA2xovwiBCDp0dPDiz9WHTrXvsn3YDBBWjZE9q1udsNcFTflL8lZt15UBNYQEmw9eVk-uB1vlrHLCDczFsxTK0f_4UTJk2qVegX29F159dyx_b3gsYQCsRcg7vWOJHsrV8Bdtq51hbeolLW1CJYQHROd16mvUp38tKUtc6Qm1A0jB-skOayZ6NpWSBGRdKEDchzDnmF7Ydquwi7H-l7rd7MWQ3QHHHwtYE4DmdHn_lYQF6HcPct2ZsJpAEgsYfdhupCeoAMjWJ6NhPn-RiaxfTxztBDEmNeqImy6JLM2KJ5Sk8CyjwooLn2t7ETVNggZWZYQHscAwPabSWPfD4-WSgtJpoaA1x1w3LGbXytX4Cu98f7qWbF-mvErEJHiTksP8A5wgFk4gDNXsT-olYwlUH_ahZYQA8kkj-tqzoY_FBxFvfxT56SN9ggNyNvT0eKLnVHsTrVg34fP3ybX-A3--Y6Wxsq4v3JAuYtZQ6dqXi6X06IOx9YQJpBxAwX-hp-q51HNwImS4hm9UvUYWMqEyFmP60xO3korTDWjn-msejT_oXDGmV-2YsdrHmMEpkxwYurxXvneDdYQIYSl63EYABXUmsyx1TWJZKna1qZwZLDHFQ_VaGA1Wakk0UUJ3z9TalCfiWAimqRjiOXTVuoE80ekVHpXGBCkedYQNi0hvgRh7L2PLgxWs-k1EdNGHKOEOlBFaF3CZE5AL00ehGan192NBNa44Mmh7H33h098WBWGubZtvpPDqgQWTlYQHrhIaHYG_AoVSGGPhskZQ0bMNN7-XVQ3KdUtr7u_hU8jQM6NNb3x_IzL5XKhe7A6i8Yw6GaZLs7bU4upTZUUgNYQBFYf_TuCeDAwBCNd-TpdFSDVfq64FqaJlgpWpGO5g2kBVXUVUBpX34A2sNivGrKqTcG2HsEAntw0RQWKALJzvRYQBRobmDyeN785I3CnBX9qJr_3wT9CJJdQBro3fRsAM7SN1q1J89Teop0OVLW3kw6efK1lIwlrxrqDG4bYsNutI1YQDzyWnALaDZUwxMK7j6Qp2e8u-omYyo3pZzjGrQEw-lk1w9rHQ8063LddcEs189ydh9vROl_fLOOM9MuXMJh65JYQFnFfKh77o8v57GvIkQiLGVKqCOtQdUME-NNK7aSj7hRTAfl6w9VmT6n6KdtouLj4EqmqA7ugAGItZ_8bkwT8l5YQGI7SjlQm5jAhlKKoyo3KHyfGxq93GQfu7AW0wxWlp9JeS0mqyn3t2FsdosgzaJRH8goy9q3dY-MPb3hi48dj8xYQMpMYHgfYRYf1a9vIwlyHF_LAYzuuX1XhS_8Cuig-7_GVAv_P4J3zoEltPk82SJoE9X2VHz5TzACdWZcki916iNYQKkym6OTVSrrdXQEdQACDmApkv85f8gpM9PR4NrVy_upbppWvpERTv0ePg9AxuBfBIcv59-EQcn7XAbzes2Le-tYQEaBTiTnftHM0Rpbc0gRaL5GOTbIFm0wcr5BwgZwJT6ZHHs03H2IAD7bv1CWS0u3wrpjTFoehmcnGnWUcY1tbuJYQLPFAEFWwwNo6mEzr0wRu-TcOjZlfAONRa9WnCVu9axEJO20Dw_X3MBAZe32muzXrIPlmdReEoArk_s6g_2HmjRYQEn4gyi8Pnc2ky_Uo7uh981RtfoU8HiEolM1RXRwdF9XI8Zvs77DCCpqtcdhdf0XpQ6U7efWDSHCIYy74b52451YQICAcMR6N9d08FGJiDtFKCItZ-BNL3m31DANU42WZ0CwRbHsEaSqwcM0qFCqj66wqKMiz4bhDNgEjPEBIRhnmdRYQBeEVnsHkM7qsPlJl2sUHWWnIa5s_aemIy5Niu1juErnshNz655yQW-ViIalRndYbsr1vCjrCROS_222RLOSTTZYQN73j4dL8VqJRLITcQI4Ft-LZiSTNbMHKbROTzqwMWK-jtFTuAX4Em5G8ZvXCpkPtNtS0mGBhsjaPXiyRbAifaZYQE_LUE6JLYMszfo4L7a684P4lQCk2uh5B27dNvFXe52tLUP1huk53PuMi3NDdBEFSwQwGd3UcSI15-CC4_juEvlYQC1VZF5GTqULv4yOvja87SoKZ44MI0wBK8XeQs9I1JDR285OG_DF6q6GX9f3jrKHx0_c_mOdMdS1fjVT_W7xngtYQKm461jENRUwd3cpTicnAfhgm-4XPFTb2JGUeHlCWJcxXTwekQEk72XUTzjy517OlIu2K8mpYbeMn-6vafLMKA9YQETUu9OtpkjhoZ4WVeg9ydtDzuPDEcCL-s8w8m4oZQadZ8hDw3Zdh97Gd7TqufN-aLbJwX09BdlM7nJNUFBOUG1YQNZ7zazKHuLdxeeUaBKTH3T73sttgnnQ92WEW0F2iEY5Bgt_2hqJTYBIgY7MrSDWoZBkZd73kd2zGCokENMUr3yDZy9pc3N1ZXJqL3ZhbGlkRnJvbXEvY3JlZGVudGlhbFN0YXR1cw" - } -} \ No newline at end of file diff --git a/wr/operative/vc.json b/wr/operative/vc.json deleted file mode 100644 index d3c81f2..0000000 --- a/wr/operative/vc.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/ns/credentials/v2", - "https://w3id.org/security/data-integrity/v2", - "https://trustvc.io/context/render-method-context-v2.json", - "https://trustvc.io/context/bill-of-lading-carrier.json", - "https://trustvc.io/context/attachments-context.json", - "https://trustvc.io/context/transferable-records-context.json", - "https://trustvc.io/context/qrcode-context.json" - ], - "renderMethod": [ - { - "type": "EMBEDDED_RENDERER", - "templateName": "BILL_OF_LADING_CARRIER", - "id": "https://generic-templates.tradetrust.io" - } - ], - "credentialSubject": { - "type": ["BillOfLadingCarrier"], - "shipperName": "MAERSK Co.", - "shipperAddressStreet": "101 ORCHARD ROAD", - "shipperAddressCountry": "Singapore", - "toOrderOfText": "TO ORDER", - "consigneeName": "ABC Natural Foods Inc.", - "notifyPartyName": "Amanda Green – Import Manager, ABC Natural Foods", - "packages": [ - { - "packagesDescription": "Organic Cashew Kernels (25kg bags)", - "packagesMeasurement": "100 Bags", - "packagesWeight": "2.65 MT" - }, - { - "packagesDescription": "Roasted Chickpeas (20kg packs)", - "packagesMeasurement": "60 Bundles", - "packagesWeight": "\t1.3" - } - ], - "blNumber": "SGCNM21566325", - "scac": "SGPU", - "carrierName": "Vikram Rao", - "logo": "data:image/png;base64,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", - "onwardInlandRouting": "Rail to Johor Port → Trucking to final inland delivery point (Long Beach, USA)", - "vessel": "MAERSK NATALIA", - "voyageNo": "7831W", - "portOfLoading": "Singapore", - "portOfDischarge": "LOS ANGELES, CA", - "placeOfReceipt": "JURONG PORT, SINGAPORE", - "placeOfDelivery": "Long Beach Distribution Center, CA", - "placeOfIssueBL": "Singapore", - "numberOfOriginalBL": "3", - "dateOfIssueBL": "2025-06-05", - "shippedOnBoardDate": "2025-06-05", - "signForTermsAndCondition": "The carrier accepts the goods as described in good order and condition for carriage under the terms stated herein and subject to the Carrier's standard Bill of Lading Terms and Conditions.", - "signedForCarrierText": "John Doe", - "carrierSignature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", - "termsOfCarriage": "All shipments are subject to the Hague-Visby Rules. The carrier assumes liability only for loss or damage due to its own negligence. Responsibility ceases at the time goods are delivered to the consignee or their agent. Claims must be submitted within 7 working days of delivery.", - "attachments": [ - { - "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "blank.pdf", - "mimeType": "application/pdf" - }, - { "data": "e30=", "filename": "empty.json", "mimeType": "application/json" }, - { - "data": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", - "filename": "sample.pdf", - "mimeType": "application/pdf" - }, - { - "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", - "mimeType": "application/pdf" - } - ] - }, - "type": ["VerifiableCredential"], - "qrCode": { - "type": "TrustVCQRCode", - "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fbill-of-lading-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - }, - "credentialStatus": { - "type": "TransferableRecords", - "tokenNetwork": { "chain": "ETH", "chainId": 11155111 }, - "tokenRegistry": "0x716a589E80E83360B288df6EfBbefcC00fDfd95A" - }, - "issuer": "did:web:trustvc.github.io:did:1", - "validFrom": "2025-06-05T11:29:32.860Z" -} diff --git a/wr/signed_vc.json b/wr/signed_vc.json deleted file mode 100644 index f7537d0..0000000 --- a/wr/signed_vc.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://trustvc.io/context/warehouse-receipt.json", - "https://trustvc.io/context/render-method-context.json", - "https://trustvc.io/context/transferable-records-context.json", - "https://trustvc.io/context/qrcode-context.json", - "https://w3id.org/security/bbs/v1" - ], - "renderMethod": [ - { - "type": "EMBEDDED_RENDERER", - "templateName": "WAREHOUSE_RECEIPT", - "id": "https://generic-templates.tradetrust.io" - } - ], - "credentialSubject": { - "type": ["WarehouseReceipt"], - "warehouseReceipt": "WR-998812-A", - "issuanceDate": "2025-06-06", - "ourRef": "ORF/SG/2025/556", - "rentStartDate": "2025-06-06", - "yourRef": "INV-56789 | PO-998877", - "commodity": "Shelled Cashew Kernels – Grade W320", - "order": "TO THE ORDER OF", - "account": "SunHarvest Distributors LLP", - "goods": [ - { - "brand": "GoldNut Premium", - "piles": "5", - "bundles": "25", - "pieces": "500", - "netWeight": "1.25", - "grossWeight": "1.30" - }, - { - "brand": "AgroChoice Classic", - "piles": "3", - "bundles": "18", - "pieces": "360", - "netWeight": "0.95", - "grossWeight": "1.00" - } - ], - "logo": "data:image/png;base64,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", - "spl": "SPL-20250604-003", - "totalNetWeight": "2.20 MT", - "warehouseAddress": "Nutra Storage Pvt. Ltd. Plot 44, Sector 18A Navi Mumbai, Maharashtra 400703 India", - "markings": "All goods inspected and stored at controlled humidity (below 65%) Packaging: Vacuum-sealed bags in fiberboard cartons Lot Nos: GNP-W320-2301 & AC-W320-2302", - "storageAndServicesTerms": "Stored under standard FSSAI-compliant food warehousing conditions. Charges are levied monthly and subject to late payment interest at 1.5%. Movement of goods requires written notice and clearance by the issuer.", - "signature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", - "termsAndConditions": "All goods are stored at the owner’s risk. The warehouse is not liable for damage due to force majeure, pest infestation, or improper declaration. Insurance must be arranged by the depositor unless otherwise agreed." - }, - "type": ["VerifiableCredential"], - "qrCode": { - "type": "TrustVCQRCode", - "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fwarehouse-receipt-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fv5-token-registry.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - }, - "credentialStatus": { - "type": "TransferableRecords", - "tokenNetwork": { "chain": "FREE", "chainId": 101010 }, - "tokenRegistry": "0x7202363bBDb126036F7C3243Ebac310d9d145040", - "tokenId": "1ce97157c8270ff36011db64fefbd4321bdf2fd60573d0261e4802b05d7ffda7" - }, - "issuer": "did:web:trustvc.github.io:did:1", - "issuanceDate": "2025-06-06T05:23:56.994Z", - "id": "urn:bnid:_:01978832-adc0-7777-b9ca-f1f13bee2eb2", - "proof": { - "type": "BbsBlsSignature2020", - "created": "2025-06-19T12:38:32Z", - "proofPurpose": "assertionMethod", - "proofValue": "uSCg9NrwYbpEcROL+LlOonEeLqWMChYcbI/Ha15TFN+wpYWZSiVhroSmWCkMDea/OEdYas5s0mWFfxvv4xBbhNgGHvqUSlR1IxCDvGhmhN0Hn7mSVyyxyeEVmevgPxRMyByoBXIi11/X0DmGJSz/2Q==", - "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" - } -} diff --git a/wr/vc.json b/wr/vc.json deleted file mode 100644 index c5722c3..0000000 --- a/wr/vc.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://trustvc.io/context/warehouse-receipt.json", - "https://trustvc.io/context/render-method-context.json", - "https://trustvc.io/context/transferable-records-context.json", - "https://trustvc.io/context/qrcode-context.json", - "https://w3id.org/security/bbs/v1" - ], - "renderMethod": [ - { - "type": "EMBEDDED_RENDERER", - "templateName": "WAREHOUSE_RECEIPT", - "id": "https://generic-templates.tradetrust.io" - } - ], - "credentialSubject": { - "type": ["WarehouseReceipt"], - "warehouseReceipt": "WR-998812-A", - "issuanceDate": "2025-06-06", - "ourRef": "ORF/SG/2025/556", - "rentStartDate": "2025-06-06", - "yourRef": "INV-56789 | PO-998877", - "commodity": "Shelled Cashew Kernels – Grade W320", - "order": "TO THE ORDER OF", - "account": "SunHarvest Distributors LLP", - "goods": [ - { - "brand": "GoldNut Premium", - "piles": "5", - "bundles": "25", - "pieces": "500", - "netWeight": "1.25", - "grossWeight": "1.30" - }, - { - "brand": "AgroChoice Classic", - "piles": "3", - "bundles": "18", - "pieces": "360", - "netWeight": "0.95", - "grossWeight": "1.00" - } - ], - "logo": "data:image/png;base64,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", - - "spl": "SPL-20250604-003", - "totalNetWeight": "2.20 MT", - "warehouseAddress": "Nutra Storage Pvt. Ltd. Plot 44, Sector 18A Navi Mumbai, Maharashtra 400703 India", - "markings": "All goods inspected and stored at controlled humidity (below 65%) Packaging: Vacuum-sealed bags in fiberboard cartons Lot Nos: GNP-W320-2301 & AC-W320-2302", - "storageAndServicesTerms": "Stored under standard FSSAI-compliant food warehousing conditions. Charges are levied monthly and subject to late payment interest at 1.5%. Movement of goods requires written notice and clearance by the issuer.", - "signature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", - "termsAndConditions": "All goods are stored at the owner’s risk. The warehouse is not liable for damage due to force majeure, pest infestation, or improper declaration. Insurance must be arranged by the depositor unless otherwise agreed." - }, - "type": ["VerifiableCredential"], - "qrCode": { - "type": "TrustVCQRCode", - "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fwarehouse-receipt-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fv5-token-registry.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - }, - "credentialStatus": { - "type": "TransferableRecords", - "tokenNetwork": { "chain": "FREE", "chainId": 101010 }, - "tokenRegistry": "0x7202363bBDb126036F7C3243Ebac310d9d145040" - }, - "issuer": "did:web:trustvc.github.io:did:1", - "issuanceDate": "2025-06-06T05:23:56.994Z" -} From 18eb4a9f42bd0e6ef428a049ea07beb85983ec28 Mon Sep 17 00:00:00 2001 From: Rishabh Singh Date: Thu, 13 Aug 2026 18:10:47 +0530 Subject: [PATCH 3/7] fix: remove test files --- w3c-website-fixtures/signed/signed_vc.json | 47 ---------------------- 1 file changed, 47 deletions(-) delete mode 100644 w3c-website-fixtures/signed/signed_vc.json diff --git a/w3c-website-fixtures/signed/signed_vc.json b/w3c-website-fixtures/signed/signed_vc.json deleted file mode 100644 index facaf84..0000000 --- a/w3c-website-fixtures/signed/signed_vc.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/ns/credentials/v2", - "https://trustvc.io/context/bill-of-lading-carrier.json", - "https://trustvc.io/context/attachments-context.json", - "https://trustvc.io/context/render-method-context-v2.json", - "https://trustvc.io/context/transferable-records-context.json", - "https://w3id.org/security/data-integrity/v2" - ], - "renderMethod": [ - { - "type": "EMBEDDED_RENDERER", - "templateName": "BILL_OF_LADING_CARRIER", - "id": "https://generic-templates.tradetrust.io" - } - ], - "credentialSubject": { - "type": [ - "BillOfLadingCarrier" - ], - "blNumber": "232323", - "scac": "MAEU" - }, - "type": [ - "VerifiableCredential" - ], - "credentialStatus": { - "type": "TransferableRecords", - "tokenNetwork": { - "chain": "ETH", - "chainId": 1337 - }, - "tokenRegistry": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - "tokenId": "31884d9f2926120a5779cad07bc5c83ee4ddcf99e88307c8bddf78509cfb2467" - }, - "issuer": "did:web:trustvc.github.io:did:1", - "validFrom": "2022-04-28T03:31:39.440Z", - "id": "urn:uuid:019e9559-79e7-7332-aeea-8a661a265109", - "proof": { - "type": "DataIntegrityProof", - "created": "2026-06-05T01:15:29Z", - "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", - "cryptosuite": "ecdsa-sd-2023", - "proofPurpose": "assertionMethod", - "proofValue": "u2V0AhVhAbJBU78Z228przCwJVyut6f6aSfJcs1id3fksuyDmsmpRRcPwoQcr6GHvy8zel8xQW0uBK9e-FXtK_blEHIY3JFgjgCQCFK-FrPumD5dYNQ7dAxaEuExm_aVZClEqRszUFPxMlxNYIK7IR8a3ErSikRe7ECZCuMOraaQc4hGgM5-9-BJ4OnLzjlhAeM8LkRLPknB3RRoVm0NBKfW1Bf-YhxKrI6JvCVAV_cWT9kBWBPlCW8JEJl1D5dyRKMyJAHGA5_MTlEOJeWLGYVhAOF9hcpFdJwTVwYEnWVChcOnM-jNtox9AmVubDVnr2w1QW3lu4Zi04JVY59MOK3KxqbM9liEdAfGxqVCXyIxDv1hAWR3BcA58YBMv5u3M2qYiYsitam7X4GewnSqTqTx_UMJiTF58uLAKFiFpWLZCpTLZPWh9-ucPZ0RW__7sr1tOtlhAbxtAIKsH4K0OYRXb52sZuUFp4qz57aGpxPuyHD3O_mYNPxX837ohqvVsAxT1Ra_C1iGvE5wQ_-qn-TFjkFd8M1hAa7sb8ETWCX4wb-GjJD_tsapJx-7Cju8Q1K7j0axQTS_o2PLmKF1g9s9-_zcs0xw-4eTcc1SfgVueuj6_w2IQxVhAwcWawns62ok0D0QHw8q0_D5PbNGNI2J_4XxfQu9N4bCV1ALjZCZqrNxrp3Yjlo83aeAp1cy7iFGjdGDHE8q35FhAHTNrrOepfgqXiDNnAu2vjxPpdf4B2E51EHotVWMe-xSvUf9etm1FcT7UhwA2oKHUSkarJLja0Xp7_Jy8Hxz-KFhAAyX05QrrQ7Sksd3FTzOVdSO4fvxK-Fb6LqkcU_1XlfdGUuXdknEQ5PczV-hahi4ZundhwBmEFOe5136JNo4ctlhAq_U8zntQlRXIT8Xu5CbWOFYXA6F8VRYaboxRyRc2sMhlhCU6RqDQPVNBS5Ck0HMIxqiotWE7Meh1tCmkLXc11lhAtuH8kXiQD6vdx27-5yhKZBY5bDcAat5RlIaG6rrhCOzqfxwXEAHlYwyw0EMutNBlRjZG1MhQoqupjxA3tGACg1hAijyXKUtd0szxLEy1ZUtyJ-2MprqPgXUDam99k647G_RZbP_HBGgskECl7NOzWGByZ5K96fBeJ3sxA9tnRO18_1hAhdYPqxdG9FUok1LNTjm8ghO_P_6mUnZk99u5YWD1z1cUAodjzQ97elIYLTPUgy4Iar-a2KHdSZXbdK2MpJDh1FhAZQr9ztpTF9QW1JA-CTEcOz0MKddqvIFFiGO2vPmXKm0Q5FEaWR3pRRJWTLT7nY64wsd_2ZH572maCA6AbLSPllhA9FwWgEkt36ZEAAB6Y-2GXtg1lGrz6ae2xhmhw2p4SfFyw7WoWAv1eRcHYcROKmdHKIRQnkj_OUDiggaG7p4lxIJnL2lzc3VlcmovdmFsaWRGcm9t" - } -} \ No newline at end of file From 6013d860019d76df1f7054809c8584c17381ecea Mon Sep 17 00:00:00 2001 From: Rishabh Singh Date: Thu, 13 Aug 2026 18:45:22 +0530 Subject: [PATCH 4/7] fix: package lock --- package-lock.json | 12705 ++++++++++++++++++-------------------------- 1 file changed, 5089 insertions(+), 7616 deletions(-) diff --git a/package-lock.json b/package-lock.json index d740d17..d932c77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,28 +1,16 @@ { "name": "@trustvc/trustvc-cli", -<<<<<<< HEAD - "version": "1.2.0-beta.2", -======= - "version": "1.1.0", ->>>>>>> 37fcadf (feat: pay on behalf) + "version": "1.3.0-beta.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@trustvc/trustvc-cli", -<<<<<<< HEAD - "version": "1.2.0-beta.2", - "license": "Apache-2.0", - "dependencies": { - "@inquirer/prompts": "^5.3.8", - "@trustvc/trustvc": "2.16.0-beta.3", -======= - "version": "1.1.0", + "version": "1.3.0-beta.1", "license": "Apache-2.0", "dependencies": { "@inquirer/prompts": "^5.3.8", "@trustvc/trustvc": "^2.16.0-beta.4", ->>>>>>> 37fcadf (feat: pay on behalf) "@types/yargs": "^17.0.32", "chalk": "^4.1.2", "dotenv": "^16.0.0", @@ -127,16 +115,6 @@ "license": "MIT" }, "node_modules/@aws-sdk/client-kms": { -<<<<<<< HEAD - "version": "3.1102.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.1102.0.tgz", - "integrity": "sha512-NNWPWGSq3cYGmmqrEx18PfSbC3ZRBDrV/bejOTq/g51Jxf7/rZ0eBhQfJqdTX9GU+MNUuEC3eTGynWTC+Fs9kQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/credential-provider-node": "^3.972.77", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.1109.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.1109.0.tgz", "integrity": "sha512-sdS3n7WQdCN3G/Hu+fWJea1KXCgcnW7z78dNZ/q+jQKy4+K2IUhentQ3o2LLlvClTO/MS3+1qbMG/vgoyGgSoQ==", @@ -145,7 +123,6 @@ "@aws-sdk/core": "^3.977.7", "@aws-sdk/credential-provider-node": "^3.972.79", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", @@ -157,15 +134,6 @@ } }, "node_modules/@aws-sdk/core": { -<<<<<<< HEAD - "version": "3.977.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.5.tgz", - "integrity": "sha512-O5otOc1c6UZh5HsHAaPdYBcUUR9HL6mtnKqvc8nxN/CKDGUBUpsdh0q8K04Uz/dd1i0TaGyIQuQNqoO7+ad2TQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.974.2", - "@aws-sdk/xml-builder": "^3.972.37", -======= "version": "3.977.7", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.7.tgz", "integrity": "sha512-I88Iov89NVmjSmJLKSv7Cn9M2J+a2942OkA8nZCbz+sl4ZeY4zEOcoLOrbt1GRfQ8zEQKnjAJdXixA3J/p1fDQ==", @@ -173,7 +141,6 @@ "dependencies": { "@aws-sdk/types": "^3.974.3", "@aws-sdk/xml-builder": "^3.972.38", ->>>>>>> 37fcadf (feat: pay on behalf) "@aws/lambda-invoke-store": "^0.3.0", "@smithy/core": "^3.31.1", "@smithy/signature-v4": "^5.6.12", @@ -186,15 +153,6 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { -<<<<<<< HEAD - "version": "3.972.66", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.66.tgz", - "integrity": "sha512-bOzP2+zdJ0XrghywB4FaJXtGZCx9yS0AGps+VJ5yEgg30wVyHNmVDBwVDXcRypzQY5iLGCS3NSn0nsuISqjFCQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.972.68", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.68.tgz", "integrity": "sha512-2a20A/IdNOwUvaDq91iqqS7BA0XlNMfW3iLGZGZLJv0EbUqhSxB0PIx4rQQqssvWj1uXImb3/UCCdHz/+1dOiA==", @@ -202,7 +160,6 @@ "dependencies": { "@aws-sdk/core": "^3.977.7", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -212,15 +169,6 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { -<<<<<<< HEAD - "version": "3.972.68", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.68.tgz", - "integrity": "sha512-lkunS8X+H6V76WE+t/uGQm/U8v0JXK5mLfNFTUAMlE1kqaCjwlmqKJrgCVtqjK/vqnlrSWsLK4Lr4NANBWlfTQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.972.70", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.70.tgz", "integrity": "sha512-0yRem2Fs52r/Nn6UAqIlpjexfaYj8ziEozOe9tamtAVT/5bzFLKx8O2r7MaRqgS3hGKHIa1Jij9nKHSsNnb04A==", @@ -228,7 +176,6 @@ "dependencies": { "@aws-sdk/core": "^3.977.7", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", @@ -240,22 +187,6 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { -<<<<<<< HEAD - "version": "3.973.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.11.tgz", - "integrity": "sha512-KoDEolYtLHG/8C+IiZpXbJWyBOMkrHV+j66Kb9PBXmLv5euGb7aELvuCmLenoGAV6gBW2wM7TsG/1e5iulH4kA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/credential-provider-env": "^3.972.66", - "@aws-sdk/credential-provider-http": "^3.972.68", - "@aws-sdk/credential-provider-login": "^3.972.73", - "@aws-sdk/credential-provider-process": "^3.972.66", - "@aws-sdk/credential-provider-sso": "^3.973.10", - "@aws-sdk/credential-provider-web-identity": "^3.972.72", - "@aws-sdk/nested-clients": "^3.997.40", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.973.13", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.13.tgz", "integrity": "sha512-2M39DE02XpYYaSWYk/4AsImXYUU/1L2xmTMLUpMMWq7DfLv191/vCRy3baKtdr45AkJQyVgSjmuVOLm15SwrRQ==", @@ -270,7 +201,6 @@ "@aws-sdk/credential-provider-web-identity": "^3.972.74", "@aws-sdk/nested-clients": "^3.997.42", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.16.1", @@ -281,16 +211,6 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { -<<<<<<< HEAD - "version": "3.972.73", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.73.tgz", - "integrity": "sha512-tjsxMkTAFkmiV9ycmymapb9nLECWVOwFs0bZMQ9gB9bnbY8/HwfukHZlWbXZZp7qkPU6EXAfOcMm3DioFFEywA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/nested-clients": "^3.997.40", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.972.75", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.75.tgz", "integrity": "sha512-jaTESuJlQsoUZ44f/i2puyPt8VlF/dMMJ9HM3cStYtk7eKX4N9UWi83OLixUkoOJH3BwWlPLCq9YIK9nfWhVBg==", @@ -299,7 +219,6 @@ "@aws-sdk/core": "^3.977.7", "@aws-sdk/nested-clients": "^3.997.42", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -309,20 +228,6 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { -<<<<<<< HEAD - "version": "3.972.77", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.77.tgz", - "integrity": "sha512-l4nitYCN/Ls57vtUfdextCjTjW41JD7lQiAnuR0RTbdByFc/6OmEAzwGd+lrp6CUtiXGQL1FCaYiamfHASrwBw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.66", - "@aws-sdk/credential-provider-http": "^3.972.68", - "@aws-sdk/credential-provider-ini": "^3.973.11", - "@aws-sdk/credential-provider-process": "^3.972.66", - "@aws-sdk/credential-provider-sso": "^3.973.10", - "@aws-sdk/credential-provider-web-identity": "^3.972.72", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.972.79", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.79.tgz", "integrity": "sha512-RIw5dof1EHkWubrZzPC941CDtnFG1iAXsxbFgLkhdYZXHc4icU13c/uxSMI0J5eUx9bxa7LjfpdjfClBB1QsDA==", @@ -335,7 +240,6 @@ "@aws-sdk/credential-provider-sso": "^3.973.12", "@aws-sdk/credential-provider-web-identity": "^3.972.74", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.16.1", @@ -346,15 +250,6 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { -<<<<<<< HEAD - "version": "3.972.66", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.66.tgz", - "integrity": "sha512-YOnX6bIhdjx0QfaENu2PB0eFm5MEc9ft8XNGQ+NxMfeLSq9aE+XjWCwDupEnV4UWv5ZFpBLJbTREIx7KNOoqpQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.972.68", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.68.tgz", "integrity": "sha512-nLP3Pda2MQTFJ25hKBMmUuB9Uv+bTZQNlufbeCwklP549Vwnkd8bRLJoCKp5k6xjmdyptrPrOfGOhN0mKuca8A==", @@ -362,7 +257,6 @@ "dependencies": { "@aws-sdk/core": "^3.977.7", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -372,17 +266,6 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { -<<<<<<< HEAD - "version": "3.973.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.10.tgz", - "integrity": "sha512-IsXnQ35j5VE+3ZK6aIhT5ypB+Jim3zRwVz0nYuVwyBKZyu/SYx+O2/LQpng8c2EiuwyqceabsDlYrICHDlJPsA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/nested-clients": "^3.997.40", - "@aws-sdk/token-providers": "3.1102.0", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.973.12", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.12.tgz", "integrity": "sha512-EmgyyHn+f9WCcelp3L/vci+LGbX8GigWaVphRArjVo5Pktkr9YnLy/mQ6VDkDyBD72dtfRNTgHmD2ts4rTDXKQ==", @@ -392,7 +275,6 @@ "@aws-sdk/nested-clients": "^3.997.42", "@aws-sdk/token-providers": "3.1108.0", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -402,16 +284,6 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { -<<<<<<< HEAD - "version": "3.972.72", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.72.tgz", - "integrity": "sha512-nj9Zlsy7ya+fy+jhWTJwgfr7YdtDM4xHyZvgKuftuny0UgROVx9lxwvsWJSLvpKk4lig0m0tHng3k1fEnt0LeA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/nested-clients": "^3.997.40", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.972.74", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.74.tgz", "integrity": "sha512-0YfczxGXF3RjGj8z7QG/Ho2HnLGKDHfPSHiTs47UU1U/+mmwISDN+rvGKt2zh+3FX8NdT4xd95LGBGyhQw2dgQ==", @@ -420,7 +292,6 @@ "@aws-sdk/core": "^3.977.7", "@aws-sdk/nested-clients": "^3.997.42", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -430,16 +301,6 @@ } }, "node_modules/@aws-sdk/nested-clients": { -<<<<<<< HEAD - "version": "3.997.40", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.40.tgz", - "integrity": "sha512-hEdHT0PBR4fkGxWhwKG5EtEYKnAM7HKkp0vD10ufk4YcXejH4r4q6G/XhPzjUc6Yxo5kBS2vHg7llj4ViR9VTQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/signature-v4-multi-region": "^3.996.43", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.997.42", "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.42.tgz", "integrity": "sha512-XWRyon2MTHXD/zMoo0Mbge6Vwf+iE0qQaM/RyGO6NfZ9WukCFiQL27nQVZjYy2JwSIg+iXZxKOX95OBXqlSM4w==", @@ -448,7 +309,6 @@ "@aws-sdk/core": "^3.977.7", "@aws-sdk/signature-v4-multi-region": "^3.996.44", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", @@ -460,21 +320,12 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { -<<<<<<< HEAD - "version": "3.996.43", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.43.tgz", - "integrity": "sha512-lKekx8bLBXSv4O+cslk9Zfnw2XKSkWBs3uWL5QGhH2ZAQfNS7FE0vcSSN2vD/AhxX54ZTywWxR4STThoeOXlBA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.974.2", -======= "version": "3.996.44", "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.44.tgz", "integrity": "sha512-ZSfQ35Qn4MhSY+A0Whyr+KBx+wJKZUyBsOrjB2pSHOafRzbFe47T8XcXM8hZqUAC69qnqIy0C9ArxTuud0CC2w==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/signature-v4": "^5.6.12", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -484,16 +335,6 @@ } }, "node_modules/@aws-sdk/token-providers": { -<<<<<<< HEAD - "version": "3.1102.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1102.0.tgz", - "integrity": "sha512-Ua700vVvM1q105yABSUQWkCK6FeTrNfU6ORGetJe5BzkZWY7QhkF7SVTOlmDGWRDNd6jbyY0Dv5e+E4bMBEmLg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.977.5", - "@aws-sdk/nested-clients": "^3.997.40", - "@aws-sdk/types": "^3.974.2", -======= "version": "3.1108.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1108.0.tgz", "integrity": "sha512-rI80zxDxGJ6904eC/YbjkdjY6JdaZvQ01kOmrMvw7cFQGIHo27fhnIVbMSVDS4T6foQImjxYSRoOu/uSJscXDw==", @@ -502,7 +343,6 @@ "@aws-sdk/core": "^3.977.7", "@aws-sdk/nested-clients": "^3.997.42", "@aws-sdk/types": "^3.974.3", ->>>>>>> 37fcadf (feat: pay on behalf) "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -512,15 +352,9 @@ } }, "node_modules/@aws-sdk/types": { -<<<<<<< HEAD - "version": "3.974.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.2.tgz", - "integrity": "sha512-3W6IUtSxFbH6X7Wb7DzGCV5QiFQsd0g8bOfntpmDxQlzBoKWUMBu/JPQR0DwkE+Hpnxd6db1tXbOwdeHddG6cA==", -======= "version": "3.974.3", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.3.tgz", "integrity": "sha512-ECAqfpNsef+7MO8qtR0h9KcFIBAygaE7Cm6UOiQl+ft+uVap+1G7bNEjs4mdJE2OnA4m6k7i8peH8uGIAsOMGw==", ->>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.16.1", @@ -531,15 +365,9 @@ } }, "node_modules/@aws-sdk/xml-builder": { -<<<<<<< HEAD - "version": "3.972.37", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.37.tgz", - "integrity": "sha512-zKq4HQum8JwDyEuyfuI4bbiAcU0KxP6qy+9PR/IsR92IyE/DaBAikzAS50tjxip4bqIIANpCcG+Yyj6CVhXupg==", -======= "version": "3.972.38", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.38.tgz", "integrity": "sha512-grf7mzfVxBS5AlsuTvBN7uDpzqohFww9fRPCO+EBSUdvtsYMcPSKdz54h/7XiscqNcUM1Ae1MF7JLHmiYYuzbQ==", ->>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.16.1", @@ -919,74 +747,6 @@ "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", "license": "BSD-3-Clause" }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.27.7", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", @@ -1004,495 +764,362 @@ "node": ">=18" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", - "cpu": [ - "x64" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, "engines": { - "node": ">=18" + "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/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint-community/regexpp": { + "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", - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=18" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", - "cpu": [ - "arm" - ], + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "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/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/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", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", - "cpu": [ - "ia32" - ], + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", - "cpu": [ - "loong64" - ], + "node_modules/@eslint/eslintrc/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", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">= 4" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", - "cpu": [ - "mips64el" - ], + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", - "cpu": [ - "riscv64" - ], + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "cpu": [ - "x64" + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", - "cpu": [ - "arm64" + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", - "cpu": [ - "x64" + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", - "cpu": [ - "arm64" + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "cpu": [ - "x64" + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", - "cpu": [ - "arm64" + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", - "cpu": [ - "x64" + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", - "cpu": [ - "arm64" + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", - "cpu": [ - "ia32" + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", - "cpu": [ - "x64" + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", - "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "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_modules/@eslint-community/regexpp": { - "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": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "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/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/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": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" } }, - "node_modules/@ethersproject/abi": { + "node_modules/@ethersproject/hash": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", "funding": [ { "type": "individual", @@ -1505,21 +1132,21 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/abstract-provider": { + "node_modules/@ethersproject/hdnode": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", "funding": [ { "type": "individual", @@ -1532,19 +1159,24 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" + "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@ethersproject/abstract-signer": { + "node_modules/@ethersproject/json-wallets": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", "funding": [ { "type": "individual", @@ -1557,17 +1189,31 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "node_modules/@ethersproject/address": { + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "license": "MIT" + }, + "node_modules/@ethersproject/keccak256": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", "funding": [ { "type": "individual", @@ -1580,17 +1226,20 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" + "js-sha3": "0.8.0" } }, - "node_modules/@ethersproject/base64": { + "node_modules/@ethersproject/keccak256/node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, + "node_modules/@ethersproject/logger": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", "funding": [ { "type": "individual", @@ -1601,15 +1250,12 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0" - } + "license": "MIT" }, - "node_modules/@ethersproject/basex": { + "node_modules/@ethersproject/networks": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", "funding": [ { "type": "individual", @@ -1622,14 +1268,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/bignumber": { + "node_modules/@ethersproject/pbkdf2": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", "funding": [ { "type": "individual", @@ -1643,14 +1288,13 @@ "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" + "@ethersproject/sha2": "^5.8.0" } }, - "node_modules/@ethersproject/bytes": { + "node_modules/@ethersproject/properties": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", "funding": [ { "type": "individual", @@ -1666,251 +1310,10 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/constants": { + "node_modules/@ethersproject/providers": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/keccak256/node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "license": "MIT" - }, - "node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", "funding": [ { "type": "individual", @@ -2647,61 +2050,19 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "license": "BSD-3-Clause", - "optional": true, + "node_modules/@mattrglobal/bbs-signatures": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@mattrglobal/bbs-signatures/-/bbs-signatures-1.4.0.tgz", + "integrity": "sha512-uBK1IWw48fqloO9W/yoDncTs9rfwfbG/53cOrrCQL7XkyZe4DtB40HcLbi3i+yxTYs5wytf1Qr4Z5RpzpW10jw==", + "license": "Apache-2.0", "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "@stablelib/random": "1.0.0" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/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", - "optional": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@mattrglobal/bbs-signatures": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@mattrglobal/bbs-signatures/-/bbs-signatures-1.4.0.tgz", - "integrity": "sha512-uBK1IWw48fqloO9W/yoDncTs9rfwfbG/53cOrrCQL7XkyZe4DtB40HcLbi3i+yxTYs5wytf1Qr4Z5RpzpW10jw==", - "license": "Apache-2.0", - "dependencies": { - "@stablelib/random": "1.0.0" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "@mattrglobal/node-bbs-signatures": "0.18.1" + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@mattrglobal/node-bbs-signatures": "0.18.1" } }, "node_modules/@mattrglobal/bls12381-key-pair": { @@ -2764,22 +2125,6 @@ "node": ">=14.0.0" } }, - "node_modules/@mattrglobal/jsonld-signatures-bbs/node_modules/@mattrglobal/node-bbs-signatures": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@mattrglobal/node-bbs-signatures/-/node-bbs-signatures-0.17.0.tgz", - "integrity": "sha512-midEd1qGYfAKjILyIdEgyY7tbVwIFR7ozWli8AaxBaiDie2oBaj6O1A2rh/GCOKTpBZ3Thbi+CE0QZntWf+Xzg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@mapbox/node-pre-gyp": "1.0.11", - "neon-cli": "0.10.1" - }, - "engines": { - "node": ">=14", - "yarn": "1.x" - } - }, "node_modules/@mattrglobal/jsonld-signatures-bbs/node_modules/jsonld": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-4.0.1.tgz", @@ -2881,39 +2226,6 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, - "node_modules/@mattrglobal/node-bbs-signatures": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/@mattrglobal/node-bbs-signatures/-/node-bbs-signatures-0.18.1.tgz", - "integrity": "sha512-s9ccL/1TTvCP1N//4QR84j/d5D/stx/AI1kPcRgiE4O3KrxyF7ZdL9ca8fmFuN6yh9LAbn/OiGRnOXgvn38Dgg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@mapbox/node-pre-gyp": "1.0.11", - "neon-cli": "0.10.1" - }, - "engines": { - "node": ">=14", - "yarn": "1.x" - } - }, - "node_modules/@napi-rs/lzma-linux-x64-gnu": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", - "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^22.20 || ^24.12 || >=25" - } - }, "node_modules/@noble/ciphers": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", @@ -2927,21 +2239,12 @@ } }, "node_modules/@noble/curves": { -<<<<<<< HEAD - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.3.0.tgz", - "integrity": "sha512-v7cY+4oWYPQszRj6ZFGzTVL7uP2TaLo1xMhWHzYC5wj0ZhOXQ5x+sBre8rF3hi8cAoi0bh1qXoovoOkdFtvqEg==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "2.3.0" -======= "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" ->>>>>>> 37fcadf (feat: pay on behalf) }, "engines": { "node": "^14.21.3 || >=16" @@ -3237,34 +2540,6 @@ "node": ">=12" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", - "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", - "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", @@ -3279,454 +2554,129 @@ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", - "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", - "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "dependencies": { + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", - "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@scure/bip32/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, - "os": [ - "freebsd" - ] + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", - "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", - "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@scure/bip39/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, - "os": [ - "linux" - ] + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", - "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", - "cpu": [ - "arm64" - ], + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", - "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", - "cpu": [ - "arm64" - ], + "node_modules/@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.4" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", - "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", - "cpu": [ - "loong64" - ], + "node_modules/@semantic-release/commit-analyzer": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.1.tgz", + "integrity": "sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "conventional-changelog-angular": "^8.0.0", + "conventional-changelog-writer": "^8.0.0", + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.0.0", + "debug": "^4.0.0", + "import-from-esm": "^2.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=20.8.1" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", - "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", - "cpu": [ - "loong64" - ], + "node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=14.17" + } }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", - "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", - "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", - "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", - "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", - "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", - "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", - "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", - "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", - "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", - "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", - "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", - "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", - "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", - "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.9.0", - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, -<<<<<<< HEAD - "node_modules/@scure/bip32/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/" - } - }, -======= ->>>>>>> 37fcadf (feat: pay on behalf) - "node_modules/@scure/bip32/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/@scure/bip39": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", - "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39/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/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.4" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } - }, - "node_modules/@semantic-release/commit-analyzer": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.1.tgz", - "integrity": "sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "conventional-changelog-angular": "^8.0.0", - "conventional-changelog-writer": "^8.0.0", - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.0.0", - "debug": "^4.0.0", - "import-from-esm": "^2.0.0", - "lodash-es": "^4.17.21", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=20.8.1" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@semantic-release/git": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", - "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "node_modules/@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", "dev": true, "license": "MIT", "dependencies": { @@ -4291,21 +3241,12 @@ } }, "node_modules/@smithy/core": { -<<<<<<< HEAD - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.31.1.tgz", - "integrity": "sha512-CyogUINxvi7C7LDsh8Syo6hVJOT9ckz4rG8dRZfTJ8r91HkMY59PnNooaj7WcHyxEkxPfBAmbgztZU+xTo76lg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.16.1", -======= "version": "3.32.0", "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.32.0.tgz", "integrity": "sha512-NAiCSC78fzbNIEWoheoF74Ob5ZorLijCHpMY26Fqvqg/+9LuyIqMfHDg2p8Yk1rqOyowtiL3y7WX0AW+teL6zw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.17.0", ->>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4313,15 +3254,6 @@ } }, "node_modules/@smithy/credential-provider-imds": { -<<<<<<< HEAD - "version": "4.4.16", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.4.16.tgz", - "integrity": "sha512-QfuLWAkLzptffFW980AFeHZFdqds2B64rpEd3uJ6lgs3xVn9QegGMUgUcj+4d7dRrAsya3r58ZKpku97WcFb4w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.31.1", - "@smithy/types": "^4.16.1", -======= "version": "4.5.0", "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.0.tgz", "integrity": "sha512-2jsPi+7Zv2hSzD9IXR9D7DTqSn7mv4XalzRm+bESh53jiaUS3NKEUbpQFTJP0HhQy9qzZvluxQ3yS24zdRrqsA==", @@ -4329,7 +3261,6 @@ "dependencies": { "@smithy/core": "^3.32.0", "@smithy/types": "^4.17.0", ->>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4337,23 +3268,13 @@ } }, "node_modules/@smithy/fetch-http-handler": { -<<<<<<< HEAD - "version": "5.6.13", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.6.13.tgz", - "integrity": "sha512-4fW86pEUOMbrD5nkbyl/tTvPHHWJFbuB2odl6ps9lWfHoXf9HWh3Q/Smh59qH1g7+c/BSZghX6bbUk4gsiMs8A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.31.1", - "@smithy/types": "^4.16.1", -======= - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.7.0.tgz", - "integrity": "sha512-W/exA8T0LEzCQtJ02w4IzaEQPIspgarqZprb7W8FwnYiDowgCrjl2fTQ6FvuSSUnJORuepBF81abmBJwqh+0XQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.7.0.tgz", + "integrity": "sha512-W/exA8T0LEzCQtJ02w4IzaEQPIspgarqZprb7W8FwnYiDowgCrjl2fTQ6FvuSSUnJORuepBF81abmBJwqh+0XQ==", "license": "Apache-2.0", "dependencies": { "@smithy/core": "^3.32.0", "@smithy/types": "^4.17.0", ->>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4361,15 +3282,6 @@ } }, "node_modules/@smithy/node-http-handler": { -<<<<<<< HEAD - "version": "4.9.13", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.9.13.tgz", - "integrity": "sha512-Nmd/Nl35zfYrd+a6OO2cDJb3GPh9bgTjIUhcM+JFfjpp8/osCgboDV5nCT1I01Pv6R13eSKDKLSoVa5ZB6Zsfw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.31.1", - "@smithy/types": "^4.16.1", -======= "version": "4.10.0", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.10.0.tgz", "integrity": "sha512-nrh7VxqzPQS/ip1hS293aI/OAWDWARQvjUxCfuKhyrfHa2gTdk28066RNeWLI1uuoHXaKAkOF8IcSAHuOp0+SA==", @@ -4377,7 +3289,6 @@ "dependencies": { "@smithy/core": "^3.32.0", "@smithy/types": "^4.17.0", ->>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4385,15 +3296,6 @@ } }, "node_modules/@smithy/signature-v4": { -<<<<<<< HEAD - "version": "5.6.12", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.6.12.tgz", - "integrity": "sha512-I6KLtq3H0qqSuV9vLglfi8puHqzygzWHOnI4z/Rdoo+q50vvo18vBRdPAvvEtcaKROz7Zn6qnPa14kRfPH6PcQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.31.1", - "@smithy/types": "^4.16.1", -======= "version": "5.7.0", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.7.0.tgz", "integrity": "sha512-hCynhm22wMJ8wTF9crcwu8mxggtUrSLLJgDcGUvYFBqpofxycYJCGKOMYg4xtPPFtgNiDJSYmhsWLTrcU/g59Q==", @@ -4401,7 +3303,6 @@ "dependencies": { "@smithy/core": "^3.32.0", "@smithy/types": "^4.17.0", ->>>>>>> 37fcadf (feat: pay on behalf) "tslib": "^2.6.2" }, "engines": { @@ -4409,15 +3310,9 @@ } }, "node_modules/@smithy/types": { -<<<<<<< HEAD - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", - "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", -======= "version": "4.17.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.17.0.tgz", "integrity": "sha512-Aw4joiM0ZdErpo39lCj8phT2lxoiKZV+KZzBxnnQhWVtU2Is/WffQSL04uUWRcXUse9Ln8vXZK6V/FwqRVnQpg==", ->>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4550,15 +3445,9 @@ }, "node_modules/@tradetrust-tt/token-registry-v5": { "name": "@tradetrust-tt/token-registry", -<<<<<<< HEAD - "version": "5.6.0-beta.1", - "resolved": "https://registry.npmjs.org/@tradetrust-tt/token-registry/-/token-registry-5.6.0-beta.1.tgz", - "integrity": "sha512-EtxZw/WnvGQMb/MB243eHy4ejSTN8bkV7I7Y9f19xk9v/mOojFL74C/tD1zjsZUUjiQi9rzLRYlzSUNbZBN2gg==", -======= "version": "5.6.0-beta.3", "resolved": "https://registry.npmjs.org/@tradetrust-tt/token-registry/-/token-registry-5.6.0-beta.3.tgz", "integrity": "sha512-1YJDuuBN5P2mx94aVrhbQ3wXt0Kb9eqIPjabHeZCkFjH87ZV1rtdXTmy1T2Af8Y7zROCWAD1V/8JpCFqC3u/JA==", ->>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "ethers": "^6.13.4" @@ -4915,15 +3804,9 @@ "license": "Apache-2.0" }, "node_modules/@trustvc/eip7702": { -<<<<<<< HEAD - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@trustvc/eip7702/-/eip7702-1.0.0-beta.1.tgz", - "integrity": "sha512-cOGuZVLHd0+Uu7rZ/Dp2iF1VuNq+L+pWWGe+tPD/u74rSvCAzIc17dIk5HOwRBiC5awh1rXG46vLG8IRc5O01Q==", -======= "version": "1.1.0-beta.2", "resolved": "https://registry.npmjs.org/@trustvc/eip7702/-/eip7702-1.1.0-beta.2.tgz", "integrity": "sha512-yo82l4fDCE6ZuTPeuDxBSgcRxAUOmVm51y16dJQH4xpM2ZkEKPXfPsMjpiPa636uOEVan+e38v/IQfy2HPg9sA==", ->>>>>>> 37fcadf (feat: pay on behalf) "license": "MIT", "dependencies": { "@account-abstraction/contracts": "^0.8.0", @@ -4931,33 +3814,19 @@ } }, "node_modules/@trustvc/trustvc": { -<<<<<<< HEAD - "version": "2.16.0-beta.3", - "resolved": "https://registry.npmjs.org/@trustvc/trustvc/-/trustvc-2.16.0-beta.3.tgz", - "integrity": "sha512-spuYfT78ZYY5Xg60yTrnDjbGsxwv5QNAyfEhWzp0mcBTRZRPJRiH8mVWTp4AZeAHO6ph9ZyOY0ZVl3f7/cBcvw==", -======= "version": "2.16.0-beta.4", "resolved": "https://registry.npmjs.org/@trustvc/trustvc/-/trustvc-2.16.0-beta.4.tgz", "integrity": "sha512-KJZUl5LCDX4KqgiBbyK6tUdXoAVxGyyKtJm+kiY8bsnl23h0hI7IfJZlUcgIFaoH8OER4+EI8i5NNDCsiMSOMg==", ->>>>>>> 37fcadf (feat: pay on behalf) "license": "Apache-2.0", "dependencies": { "@tradetrust-tt/dnsprove": "^2.18.0", "@tradetrust-tt/ethers-aws-kms-signer": "^2.1.4", "@tradetrust-tt/token-registry-v4": "npm:@tradetrust-tt/token-registry@^4.16.0", -<<<<<<< HEAD - "@tradetrust-tt/token-registry-v5": "npm:@tradetrust-tt/token-registry@^5.6.0-beta.1", - "@tradetrust-tt/tradetrust": "^6.10.3", - "@tradetrust-tt/tt-verify": "^9.7.5", - "@trustvc/document-store": "^1.0.3", - "@trustvc/eip7702": "^1.0.0-beta.1", -======= "@tradetrust-tt/token-registry-v5": "npm:@tradetrust-tt/token-registry@^5.6.0-beta.2", "@tradetrust-tt/tradetrust": "^6.10.3", "@tradetrust-tt/tt-verify": "^9.7.5", "@trustvc/document-store": "^1.0.3", "@trustvc/eip7702": "^1.1.0-beta.2", ->>>>>>> 37fcadf (feat: pay on behalf) "@trustvc/w3c": "^2.4.2", "@trustvc/w3c-context": "^2.4.0", "@trustvc/w3c-credential-status": "^2.4.0", @@ -5666,13 +4535,6 @@ "url": "https://opencollective.com/vitest" } }, - "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==", - "license": "ISC", - "optional": true - }, "node_modules/abitype": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", @@ -5748,19 +4610,6 @@ "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", "license": "MIT" }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -5858,28 +4707,6 @@ "dev": true, "license": "MIT" }, - "node_modules/aproba": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", - "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", - "license": "ISC", - "optional": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5899,6 +4726,7 @@ "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -6217,13 +5045,6 @@ "base-x": "^3.0.2" } }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "license": "MIT", - "optional": true - }, "node_modules/bundle-require": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", @@ -6420,16 +5241,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=10" - } - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -6440,19 +5251,6 @@ "node": ">=6" } }, - "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==", - "license": "MIT", - "optional": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cli-highlight": { "version": "2.1.11", "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", @@ -6617,16 +5415,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "license": "ISC", - "optional": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -6644,6 +5432,7 @@ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "license": "MIT", + "peer": true, "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -6654,34 +5443,12 @@ "node": ">=4.0.0" } }, - "node_modules/command-line-commands": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/command-line-commands/-/command-line-commands-3.0.2.tgz", - "integrity": "sha512-ac6PdCtdR6q7S3HN+JiVLIWGHY30PRYIEl2qPo+FuEuzwAUk0UYyimrngrg7FvF/mCr4Jgoqv5ZnHZgads50rw==", - "license": "MIT", - "optional": true, - "dependencies": { - "array-back": "^4.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-commands/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/command-line-usage": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "license": "MIT", + "peer": true, "dependencies": { "array-back": "^4.0.2", "chalk": "^2.4.2", @@ -6697,6 +5464,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -6709,6 +5477,7 @@ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -6718,6 +5487,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -6732,6 +5502,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "license": "MIT", + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -6740,13 +5511,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/command-line-usage/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", + "peer": true, "engines": { "node": ">=0.8.0" } @@ -6756,6 +5529,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -6765,6 +5539,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -6777,6 +5552,7 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -6836,13 +5612,6 @@ "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "license": "ISC", - "optional": true - }, "node_modules/content-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", @@ -7245,23 +6014,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT", - "optional": true - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/did-resolver": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.2.tgz", @@ -8513,6 +7265,7 @@ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "license": "MIT", + "peer": true, "dependencies": { "array-back": "^3.0.1" }, @@ -8697,32 +7450,6 @@ "node": ">=14.14" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -8798,35 +7525,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/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 - }, "node_modules/generator-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", @@ -8944,16 +7642,6 @@ "assert-plus": "^1.0.0" } }, - "node_modules/git-config": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/git-config/-/git-config-0.0.7.tgz", - "integrity": "sha512-LidZlYZXWzVjS+M3TEwhtYBaYwLeOZrXci1tBgqp/vDdZTBMl02atvwb6G35L64ibscYoPnxfbwwUS+VZAISLA==", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "iniparser": "~1.0.5" - } - }, "node_modules/git-log-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", @@ -8974,7 +7662,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -9008,14 +7696,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.18", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -9026,7 +7714,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -9109,7 +7797,7 @@ "version": "4.7.9", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -9247,13 +7935,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC", - "optional": true - }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -9373,20 +8054,6 @@ "npm": ">=1.3.7" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -9534,15 +8201,6 @@ "dev": true, "license": "ISC" }, - "node_modules/iniparser": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/iniparser/-/iniparser-1.0.5.tgz", - "integrity": "sha512-i40MWqgTU6h/70NtMsDVVDLjDYWwcIR1yIEVDPfxZIJno9z9L4s83p/V7vAu2i48Vj0gpByrkGFub7ko9XvPrw==", - "optional": true, - "engines": { - "node": "*" - } - }, "node_modules/inquirer": { "version": "13.4.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.4.3.tgz", @@ -10431,1882 +9089,671 @@ }, "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" - }, - "node_modules/js-yaml": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "license": "MIT" - }, - "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-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" - }, - "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/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "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/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-with-bigint": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.10.tgz", - "integrity": "sha512-Vcx+JVNEBts/xfcoCS69sKrOhOk/3TVlvlT+XzUOefVKnnrbYSCKpDCm10pohsJFtsJVYnwa/cXRZ4eElzaM6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonld": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-6.0.0.tgz", - "integrity": "sha512-1SkN2RXhMCTCSkX+bzHvr9ycM2HTmjWyV41hn2xG7k6BqlCgRjw0zHmuqfphjBRPqi1gKMIqgBCe/0RZMcWrAA==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/http-client": "^3.2.0", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/jsonld-signatures": { - "version": "11.6.0", - "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.6.0.tgz", - "integrity": "sha512-hzYNZXnfy4cUFf9aiFBtduUz+cknbfBLWtTKvoqVyP2ECPwqfsfkHWFlhccWfAKV/LJkPLyKZRwC1B4T5LO4ZQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/security-context": "^1.0.0", - "jsonld": "^9.0.0", - "rdf-canonize": "^5.0.0", - "serialize-error": "^8.1.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jsonld-signatures-v7": { - "name": "jsonld-signatures", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-7.0.0.tgz", - "integrity": "sha512-J/nA+llcYYjErPHG9WFpXvR82TOg5fbHk/7rXbx4Ts854DPReaKAAd0hAZ+s5/P2WIIAZPIHCqA+iz1QrOqeiQ==", - "license": "BSD-3-Clause", - "dependencies": { - "base64url": "^3.0.1", - "crypto-ld": "^3.7.0", - "jsonld": "^4.0.1", - "node-forge": "^0.10.0", - "security-context": "^4.0.0", - "serialize-error": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonld-signatures-v7/node_modules/jsonld": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-4.0.1.tgz", - "integrity": "sha512-ltEqMQB37ZxZnsgmI+9rqHYkz1M6PqUykuS1t2aQNuH1oiLrUDYz5nyVkHQDgjFd7CFKTIWeLiNhwdwFrH5o5A==", - "license": "BSD-3-Clause", - "dependencies": { - "canonicalize": "^1.0.1", - "lru-cache": "^5.1.1", - "object.fromentries": "^2.0.2", - "rdf-canonize": "^2.0.1", - "request": "^2.88.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonld-signatures-v7/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/jsonld-signatures-v7/node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/jsonld-signatures-v7/node_modules/rdf-canonize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-2.0.1.tgz", - "integrity": "sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA==", - "license": "BSD-3-Clause", - "dependencies": { - "semver": "^6.3.0", - "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonld-signatures-v7/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" - } - }, - "node_modules/jsonld-signatures-v7/node_modules/serialize-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", - "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jsonld-signatures-v7/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/jsonld-signatures-v7/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/jsonld-signatures/node_modules/@digitalbazaar/http-client": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-4.4.0.tgz", - "integrity": "sha512-ODhCGmElUPmR3IR+KZmBNkRAFyjJ01rxvk2E+/qQ2h2EGPJH5k6bz3N24ympGc5+i4YCGk/ipIpmkwc0+iSmRg==", - "license": "BSD-3-Clause", - "dependencies": { - "ky": "^1.14.3", - "undici": "^6.28.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/jsonld-signatures/node_modules/canonicalize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.1.0.tgz", - "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", - "license": "Apache-2.0", - "bin": { - "canonicalize": "bin/canonicalize.js" - } - }, - "node_modules/jsonld-signatures/node_modules/jsonld": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-9.0.0.tgz", - "integrity": "sha512-pjMIdkXfC1T2wrX9B9i2uXhGdyCmgec3qgMht+TDj+S0qX3bjWMQUfL7NeqEhuRTi8G5ESzmL9uGlST7nzSEWg==", - "license": "BSD-3-Clause", - "dependencies": { - "@digitalbazaar/http-client": "^4.2.0", - "canonicalize": "^2.1.0", - "lru-cache": "^6.0.0", - "rdf-canonize": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jsonld-signatures/node_modules/ky": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz", - "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/jsonld-signatures/node_modules/rdf-canonize": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-5.0.0.tgz", - "integrity": "sha512-g8OUrgMXAR9ys/ZuJVfBr05sPPoMA7nHIVs8VEvg9QwM5W4GR2qSFEEHjsyHF1eWlBaf8Ev40WNjQFQ+nJTO3w==", - "license": "BSD-3-Clause", - "dependencies": { - "setimmediate": "^1.0.5" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jsonld-signatures/node_modules/undici": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", - "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "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/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "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/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/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": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "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/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/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", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-tsconfig": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/local-pkg": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", - "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.2.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "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": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", - "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", - "dev": true, - "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==", - "license": "MIT" - }, - "node_modules/lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "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/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true, - "license": "MIT" - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "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/magic-string": { - "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.5" - } - }, - "node_modules/make-asynchronous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.1.0.tgz", - "integrity": "sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-event": "^6.0.0", - "type-fest": "^4.6.0", - "web-worker": "^1.5.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-asynchronous/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": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "optional": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/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, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-promises-safe": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/make-promises-safe/-/make-promises-safe-5.1.0.tgz", - "integrity": "sha512-AfdZ49rtyhQR/6cqVKGoH7y4ql7XkS5HJI1lZm0/5N6CQosy1eYbBJ/qbhkKHzo17UH7M918Bysf6XB9f3kS1g==", - "license": "MIT", - "optional": true - }, - "node_modules/marked": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", - "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", - "dev": true, - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/marked-terminal": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz", - "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "ansi-regex": "^6.1.0", - "chalk": "^5.4.1", - "cli-highlight": "^2.1.11", - "cli-table3": "^0.6.5", - "node-emoji": "^2.2.0", - "supports-hyperlinks": "^3.1.0" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "marked": ">=1 <16" - } - }, - "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", - "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "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/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "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==", - "dev": true, - "license": "MIT" - }, - "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": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", - "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa" - ], - "license": "MIT", - "bin": { - "mime": "bin/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "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/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/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "devOptional": true, - "license": "MIT", - "engines": { - "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": "10.2.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", - "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.8" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mlly": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", - "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.16.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.3" - } - }, - "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/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", - "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "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/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==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/neon-cli": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/neon-cli/-/neon-cli-0.10.1.tgz", - "integrity": "sha512-kOd9ELaYETe1J1nBEOYD7koAZVj6xR9TGwOPccAsWmwL5amkaXXXwXHCUHkBAWujlgSZY5f2pT+pFGkzoHExYQ==", - "license": "SEE LICENSE IN LICENSE-*", - "optional": true, - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-commands": "^3.0.1", - "command-line-usage": "^6.1.0", - "git-config": "0.0.7", - "handlebars": "^4.7.6", - "inquirer": "^7.3.3", - "make-promises-safe": "^5.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "toml": "^3.0.0", - "ts-typed-json": "^0.3.2", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" - }, - "bin": { - "neon": "bin/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/neon-cli/node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/neon-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", - "optional": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/neon-cli/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "optional": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/neon-cli/node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "license": "MIT", - "optional": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/neon-cli/node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "license": "ISC", - "optional": true - }, - "node_modules/neon-cli/node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/neon-cli/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/neon-cli/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", - "optional": true - }, - "node_modules/nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-cache": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", - "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", - "license": "MIT", - "dependencies": { - "clone": "2.x" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "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-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "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/node-forge": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", - "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.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", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "license": "MIT", - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "license": "ISC", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz", - "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^9.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/normalize-url": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-9.0.1.tgz", - "integrity": "sha512-ARftfC5HdUNu9jJeL8pHj8debUIHA2b91FizCoMzY4lG6dDX13jdvTK0TBe24IBDRf2HvJSzzwEPvmbkQWHRSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-11.19.0.tgz", - "integrity": "sha512-SDd/hHg3KqHE5Ht2NHWxNYNtqCQ2pXAPLl6OtQhPyED5PHsRfrOtO199MZTIG2cQoQ1ZRI9t28shrD+2cr3AAw==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/metavuln-calculator", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/redact", - "@npmcli/run-script", - "@sigstore/tuf", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "spdx-expression-parse", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which" - ], - "dev": true, - "license": "Artistic-2.0", - "workspaces": [ - "docs", - "smoke-tests", - "mock-globals", - "mock-registry", - "workspaces/*" - ], - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^9.9.1", - "@npmcli/config": "^10.12.0", - "@npmcli/fs": "^5.0.0", - "@npmcli/map-workspaces": "^5.0.3", - "@npmcli/metavuln-calculator": "^9.0.3", - "@npmcli/package-json": "^7.0.5", - "@npmcli/promise-spawn": "^9.0.1", - "@npmcli/redact": "^4.0.0", - "@npmcli/run-script": "^10.0.4", - "@sigstore/tuf": "^4.0.2", - "abbrev": "^4.0.0", - "archy": "~1.0.0", - "cacache": "^20.0.4", - "chalk": "^5.6.2", - "ci-info": "^4.4.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.3", - "glob": "^13.0.6", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^9.0.3", - "ini": "^6.0.0", - "init-package-json": "^8.2.5", - "is-cidr": "^6.0.4", - "json-parse-even-better-errors": "^5.0.0", - "libnpmaccess": "^10.0.3", - "libnpmdiff": "^8.1.12", - "libnpmexec": "^10.3.2", - "libnpmfund": "^7.0.26", - "libnpmorg": "^8.0.1", - "libnpmpack": "^9.1.12", - "libnpmpublish": "^11.2.0", - "libnpmsearch": "^9.0.1", - "libnpmteam": "^8.0.2", - "libnpmversion": "^8.0.4", - "make-fetch-happen": "^15.0.6", - "minimatch": "^10.2.5", - "minipass": "^7.1.3", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^12.4.0", - "nopt": "^9.0.0", - "npm-audit-report": "^7.0.0", - "npm-install-checks": "^8.0.0", - "npm-package-arg": "^13.0.2", - "npm-pick-manifest": "^11.0.3", - "npm-profile": "^12.0.2", - "npm-registry-fetch": "^19.1.1", - "npm-user-validate": "^4.0.0", - "p-map": "^7.0.4", - "pacote": "^21.5.1", - "parse-conflict-json": "^5.0.1", - "proc-log": "^6.1.0", - "qrcode-terminal": "^0.12.0", - "read": "^5.0.1", - "semver": "^7.8.5", - "spdx-expression-parse": "^4.0.0", - "ssri": "^13.0.1", - "supports-color": "^10.2.2", - "tar": "^7.5.19", - "text-table": "~0.2.0", - "tiny-relative-date": "^2.0.2", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^7.0.2", - "which": "^6.0.1" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" }, - "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/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=8" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/npm/node_modules/@gar/promise-retry": { - "version": "1.0.3", + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "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, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "MIT" }, - "node_modules/npm/node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", + "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" + }, + "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, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } + "license": "MIT" }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "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/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, - "inBundle": 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/npm/node_modules/@npmcli/agent": { - "version": "4.0.2", + "node_modules/json-with-bigint": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.10.tgz", + "integrity": "sha512-Vcx+JVNEBts/xfcoCS69sKrOhOk/3TVlvlT+XzUOefVKnnrbYSCKpDCm10pohsJFtsJVYnwa/cXRZ4eElzaM6w==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", "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" + "universalify": "^2.0.0" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "9.9.1", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsonld": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-6.0.0.tgz", + "integrity": "sha512-1SkN2RXhMCTCSkX+bzHvr9ycM2HTmjWyV41hn2xG7k6BqlCgRjw0zHmuqfphjBRPqi1gKMIqgBCe/0RZMcWrAA==", + "license": "BSD-3-Clause", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^5.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/metavuln-calculator": "^9.0.2", - "@npmcli/name-from-folder": "^4.0.0", - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/query": "^5.0.0", - "@npmcli/redact": "^4.0.0", - "@npmcli/run-script": "^10.0.0", - "bin-links": "^6.0.0", - "cacache": "^20.0.1", - "common-ancestor-path": "^2.0.0", - "hosted-git-info": "^9.0.0", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^11.2.1", - "minimatch": "^10.0.3", - "nopt": "^9.0.0", - "npm-install-checks": "^8.0.0", - "npm-package-arg": "^13.0.0", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "pacote": "^21.0.2", - "parse-conflict-json": "^5.0.1", - "proc-log": "^6.0.0", - "proggy": "^4.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "semver": "^7.3.7", - "ssri": "^13.0.0", - "treeverse": "^3.0.0", - "walk-up-path": "^4.0.0" + "@digitalbazaar/http-client": "^3.2.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.0.0" }, - "bin": { - "arborist": "bin/index.js" + "engines": { + "node": ">=14" + } + }, + "node_modules/jsonld-signatures": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.6.0.tgz", + "integrity": "sha512-hzYNZXnfy4cUFf9aiFBtduUz+cknbfBLWtTKvoqVyP2ECPwqfsfkHWFlhccWfAKV/LJkPLyKZRwC1B4T5LO4ZQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/security-context": "^1.0.0", + "jsonld": "^9.0.0", + "rdf-canonize": "^5.0.0", + "serialize-error": "^8.1.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" } }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "10.12.0", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsonld-signatures-v7": { + "name": "jsonld-signatures", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-7.0.0.tgz", + "integrity": "sha512-J/nA+llcYYjErPHG9WFpXvR82TOg5fbHk/7rXbx4Ts854DPReaKAAd0hAZ+s5/P2WIIAZPIHCqA+iz1QrOqeiQ==", + "license": "BSD-3-Clause", "dependencies": { - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "ci-info": "^4.0.0", - "ini": "^6.0.0", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "walk-up-path": "^4.0.0" + "base64url": "^3.0.1", + "crypto-ld": "^3.7.0", + "jsonld": "^4.0.1", + "node-forge": "^0.10.0", + "security-context": "^4.0.0", + "serialize-error": "^5.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" } }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsonld-signatures-v7/node_modules/jsonld": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-4.0.1.tgz", + "integrity": "sha512-ltEqMQB37ZxZnsgmI+9rqHYkz1M6PqUykuS1t2aQNuH1oiLrUDYz5nyVkHQDgjFd7CFKTIWeLiNhwdwFrH5o5A==", + "license": "BSD-3-Clause", "dependencies": { - "semver": "^7.3.5" + "canonicalize": "^1.0.1", + "lru-cache": "^5.1.1", + "object.fromentries": "^2.0.2", + "rdf-canonize": "^2.0.1", + "request": "^2.88.0", + "semver": "^6.3.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6" } }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "7.0.2", - "dev": true, - "inBundle": true, + "node_modules/jsonld-signatures-v7/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": { - "@gar/promise-retry": "^1.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": "^6.0.0", - "semver": "^7.3.5", - "which": "^6.0.0" - }, + "yallist": "^3.0.2" + } + }, + "node_modules/jsonld-signatures-v7/node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 6.0.0" } }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsonld-signatures-v7/node_modules/rdf-canonize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-2.0.1.tgz", + "integrity": "sha512-/GVELjrfW8G/wS4QfDZ5Kq68cS1belVNJqZlcwiErerexeBUsgOINCROnP7UumWIBNdeCwTVLE9NVXMnRYK0lA==", + "license": "BSD-3-Clause", "dependencies": { - "npm-bundled": "^5.0.0", - "npm-normalize-package-bin": "^5.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" + "semver": "^6.3.0", + "setimmediate": "^1.0.5" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6" } }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "5.0.3", - "dev": true, - "inBundle": true, + "node_modules/jsonld-signatures-v7/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", - "dependencies": { - "@npmcli/name-from-folder": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "glob": "^13.0.0", - "minimatch": "^10.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "9.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsonld-signatures-v7/node_modules/serialize-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", + "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", + "license": "MIT", "dependencies": { - "cacache": "^20.0.0", - "json-parse-even-better-errors": "^5.0.0", - "pacote": "^21.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5" + "type-fest": "^0.8.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsonld-signatures-v7/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "node_modules/jsonld-signatures-v7/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "7.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsonld-signatures/node_modules/@digitalbazaar/http-client": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-4.4.0.tgz", + "integrity": "sha512-ODhCGmElUPmR3IR+KZmBNkRAFyjJ01rxvk2E+/qQ2h2EGPJH5k6bz3N24ympGc5+i4YCGk/ipIpmkwc0+iSmRg==", + "license": "BSD-3-Clause", "dependencies": { - "@npmcli/git": "^7.0.0", - "glob": "^13.0.0", - "hosted-git-info": "^9.0.0", - "json-parse-even-better-errors": "^5.0.0", - "proc-log": "^6.0.0", - "semver": "^7.5.3", - "spdx-expression-parse": "^4.0.0" + "ky": "^1.14.3", + "undici": "^6.28.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18.0" } }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "9.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsonld-signatures/node_modules/canonicalize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.1.0.tgz", + "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", + "license": "Apache-2.0", + "bin": { + "canonicalize": "bin/canonicalize.js" + } + }, + "node_modules/jsonld-signatures/node_modules/jsonld": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-9.0.0.tgz", + "integrity": "sha512-pjMIdkXfC1T2wrX9B9i2uXhGdyCmgec3qgMht+TDj+S0qX3bjWMQUfL7NeqEhuRTi8G5ESzmL9uGlST7nzSEWg==", + "license": "BSD-3-Clause", "dependencies": { - "which": "^6.0.0" + "@digitalbazaar/http-client": "^4.2.0", + "canonicalize": "^2.1.0", + "lru-cache": "^6.0.0", + "rdf-canonize": "^5.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" } }, - "node_modules/npm/node_modules/@npmcli/query": { + "node_modules/jsonld-signatures/node_modules/ky": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz", + "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/jsonld-signatures/node_modules/rdf-canonize": { "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-5.0.0.tgz", + "integrity": "sha512-g8OUrgMXAR9ys/ZuJVfBr05sPPoMA7nHIVs8VEvg9QwM5W4GR2qSFEEHjsyHF1eWlBaf8Ev40WNjQFQ+nJTO3w==", + "license": "BSD-3-Clause", "dependencies": { - "postcss-selector-parser": "^7.0.0" + "setimmediate": "^1.0.5" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" } }, - "node_modules/npm/node_modules/@npmcli/redact": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsonld-signatures/node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18.17" } }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "10.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", "dependencies": { - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "node-gyp": "^12.1.0", - "proc-log": "^6.0.0" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.6.0" } }, - "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "4.0.0", + "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, - "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0" - }, + "json-buffer": "3.0.1" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 8" } }, - "node_modules/npm/node_modules/@sigstore/core": { - "version": "3.2.1", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", + "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": "^20.17.0 || >=22.9.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.5.1", + "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/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, - "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.8.0" } }, - "node_modules/npm/node_modules/@sigstore/sign": { - "version": "4.1.1", + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@gar/promise-retry": "^1.0.2", - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.2.0", - "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^15.0.4", - "proc-log": "^6.1.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "4.0.2", + "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, - "inBundle": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "license": "MIT", "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0", - "tuf-js": "^4.1.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=4" } }, - "node_modules/npm/node_modules/@sigstore/verify": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", + "node_modules/load-json-file/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", "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.2.1", - "@sigstore/protobuf-specs": "^0.5.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=4" } }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", "dev": true, - "inBundle": true, "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "4.1.0", + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", "dev": true, - "inBundle": true, "license": "MIT", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^10.1.1" + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/npm/node_modules/abbrev": { - "version": "4.0.0", + "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, - "inBundle": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/agent-base": { - "version": "7.1.4", + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", "dev": true, - "inBundle": true, + "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==", "license": "MIT", - "engines": { - "node": ">= 14" - } + "peer": true }, - "node_modules/npm/node_modules/aproba": { - "version": "2.1.0", + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", "dev": true, - "inBundle": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "dev": true, - "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/balanced-match": { - "version": "4.0.4", + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "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/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true, + "license": "MIT" + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "inBundle": true, "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "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": "18 || 20 || >=22" + "node": ">=10" } }, - "node_modules/npm/node_modules/bin-links": { - "version": "6.0.2", + "node_modules/magic-string": { + "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, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "cmd-shim": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "proc-log": "^6.0.0", - "read-cmd-shim": "^6.0.0", - "write-file-atomic": "^7.0.0" + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-asynchronous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.1.0.tgz", + "integrity": "sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-event": "^6.0.0", + "type-fest": "^4.6.0", + "web-worker": "^1.5.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "3.1.0", + "node_modules/make-asynchronous/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": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "dev": true, - "inBundle": true, "license": "MIT", - "engines": { - "node": ">=18.20" + "bin": { + "marked": "bin/marked.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 18" } }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "5.0.7", + "node_modules/marked-terminal": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz", + "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", "dev": true, - "inBundle": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" + "ansi-escapes": "^7.0.0", + "ansi-regex": "^6.1.0", + "chalk": "^5.4.1", + "cli-highlight": "^2.1.11", + "cli-table3": "^0.6.5", + "node-emoji": "^2.2.0", + "supports-hyperlinks": "^3.1.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=16.0.0" + }, + "peerDependencies": { + "marked": ">=1 <16" } }, - "node_modules/npm/node_modules/cacache": { - "version": "20.0.4", + "node_modules/marked-terminal/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/fs": "^5.0.0", - "fs-minipass": "^3.0.0", - "glob": "^13.0.0", - "lru-cache": "^11.1.0", - "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": "^13.0.0" + "environment": "^1.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/chalk": { + "node_modules/marked-terminal/node_modules/chalk": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, - "inBundle": true, "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -12315,285 +9762,527 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/npm/node_modules/chownr": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", + "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": ">=18" + "node": ">= 0.4" } }, - "node_modules/npm/node_modules/ci-info": { - "version": "4.4.0", + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "5.0.5", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=20" - } + "license": "MIT" }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "8.0.0", + "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, - "inBundle": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8.6" } }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "2.0.0", + "node_modules/mime": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, "engines": { - "node": ">= 18" + "node": ">=16" } }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "inBundle": true, + "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", - "bin": { - "cssesc": "bin/cssesc" - }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/npm/node_modules/debug": { - "version": "4.4.3", - "dev": true, - "inBundle": 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": { - "ms": "^2.1.3" + "mime-db": "1.52.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.6" } }, - "node_modules/npm/node_modules/diff": { - "version": "8.0.4", + "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, - "inBundle": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.3.1" + "node": ">=6" } }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", + "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": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, - "inBundle": true, - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, "engines": { - "node": ">=6" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.3", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "inBundle": true, - "license": "Apache-2.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "dev": true, - "inBundle": true, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">= 4.9.1" + "node": ">=10" } }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.3", + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", "dev": true, - "inBundle": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "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/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/glob": { - "version": "13.0.6", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "9.0.3", + "node_modules/nanoid": { + "version": "3.3.17", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", + "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^11.1.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.2.0", + "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, - "inBundle": true, - "license": "BSD-2-Clause" + "license": "MIT" }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.2", + "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, - "inBundle": true, + "license": "MIT" + }, + "node_modules/nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "clone": "2.x" }, "engines": { - "node": ">= 14" + "node": ">= 8.0.0" } }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.6", + "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-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", "dev": true, - "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" }, "engines": { - "node": ">= 14" + "node": ">=18" } }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.7.2", - "dev": true, - "inBundle": true, + "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, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/npm/node_modules/ignore-walk": { + "node_modules/node-forge": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.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", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "license": "MIT", + "engines": { + "node": ">=12.19" + } + }, + "node_modules/normalize-package-data": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz", + "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "minimatch": "^10.0.3" + "hosted-git-info": "^9.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/ini": { - "version": "6.0.0", + "node_modules/normalize-url": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-9.0.1.tgz", + "integrity": "sha512-ARftfC5HdUNu9jJeL8pHj8debUIHA2b91FizCoMzY4lG6dDX13jdvTK0TBe24IBDRf2HvJSzzwEPvmbkQWHRSg==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/init-package-json": { - "version": "8.2.5", + "node_modules/npm": { + "version": "11.19.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.19.0.tgz", + "integrity": "sha512-SDd/hHg3KqHE5Ht2NHWxNYNtqCQ2pXAPLl6OtQhPyED5PHsRfrOtO199MZTIG2cQoQ1ZRI9t28shrD+2cr3AAw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/metavuln-calculator", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which" + ], "dev": true, - "inBundle": true, - "license": "ISC", + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], "dependencies": { - "@npmcli/package-json": "^7.0.0", - "npm-package-arg": "^13.0.0", - "promzard": "^3.0.1", + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^9.9.1", + "@npmcli/config": "^10.12.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/map-workspaces": "^5.0.3", + "@npmcli/metavuln-calculator": "^9.0.3", + "@npmcli/package-json": "^7.0.5", + "@npmcli/promise-spawn": "^9.0.1", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.4", + "@sigstore/tuf": "^4.0.2", + "abbrev": "^4.0.0", + "archy": "~1.0.0", + "cacache": "^20.0.4", + "chalk": "^5.6.2", + "ci-info": "^4.4.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^13.0.6", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^9.0.3", + "ini": "^6.0.0", + "init-package-json": "^8.2.5", + "is-cidr": "^6.0.4", + "json-parse-even-better-errors": "^5.0.0", + "libnpmaccess": "^10.0.3", + "libnpmdiff": "^8.1.12", + "libnpmexec": "^10.3.2", + "libnpmfund": "^7.0.26", + "libnpmorg": "^8.0.1", + "libnpmpack": "^9.1.12", + "libnpmpublish": "^11.2.0", + "libnpmsearch": "^9.0.1", + "libnpmteam": "^8.0.2", + "libnpmversion": "^8.0.4", + "make-fetch-happen": "^15.0.6", + "minimatch": "^10.2.5", + "minipass": "^7.1.3", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^12.4.0", + "nopt": "^9.0.0", + "npm-audit-report": "^7.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.2", + "npm-pick-manifest": "^11.0.3", + "npm-profile": "^12.0.2", + "npm-registry-fetch": "^19.1.1", + "npm-user-validate": "^4.0.0", + "p-map": "^7.0.4", + "pacote": "^21.5.1", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.1.0", + "qrcode-terminal": "^0.12.0", "read": "^5.0.1", - "semver": "^7.7.2", - "validate-npm-package-name": "^7.0.0" + "semver": "^7.8.5", + "spdx-expression-parse": "^4.0.0", + "ssri": "^13.0.1", + "supports-color": "^10.2.2", + "tar": "^7.5.19", + "text-table": "~0.2.0", + "tiny-relative-date": "^2.0.2", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^7.0.2", + "which": "^6.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/ip-address": { - "version": "10.2.0", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "inBundle": true, "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "6.0.4", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", "dependencies": { - "cidr-regex": "^5.0.4" + "path-key": "^3.0.0" }, "engines": { - "node": ">=20" - } - }, - "node_modules/npm/node_modules/isexe": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=20" + "node": ">=8" } }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "5.0.0", + "node_modules/npm/node_modules/@gar/promise-retry": { + "version": "1.0.3", "dev": true, "inBundle": true, "license": "MIT", @@ -12601,628 +10290,513 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "10.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "8.1.12", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^9.9.1", - "@npmcli/installed-package-contents": "^4.0.0", - "binary-extensions": "^3.0.0", - "diff": "^8.0.2", - "minimatch": "^10.0.3", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2", - "tar": "^7.5.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "10.3.2", + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/arborist": "^9.9.1", - "@npmcli/package-json": "^7.0.0", - "@npmcli/run-script": "^10.0.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2", - "proc-log": "^6.0.0", - "read": "^5.0.1", - "semver": "^7.3.7", - "signal-exit": "^4.1.0", - "walk-up-path": "^4.0.0" + "minipass": "^7.0.4" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18.0.0" } }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "7.0.26", + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^9.9.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "ISC" }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "8.0.1", + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "4.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^19.0.0" + "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/npm/node_modules/libnpmpack": { - "version": "9.1.12", + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "9.9.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.9.1", + "@gar/promise-retry": "^1.0.0", + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^5.0.0", + "@npmcli/redact": "^4.0.0", "@npmcli/run-script": "^10.0.0", + "bin-links": "^6.0.0", + "cacache": "^20.0.1", + "common-ancestor-path": "^2.0.0", + "hosted-git-info": "^9.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^9.0.0", + "npm-install-checks": "^8.0.0", "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2" + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.0.0", + "proggy": "^4.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "semver": "^7.3.7", + "ssri": "^13.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, + "bin": { + "arborist": "bin/index.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "11.2.0", + "node_modules/npm/node_modules/@npmcli/config": { + "version": "10.12.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { + "@npmcli/map-workspaces": "^5.0.0", "@npmcli/package-json": "^7.0.0", "ci-info": "^4.0.0", - "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0", + "ini": "^6.0.0", + "nopt": "^9.0.0", "proc-log": "^6.0.0", - "semver": "^7.3.7", - "sigstore": "^4.0.0", - "ssri": "^13.0.0" + "semver": "^7.3.5", + "walk-up-path": "^4.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "9.0.1", + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^19.0.0" + "semver": "^7.3.5" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "8.0.2", + "node_modules/npm/node_modules/@npmcli/git": { + "version": "7.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^19.0.0" + "@gar/promise-retry": "^1.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": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "8.0.4", + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^7.0.0", - "@npmcli/run-script": "^10.0.0", - "json-parse-even-better-errors": "^5.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.7" + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/lru-cache": { - "version": "11.5.1", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "15.0.6", + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "5.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/agent": "^4.0.0", - "@npmcli/redact": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^6.0.0", - "ssri": "^13.0.0" + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^13.0.0", + "minimatch": "^10.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minimatch": { - "version": "10.2.5", + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.3", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^5.0.0", + "pacote": "^21.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/minipass": { - "version": "7.1.3", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "2.0.1", + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "5.0.2", + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "5.0.0", "dev": true, "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^2.0.0", - "minizlib": "^3.0.1" - }, + "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" - }, - "optionalDependencies": { - "iconv-lite": "^0.7.2" } }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.6", + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "7.0.5", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "minipass": "^7.1.3" + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "which": "^6.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/@npmcli/query": { + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": { + "node_modules/npm/node_modules/@npmcli/redact": { "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "2.0.0", - "dev": true, - "inBundle": true, "license": "ISC", - "dependencies": { - "minipass": "^7.1.2" - }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minizlib": { - "version": "3.1.0", + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "10.0.4", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "minipass": "^7.1.2" + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/negotiator": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "12.4.0", + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "tar": "^7.5.4", - "tinyglobby": "^0.2.12", - "undici": "^6.25.0", - "which": "^6.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/nopt": { - "version": "9.0.0", + "node_modules/npm/node_modules/@sigstore/core": { + "version": "3.2.1", "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^4.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, + "inBundle": true, + "license": "Apache-2.0", "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "7.0.0", + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.5.1", "dev": true, "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "5.0.0", + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "4.1.1", "dev": true, "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "npm-normalize-package-bin": "^5.0.0" + "@gar/promise-retry": "^1.0.2", + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.4", + "proc-log": "^6.1.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "8.0.0", + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "4.0.2", "dev": true, "inBundle": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0", "dependencies": { - "semver": "^7.1.1" + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "5.0.0", + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "3.1.1", "dev": true, "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.1", + "@sigstore/protobuf-specs": "^0.5.0" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "13.0.2", + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^7.0.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "10.0.4", + "node_modules/npm/node_modules/@tufjs/models": { + "version": "4.1.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "ignore-walk": "^8.0.0", - "proc-log": "^6.0.0" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "11.0.3", + "node_modules/npm/node_modules/abbrev": { + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "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/node_modules/npm-profile": { - "version": "12.0.2", + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.1.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 14" } }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "19.1.1", + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^4.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^15.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^13.0.0", - "proc-log": "^6.0.0" - }, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "18 || 20 || >=22" } }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "4.0.0", + "node_modules/npm/node_modules/bin-links": { + "version": "6.0.2", "dev": true, "inBundle": true, - "license": "BSD-2-Clause", + "license": "ISC", + "dependencies": { + "cmd-shim": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "proc-log": "^6.0.0", + "read-cmd-shim": "^6.0.0", + "write-file-atomic": "^7.0.0" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/p-map": { - "version": "7.0.4", + "node_modules/npm/node_modules/binary-extensions": { + "version": "3.1.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=18.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/pacote": { - "version": "21.5.1", + "node_modules/npm/node_modules/brace-expansion": { + "version": "5.0.7", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.0.0", - "sigstore": "^4.0.0", - "ssri": "^13.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" + "balanced-match": "^4.0.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "18 || 20 || >=22" } }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "5.0.1", + "node_modules/npm/node_modules/cacache": { + "version": "20.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^5.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "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": "^13.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/path-scurry": { - "version": "2.0.2", + "node_modules/npm/node_modules/chalk": { + "version": "5.6.2", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, + "license": "MIT", "engines": { - "node": "18 || 20 || >=22" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "7.1.4", + "node_modules/npm/node_modules/chownr": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.4.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "inBundle": true, "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/npm/node_modules/proc-log": { - "version": "6.1.0", + "node_modules/npm/node_modules/cidr-regex": { + "version": "5.0.5", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BSD-2-Clause", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20" } }, - "node_modules/npm/node_modules/proggy": { - "version": "4.0.0", + "node_modules/npm/node_modules/cmd-shim": { + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -13230,1447 +10804,1287 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" } }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "3.0.2", + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" } }, - "node_modules/npm/node_modules/promzard": { - "version": "3.0.1", + "node_modules/npm/node_modules/debug": { + "version": "4.4.3", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "read": "^5.0.0" + "ms": "^2.1.3" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", + "node_modules/npm/node_modules/diff": { + "version": "8.0.4", "dev": true, "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" } }, - "node_modules/npm/node_modules/read": { - "version": "5.0.1", + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6" } }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "6.0.0", + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.3", "dev": true, "inBundle": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "Apache-2.0" }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", "dev": true, "inBundle": true, "license": "MIT", - "optional": true + "engines": { + "node": ">= 4.9.1" + } }, - "node_modules/npm/node_modules/semver": { - "version": "7.8.5", + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", "dev": true, "inBundle": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "minipass": "^7.0.3" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/npm/node_modules/glob": { + "version": "13.0.6", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, "engines": { - "node": ">=14" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/sigstore": { - "version": "4.1.1", + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "9.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.2.1", - "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^4.1.1", - "@sigstore/tuf": "^4.0.2", - "@sigstore/verify": "^3.1.1" + "lru-cache": "^11.1.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/smart-buffer": { + "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.2.0", "dev": true, "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } + "license": "BSD-2-Clause" }, - "node_modules/npm/node_modules/socks": { - "version": "2.8.9", + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ip-address": "^10.1.1", - "smart-buffer": "^4.2.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">= 14" } }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.5", + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" + "debug": "4" }, "engines": { "node": ">= 14" } }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.5.0", - "dev": true, - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "4.0.0", + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.7.2", "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.23", - "dev": true, - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "13.0.1", + "node_modules/npm/node_modules/ignore-walk": { + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "minimatch": "^10.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/supports-color": { - "version": "10.2.2", + "node_modules/npm/node_modules/ini": { + "version": "6.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/tar": { - "version": "7.5.19", + "node_modules/npm/node_modules/init-package-json": { + "version": "8.2.5", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "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" + "@npmcli/package-json": "^7.0.0", + "npm-package-arg": "^13.0.0", + "promzard": "^3.0.1", + "read": "^5.0.1", + "semver": "^7.7.2", + "validate-npm-package-name": "^7.0.0" }, "engines": { - "node": ">=18" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tinyglobby": { - "version": "0.2.17", + "node_modules/npm/node_modules/ip-address": { + "version": "10.2.0", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "node": ">= 12" } }, - "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", + "node_modules/npm/node_modules/is-cidr": { + "version": "6.0.4", "dev": true, "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^5.0.4" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=20" } }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", + "node_modules/npm/node_modules/isexe": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=20" } }, - "node_modules/npm/node_modules/tuf-js": { - "version": "4.1.0", + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "@tufjs/models": "4.1.0", - "debug": "^4.4.3", - "make-fetch-happen": "^15.0.1" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/undici": { - "version": "6.27.0", + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", "dev": true, "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=18.17" + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", "dev": true, "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "7.0.2", + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "10.0.3", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "4.0.0", + "node_modules/npm/node_modules/libnpmdiff": { + "version": "8.1.12", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.9.1", + "@npmcli/installed-package-contents": "^4.0.0", + "binary-extensions": "^3.0.0", + "diff": "^8.0.2", + "minimatch": "^10.0.3", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "tar": "^7.5.1" + }, "engines": { - "node": "20 || >=22" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/which": { - "version": "6.0.1", + "node_modules/npm/node_modules/libnpmexec": { + "version": "10.3.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "isexe": "^4.0.0" - }, - "bin": { - "node-which": "bin/which.js" + "@gar/promise-retry": "^1.0.0", + "@npmcli/arborist": "^9.9.1", + "@npmcli/package-json": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "proc-log": "^6.0.0", + "read": "^5.0.1", + "semver": "^7.3.7", + "signal-exit": "^4.1.0", + "walk-up-path": "^4.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "7.0.1", + "node_modules/npm/node_modules/libnpmfund": { + "version": "7.0.26", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "signal-exit": "^4.0.1" + "@npmcli/arborist": "^9.9.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/yallist": { - "version": "5.0.0", + "node_modules/npm/node_modules/libnpmorg": { + "version": "8.0.1", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", "license": "ISC", - "optional": true, "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "license": "Apache-2.0", + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, "engines": { - "node": "*" + "node": "^20.17.0 || >=22.9.0" } }, - "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==", - "devOptional": true, - "license": "MIT", + "node_modules/npm/node_modules/libnpmpack": { + "version": "9.1.12", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.9.1", + "@npmcli/run-script": "^10.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": "^20.17.0 || >=22.9.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" + "node_modules/npm/node_modules/libnpmpublish": { + "version": "11.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7", + "sigstore": "^4.0.0", + "ssri": "^13.0.0" }, - "funding": { - "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==", - "license": "MIT", "engines": { - "node": ">= 0.4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "license": "MIT", + "node_modules/npm/node_modules/libnpmsearch": { + "version": "9.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" + "npm-registry-fetch": "^19.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "license": "MIT", + "node_modules/npm/node_modules/libnpmteam": { + "version": "8.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^20.17.0 || >=22.9.0" } }, - "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==", + "node_modules/npm/node_modules/libnpmversion": { + "version": "8.0.4", + "dev": true, + "inBundle": true, "license": "ISC", "dependencies": { - "wrappy": "1" + "@npmcli/git": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, + "node_modules/npm/node_modules/lru-cache": { + "version": "11.5.1", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "20 || >=22" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "15.0.6", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "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" + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "@npmcli/redact": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" }, "engines": { - "node": ">= 0.8.0" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/own-keys": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", - "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", - "license": "MIT", + "node_modules/npm/node_modules/minimatch": { + "version": "10.2.5", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", "dependencies": { - "call-bound": "^1.0.4", - "get-intrinsic": "^1.3.0", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" + "brace-expansion": "^5.0.5" }, "engines": { - "node": ">= 0.4" + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ox": { -<<<<<<< HEAD - "version": "0.14.33", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.33.tgz", - "integrity": "sha512-rooA/4o7bBof4Ge2VH/eovfNPb/AEEYyrNj03wggc55g5HZD8Pjs/OeWhttgjic3dDcqn0r29bDuvQEdTiUemQ==", -======= - "version": "0.14.29", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.29.tgz", - "integrity": "sha512-M5j87Ec4V99MQdRct/g09eWXW60g6zhHTUs1lr4deUtrPDnezBdCJTgKd7pxqTpSZBFveV0ALi9jMMuT1qKyNg==", ->>>>>>> 37fcadf (feat: pay on behalf) - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.11.0", - "@noble/ciphers": "^1.3.0", - "@noble/curves": "1.9.1", - "@noble/hashes": "^1.8.0", - "@scure/bip32": "^1.7.0", - "@scure/bip39": "^1.6.0", - "abitype": "^1.2.3", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node_modules/npm/node_modules/minipass": { + "version": "7.1.3", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "node_modules/ox/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", - "license": "MIT", + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "@noble/hashes": "1.8.0" + "minipass": "^7.0.3" }, "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/ox/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/npm/node_modules/minipass-fetch": { + "version": "5.0.2", + "dev": true, + "inBundle": true, "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" + }, "engines": { - "node": "^14.21.3 || >=16" + "node": "^20.17.0 || >=22.9.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "optionalDependencies": { + "iconv-lite": "^0.7.2" } }, - "node_modules/p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.6", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minipass": "^7.1.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "node_modules/p-event": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", - "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "p-timeout": "^6.1.2" + "minipass": "^3.0.0" }, "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/p-filter": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", - "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "p-map": "^7.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=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==", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "yocto-queue": "^0.1.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=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==", + "node_modules/npm/node_modules/minizlib": { + "version": "3.1.0", "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 18" } }, - "node_modules/p-map": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.6.tgz", - "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "node_modules/npm/node_modules/node-gyp": { + "version": "12.4.0", "dev": true, + "inBundle": true, "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, "engines": { - "node": ">=14.16" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "9.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "license": "MIT", + "node_modules/npm/node_modules/npm-audit-report": { + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pako": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.2.0.tgz", - "integrity": "sha512-zJq6RP/5q+TO2OpFV3FHzlPnFjmkb7Nc99a5SNjJE+uu/PkpChs+NIZSSzbBoD+6kjiISXjfYdwj1ZRQ81dz/w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "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==", + "node_modules/npm/node_modules/npm-bundled": { + "version": "5.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "callsites": "^3.0.0" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { - "node": ">=6" + "node": "^20.17.0 || >=22.9.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==", + "node_modules/npm/node_modules/npm-install-checks": { + "version": "8.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "BSD-2-Clause", "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" + "semver": "^7.1.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "node_modules/npm/node_modules/npm-package-arg": { + "version": "13.0.2", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "parse5": "^6.0.1" + "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/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "node_modules/npm/node_modules/npm-packlist": { + "version": "10.0.4", "dev": true, - "license": "MIT" + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "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==", + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "11.0.3", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", + "dependencies": { + "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": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "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==", - "license": "MIT", + "node_modules/npm/node_modules/npm-profile": { + "version": "12.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^20.17.0 || >=22.9.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==", + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "19.1.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/path-type": { + "node_modules/npm/node_modules/npm-user-validate": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/npm/node_modules/p-map": { + "version": "7.0.4", "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": "*" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "license": "MIT" - }, - "node_modules/permissionless": { -<<<<<<< HEAD - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/permissionless/-/permissionless-0.3.7.tgz", - "integrity": "sha512-r1UGWkVMqFzzJ0UcKEVHh6XvOm7+SfTvy7AoGA7ZlxpE96XR+zbtb+rRAA3DOQuq6/ifov5NvUyt1xf4zxbR0g==", -======= - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/permissionless/-/permissionless-0.3.6.tgz", - "integrity": "sha512-7RstRCNwJc/kO9Q/ZJpgSPclXez8CaGU77PeYNaWpHCU1kRetu+7kqEUFcIFLdz47F7jpOwtsbAU56hn27c4mg==", ->>>>>>> 37fcadf (feat: pay on behalf) - "license": "MIT", - "peerDependencies": { - "ox": "^0.11.3", - "viem": "^2.44.4" + "node_modules/npm/node_modules/pacote": { + "version": "21.5.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" }, - "peerDependenciesMeta": { - "ox": { - "optional": true - } + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "5.0.1", "dev": true, - "license": "ISC" + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^5.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "node_modules/npm/node_modules/path-scurry": { + "version": "2.0.2", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, "engines": { - "node": ">=8.6" + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.4", + "dev": true, + "inBundle": true, "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { "node": ">=4" } }, - "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/npm/node_modules/proc-log": { + "version": "6.1.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "license": "MIT", - "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, + "node_modules/npm/node_modules/proggy": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "license": "MIT", + "node_modules/npm/node_modules/promzard": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "p-try": "^1.0.0" + "read": "^5.0.0" }, "engines": { - "node": ">=4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "license": "MIT", + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "p-limit": "^1.1.0" + "mute-stream": "^3.0.0" }, "engines": { - "node": ">=4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", "dev": true, + "inBundle": true, "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } + "optional": true }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "license": "MIT", + "node_modules/npm/node_modules/semver": { + "version": "7.8.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/postcss": { - "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", - "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", "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.16", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, + "inBundle": true, + "license": "ISC", "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "node_modules/npm/node_modules/sigstore": { + "version": "4.1.1", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "lilconfig": "^3.1.1" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.1", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.1", + "@sigstore/tuf": "^4.0.2", + "@sigstore/verify": "^3.1.1" }, "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "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/npm/node_modules/socks": { + "version": "2.8.9", "dev": true, + "inBundle": true, "license": "MIT", + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/prettier": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", - "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", "dev": true, + "inBundle": true, "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">= 14" } }, - "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/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.23", + "dev": true, + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "13.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.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/node_modules/supports-color": { + "version": "10.2.2", "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/pretty-ms": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", - "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "node_modules/npm/node_modules/tar": { + "version": "7.5.19", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "BlueOak-1.0.0", "dependencies": { - "parse-ms": "^4.0.0" + "@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" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", "dev": true, + "inBundle": true, "license": "MIT" }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "2.0.2", "dev": true, - "license": "ISC" + "inBundle": true, + "license": "MIT" }, - "node_modules/proxy-agent-negotiate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", - "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.17", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": ">= 20" + "node": ">=12.0.0" }, "peerDependencies": { - "kerberos": "^2.0.0" + "picomatch": "^3 || ^4" }, "peerDependenciesMeta": { - "kerberos": { + "picomatch": { "optional": true } } }, - "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/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "dev": true, + "inBundle": true, "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", - "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "license": "MIT", - "engines": { - "node": ">=0.4.x" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "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": [ - { - "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/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", "dev": true, - "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" + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "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==", + "node_modules/npm/node_modules/tuf-js": { + "version": "4.1.0", "dev": true, + "inBundle": 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" + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" }, "engines": { - "node": ">=12" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/undici": { + "version": "6.27.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18.17" } }, - "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==", + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", "dev": true, + "inBundle": true, "license": "MIT" }, - "node_modules/read-package-up": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-12.0.0.tgz", - "integrity": "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==", + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "7.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "find-up-simple": "^1.0.1", - "read-pkg": "^10.0.0", - "type-fest": "^5.2.0" - }, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/read-package-up/node_modules/type-fest": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", - "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", + "node_modules/npm/node_modules/walk-up-path": { + "version": "4.0.0", "dev": true, - "license": "(MIT OR CC0-1.0)", - "dependencies": { - "tagged-tag": "^1.0.0" - }, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "20 || >=22" } }, - "node_modules/read-pkg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", - "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", + "node_modules/npm/node_modules/which": { + "version": "6.0.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "@types/normalize-package-data": "^2.4.4", - "normalize-package-data": "^8.0.0", - "parse-json": "^8.3.0", - "type-fest": "^5.4.4", - "unicorn-magic": "^0.4.0" + "isexe": "^4.0.0" }, - "engines": { - "node": ">=20" + "bin": { + "node-which": "bin/which.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "node_modules/npm/node_modules/write-file-atomic": { + "version": "7.0.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/read-pkg/node_modules/parse-json/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "node_modules/npm/node_modules/yallist": { + "version": "5.0.0", "dev": true, - "license": "(MIT OR CC0-1.0)", + "inBundle": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", - "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "dependencies": { - "tagged-tag": "^1.0.0" - }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "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==", + "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==", + "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "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", "engines": { - "node": ">= 14.18.0" + "node": ">= 0.4" }, "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "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==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "license": "MIT", "dependencies": { "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -14679,18 +12093,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -14699,968 +12111,973 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/registry-auth-token": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", - "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", + "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" + } + }, + "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": { - "@pnpm/npm-conf": "^3.0.2" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=14" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "license": "Apache-2.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", "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "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": ">= 6" + "node": ">= 0.8.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/own-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": ">= 0.12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "node_modules/ox": { + "version": "0.14.29", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.29.tgz", + "integrity": "sha512-M5j87Ec4V99MQdRct/g09eWXW60g6zhHTUs1lr4deUtrPDnezBdCJTgKd7pxqTpSZBFveV0ALi9jMMuT1qKyNg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], "license": "MIT", - "bin": { - "uuid": "bin/uuid" + "dependencies": { + "@adraffy/ens-normalize": "^1.11.0", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "1.9.1", + "@noble/hashes": "^1.8.0", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "abitype": "^1.2.3", + "eventemitter3": "5.0.1" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "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==", + "node_modules/ox/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/ox/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": ">=0.10.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "p-timeout": "^6.1.2" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "license": "ISC", - "optional": true - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "node_modules/p-filter": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfc4648": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", - "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==", - "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", - "devOptional": true, - "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "p-map": "^7.0.1" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", - "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "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": { - "@types/estree": "1.0.9" - }, - "bin": { - "rollup": "dist/bin/rollup" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=10" }, - "optionalDependencies": { - "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.62.4", - "@rollup/rollup-android-arm64": "4.62.4", - "@rollup/rollup-darwin-arm64": "4.62.4", - "@rollup/rollup-darwin-x64": "4.62.4", - "@rollup/rollup-freebsd-arm64": "4.62.4", - "@rollup/rollup-freebsd-x64": "4.62.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", - "@rollup/rollup-linux-arm-musleabihf": "4.62.4", - "@rollup/rollup-linux-arm64-gnu": "4.62.4", - "@rollup/rollup-linux-arm64-musl": "4.62.4", - "@rollup/rollup-linux-loong64-gnu": "4.62.4", - "@rollup/rollup-linux-loong64-musl": "4.62.4", - "@rollup/rollup-linux-ppc64-gnu": "4.62.4", - "@rollup/rollup-linux-ppc64-musl": "4.62.4", - "@rollup/rollup-linux-riscv64-gnu": "4.62.4", - "@rollup/rollup-linux-riscv64-musl": "4.62.4", - "@rollup/rollup-linux-s390x-gnu": "4.62.4", - "@rollup/rollup-linux-x64-gnu": "4.62.4", - "@rollup/rollup-linux-x64-musl": "4.62.4", - "@rollup/rollup-openbsd-x64": "4.62.4", - "@rollup/rollup-openharmony-arm64": "4.62.4", - "@rollup/rollup-win32-arm64-msvc": "4.62.4", - "@rollup/rollup-win32-ia32-msvc": "4.62.4", - "@rollup/rollup-win32-x64-gnu": "4.62.4", - "@rollup/rollup-win32-x64-msvc": "4.62.4", - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", - "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", - "cpu": [ - "x64" - ], + "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", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/run-async": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", - "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", - "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/p-map": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.6.tgz", + "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", "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": { - "queue-microtask": "^1.2.2" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/runtypes": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/runtypes/-/runtypes-6.7.0.tgz", - "integrity": "sha512-3TLdfFX8YHNFOhwHrSJza6uxVBmBrEjnNQlNXvXCdItS0Pdskfg5vVXUTWIN+Y23QR09jWpSl99UHkA83m4uWA==", - "license": "MIT" - }, - "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/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/safe-array-concat": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", - "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "get-intrinsic": "^1.3.0", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, "engines": { - "node": ">=0.4" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.2.0.tgz", + "integrity": "sha512-zJq6RP/5q+TO2OpFV3FHzlPnFjmkb7Nc99a5SNjJE+uu/PkpChs+NIZSSzbBoD+6kjiISXjfYdwj1ZRQ81dz/w==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "url": "https://github.com/sponsors/puzrin" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/nodeca" } ], - "license": "MIT" + "license": "(MIT AND Zlib)" }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "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": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" + "callsites": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "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": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.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" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true, "license": "MIT" }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, "license": "MIT" }, - "node_modules/security-context": { + "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz", - "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/semantic-release": { -<<<<<<< HEAD - "version": "25.0.8", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.8.tgz", - "integrity": "sha512-w/iZ0bur36rKffXZYmIUmy068eoBY3Ij1DCCddx2JwWEM5Tg+eU9ld/E9qSInVvPASyyR2Ln/XGfQ9OZrMlhtw==", -======= - "version": "25.0.9", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.9.tgz", - "integrity": "sha512-bxve7csK0/Txr++CkfrmV+X1r4jqiSOw2WsSad9E2S68R+ZfLBwDn8IceM8WfiOmKQIHgsQc1cNA8Dzg7U75pg==", ->>>>>>> 37fcadf (feat: pay on behalf) + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.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==", "dev": true, "license": "MIT", - "dependencies": { - "@semantic-release/commit-analyzer": "^13.0.1", - "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^12.0.0", - "@semantic-release/npm": "^13.1.1", - "@semantic-release/release-notes-generator": "^14.1.0", - "aggregate-error": "^5.0.0", - "cosmiconfig": "^9.0.0", - "debug": "^4.0.0", - "env-ci": "^11.0.0", - "execa": "^9.0.0", - "figures": "^6.0.0", - "find-versions": "^6.0.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^4.0.0", - "hosted-git-info": "^9.0.0", - "import-from-esm": "^2.0.0", - "lodash-es": "^4.17.21", - "marked": "^15.0.0", - "marked-terminal": "^7.3.0", - "micromatch": "^4.0.2", - "p-each-series": "^3.0.0", - "p-reduce": "^3.0.0", - "read-package-up": "^12.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "signale": "^1.2.1", - "yargs": "^18.0.0" + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/permissionless": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/permissionless/-/permissionless-0.3.6.tgz", + "integrity": "sha512-7RstRCNwJc/kO9Q/ZJpgSPclXez8CaGU77PeYNaWpHCU1kRetu+7kqEUFcIFLdz47F7jpOwtsbAU56hn27c4mg==", + "license": "MIT", + "peerDependencies": { + "ox": "^0.11.3", + "viem": "^2.44.4" }, - "bin": { - "semantic-release": "bin/semantic-release.js" + "peerDependenciesMeta": { + "ox": { + "optional": true + } + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", "engines": { - "node": "^22.14.0 || >= 24.10.0" + "node": ">=4" } }, - "node_modules/semantic-release/node_modules/@semantic-release/error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", - "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "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": ">=18" + "node": ">= 6" } }, - "node_modules/semantic-release/node_modules/aggregate-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", - "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", - "dev": true, + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", "license": "MIT", "dependencies": { - "clean-stack": "^5.2.0", - "indent-string": "^5.0.0" + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/semantic-release/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, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "locate-path": "^2.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=4" } }, - "node_modules/semantic-release/node_modules/clean-stack": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", - "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", - "dev": true, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "license": "MIT", "dependencies": { - "escape-string-regexp": "5.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/semantic-release/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", + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "license": "MIT", "dependencies": { - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" + "p-try": "^1.0.0" }, "engines": { - "node": ">=20" + "node": ">=4" } }, - "node_modules/semantic-release/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, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "p-limit": "^1.1.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/semantic-release/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/semantic-release/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/semantic-release/node_modules/execa": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", - "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "cross-spawn": "^7.0.6", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^8.0.1", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^6.0.0", - "pretty-ms": "^9.2.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.1.1" - }, + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", "engines": { - "node": "^18.19.0 || >=20.5.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "node_modules/postcss": { + "version": "8.5.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", "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": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10 || ^12 || >=14" } }, - "node_modules/semantic-release/node_modules/human-signals": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", - "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", "dev": true, - "license": "Apache-2.0", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, "engines": { - "node": ">=18.18.0" + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/semantic-release/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "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": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/semantic-release/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "node_modules/prettier": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", "dev": true, "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { - "node": ">=18" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/semantic-release/node_modules/npm-run-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", - "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^4.0.0", - "unicorn-magic": "^0.3.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/semantic-release/node_modules/p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "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": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/semantic-release/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", "dev": true, "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/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/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", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/semantic-release/node_modules/string-width": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", - "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/proxy-agent-negotiate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", + "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", "dev": true, "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.5.0", - "strip-ansi": "^7.1.2" - }, "engines": { - "node": ">=20" + "node": ">= 20" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "kerberos": "^2.0.0" + }, + "peerDependenciesMeta": { + "kerberos": { + "optional": true + } } }, - "node_modules/semantic-release/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, + "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/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" + "punycode": "^2.3.1" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/lupomontero" } }, - "node_modules/semantic-release/node_modules/strip-final-newline": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", - "dev": true, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/semantic-release/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "license": "MIT", + "node_modules/qs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", + "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.6" } }, - "node_modules/semantic-release/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==", - "dev": true, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=0.4.x" } }, - "node_modules/semantic-release/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==", + "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, - "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" - } + "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/semantic-release/node_modules/yargs": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", - "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", + "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": "MIT", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { - "cliui": "^9.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "string-width": "^8.2.1", - "y18n": "^5.0.5", - "yargs-parser": "^22.0.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" + "bin": { + "rc": "cli.js" } }, - "node_modules/semantic-release/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==", + "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": "ISC", + "license": "MIT", "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" + "node": ">=0.10.0" } }, - "node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "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": ">=10" + "node": ">=12" } }, - "node_modules/semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "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", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "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==", + "node_modules/read-package-up": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-12.0.0.tgz", + "integrity": "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==", + "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "find-up-simple": "^1.0.1", + "read-pkg": "^10.0.0", + "type-fest": "^5.2.0" }, "engines": { - "node": ">=10" + "node": ">=20" }, "funding": { "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==", + "node_modules/read-package-up/node_modules/type-fest": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", + "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", + "dev": true, "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "license": "ISC", - "optional": true - }, - "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==", - "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/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "node_modules/read-pkg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", + "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", + "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" + "@types/normalize-package-data": "^2.4.4", + "normalize-package-data": "^8.0.0", + "parse-json": "^8.3.0", + "type-fest": "^5.4.4", + "unicorn-magic": "^0.4.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" + "node": ">=20" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/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==", + "node_modules/read-pkg/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/read-pkg/node_modules/parse-json/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", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/side-channel": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", - "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", - "license": "MIT", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", + "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" + "tagged-tag": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, "engines": { - "node": ">= 0.4" + "node": ">= 14.18.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, + "peer": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "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==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -15669,1860 +13086,1853 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "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==", - "license": "ISC", + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "node_modules/registry-auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", + "dev": true, "license": "MIT", "dependencies": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" + "@pnpm/npm-conf": "^3.0.2" }, "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/signale/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", + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^1.9.0" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/signale/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/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=4" + "node": ">= 0.12" } }, - "node_modules/signale/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/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "bin": { + "uuid": "bin/uuid" } }, - "node_modules/signale/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" - }, - "node_modules/signale/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/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==", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/signale/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "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", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/signale/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/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": { "node": ">=4" } }, - "node_modules/signale/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==", + "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", - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "node_modules/rfc4648": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", + "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==", + "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", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=8" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/rollup": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", + "fsevents": "~2.3.2" } }, - "node_modules/sodium-native": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.4.1.tgz", - "integrity": "sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ==", - "hasInstallScript": true, + "node_modules/run-async": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - } - }, - "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": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "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==", + "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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "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": { + "queue-microtask": "^1.2.2" } }, - "node_modules/spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", - "dev": true, + "node_modules/runtypes": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/runtypes/-/runtypes-6.7.0.tgz", + "integrity": "sha512-3TLdfFX8YHNFOhwHrSJza6uxVBmBrEjnNQlNXvXCdItS0Pdskfg5vVXUTWIN+Y23QR09jWpSl99UHkA83m4uWA==", "license": "MIT" }, - "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==", - "devOptional": true, + "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": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "tslib": "^2.1.0" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "devOptional": 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==", - "devOptional": true, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", - "devOptional": true, - "license": "CC0-1.0" + "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", + "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/split2": { + "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "dev": true, - "license": "ISC", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", "dependencies": { - "through2": "~2.0.0" + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "license": "MIT", "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, + "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/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", "license": "MIT" }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "node_modules/security-context": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz", + "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" + }, + "node_modules/semantic-release": { + "version": "25.0.9", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.9.tgz", + "integrity": "sha512-bxve7csK0/Txr++CkfrmV+X1r4jqiSOw2WsSad9E2S68R+ZfLBwDn8IceM8WfiOmKQIHgsQc1cNA8Dzg7U75pg==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" + "@semantic-release/commit-analyzer": "^13.0.1", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^12.0.0", + "@semantic-release/npm": "^13.1.1", + "@semantic-release/release-notes-generator": "^14.1.0", + "aggregate-error": "^5.0.0", + "cosmiconfig": "^9.0.0", + "debug": "^4.0.0", + "env-ci": "^11.0.0", + "execa": "^9.0.0", + "figures": "^6.0.0", + "find-versions": "^6.0.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^4.0.0", + "hosted-git-info": "^9.0.0", + "import-from-esm": "^2.0.0", + "lodash-es": "^4.17.21", + "marked": "^15.0.0", + "marked-terminal": "^7.3.0", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-package-up": "^12.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "signale": "^1.2.1", + "yargs": "^18.0.0" + }, + "bin": { + "semantic-release": "bin/semantic-release.js" }, "engines": { - "node": ">= 0.4" + "node": "^22.14.0 || >= 24.10.0" } }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "node_modules/semantic-release/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, "license": "MIT", - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" + "engines": { + "node": ">=18" } }, - "node_modules/stream-combiner2/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/stream-combiner2/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/semantic-release/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, "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" + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stream-combiner2/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/stream-combiner2/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/semantic-release/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", - "dependencies": { - "safe-buffer": "~5.1.0" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/semantic-release/node_modules/clean-stack": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "safe-buffer": "~5.2.0" + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "license": "WTFPL OR MIT", - "peer": true - }, - "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", + "node_modules/semantic-release/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": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=8" + "node": ">=20" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", - "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", + "node_modules/semantic-release/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": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.2", - "es-object-atoms": "^1.1.2", - "has-property-descriptors": "^1.0.2", - "safe-regex-test": "^1.1.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", - "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", + "node_modules/semantic-release/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/semantic-release/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "node_modules/semantic-release/node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" }, "engines": { - "node": ">= 0.4" + "node": "^18.19.0 || >=20.5.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "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/semantic-release/node_modules/execa/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-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", + "node_modules/semantic-release/node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=18.18.0" } }, - "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==", + "node_modules/semantic-release/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/semantic-release/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/semantic-release/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-literal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", - "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "node_modules/semantic-release/node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "node_modules/semantic-release/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/sucrase": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", - "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "node_modules/semantic-release/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", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "tinyglobby": "^0.2.11", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" } }, - "node_modules/super-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.1.0.tgz", - "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==", + "node_modules/semantic-release/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", "dev": true, "license": "MIT", "dependencies": { - "function-timeout": "^1.0.1", - "make-asynchronous": "^1.0.1", - "time-span": "^5.1.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { + "node_modules/semantic-release/node_modules/strip-ansi": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "node_modules/semantic-release/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, "engines": { - "node": ">=14.18" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "node_modules/semantic-release/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, + "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "node_modules/semantic-release/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==", + "dev": true, "license": "MIT", "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "node_modules/semantic-release/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": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "node_modules/semantic-release/node_modules/yargs": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", + "dev": true, "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^8.2.1", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, "engines": { - "node": ">=8" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, - "node_modules/tagged-tag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", - "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "node_modules/semantic-release/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", + "license": "ISC", "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, "license": "ISC", - "optional": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/tempy": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.2.0.tgz", - "integrity": "sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==", + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, "license": "MIT", - "dependencies": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, "engines": { - "node": ">=14.16" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, + "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": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempy/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, + "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": ">=12.20" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, + "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==", "license": "MIT", "dependencies": { - "any-promise": "^1.0.0" + "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/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==", - "dev": true, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "license": "MIT", "dependencies": { - "thenify": ">= 3.1.0 < 4" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=0.8" + "node": ">= 0.4" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT", - "optional": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "license": "MIT", "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/through2/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, + "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/through2/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/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": { - "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" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/through2/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==", + "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" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/through2/node_modules/string_decoder": { + "node_modules/side-channel": { "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, + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/time-span": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", - "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", - "dev": true, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { - "convert-hrtime": "^5.0.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", - "dev": true, + "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": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=12.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, + "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", - "engines": { - "node": ">=12.0.0" + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "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==", + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/tinypool": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", - "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", - "dev": true, + "node_modules/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "license": "MIT", + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, "engines": { - "node": ">=14.0.0" + "node": ">=6" } }, - "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", - "dev": true, + "node_modules/signale/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", + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/signale/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", "dependencies": { - "os-tmpdir": "~1.0.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=4" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "node_modules/signale/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", "dependencies": { - "is-number": "^7.0.0" + "color-name": "1.1.3" + } + }, + "node_modules/signale/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" + }, + "node_modules/signale/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", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/signale/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=8.0" + "node": ">=4" } }, - "node_modules/toml": { + "node_modules/signale/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "license": "MIT", - "optional": true + "engines": { + "node": ">=4" + } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "license": "BSD-3-Clause", + "node_modules/signale/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", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=4" } }, - "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/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/traverse": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", - "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, + "node_modules/sodium-native": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.4.1.tgz", + "integrity": "sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ==", + "hasInstallScript": true, "license": "MIT", - "bin": { - "tree-kill": "cli.js" + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" } }, - "node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" + "node": ">=0.10.0" } }, - "node_modules/ts-chacha20": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-chacha20/-/ts-chacha20-1.2.0.tgz", - "integrity": "sha512-PTyPoWYHc2we8P2NTn5hpYG211popWbkjiw+k63xqjeMrx9pPtXSclz9F3fu0Tpr+vfR1xxcQFwsEkh1cXMLqw==", + "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": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", + "dev": true, "license": "MIT" }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", - "license": "ISC", - "peer": true, + "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": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "license": "MIT", - "peerDependencies": { - "typescript": ">=3.7.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "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==", + "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": "Apache-2.0" - }, - "node_modules/ts-typed-json": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ts-typed-json/-/ts-typed-json-0.3.2.tgz", - "integrity": "sha512-Tdu3BWzaer7R5RvBIJcg9r8HrTZgpJmsX+1meXMJzYypbkj8NK2oJN0yvm4Dp/Iv6tzFa/L5jKRmEVTga6K3nA==", - "license": "MIT", - "optional": true - }, - "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" + "license": "CC-BY-3.0" }, - "node_modules/tsup": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz", - "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==", + "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": { - "bundle-require": "^5.1.0", - "cac": "^6.7.14", - "chokidar": "^4.0.3", - "consola": "^3.4.0", - "debug": "^4.4.0", - "esbuild": "^0.27.0", - "fix-dts-default-cjs-exports": "^1.0.0", - "joycon": "^3.1.1", - "picocolors": "^1.1.1", - "postcss-load-config": "^6.0.1", - "resolve-from": "^5.0.0", - "rollup": "^4.34.8", - "source-map": "^0.7.6", - "sucrase": "^3.35.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.11", - "tree-kill": "^1.2.2" - }, - "bin": { - "tsup": "dist/cli-default.js", - "tsup-node": "dist/cli-node.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@microsoft/api-extractor": "^7.36.0", - "@swc/core": "^1", - "postcss": "^8.4.12", - "typescript": ">=4.5.0" - }, - "peerDependenciesMeta": { - "@microsoft/api-extractor": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "postcss": { - "optional": true - }, - "typescript": { - "optional": true - } + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/tsup/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/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "CC0-1.0" }, - "node_modules/tsup/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" + "license": "ISC", + "dependencies": { + "through2": "~2.0.0" } }, - "node_modules/tsx": { -<<<<<<< HEAD - "version": "4.23.5", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.5.tgz", - "integrity": "sha512-rw55FUaqOoI7RvlQwLbhO4nSDApnQ4/CykPuiQ/EPvtrX3WA9Ig55jIt9VvbBJbzJuj12ueRu4PMZ2SxPVbihg==", -======= - "version": "4.23.7", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.7.tgz", - "integrity": "sha512-3f/u/+UDCNQ7iwUZW9FCMnNGIHzElGJYh0S/yy8IvWSsn5O7fEO/897FaG7FA2W8yryiRyuwXZ1PYLAKYaqSuQ==", ->>>>>>> 37fcadf (feat: pay on behalf) - "dev": true, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "license": "MIT", "dependencies": { - "esbuild": "~0.28.0" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" }, "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", - "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", - "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", - "cpu": [ - "arm" - ], + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", - "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", - "cpu": [ - "arm64" - ], + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", - "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" } }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", - "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", - "cpu": [ - "arm64" - ], + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" } }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", - "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", - "cpu": [ - "x64" - ], + "node_modules/stream-combiner2/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", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", - "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", - "cpu": [ - "arm64" - ], + "node_modules/stream-combiner2/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", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "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/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", - "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", - "cpu": [ - "x64" - ], + "node_modules/stream-combiner2/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", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", - "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", - "cpu": [ - "arm" - ], + "node_modules/stream-combiner2/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", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", - "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "license": "WTFPL OR MIT", + "peer": true + }, + "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, - "os": [ - "linux" - ], + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", - "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/string.prototype.trim": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", - "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/string.prototype.trimend": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.2" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", - "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", - "cpu": [ - "mips64el" - ], - "dev": true, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", - "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", - "cpu": [ - "ppc64" - ], - "dev": true, + "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, - "os": [ - "linux" - ], + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", - "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", - "cpu": [ - "riscv64" - ], - "dev": true, + "node_modules/strip-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, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", - "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", - "cpu": [ - "s390x" - ], - "dev": true, + "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==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", - "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", - "cpu": [ - "x64" - ], + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", - "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", - "cpu": [ - "arm64" - ], + "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", - "optional": true, - "os": [ - "netbsd" - ], "engines": { - "node": ">=18" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", - "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", - "cpu": [ - "x64" - ], + "node_modules/strip-literal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", - "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", - "cpu": [ - "arm64" - ], + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", - "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", - "cpu": [ - "x64" - ], + "node_modules/super-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.1.0.tgz", + "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "function-timeout": "^1.0.1", + "make-asynchronous": "^1.0.1", + "time-span": "^5.1.0" + }, "engines": { "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tsx/node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", - "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", - "cpu": [ - "arm64" - ], - "dev": true, + "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==", "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", - "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", - "cpu": [ - "x64" - ], + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, "engines": { - "node": ">=18" + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", - "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", - "cpu": [ - "arm64" - ], + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=18" + "node": ">=10.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", - "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "peer": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, "engines": { - "node": ">=18" + "node": ">=8.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", - "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "peer": true, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", - "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", - "dev": true, - "hasInstallScript": true, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, + "peer": true, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.1", - "@esbuild/android-arm": "0.28.1", - "@esbuild/android-arm64": "0.28.1", - "@esbuild/android-x64": "0.28.1", - "@esbuild/darwin-arm64": "0.28.1", - "@esbuild/darwin-x64": "0.28.1", - "@esbuild/freebsd-arm64": "0.28.1", - "@esbuild/freebsd-x64": "0.28.1", - "@esbuild/linux-arm": "0.28.1", - "@esbuild/linux-arm64": "0.28.1", - "@esbuild/linux-ia32": "0.28.1", - "@esbuild/linux-loong64": "0.28.1", - "@esbuild/linux-mips64el": "0.28.1", - "@esbuild/linux-ppc64": "0.28.1", - "@esbuild/linux-riscv64": "0.28.1", - "@esbuild/linux-s390x": "0.28.1", - "@esbuild/linux-x64": "0.28.1", - "@esbuild/netbsd-arm64": "0.28.1", - "@esbuild/netbsd-x64": "0.28.1", - "@esbuild/openbsd-arm64": "0.28.1", - "@esbuild/openbsd-x64": "0.28.1", - "@esbuild/openharmony-arm64": "0.28.1", - "@esbuild/sunos-x64": "0.28.1", - "@esbuild/win32-arm64": "0.28.1", - "@esbuild/win32-ia32": "0.28.1", - "@esbuild/win32-x64": "0.28.1" + "node": ">=8" } }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, + "node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">=14.16" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "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==", + "node_modules/tempy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.2.0.tgz", + "integrity": "sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/tempy/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" }, - "peerDependencies": { - "typescript": ">=4.3.0" + "engines": { + "node": ">=0.8" } }, - "node_modules/typechain/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==", + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "license": "MIT", - "peer": true + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "node_modules/through2/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/through2/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", - "peer": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "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/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/through2/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/through2/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", - "peer": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "safe-buffer": "~5.1.0" } }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "peer": true, + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "convert-hrtime": "^5.0.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typechain/node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "license": "MIT", - "peer": true + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "peer": true, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "fdir": "^6.5.0", + "picomatch": "^4.0.4" }, "engines": { - "node": "*" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "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" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/typechain/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, "license": "MIT", - "peer": true, - "bin": { - "prettier": "bin-prettier.js" - }, "engines": { - "node": ">=10.13.0" + "node": ">=12" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/typechain/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==", + "node_modules/tinypool": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">= 4.0.0" + "node": ">=14.0.0" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=0.6.0" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "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": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.0" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "license": "MIT", + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, + "engines": { + "node": ">=0.8" + } + }, + "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/traverse": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", + "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -17530,816 +14940,887 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-length": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", - "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "for-each": "^0.3.5", - "gopd": "^1.2.0", - "is-typed-array": "^1.1.15", - "possible-typed-array-names": "^1.1.0", - "reflect.getprototypeof": "^1.0.10" - }, "engines": { - "node": ">= 0.4" + "node": ">=18.12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", + "node_modules/ts-chacha20": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-chacha20/-/ts-chacha20-1.2.0.tgz", + "integrity": "sha512-PTyPoWYHc2we8P2NTn5hpYG211popWbkjiw+k63xqjeMrx9pPtXSclz9F3fu0Tpr+vfR1xxcQFwsEkh1cXMLqw==", + "license": "MIT" + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0" + }, + "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/tsup": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz", + "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.27.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "^0.7.6", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" }, "engines": { - "node": ">=14.17" + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "node_modules/tsup/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": ">=8" } }, - "node_modules/ufo": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", - "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", - "dev": true, - "license": "MIT" - }, - "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==", + "node_modules/tsup/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=0.8.0" + "node": ">= 12" } }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "node_modules/tsx": { + "version": "4.23.7", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.7.tgz", + "integrity": "sha512-3f/u/+UDCNQ7iwUZW9FCMnNGIHzElGJYh0S/yy8IvWSsn5O7fEO/897FaG7FA2W8yryiRyuwXZ1PYLAKYaqSuQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "~2.3.3" } }, - "node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=14.0" + "node": ">=18" } }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "node_modules/tsx/node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" } }, - "node_modules/unicorn-magic": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", - "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, "license": "MIT", "engines": { - "node": ">=20" + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "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": { - "crypto-random-string": "^4.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/universal-user-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", - "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", - "dev": true, - "license": "ISC" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=4" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "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==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "dev": true, + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "peer": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" } }, - "node_modules/util-deprecate": { + "node_modules/typechain/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "peer": true + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "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==", - "devOptional": true, - "license": "Apache-2.0", + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "license": "MIT", + "peer": true, "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", - "optional": true, + "peer": true, "dependencies": { - "builtins": "^1.0.3" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/validator": { - "version": "13.15.35", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", - "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", + "node_modules/typechain/node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", "license": "MIT", - "engines": { - "node": ">= 0.10" - } + "peer": true }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/viem": { -<<<<<<< HEAD - "version": "2.55.10", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.55.10.tgz", - "integrity": "sha512-Q9Ba+/ma81U2M5o5P2AQ7Ux8rTIwmCZvUcr8rKdQ22bV0IBFHllM2m5gWDP8hFaUN2nH2oW3QG44amRazflYNQ==", -======= - "version": "2.53.1", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.53.1.tgz", - "integrity": "sha512-FhfJ/SW73CVosiyVLmIMVgKDRKYV1AGCLzZoHYvmNayyVff63Qi1ocPCk59LqC/cNw244RbBJjHnmxqXkE7NpA==", ->>>>>>> 37fcadf (feat: pay on behalf) - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "peer": true, "dependencies": { - "@noble/curves": "1.9.1", - "@noble/hashes": "1.8.0", - "@scure/bip32": "1.7.0", - "@scure/bip39": "1.6.0", - "abitype": "1.2.3", - "isows": "1.0.7", -<<<<<<< HEAD - "ox": "0.14.33", - "ws": "8.21.0" -======= - "ox": "0.14.29", - "ws": "8.20.1" ->>>>>>> 37fcadf (feat: pay on behalf) - }, - "peerDependencies": { - "typescript": ">=5.0.4" + "brace-expansion": "^1.1.7" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "*" } }, - "node_modules/viem/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "node_modules/typechain/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" + "peer": true, + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">=10.13.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/viem/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/typechain/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==", "license": "MIT", + "peer": true, "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">= 4.0.0" } }, - "node_modules/viem/node_modules/ws": { -<<<<<<< HEAD - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", - "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", -======= - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", - "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", ->>>>>>> 37fcadf (feat: pay on behalf) + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">= 0.4" } }, - "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", - "dev": true, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite-node": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.1.tgz", - "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==", - "dev": true, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "license": "MIT", "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite-node/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, + "node_modules/typed-array-length": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", "license": "MIT", - "optional": true, - "os": [ - "aix" - ], + "dependencies": { + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=12" + "node": ">=14.17" } }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "peer": true, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], + "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": "MIT", + "license": "BSD-2-Clause", "optional": true, - "os": [ - "darwin" - ], + "bin": { + "uglifyjs": "bin/uglifyjs" + }, "engines": { - "node": ">=12" + "node": ">=0.8.0" } }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, + "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, - "os": [ - "freebsd" - ], + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=14.0" } }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], + "node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "crypto-random-string": "^4.0.0" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], + "node_modules/universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "dev": true, + "license": "ISC" + }, + "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", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 10.0.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], + "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==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "license": "MIT" + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" ], - "engines": { - "node": ">=12" + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], + "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": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, + "node_modules/validator": { + "version": "13.15.35", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", + "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 0.10" } }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" + "node_modules/viem": { + "version": "2.53.1", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.53.1.tgz", + "integrity": "sha512-FhfJ/SW73CVosiyVLmIMVgKDRKYV1AGCLzZoHYvmNayyVff63Qi1ocPCk59LqC/cNw244RbBJjHnmxqXkE7NpA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@noble/curves": "1.9.1", + "@noble/hashes": "1.8.0", + "@scure/bip32": "1.7.0", + "@scure/bip39": "1.6.0", + "abitype": "1.2.3", + "isows": "1.0.7", + "ox": "0.14.29", + "ws": "8.20.1" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "@noble/hashes": "1.8.0" + }, "engines": { - "node": ">=12" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/viem/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, - "os": [ - "openbsd" - ], "engines": { - "node": ">=12" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/viem/node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], "engines": { - "node": ">=12" + "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/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">=12" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], + "node_modules/vite-node": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.1.tgz", + "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, "engines": { - "node": ">=12" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { + "node_modules/vite-node/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">=12" @@ -18777,16 +16258,6 @@ "node": ">=8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "license": "ISC", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -18801,7 +16272,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/wordwrapjs": { @@ -18809,6 +16280,7 @@ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "license": "MIT", + "peer": true, "dependencies": { "reduce-flatten": "^2.0.0", "typical": "^5.2.0" @@ -18822,6 +16294,7 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } From 2f54727f7dc1dba513876c1ec7ae0120a221068f Mon Sep 17 00:00:00 2001 From: Rishabh Singh Date: Thu, 13 Aug 2026 21:01:49 +0530 Subject: [PATCH 5/7] fix: regenerate package-lock.json from a clean install MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous fix left the lockfile out of sync with package.json — npm ci reported ~150 missing transitive packages (BBS-signature native build toolchain, inquirer@7.3.3, esbuild/rollup platform binaries). Regenerated via rm -rf node_modules package-lock.json && npm install, then verified with a clean npm ci. --- package-lock.json | 11670 ++++++++++++++++++++++++++------------------ 1 file changed, 6935 insertions(+), 4735 deletions(-) diff --git a/package-lock.json b/package-lock.json index d932c77..a8775b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -459,21 +459,6 @@ "node": ">=18" } }, - "node_modules/@digitalbazaar/bbs-signatures/node_modules/@noble/curves": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.3.0.tgz", - "integrity": "sha512-v7cY+4oWYPQszRj6ZFGzTVL7uP2TaLo1xMhWHzYC5wj0ZhOXQ5x+sBre8rF3hi8cAoi0bh1qXoovoOkdFtvqEg==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "2.3.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@digitalbazaar/bls12-381-multikey": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@digitalbazaar/bls12-381-multikey/-/bls12-381-multikey-2.2.0.tgz", @@ -490,21 +475,6 @@ "node": ">=22" } }, - "node_modules/@digitalbazaar/bls12-381-multikey/node_modules/@noble/curves": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.3.0.tgz", - "integrity": "sha512-v7cY+4oWYPQszRj6ZFGzTVL7uP2TaLo1xMhWHzYC5wj0ZhOXQ5x+sBre8rF3hi8cAoi0bh1qXoovoOkdFtvqEg==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "2.3.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@digitalbazaar/data-integrity": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@digitalbazaar/data-integrity/-/data-integrity-2.5.0.tgz", @@ -747,436 +717,580 @@ "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", "license": "BSD-3-Clause" }, - "node_modules/@esbuild/darwin-arm64": { + "node_modules/@esbuild/aix-ppc64": { "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "aix" ], "engines": { "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", - "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, + "optional": true, + "os": [ + "android" + ], "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" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=18" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=18" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], "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" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@eslint/eslintrc/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==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 4" + "node": ">=18" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" } }, - "node_modules/@ethersproject/abi": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" ], + "dev": true, "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "eslint-visitor-keys": "^3.4.3" + }, + "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_modules/@ethersproject/json-wallets": { + "node_modules/@eslint-community/regexpp": { + "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": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "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/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/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": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@ethersproject/abi": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", "funding": [ { "type": "individual", @@ -1189,31 +1303,21 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, - "node_modules/@ethersproject/keccak256": { + "node_modules/@ethersproject/abstract-provider": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", "funding": [ { "type": "individual", @@ -1226,20 +1330,19 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, - "node_modules/@ethersproject/keccak256/node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "license": "MIT" - }, - "node_modules/@ethersproject/logger": { + "node_modules/@ethersproject/abstract-signer": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", "funding": [ { "type": "individual", @@ -1250,12 +1353,19 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } }, - "node_modules/@ethersproject/networks": { + "node_modules/@ethersproject/address": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", "funding": [ { "type": "individual", @@ -1268,13 +1378,17 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@ethersproject/pbkdf2": { + "node_modules/@ethersproject/base64": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", "funding": [ { "type": "individual", @@ -1287,14 +1401,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" + "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@ethersproject/properties": { + "node_modules/@ethersproject/basex": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", "funding": [ { "type": "individual", @@ -1307,13 +1420,14 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@ethersproject/providers": { + "node_modules/@ethersproject/bignumber": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", "funding": [ { "type": "individual", @@ -1326,32 +1440,15 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" + "bn.js": "^5.2.1" } }, - "node_modules/@ethersproject/random": { + "node_modules/@ethersproject/bytes": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", "funding": [ { "type": "individual", @@ -1364,14 +1461,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/rlp": { + "node_modules/@ethersproject/constants": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", "funding": [ { "type": "individual", @@ -1384,14 +1480,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@ethersproject/bignumber": "^5.8.0" } }, - "node_modules/@ethersproject/sha2": { + "node_modules/@ethersproject/contracts": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", "funding": [ { "type": "individual", @@ -1404,15 +1499,22 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" } }, - "node_modules/@ethersproject/signing-key": { + "node_modules/@ethersproject/hash": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", "funding": [ { "type": "individual", @@ -1425,18 +1527,21 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/solidity": { + "node_modules/@ethersproject/hdnode": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", - "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", "funding": [ { "type": "individual", @@ -1449,18 +1554,24 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@ethersproject/strings": { + "node_modules/@ethersproject/json-wallets": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", "funding": [ { "type": "individual", @@ -1473,15 +1584,92 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "license": "MIT" + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/keccak256/node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/transactions": { + "node_modules/@ethersproject/pbkdf2": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", "funding": [ { "type": "individual", @@ -1494,21 +1682,14 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" + "@ethersproject/sha2": "^5.8.0" } }, - "node_modules/@ethersproject/units": { + "node_modules/@ethersproject/properties": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", - "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", "funding": [ { "type": "individual", @@ -1521,15 +1702,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/constants": "^5.8.0", "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/wallet": { + "node_modules/@ethersproject/providers": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", "funding": [ { "type": "individual", @@ -1545,24 +1724,29 @@ "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", "@ethersproject/properties": "^5.8.0", "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" } }, - "node_modules/@ethersproject/web": { + "node_modules/@ethersproject/random": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", "funding": [ { "type": "individual", @@ -1575,17 +1759,228 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/base64": "^5.8.0", "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/wordlists": { + "node_modules/@ethersproject/rlp": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", "funding": [ { "type": "individual", @@ -2050,6 +2445,48 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/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", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/@mattrglobal/bbs-signatures": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@mattrglobal/bbs-signatures/-/bbs-signatures-1.4.0.tgz", @@ -2125,6 +2562,22 @@ "node": ">=14.0.0" } }, + "node_modules/@mattrglobal/jsonld-signatures-bbs/node_modules/@mattrglobal/node-bbs-signatures": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@mattrglobal/node-bbs-signatures/-/node-bbs-signatures-0.17.0.tgz", + "integrity": "sha512-midEd1qGYfAKjILyIdEgyY7tbVwIFR7ozWli8AaxBaiDie2oBaj6O1A2rh/GCOKTpBZ3Thbi+CE0QZntWf+Xzg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "1.0.11", + "neon-cli": "0.10.1" + }, + "engines": { + "node": ">=14", + "yarn": "1.x" + } + }, "node_modules/@mattrglobal/jsonld-signatures-bbs/node_modules/jsonld": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-4.0.1.tgz", @@ -2226,26 +2679,44 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, - "node_modules/@noble/ciphers": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", - "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" + "node_modules/@mattrglobal/node-bbs-signatures": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@mattrglobal/node-bbs-signatures/-/node-bbs-signatures-0.18.1.tgz", + "integrity": "sha512-s9ccL/1TTvCP1N//4QR84j/d5D/stx/AI1kPcRgiE4O3KrxyF7ZdL9ca8fmFuN6yh9LAbn/OiGRnOXgvn38Dgg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "1.0.11", + "neon-cli": "0.10.1" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=14", + "yarn": "1.x" } }, - "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==", + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, "engines": { "node": "^14.21.3 || >=16" }, @@ -2253,13 +2724,16 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@noble/curves/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/@noble/curves": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.3.0.tgz", + "integrity": "sha512-v7cY+4oWYPQszRj6ZFGzTVL7uP2TaLo1xMhWHzYC5wj0ZhOXQ5x+sBre8rF3hi8cAoi0bh1qXoovoOkdFtvqEg==", "license": "MIT", + "dependencies": { + "@noble/hashes": "2.3.0" + }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -2540,6 +3014,34 @@ "node": ">=12" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", @@ -2554,306 +3056,628 @@ "darwin" ] }, - "node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@scure/bip32": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", - "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "~1.9.0", - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@scure/bip32/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/@rollup/rollup-freebsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@scure/bip39": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", - "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@scure/bip39/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/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.4" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@semantic-release/commit-analyzer": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.1.tgz", - "integrity": "sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "dependencies": { - "conventional-changelog-angular": "^8.0.0", - "conventional-changelog-writer": "^8.0.0", - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.0.0", - "debug": "^4.0.0", - "import-from-esm": "^2.0.0", - "lodash-es": "^4.17.21", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=20.8.1" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">=14.17" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@semantic-release/git": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", - "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@semantic-release/github": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-12.0.9.tgz", - "integrity": "sha512-ODIqb0V3QqndipryEEiaBxUQCFjvv7Oese5Dt4omMGa60YRNEW0Sx3K+zri0uac2Y6S9nOlMehciWIzvvRCTGQ==", + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@octokit/core": "^7.0.0", - "@octokit/plugin-paginate-rest": "^14.0.0", - "@octokit/plugin-retry": "^8.0.0", - "@octokit/plugin-throttling": "^11.0.0", - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^5.0.0", - "debug": "^4.3.4", - "dir-glob": "^3.0.1", - "http-proxy-agent": "^9.0.0", - "https-proxy-agent": "^9.0.0", - "issue-parser": "^7.0.0", - "lodash-es": "^4.17.21", - "mime": "^4.0.0", - "p-filter": "^4.0.0", - "tinyglobby": "^0.2.14", - "undici": "^7.0.0", - "url-join": "^5.0.0" - }, - "engines": { - "node": "^22.14.0 || >= 24.10.0" - }, - "peerDependencies": { - "semantic-release": ">=24.1.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@semantic-release/github/node_modules/@semantic-release/error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", - "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">=18" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@semantic-release/github/node_modules/agent-base": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", - "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">= 20" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@semantic-release/github/node_modules/aggregate-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", - "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", + "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "license": "MIT", "dependencies": { - "clean-stack": "^5.2.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=18" + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@semantic-release/github/node_modules/clean-stack": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", - "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", - "dev": true, + "node_modules/@scure/bip32/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": { - "escape-string-regexp": "5.0.0" + "@noble/hashes": "1.8.0" }, "engines": { - "node": ">=14.16" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@semantic-release/github/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, + "node_modules/@scure/bip32/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": ">=12" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.1.0.tgz", - "integrity": "sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==", - "dev": true, + "node_modules/@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", "license": "MIT", "dependencies": { - "agent-base": "9.0.0", - "debug": "^4.3.4", - "proxy-agent-negotiate": "1.1.0" + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" }, - "engines": { - "node": ">= 20" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@semantic-release/github/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, + "node_modules/@scure/bip39/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": ">=12" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@semantic-release/github/node_modules/undici": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", - "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.18.1" - } + "license": "MIT" }, - "node_modules/@semantic-release/npm": { - "version": "13.1.5", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-13.1.5.tgz", - "integrity": "sha512-Hq5UxzoatN3LHiq2rTsWS54nCdqJHlsssGERCo8WlvdfFA9LoN0vO+OuKVSjtNapIc/S8C2LBj206wKLHg62mg==", + "node_modules/@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", "dev": true, "license": "MIT", "dependencies": { - "@actions/core": "^3.0.0", - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^5.0.0", - "env-ci": "^11.2.0", - "execa": "^9.0.0", + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", "fs-extra": "^11.0.0", - "lodash-es": "^4.17.21", - "nerf-dart": "^1.0.0", - "normalize-url": "^9.0.0", - "npm": "^11.6.2", - "rc": "^1.2.8", - "read-pkg": "^10.0.0", - "registry-auth-token": "^5.0.0", - "semver": "^7.1.2", - "tempy": "^3.0.0" + "lodash": "^4.17.4" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/commit-analyzer": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.1.tgz", + "integrity": "sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-changelog-angular": "^8.0.0", + "conventional-changelog-writer": "^8.0.0", + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.0.0", + "debug": "^4.0.0", + "import-from-esm": "^2.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=20.8.1" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/github": { + "version": "12.0.9", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-12.0.9.tgz", + "integrity": "sha512-ODIqb0V3QqndipryEEiaBxUQCFjvv7Oese5Dt4omMGa60YRNEW0Sx3K+zri0uac2Y6S9nOlMehciWIzvvRCTGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^7.0.0", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/plugin-retry": "^8.0.0", + "@octokit/plugin-throttling": "^11.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^5.0.0", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "http-proxy-agent": "^9.0.0", + "https-proxy-agent": "^9.0.0", + "issue-parser": "^7.0.0", + "lodash-es": "^4.17.21", + "mime": "^4.0.0", + "p-filter": "^4.0.0", + "tinyglobby": "^0.2.14", + "undici": "^7.0.0", + "url-join": "^5.0.0" + }, + "engines": { + "node": "^22.14.0 || >= 24.10.0" + }, + "peerDependencies": { + "semantic-release": ">=24.1.0" + } + }, + "node_modules/@semantic-release/github/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@semantic-release/github/node_modules/agent-base": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", + "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@semantic-release/github/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/clean-stack": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.1.0.tgz", + "integrity": "sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@semantic-release/github/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/@semantic-release/npm": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-13.1.5.tgz", + "integrity": "sha512-Hq5UxzoatN3LHiq2rTsWS54nCdqJHlsssGERCo8WlvdfFA9LoN0vO+OuKVSjtNapIc/S8C2LBj206wKLHg62mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@actions/core": "^3.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^5.0.0", + "env-ci": "^11.2.0", + "execa": "^9.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^9.0.0", + "npm": "^11.6.2", + "rc": "^1.2.8", + "read-pkg": "^10.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" }, "engines": { "node": "^22.14.0 || >= 24.10.0" @@ -4130,17 +4954,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.66.0.tgz", - "integrity": "sha512-p088eaGrzYz1s+7cov0aMOCkNGTJlVxF4jgubf28c8L0Cv9Rloj8YBHnv4hXLq6IIEE1AsjNWavO+k+8kP2Y0A==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz", + "integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.66.0", - "@typescript-eslint/type-utils": "8.66.0", - "@typescript-eslint/utils": "8.66.0", - "@typescript-eslint/visitor-keys": "8.66.0", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/type-utils": "8.67.0", + "@typescript-eslint/utils": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -4153,22 +4977,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.66.0", + "@typescript-eslint/parser": "^8.67.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.66.0.tgz", - "integrity": "sha512-X6ypGChaWYk6PBtUg2BwuTZEFFcHJAtGTVJ9/lCTOufhZ4i9fNolQNnktq+kkMCwMj7V8Svsq7+TxSDslmhE0g==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz", + "integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.66.0", - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/typescript-estree": "8.66.0", - "@typescript-eslint/visitor-keys": "8.66.0", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", "debug": "^4.4.3" }, "engines": { @@ -4184,14 +5008,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.66.0.tgz", - "integrity": "sha512-7MthGPTt4BP69lSryqpqq8HQqxuzynssckL/jyDyk3+TNMQ3y2jFWkptCrktWvBrP+EH787Nl5N5Qpw7WZg+5g==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz", + "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.66.0", - "@typescript-eslint/types": "^8.66.0", + "@typescript-eslint/tsconfig-utils": "^8.67.0", + "@typescript-eslint/types": "^8.67.0", "debug": "^4.4.3" }, "engines": { @@ -4206,14 +5030,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.66.0.tgz", - "integrity": "sha512-8TGcH25j9zqJ/IULB/ppyhRvxA8QYfFEZ7nfbg6/BN9spDgb8fPWQXlE5l8TWBL50EtUx007uZ1o9VOwrq2/9g==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz", + "integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/visitor-keys": "8.66.0" + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4224,9 +5048,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.66.0.tgz", - "integrity": "sha512-9D5gLYZG4rOjcoag8MQ/fWI8WqA9wcPDyOGyWtWFhvM1lHRbliqUSPIY5J3zqCU1tvSwzXxnnjhQhz5Ne7mJ4g==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz", + "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==", "dev": true, "license": "MIT", "engines": { @@ -4241,15 +5065,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.66.0.tgz", - "integrity": "sha512-LG2dWfjZQQp0ADtAu/EWJVayefGL2UEZ3CDeI44D9v3rXB/WYUqE/jpO28KrEKul5AySrmI+Zh1v6v+xW2U9+g==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz", + "integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/typescript-estree": "8.66.0", - "@typescript-eslint/utils": "8.66.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/utils": "8.67.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -4266,9 +5090,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.66.0.tgz", - "integrity": "sha512-H6gcYaSDOyvL3AD/jHUtUFo2jqGgn/F6nuyuZSu0QTesxL+cP4dQoIMrODRofuJC09g64+WgZ6tE19Y1N2YIFQ==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz", + "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==", "dev": true, "license": "MIT", "engines": { @@ -4280,16 +5104,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.66.0.tgz", - "integrity": "sha512-8/x4INiiQb10jGgXYD7116/zQ+OL84ZIFn0za68wwFHCanT/VLbBEroWht8RV8fn0/ZCAoazHLQgwUC0UQcDfg==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz", + "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.66.0", - "@typescript-eslint/tsconfig-utils": "8.66.0", - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/visitor-keys": "8.66.0", + "@typescript-eslint/project-service": "8.67.0", + "@typescript-eslint/tsconfig-utils": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -4308,16 +5132,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.66.0.tgz", - "integrity": "sha512-jasearZPolBw5NJNYGMwxzHMF83niVWmMU1VdHzG1CyfI2VS7f7nZltnKtHcg20hW+7Uo5GfK4MeDPoU3qI8EA==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz", + "integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.66.0", - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/typescript-estree": "8.66.0" + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4332,13 +5156,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.66.0.tgz", - "integrity": "sha512-dkKR8q+lKciskj1Y3vthHktl+3cMLWGyVUP23bRiPZ5O9BRT++4EqDDV+TVeIKBL1VXVEqrJlz8MYbcnvJcAlg==", + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz", + "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/types": "8.67.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -4535,10 +5359,17 @@ "url": "https://opencollective.com/vitest" } }, + "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==", + "devOptional": true, + "license": "ISC" + }, "node_modules/abitype": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", - "integrity": "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.3.0.tgz", + "integrity": "sha512-fk6Te+bojIFrMvMZrnOO+SxCB+RUksTGOzq/60ZRvs1L+BVzvi2bqt9L3W/17ZLdZsyM1FuYf65P5nlmoiH1Bg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/wevm" @@ -4610,6 +5441,19 @@ "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", "license": "MIT" }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -4673,9 +5517,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, "license": "MIT", "engines": { @@ -4707,6 +5551,28 @@ "dev": true, "license": "MIT" }, + "node_modules/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "license": "ISC", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -4726,7 +5592,6 @@ "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=6" } @@ -5045,6 +5910,13 @@ "base-x": "^3.0.2" } }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/bundle-require": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", @@ -5241,6 +6113,16 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "devOptional": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -5251,6 +6133,19 @@ "node": ">=6" } }, + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-highlight": { "version": "2.1.11", "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", @@ -5415,6 +6310,16 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5432,7 +6337,6 @@ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "license": "MIT", - "peer": true, "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -5443,12 +6347,34 @@ "node": ">=4.0.0" } }, + "node_modules/command-line-commands": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/command-line-commands/-/command-line-commands-3.0.2.tgz", + "integrity": "sha512-ac6PdCtdR6q7S3HN+JiVLIWGHY30PRYIEl2qPo+FuEuzwAUk0UYyimrngrg7FvF/mCr4Jgoqv5ZnHZgads50rw==", + "license": "MIT", + "optional": true, + "dependencies": { + "array-back": "^4.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-commands/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/command-line-usage": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "license": "MIT", - "peer": true, "dependencies": { "array-back": "^4.0.2", "chalk": "^2.4.2", @@ -5464,7 +6390,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", - "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -5477,7 +6402,6 @@ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -5487,7 +6411,6 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", - "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -5502,7 +6425,6 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "license": "MIT", - "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -5511,15 +6433,13 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/command-line-usage/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", - "peer": true, "engines": { "node": ">=0.8.0" } @@ -5529,7 +6449,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "license": "MIT", - "peer": true, "engines": { "node": ">=4" } @@ -5539,7 +6458,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "license": "MIT", - "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -5552,7 +6470,6 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -5612,6 +6529,13 @@ "node": "^14.18.0 || >=16.10.0" } }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC", + "optional": true + }, "node_modules/content-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", @@ -6014,6 +6938,23 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT", + "optional": true + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/did-resolver": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.2.tgz", @@ -7265,7 +8206,6 @@ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "license": "MIT", - "peer": true, "dependencies": { "array-back": "^3.0.1" }, @@ -7450,6 +8390,32 @@ "node": ">=14.14" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -7525,6 +8491,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/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 + }, "node_modules/generator-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", @@ -7642,6 +8637,16 @@ "assert-plus": "^1.0.0" } }, + "node_modules/git-config": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/git-config/-/git-config-0.0.7.tgz", + "integrity": "sha512-LidZlYZXWzVjS+M3TEwhtYBaYwLeOZrXci1tBgqp/vDdZTBMl02atvwb6G35L64ibscYoPnxfbwwUS+VZAISLA==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "iniparser": "~1.0.5" + } + }, "node_modules/git-log-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", @@ -7662,7 +8667,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -7696,14 +8701,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.18", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -7714,7 +8719,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -7797,7 +8802,7 @@ "version": "4.7.9", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -7935,6 +8940,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC", + "optional": true + }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -8054,6 +9066,20 @@ "npm": ">=1.3.7" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -8201,6 +9227,15 @@ "dev": true, "license": "ISC" }, + "node_modules/iniparser": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/iniparser/-/iniparser-1.0.5.tgz", + "integrity": "sha512-i40MWqgTU6h/70NtMsDVVDLjDYWwcIR1yIEVDPfxZIJno9z9L4s83p/V7vAu2i48Vj0gpByrkGFub7ko9XvPrw==", + "optional": true, + "engines": { + "node": "*" + } + }, "node_modules/inquirer": { "version": "13.4.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.4.3.tgz", @@ -9583,8 +10618,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/lodash.capitalize": { "version": "4.2.1", @@ -9698,6 +10732,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-promises-safe": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/make-promises-safe/-/make-promises-safe-5.1.0.tgz", + "integrity": "sha512-AfdZ49rtyhQR/6cqVKGoH7y4ql7XkS5HJI1lZm0/5N6CQosy1eYbBJ/qbhkKHzo17UH7M918Bysf6XB9f3kS1g==", + "license": "MIT", + "optional": true + }, "node_modules/marked": { "version": "15.0.12", "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", @@ -9810,1092 +10877,1647 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", "dev": true, - "funding": [ - "https://github.com/sponsors/broofa" - ], + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "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/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/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "devOptional": true, + "license": "MIT", + "engines": { + "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": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "devOptional": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "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/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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/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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/neon-cli": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/neon-cli/-/neon-cli-0.10.1.tgz", + "integrity": "sha512-kOd9ELaYETe1J1nBEOYD7koAZVj6xR9TGwOPccAsWmwL5amkaXXXwXHCUHkBAWujlgSZY5f2pT+pFGkzoHExYQ==", + "license": "SEE LICENSE IN LICENSE-*", + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-commands": "^3.0.1", + "command-line-usage": "^6.1.0", + "git-config": "0.0.7", + "handlebars": "^4.7.6", + "inquirer": "^7.3.3", + "make-promises-safe": "^5.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "toml": "^3.0.0", + "ts-typed-json": "^0.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "bin": { + "neon": "bin/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/neon-cli/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/neon-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", + "optional": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/neon-cli/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/neon-cli/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/neon-cli/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC", + "optional": true + }, + "node_modules/neon-cli/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/neon-cli/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/neon-cli/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", + "optional": true + }, + "node_modules/nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "license": "MIT", + "dependencies": { + "clone": "2.x" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "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/node-forge": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.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", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "license": "MIT", + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz", + "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^9.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/normalize-url": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-9.0.1.tgz", + "integrity": "sha512-ARftfC5HdUNu9jJeL8pHj8debUIHA2b91FizCoMzY4lG6dDX13jdvTK0TBe24IBDRf2HvJSzzwEPvmbkQWHRSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm": { + "version": "11.19.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.19.0.tgz", + "integrity": "sha512-SDd/hHg3KqHE5Ht2NHWxNYNtqCQ2pXAPLl6OtQhPyED5PHsRfrOtO199MZTIG2cQoQ1ZRI9t28shrD+2cr3AAw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/metavuln-calculator", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which" + ], + "dev": true, + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^9.9.1", + "@npmcli/config": "^10.12.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/map-workspaces": "^5.0.3", + "@npmcli/metavuln-calculator": "^9.0.3", + "@npmcli/package-json": "^7.0.5", + "@npmcli/promise-spawn": "^9.0.1", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.4", + "@sigstore/tuf": "^4.0.2", + "abbrev": "^4.0.0", + "archy": "~1.0.0", + "cacache": "^20.0.4", + "chalk": "^5.6.2", + "ci-info": "^4.4.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^13.0.6", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^9.0.3", + "ini": "^6.0.0", + "init-package-json": "^8.2.5", + "is-cidr": "^6.0.4", + "json-parse-even-better-errors": "^5.0.0", + "libnpmaccess": "^10.0.3", + "libnpmdiff": "^8.1.12", + "libnpmexec": "^10.3.2", + "libnpmfund": "^7.0.26", + "libnpmorg": "^8.0.1", + "libnpmpack": "^9.1.12", + "libnpmpublish": "^11.2.0", + "libnpmsearch": "^9.0.1", + "libnpmteam": "^8.0.2", + "libnpmversion": "^8.0.4", + "make-fetch-happen": "^15.0.6", + "minimatch": "^10.2.5", + "minipass": "^7.1.3", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^12.4.0", + "nopt": "^9.0.0", + "npm-audit-report": "^7.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.2", + "npm-pick-manifest": "^11.0.3", + "npm-profile": "^12.0.2", + "npm-registry-fetch": "^19.1.1", + "npm-user-validate": "^4.0.0", + "p-map": "^7.0.4", + "pacote": "^21.5.1", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.1.0", + "qrcode-terminal": "^0.12.0", + "read": "^5.0.1", + "semver": "^7.8.5", + "spdx-expression-parse": "^4.0.0", + "ssri": "^13.0.1", + "supports-color": "^10.2.2", + "tar": "^7.5.19", + "text-table": "~0.2.0", + "tiny-relative-date": "^2.0.2", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^7.0.2", + "which": "^6.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "license": "MIT", - "bin": { - "mime": "bin/cli.js" + "dependencies": { + "path-key": "^3.0.0" }, "engines": { - "node": ">=16" + "node": ">=8" } }, - "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/npm/node_modules/@gar/promise-retry": { + "version": "1.0.3", + "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": "^20.17.0 || >=22.9.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==", - "license": "MIT", + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "mime-db": "1.52.0" + "minipass": "^7.0.4" }, "engines": { - "node": ">= 0.6" + "node": ">=18.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/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", "dev": true, - "license": "MIT", - "engines": { - "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==", + "inBundle": true, "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": "10.2.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", - "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "4.0.2", "dev": true, - "license": "BlueOak-1.0.0", + "inBundle": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^5.0.8" + "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": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "9.9.1", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "peer": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^5.0.0", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.0", + "bin-links": "^6.0.0", + "cacache": "^20.0.1", + "common-ancestor-path": "^2.0.0", + "hosted-git-info": "^9.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^9.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.0.0", + "proggy": "^4.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "semver": "^7.3.7", + "ssri": "^13.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, "bin": { - "mkdirp": "bin/cmd.js" + "arborist": "bin/index.js" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/mlly": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", - "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "node_modules/npm/node_modules/@npmcli/config": { + "version": "10.12.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "acorn": "^8.16.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.3" + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "ini": "^6.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.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/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/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "5.0.0", + "dev": true, + "inBundle": true, "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "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/npm/node_modules/@npmcli/git": { + "version": "7.0.2", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "@gar/promise-retry": "^1.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": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nanoid": { - "version": "3.3.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", - "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, "bin": { - "nanoid": "bin/nanoid.cjs" + "installed-package-contents": "bin/index.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^20.17.0 || >=22.9.0" } }, - "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/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/nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "5.0.3", "dev": true, - "license": "MIT" + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^13.0.0", + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/node-cache": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", - "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", - "license": "MIT", + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "clone": "2.x" + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^5.0.0", + "pacote": "^21.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">= 8.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "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", + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=10.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/node-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "5.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "7.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": ">=18" + "node": "^20.17.0 || >=22.9.0" } }, - "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", + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "which": "^6.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/node-forge": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", - "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", - "license": "(BSD-3-Clause OR GPL-2.0)", + "node_modules/npm/node_modules/@npmcli/query": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, "engines": { - "node": ">= 6.13.0" + "node": "^20.17.0 || >=22.9.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", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "license": "MIT", + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "10.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" + }, "engines": { - "node": ">=12.19" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/normalize-package-data": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz", - "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "4.0.0", "dev": true, - "license": "BSD-2-Clause", + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "hosted-git-info": "^9.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/normalize-url": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-9.0.1.tgz", - "integrity": "sha512-ARftfC5HdUNu9jJeL8pHj8debUIHA2b91FizCoMzY4lG6dDX13jdvTK0TBe24IBDRf2HvJSzzwEPvmbkQWHRSg==", + "node_modules/npm/node_modules/@sigstore/core": { + "version": "3.2.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "Apache-2.0", "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-11.19.0.tgz", - "integrity": "sha512-SDd/hHg3KqHE5Ht2NHWxNYNtqCQ2pXAPLl6OtQhPyED5PHsRfrOtO199MZTIG2cQoQ1ZRI9t28shrD+2cr3AAw==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/metavuln-calculator", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/redact", - "@npmcli/run-script", - "@sigstore/tuf", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "spdx-expression-parse", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which" - ], + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.5.1", "dev": true, - "license": "Artistic-2.0", - "workspaces": [ - "docs", - "smoke-tests", - "mock-globals", - "mock-registry", - "workspaces/*" - ], + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^9.9.1", - "@npmcli/config": "^10.12.0", - "@npmcli/fs": "^5.0.0", - "@npmcli/map-workspaces": "^5.0.3", - "@npmcli/metavuln-calculator": "^9.0.3", - "@npmcli/package-json": "^7.0.5", - "@npmcli/promise-spawn": "^9.0.1", - "@npmcli/redact": "^4.0.0", - "@npmcli/run-script": "^10.0.4", - "@sigstore/tuf": "^4.0.2", - "abbrev": "^4.0.0", - "archy": "~1.0.0", - "cacache": "^20.0.4", - "chalk": "^5.6.2", - "ci-info": "^4.4.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.3", - "glob": "^13.0.6", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^9.0.3", - "ini": "^6.0.0", - "init-package-json": "^8.2.5", - "is-cidr": "^6.0.4", - "json-parse-even-better-errors": "^5.0.0", - "libnpmaccess": "^10.0.3", - "libnpmdiff": "^8.1.12", - "libnpmexec": "^10.3.2", - "libnpmfund": "^7.0.26", - "libnpmorg": "^8.0.1", - "libnpmpack": "^9.1.12", - "libnpmpublish": "^11.2.0", - "libnpmsearch": "^9.0.1", - "libnpmteam": "^8.0.2", - "libnpmversion": "^8.0.4", - "make-fetch-happen": "^15.0.6", - "minimatch": "^10.2.5", - "minipass": "^7.1.3", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^12.4.0", - "nopt": "^9.0.0", - "npm-audit-report": "^7.0.0", - "npm-install-checks": "^8.0.0", - "npm-package-arg": "^13.0.2", - "npm-pick-manifest": "^11.0.3", - "npm-profile": "^12.0.2", - "npm-registry-fetch": "^19.1.1", - "npm-user-validate": "^4.0.0", - "p-map": "^7.0.4", - "pacote": "^21.5.1", - "parse-conflict-json": "^5.0.1", - "proc-log": "^6.1.0", - "qrcode-terminal": "^0.12.0", - "read": "^5.0.1", - "semver": "^7.8.5", - "spdx-expression-parse": "^4.0.0", - "ssri": "^13.0.1", - "supports-color": "^10.2.2", - "tar": "^7.5.19", - "text-table": "~0.2.0", - "tiny-relative-date": "^2.0.2", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^7.0.2", - "which": "^6.0.1" + "@gar/promise-retry": "^1.0.2", + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.4", + "proc-log": "^6.1.0" }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" }, "engines": { "node": "^20.17.0 || >=22.9.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/npm/node_modules/@sigstore/verify": { + "version": "3.1.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "path-key": "^3.0.0" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.1", + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/@gar/promise-retry": { - "version": "1.0.3", + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", + "node_modules/npm/node_modules/@tufjs/models": { + "version": "4.1.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^7.0.4" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" }, "engines": { - "node": ">=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", + "node_modules/npm/node_modules/abbrev": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", "dev": true, "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/@npmcli/agent": { - "version": "4.0.2", + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/npm/node_modules/bin-links": { + "version": "6.0.2", "dev": true, "inBundle": 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" + "cmd-shim": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "proc-log": "^6.0.0", + "read-cmd-shim": "^6.0.0", + "write-file-atomic": "^7.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "9.9.1", + "node_modules/npm/node_modules/binary-extensions": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "5.0.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "20.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^5.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/metavuln-calculator": "^9.0.2", - "@npmcli/name-from-folder": "^4.0.0", - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/query": "^5.0.0", - "@npmcli/redact": "^4.0.0", - "@npmcli/run-script": "^10.0.0", - "bin-links": "^6.0.0", - "cacache": "^20.0.1", - "common-ancestor-path": "^2.0.0", - "hosted-git-info": "^9.0.0", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^11.2.1", - "minimatch": "^10.0.3", - "nopt": "^9.0.0", - "npm-install-checks": "^8.0.0", - "npm-package-arg": "^13.0.0", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "pacote": "^21.0.2", - "parse-conflict-json": "^5.0.1", - "proc-log": "^6.0.0", - "proggy": "^4.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "semver": "^7.3.7", - "ssri": "^13.0.0", - "treeverse": "^3.0.0", - "walk-up-path": "^4.0.0" + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "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": "^13.0.0" }, - "bin": { - "arborist": "bin/index.js" + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.6.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" } }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "10.12.0", + "node_modules/npm/node_modules/ci-info": { + "version": "4.4.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "ci-info": "^4.0.0", - "ini": "^6.0.0", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "walk-up-path": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "5.0.0", + "node_modules/npm/node_modules/cidr-regex": { + "version": "5.0.5", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20" } }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "7.0.2", + "node_modules/npm/node_modules/cmd-shim": { + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "@gar/promise-retry": "^1.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": "^6.0.0", - "semver": "^7.3.5", - "which": "^6.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "4.0.0", + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^5.0.0", - "npm-normalize-package-bin": "^5.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 18" } }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "5.0.3", + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "glob": "^13.0.0", - "minimatch": "^10.0.3" + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=4" } }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "9.0.3", + "node_modules/npm/node_modules/debug": { + "version": "4.4.3", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "cacache": "^20.0.0", - "json-parse-even-better-errors": "^5.0.0", - "pacote": "^21.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5" + "ms": "^2.1.3" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "4.0.0", + "node_modules/npm/node_modules/diff": { + "version": "8.0.4", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BSD-3-Clause", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.3.1" } }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "5.0.0", + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6" } }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "7.0.5", + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.3", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^7.0.0", - "glob": "^13.0.0", - "hosted-git-info": "^9.0.0", - "json-parse-even-better-errors": "^5.0.0", - "proc-log": "^6.0.0", - "semver": "^7.5.3", - "spdx-expression-parse": "^4.0.0" - }, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 4.9.1" } }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "9.0.1", + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "which": "^6.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "5.0.0", + "node_modules/npm/node_modules/glob": { + "version": "13.0.6", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "postcss-selector-parser": "^7.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/@npmcli/redact": { - "version": "4.0.0", + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", "dev": true, "inBundle": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "ISC" }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "10.0.4", + "node_modules/npm/node_modules/hosted-git-info": { + "version": "9.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "node-gyp": "^12.1.0", - "proc-log": "^6.0.0" + "lru-cache": "^11.1.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "4.0.0", + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.2.0", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 14" } }, - "node_modules/npm/node_modules/@sigstore/core": { - "version": "3.2.1", + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 14" } }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.5.1", + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.7.2", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/npm/node_modules/@sigstore/sign": { - "version": "4.1.1", + "node_modules/npm/node_modules/ignore-walk": { + "version": "8.0.0", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "@gar/promise-retry": "^1.0.2", - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.2.0", - "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^15.0.4", - "proc-log": "^6.1.0" + "minimatch": "^10.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "4.0.2", + "node_modules/npm/node_modules/ini": { + "version": "6.0.0", "dev": true, "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0", - "tuf-js": "^4.1.0" - }, + "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/@sigstore/verify": { - "version": "3.1.1", + "node_modules/npm/node_modules/init-package-json": { + "version": "8.2.5", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.2.1", - "@sigstore/protobuf-specs": "^0.5.0" + "@npmcli/package-json": "^7.0.0", + "npm-package-arg": "^13.0.0", + "promzard": "^3.0.1", + "read": "^5.0.1", + "semver": "^7.7.2", + "validate-npm-package-name": "^7.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", + "node_modules/npm/node_modules/ip-address": { + "version": "10.2.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 12" } }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "4.1.0", + "node_modules/npm/node_modules/is-cidr": { + "version": "6.0.4", "dev": true, "inBundle": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^10.1.1" + "cidr-regex": "^5.0.4" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20" } }, - "node_modules/npm/node_modules/abbrev": { + "node_modules/npm/node_modules/isexe": { "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20" } }, - "node_modules/npm/node_modules/agent-base": { - "version": "7.1.4", + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">= 14" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/aproba": { - "version": "2.1.0", + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", "dev": true, + "engines": [ + "node >= 0.2.0" + ], "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/balanced-match": { - "version": "4.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/npm/node_modules/bin-links": { + "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "proc-log": "^6.0.0", - "read-cmd-shim": "^6.0.0", - "write-file-atomic": "^7.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "MIT" }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "3.1.0", + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", "dev": true, "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "5.0.7", + "node_modules/npm/node_modules/libnpmaccess": { + "version": "10.0.3", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "balanced-match": "^4.0.2" + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/cacache": { - "version": "20.0.4", + "node_modules/npm/node_modules/libnpmdiff": { + "version": "8.1.12", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^5.0.0", - "fs-minipass": "^3.0.0", - "glob": "^13.0.0", - "lru-cache": "^11.1.0", - "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": "^13.0.0" + "@npmcli/arborist": "^9.9.1", + "@npmcli/installed-package-contents": "^4.0.0", + "binary-extensions": "^3.0.0", + "diff": "^8.0.2", + "minimatch": "^10.0.3", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "tar": "^7.5.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/chalk": { - "version": "5.6.2", + "node_modules/npm/node_modules/libnpmexec": { + "version": "10.3.2", "dev": true, "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/arborist": "^9.9.1", + "@npmcli/package-json": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "proc-log": "^6.0.0", + "read": "^5.0.1", + "semver": "^7.3.7", + "signal-exit": "^4.1.0", + "walk-up-path": "^4.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/npm/node_modules/ci-info": { - "version": "4.4.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "5.0.5", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", "engines": { - "node": ">=20" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "8.0.0", + "node_modules/npm/node_modules/libnpmfund": { + "version": "7.0.26", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.9.1" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "2.0.0", + "node_modules/npm/node_modules/libnpmorg": { + "version": "8.0.1", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, "engines": { - "node": ">= 18" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", + "node_modules/npm/node_modules/libnpmpack": { + "version": "9.1.12", "dev": true, "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.9.1", + "@npmcli/run-script": "^10.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2" }, "engines": { - "node": ">=4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/debug": { - "version": "4.4.3", + "node_modules/npm/node_modules/libnpmpublish": { + "version": "11.2.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ms": "^2.1.3" + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7", + "sigstore": "^4.0.0", + "ssri": "^13.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/diff": { - "version": "8.0.4", + "node_modules/npm/node_modules/libnpmsearch": { + "version": "9.0.1", "dev": true, "inBundle": true, - "license": "BSD-3-Clause", + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0" + }, "engines": { - "node": ">=0.3.1" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", + "node_modules/npm/node_modules/libnpmteam": { + "version": "8.0.2", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, "engines": { - "node": ">=6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.3", + "node_modules/npm/node_modules/libnpmversion": { + "version": "8.0.4", "dev": true, "inBundle": true, - "license": "Apache-2.0" + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", + "node_modules/npm/node_modules/lru-cache": { + "version": "11.5.1", "dev": true, "inBundle": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 4.9.1" + "node": "20 || >=22" } }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.3", + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "15.0.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "@npmcli/redact": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/glob": { - "version": "13.0.6", + "node_modules/npm/node_modules/minimatch": { + "version": "10.2.5", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" + "brace-expansion": "^5.0.5" }, "engines": { "node": "18 || 20 || >=22" @@ -10904,677 +12526,584 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", + "node_modules/npm/node_modules/minipass": { + "version": "7.1.3", "dev": true, "inBundle": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "9.0.3", + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "lru-cache": "^11.1.0" + "minipass": "^7.0.3" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.2", + "node_modules/npm/node_modules/minipass-fetch": { + "version": "5.0.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" }, "engines": { - "node": ">= 14" + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "iconv-lite": "^0.7.2" } }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.6", + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.6", "dev": true, "inBundle": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "minipass": "^7.1.3" }, "engines": { - "node": ">= 14" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.7.2", + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", "dev": true, "inBundle": true, - "license": "MIT", - "optional": true, + "license": "ISC", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=8" } }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "8.0.0", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minimatch": "^10.0.3" + "yallist": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/ini": { - "version": "6.0.0", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "ISC" }, - "node_modules/npm/node_modules/init-package-json": { - "version": "8.2.5", + "node_modules/npm/node_modules/minipass-sized": { + "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^7.0.0", - "npm-package-arg": "^13.0.0", - "promzard": "^3.0.1", - "read": "^5.0.1", - "semver": "^7.7.2", - "validate-npm-package-name": "^7.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/ip-address": { - "version": "10.2.0", + "node_modules/npm/node_modules/minizlib": { + "version": "3.1.0", "dev": true, "inBundle": true, "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "6.0.4", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", "dependencies": { - "cidr-regex": "^5.0.4" + "minipass": "^7.1.2" }, "engines": { - "node": ">=20" + "node": ">= 18" } }, - "node_modules/npm/node_modules/isexe": { - "version": "4.0.0", + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=20" - } + "license": "MIT" }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "5.0.0", + "node_modules/npm/node_modules/mute-stream": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "10.0.3", + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 0.6" } }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "8.1.12", + "node_modules/npm/node_modules/node-gyp": { + "version": "12.4.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/arborist": "^9.9.1", - "@npmcli/installed-package-contents": "^4.0.0", - "binary-extensions": "^3.0.0", - "diff": "^8.0.2", - "minimatch": "^10.0.3", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2", - "tar": "^7.5.1" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "10.3.2", + "node_modules/npm/node_modules/nopt": { + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/arborist": "^9.9.1", - "@npmcli/package-json": "^7.0.0", - "@npmcli/run-script": "^10.0.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2", - "proc-log": "^6.0.0", - "read": "^5.0.1", - "semver": "^7.3.7", - "signal-exit": "^4.1.0", - "walk-up-path": "^4.0.0" + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "7.0.26", + "node_modules/npm/node_modules/npm-audit-report": { + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^9.9.1" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "8.0.1", + "node_modules/npm/node_modules/npm-bundled": { + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^19.0.0" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "9.1.12", + "node_modules/npm/node_modules/npm-install-checks": { + "version": "8.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "@npmcli/arborist": "^9.9.1", - "@npmcli/run-script": "^10.0.0", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2" + "semver": "^7.1.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "11.2.0", + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "@npmcli/package-json": "^7.0.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.7", - "sigstore": "^4.0.0", - "ssri": "^13.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "9.0.1", + "node_modules/npm/node_modules/npm-package-arg": { + "version": "13.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^19.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/node_modules/libnpmteam": { - "version": "8.0.2", + "node_modules/npm/node_modules/npm-packlist": { + "version": "10.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^19.0.0" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "8.0.4", + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "11.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^7.0.0", - "@npmcli/run-script": "^10.0.0", - "json-parse-even-better-errors": "^5.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.7" + "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/node_modules/lru-cache": { - "version": "11.5.1", + "node_modules/npm/node_modules/npm-profile": { + "version": "12.0.2", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.1.0" + }, "engines": { - "node": "20 || >=22" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "15.0.6", + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "19.1.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/agent": "^4.0.0", "@npmcli/redact": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^6.0.0", - "ssri": "^13.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" } }, - "node_modules/npm/node_modules/minimatch": { - "version": "10.2.5", + "node_modules/npm/node_modules/npm-user-validate": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, + "license": "BSD-2-Clause", "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass": { - "version": "7.1.3", + "node_modules/npm/node_modules/p-map": { + "version": "7.0.4", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "2.0.1", + "node_modules/npm/node_modules/pacote": { + "version": "21.5.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "@gar/promise-retry": "^1.0.0", + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "5.0.2", + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "5.0.1", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^2.0.0", - "minizlib": "^3.0.1" + "json-parse-even-better-errors": "^5.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" - }, - "optionalDependencies": { - "iconv-lite": "^0.7.2" } }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.6", + "node_modules/npm/node_modules/path-scurry": { + "version": "2.0.2", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "minipass": "^7.1.3" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.4", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/proc-log": { + "version": "6.1.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": { + "node_modules/npm/node_modules/proggy": { "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "2.0.0", - "dev": true, - "inBundle": true, "license": "ISC", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, "engines": { - "node": ">= 18" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "3.0.0", + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", "dev": true, "inBundle": true, "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/negotiator": { - "version": "1.0.0", + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", "dev": true, "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/node-gyp": { - "version": "12.4.0", + "node_modules/npm/node_modules/promzard": { + "version": "3.0.1", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "tar": "^7.5.4", - "tinyglobby": "^0.2.12", - "undici": "^6.25.0", - "which": "^6.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "read": "^5.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/nopt": { - "version": "9.0.0", + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^4.0.0" - }, "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "qrcode-terminal": "bin/qrcode-terminal.js" } }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "7.0.0", + "node_modules/npm/node_modules/read": { + "version": "5.0.1", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "mute-stream": "^3.0.0" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "5.0.0", + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^5.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "8.0.0", + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", "dev": true, "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.8.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" } }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "5.0.0", + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "13.0.2", + "node_modules/npm/node_modules/sigstore": { + "version": "4.1.1", "dev": true, "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^7.0.0" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.1", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.1", + "@sigstore/tuf": "^4.0.2", + "@sigstore/verify": "^3.1.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "10.0.4", + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^8.0.0", - "proc-log": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "11.0.3", + "node_modules/npm/node_modules/socks": { + "version": "2.8.9", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-install-checks": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "npm-package-arg": "^13.0.0", - "semver": "^7.3.5" + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/npm/node_modules/npm-profile": { - "version": "12.0.2", + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.1.0" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 14" } }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "19.1.1", + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "@npmcli/redact": "^4.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^15.0.0", - "minipass": "^7.0.2", - "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" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "4.0.0", + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.23", "dev": true, "inBundle": true, - "license": "BSD-2-Clause", + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "13.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/p-map": { - "version": "7.0.4", + "node_modules/npm/node_modules/supports-color": { + "version": "10.2.2", "dev": true, "inBundle": true, "license": "MIT", @@ -11582,838 +13111,943 @@ "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/npm/node_modules/pacote": { - "version": "21.5.1", + "node_modules/npm/node_modules/tar": { + "version": "7.5.19", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.0.0", - "sigstore": "^4.0.0", - "ssri": "^13.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" } }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "5.0.1", + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.17", + "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "json-parse-even-better-errors": "^5.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" + "fdir": "^6.5.0", + "picomatch": "^4.0.4" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/npm/node_modules/path-scurry": { - "version": "2.0.2", + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, + "license": "MIT", "engines": { - "node": "18 || 20 || >=22" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "7.1.4", + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/npm/node_modules/proc-log": { - "version": "6.1.0", + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/proggy": { - "version": "4.0.0", + "node_modules/npm/node_modules/tuf-js": { + "version": "4.1.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", + "node_modules/npm/node_modules/undici": { + "version": "6.27.0", "dev": true, "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "engines": { + "node": ">=18.17" } }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "3.0.2", + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", "dev": true, "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "MIT" }, - "node_modules/npm/node_modules/promzard": { - "version": "3.0.1", + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "7.0.2", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "read": "^5.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", + "node_modules/npm/node_modules/walk-up-path": { + "version": "4.0.0", "dev": true, "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" + "license": "ISC", + "engines": { + "node": "20 || >=22" } }, - "node_modules/npm/node_modules/read": { - "version": "5.0.1", + "node_modules/npm/node_modules/which": { + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "mute-stream": "^3.0.0" + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "6.0.0", + "node_modules/npm/node_modules/write-file-atomic": { + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "signal-exit": "^4.0.1" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.8.5", + "node_modules/npm/node_modules/yallist": { + "version": "5.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "inBundle": true, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, - "node_modules/npm/node_modules/sigstore": { - "version": "4.1.1", - "dev": true, - "inBundle": true, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.2.1", - "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^4.1.1", - "@sigstore/tuf": "^4.0.2", - "@sigstore/verify": "^3.1.1" - }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "*" } }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "inBundle": 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==", + "devOptional": true, "license": "MIT", "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/socks": { - "version": "2.8.9", - "dev": true, - "inBundle": 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": { - "ip-address": "^10.1.1", - "smart-buffer": "^4.2.0" - }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.5", - "dev": true, - "inBundle": true, + "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==", "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, "engines": { - "node": ">= 14" + "node": ">= 0.4" } }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.5.0", - "dev": true, - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "4.0.0", - "dev": true, - "inBundle": true, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.23", - "dev": true, - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "13.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "license": "MIT", "dependencies": { - "minipass": "^7.0.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/supports-color": { - "version": "10.2.2", - "dev": true, - "inBundle": true, + "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" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "devOptional": true, "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, "engines": { - "node": ">=18" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/tar": { - "version": "7.5.19", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" + "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": ">=18" + "node": ">= 0.8.0" } }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/npm/node_modules/tinyglobby": { - "version": "0.2.17", - "dev": true, - "inBundle": true, + "node_modules/own-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", "license": "MIT", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "dev": true, - "inBundle": true, + "node_modules/ox": { + "version": "0.14.29", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.29.tgz", + "integrity": "sha512-M5j87Ec4V99MQdRct/g09eWXW60g6zhHTUs1lr4deUtrPDnezBdCJTgKd7pxqTpSZBFveV0ALi9jMMuT1qKyNg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], "license": "MIT", - "engines": { - "node": ">=12.0.0" + "dependencies": { + "@adraffy/ens-normalize": "^1.11.0", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "1.9.1", + "@noble/hashes": "^1.8.0", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "abitype": "^1.2.3", + "eventemitter3": "5.0.1" }, "peerDependencies": { - "picomatch": "^3 || ^4" + "typescript": ">=5.4.0" }, "peerDependenciesMeta": { - "picomatch": { + "typescript": { "optional": true } } }, - "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "dev": true, - "inBundle": true, + "node_modules/ox/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, "engines": { - "node": ">=12" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/npm/node_modules/tuf-js": { - "version": "4.1.0", - "dev": true, - "inBundle": true, + "node_modules/ox/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", - "dependencies": { - "@tufjs/models": "4.1.0", - "debug": "^4.4.3", - "make-fetch-happen": "^15.0.1" - }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/npm/node_modules/undici": { - "version": "6.27.0", + "node_modules/p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true, - "inBundle": true, "license": "MIT", "engines": { - "node": ">=18.17" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "7.0.2", + "node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "p-timeout": "^6.1.2" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "4.0.0", + "node_modules/p-filter": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "p-map": "^7.0.1" + }, "engines": { - "node": "20 || >=22" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/which": { - "version": "6.0.1", + "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, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^4.0.0" - }, - "bin": { - "node-which": "bin/which.js" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "7.0.1", + "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, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "signal-exit": "^4.0.1" + "p-limit": "^3.0.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/yallist": { - "version": "5.0.0", + "node_modules/p-map": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.6.tgz", + "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "engines": { "node": ">=18" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "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==", + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=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==", + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "node_modules/pako": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.2.0.tgz", + "integrity": "sha512-zJq6RP/5q+TO2OpFV3FHzlPnFjmkb7Nc99a5SNjJE+uu/PkpChs+NIZSSzbBoD+6kjiISXjfYdwj1ZRQ81dz/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "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": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" + "callsites": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "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": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "@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": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, "engines": { - "node": ">=6" + "node": ">=18" }, "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", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "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" - }, + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, + "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": { - "node": ">= 0.8.0" + "node": ">=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==", + "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==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/own-keys": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", - "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", + "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", - "dependencies": { - "call-bound": "^1.0.4", - "get-intrinsic": "^1.3.0", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/ox": { - "version": "0.14.29", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.29.tgz", - "integrity": "sha512-M5j87Ec4V99MQdRct/g09eWXW60g6zhHTUs1lr4deUtrPDnezBdCJTgKd7pxqTpSZBFveV0ALi9jMMuT1qKyNg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/permissionless": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/permissionless/-/permissionless-0.3.6.tgz", + "integrity": "sha512-7RstRCNwJc/kO9Q/ZJpgSPclXez8CaGU77PeYNaWpHCU1kRetu+7kqEUFcIFLdz47F7jpOwtsbAU56hn27c4mg==", "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.11.0", - "@noble/ciphers": "^1.3.0", - "@noble/curves": "1.9.1", - "@noble/hashes": "^1.8.0", - "@scure/bip32": "^1.7.0", - "@scure/bip39": "^1.6.0", - "abitype": "^1.2.3", - "eventemitter3": "5.0.1" - }, "peerDependencies": { - "typescript": ">=5.4.0" + "ox": "^0.11.3", + "viem": "^2.44.4" }, "peerDependenciesMeta": { - "typescript": { + "ox": { "optional": true } } }, - "node_modules/ox/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "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.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">=8.6" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/ox/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/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=4" } }, - "node_modules/p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "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": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/p-event": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", - "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", - "dev": true, + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", "license": "MIT", "dependencies": { - "p-timeout": "^6.1.2" + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" }, "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/p-filter": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", - "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", - "dev": true, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "license": "MIT", "dependencies": { - "p-map": "^7.0.1" + "locate-path": "^2.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "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, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "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, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "p-try": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/p-map": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.6.tgz", - "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", - "dev": true, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "p-limit": "^1.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" } }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/pako": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.2.0.tgz", - "integrity": "sha512-zJq6RP/5q+TO2OpFV3FHzlPnFjmkb7Nc99a5SNjJE+uu/PkpChs+NIZSSzbBoD+6kjiISXjfYdwj1ZRQ81dz/w==", + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "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/puzrin" + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, { "type": "github", - "url": "https://github.com/sponsors/nodeca" + "url": "https://github.com/sponsors/ai" } ], - "license": "(MIT AND Zlib)" + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } }, - "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/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": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/parse-json": { + "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "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" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", "dev": true, "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, "engines": { "node": ">=18" }, @@ -12421,463 +14055,614 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "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/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/proxy-agent-negotiate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", + "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", "dev": true, "license": "MIT", - "dependencies": { - "parse5": "^6.0.1" + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "kerberos": "^2.0.0" + }, + "peerDependenciesMeta": { + "kerberos": { + "optional": true + } } }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true, + "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/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, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" } }, - "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==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "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", + "node_modules/qs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", + "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.6" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.4.x" } }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "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": [ + { + "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/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "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": { + "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/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": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "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", + "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/permissionless": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/permissionless/-/permissionless-0.3.6.tgz", - "integrity": "sha512-7RstRCNwJc/kO9Q/ZJpgSPclXez8CaGU77PeYNaWpHCU1kRetu+7kqEUFcIFLdz47F7jpOwtsbAU56hn27c4mg==", + "node_modules/read-package-up": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-12.0.0.tgz", + "integrity": "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==", + "dev": true, "license": "MIT", - "peerDependencies": { - "ox": "^0.11.3", - "viem": "^2.44.4" + "dependencies": { + "find-up-simple": "^1.0.1", + "read-pkg": "^10.0.0", + "type-fest": "^5.2.0" }, - "peerDependenciesMeta": { - "ox": { - "optional": true - } + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "node_modules/read-package-up/node_modules/type-fest": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", + "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", "dev": true, - "license": "ISC" + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "node_modules/read-pkg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", + "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", "dev": true, "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.4", + "normalize-package-data": "^8.0.0", + "parse-json": "^8.3.0", + "type-fest": "^5.4.4", + "unicorn-magic": "^0.4.0" + }, "engines": { - "node": ">=8.6" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "node_modules/read-pkg/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/read-pkg/node_modules/parse-json/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", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "license": "MIT", - "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" + "node": ">=16" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "license": "MIT", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", + "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "dependencies": { - "locate-path": "^2.0.0" + "tagged-tag": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "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", + "optional": true, "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/pkg-conf/node_modules/p-locate": { + "node_modules/reduce-flatten": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "license": "MIT", "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "license": "MIT", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss": { - "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", - "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "node_modules/registry-auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", "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.16", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "@pnpm/npm-conf": "^3.0.2" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=14" } }, - "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", "dependencies": { - "lilconfig": "^3.1.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } + "node": ">= 6" } }, - "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/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.12" } }, - "node_modules/prettier": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", - "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", - "dev": true, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", "bin": { - "prettier": "bin/prettier.cjs" - }, + "uuid": "bin/uuid" + } + }, + "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==", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, + "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", - "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/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/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": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, - "node_modules/pretty-ms": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", - "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", - "dev": true, + "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==", "license": "MIT", + "optional": true, "dependencies": { - "parse-ms": "^4.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "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/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "license": "ISC" + "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==", + "license": "ISC", + "optional": true }, - "node_modules/proxy-agent-negotiate": { + "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", - "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "kerberos": "^2.0.0" - }, - "peerDependenciesMeta": { - "kerberos": { - "optional": true - } + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "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==", + "node_modules/rfc4648": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", + "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==", "license": "MIT" }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "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", + "devOptional": true, + "license": "ISC", "dependencies": { - "punycode": "^2.3.1" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/lupomontero" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/rollup": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "dev": true, "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, "engines": { - "node": ">=6" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", + "fsevents": "~2.3.2" } }, - "node_modules/qs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", - "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", - "license": "BSD-3-Clause", + "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/run-async": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", + "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">=0.12.0" } }, - "node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "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": [ + { + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/runtypes": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/runtypes/-/runtypes-6.7.0.tgz", + "integrity": "sha512-3TLdfFX8YHNFOhwHrSJza6uxVBmBrEjnNQlNXvXCdItS0Pdskfg5vVXUTWIN+Y23QR09jWpSl99UHkA83m4uWA==", + "license": "MIT" + }, + "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-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, "engines": { - "node": ">=0.4.x" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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, + "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", @@ -12894,115 +14679,118 @@ ], "license": "MIT" }, - "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": { - "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/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, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "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" + "es-errors": "^1.3.0", + "isarray": "^2.0.5" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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-package-up": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-12.0.0.tgz", - "integrity": "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==", - "dev": true, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "license": "MIT", "dependencies": { - "find-up-simple": "^1.0.1", - "read-pkg": "^10.0.0", - "type-fest": "^5.2.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { - "node": ">=20" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-package-up/node_modules/type-fest": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", - "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", + "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/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "license": "MIT" + }, + "node_modules/security-context": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz", + "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" + }, + "node_modules/semantic-release": { + "version": "25.0.9", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.9.tgz", + "integrity": "sha512-bxve7csK0/Txr++CkfrmV+X1r4jqiSOw2WsSad9E2S68R+ZfLBwDn8IceM8WfiOmKQIHgsQc1cNA8Dzg7U75pg==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "dependencies": { - "tagged-tag": "^1.0.0" + "@semantic-release/commit-analyzer": "^13.0.1", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^12.0.0", + "@semantic-release/npm": "^13.1.1", + "@semantic-release/release-notes-generator": "^14.1.0", + "aggregate-error": "^5.0.0", + "cosmiconfig": "^9.0.0", + "debug": "^4.0.0", + "env-ci": "^11.0.0", + "execa": "^9.0.0", + "figures": "^6.0.0", + "find-versions": "^6.0.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^4.0.0", + "hosted-git-info": "^9.0.0", + "import-from-esm": "^2.0.0", + "lodash-es": "^4.17.21", + "marked": "^15.0.0", + "marked-terminal": "^7.3.0", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-package-up": "^12.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "signale": "^1.2.1", + "yargs": "^18.0.0" }, - "engines": { - "node": ">=20" + "bin": { + "semantic-release": "bin/semantic-release.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^22.14.0 || >= 24.10.0" } }, - "node_modules/read-pkg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", - "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", + "node_modules/semantic-release/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.4", - "normalize-package-data": "^8.0.0", - "parse-json": "^8.3.0", - "type-fest": "^5.4.4", - "unicorn-magic": "^0.4.0" - }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "node_modules/semantic-release/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" }, "engines": { "node": ">=18" @@ -13011,996 +14799,930 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg/node_modules/parse-json/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "node_modules/semantic-release/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 OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", - "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", + "node_modules/semantic-release/node_modules/clean-stack": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "dependencies": { - "tagged-tag": "^1.0.0" + "escape-string-regexp": "5.0.0" }, "engines": { - "node": ">=20" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/semantic-release/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": "MIT", - "engines": { - "node": ">= 14.18.0" + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "license": "MIT", - "peer": true, "engines": { - "node": ">=6" + "node": ">=20" } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "node_modules/semantic-release/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": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "node_modules/semantic-release/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/semantic-release/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/registry-auth-token": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", - "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", + "node_modules/semantic-release/node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", "dev": true, "license": "MIT", "dependencies": { - "@pnpm/npm-conf": "^3.0.2" + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" }, "engines": { - "node": ">=14" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "node": "^18.19.0 || >=20.5.0" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" }, "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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", + "node_modules/semantic-release/node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=0.10.0" + "node": ">=18.18.0" } }, - "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==", + "node_modules/semantic-release/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "node_modules/semantic-release/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, "license": "MIT", "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rfc4648": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", - "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==", - "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", + "node_modules/semantic-release/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", - "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "node_modules/semantic-release/node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "1.0.9" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=12" }, - "optionalDependencies": { - "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.62.4", - "@rollup/rollup-android-arm64": "4.62.4", - "@rollup/rollup-darwin-arm64": "4.62.4", - "@rollup/rollup-darwin-x64": "4.62.4", - "@rollup/rollup-freebsd-arm64": "4.62.4", - "@rollup/rollup-freebsd-x64": "4.62.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", - "@rollup/rollup-linux-arm-musleabihf": "4.62.4", - "@rollup/rollup-linux-arm64-gnu": "4.62.4", - "@rollup/rollup-linux-arm64-musl": "4.62.4", - "@rollup/rollup-linux-loong64-gnu": "4.62.4", - "@rollup/rollup-linux-loong64-musl": "4.62.4", - "@rollup/rollup-linux-ppc64-gnu": "4.62.4", - "@rollup/rollup-linux-ppc64-musl": "4.62.4", - "@rollup/rollup-linux-riscv64-gnu": "4.62.4", - "@rollup/rollup-linux-riscv64-musl": "4.62.4", - "@rollup/rollup-linux-s390x-gnu": "4.62.4", - "@rollup/rollup-linux-x64-gnu": "4.62.4", - "@rollup/rollup-linux-x64-musl": "4.62.4", - "@rollup/rollup-openbsd-x64": "4.62.4", - "@rollup/rollup-openharmony-arm64": "4.62.4", - "@rollup/rollup-win32-arm64-msvc": "4.62.4", - "@rollup/rollup-win32-ia32-msvc": "4.62.4", - "@rollup/rollup-win32-x64-gnu": "4.62.4", - "@rollup/rollup-win32-x64-msvc": "4.62.4", - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-async": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", - "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", + "node_modules/semantic-release/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/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": ">=0.12.0" + "node": ">=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==", + "node_modules/semantic-release/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", "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": { - "queue-microtask": "^1.2.2" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/runtypes": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/runtypes/-/runtypes-6.7.0.tgz", - "integrity": "sha512-3TLdfFX8YHNFOhwHrSJza6uxVBmBrEjnNQlNXvXCdItS0Pdskfg5vVXUTWIN+Y23QR09jWpSl99UHkA83m4uWA==", - "license": "MIT" - }, - "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", + "node_modules/semantic-release/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.1.0" + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/safe-array-concat": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", - "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "node_modules/semantic-release/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "get-intrinsic": "^1.3.0", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, "engines": { - "node": ">=0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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", - "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/semantic-release/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "node_modules/semantic-release/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==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "node_modules/semantic-release/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": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "license": "MIT" - }, - "node_modules/security-context": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz", - "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" - }, - "node_modules/semantic-release": { - "version": "25.0.9", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.9.tgz", - "integrity": "sha512-bxve7csK0/Txr++CkfrmV+X1r4jqiSOw2WsSad9E2S68R+ZfLBwDn8IceM8WfiOmKQIHgsQc1cNA8Dzg7U75pg==", + "node_modules/semantic-release/node_modules/yargs": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", "dev": true, "license": "MIT", "dependencies": { - "@semantic-release/commit-analyzer": "^13.0.1", - "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^12.0.0", - "@semantic-release/npm": "^13.1.1", - "@semantic-release/release-notes-generator": "^14.1.0", - "aggregate-error": "^5.0.0", - "cosmiconfig": "^9.0.0", - "debug": "^4.0.0", - "env-ci": "^11.0.0", - "execa": "^9.0.0", - "figures": "^6.0.0", - "find-versions": "^6.0.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^4.0.0", - "hosted-git-info": "^9.0.0", - "import-from-esm": "^2.0.0", - "lodash-es": "^4.17.21", - "marked": "^15.0.0", - "marked-terminal": "^7.3.0", - "micromatch": "^4.0.2", - "p-each-series": "^3.0.0", - "p-reduce": "^3.0.0", - "read-package-up": "^12.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "signale": "^1.2.1", - "yargs": "^18.0.0" + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^8.2.1", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/semantic-release/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/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "devOptional": true, + "license": "ISC", "bin": { - "semantic-release": "bin/semantic-release.js" + "semver": "bin/semver.js" }, "engines": { - "node": "^22.14.0 || >= 24.10.0" + "node": ">=10" } }, - "node_modules/semantic-release/node_modules/@semantic-release/error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", - "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/aggregate-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", - "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", - "dev": true, + "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": { - "clean-stack": "^5.2.0", - "indent-string": "^5.0.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/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", + "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": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/clean-stack": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", - "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", - "dev": true, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC", + "optional": true + }, + "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==", "license": "MIT", "dependencies": { - "escape-string-regexp": "5.0.0" + "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": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/semantic-release/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", + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", "dependencies": { - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=20" + "node": ">= 0.4" } }, - "node_modules/semantic-release/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, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/semantic-release/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, + "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/semantic-release/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "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", - "engines": { - "node": ">=12" + "dependencies": { + "shebang-regex": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/semantic-release/node_modules/execa": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", - "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "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", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "cross-spawn": "^7.0.6", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^8.0.1", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^6.0.0", - "pretty-ms": "^9.2.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.1.1" - }, "engines": { - "node": "^18.19.0 || >=20.5.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=8" } }, - "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "dev": true, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/human-signals": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", - "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/semantic-release/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/semantic-release/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", - "dev": true, + "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", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/semantic-release/node_modules/npm-run-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", - "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", - "dev": true, + "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": { - "path-key": "^4.0.0", - "unicorn-magic": "^0.3.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/semantic-release/node_modules/p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "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==", + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "license": "MIT", + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/semantic-release/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, + "node_modules/signale/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", - "engines": { - "node": ">=12" + "dependencies": { + "color-convert": "^1.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/semantic-release/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, + "node_modules/signale/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", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/semantic-release/node_modules/string-width": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", - "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", - "dev": true, + "node_modules/signale/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", "dependencies": { - "get-east-asian-width": "^1.5.0", - "strip-ansi": "^7.1.2" - }, + "color-name": "1.1.3" + } + }, + "node_modules/signale/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" + }, + "node_modules/signale/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", "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, - "node_modules/semantic-release/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, + "node_modules/signale/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=4" } }, - "node_modules/semantic-release/node_modules/strip-final-newline": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", - "dev": true, + "node_modules/signale/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", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/semantic-release/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, + "node_modules/signale/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", - "engines": { - "node": ">=18" + "dependencies": { + "has-flag": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/semantic-release/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==", + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "unicode-emoji-modifier-base": "^1.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/semantic-release/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==", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/semantic-release/node_modules/yargs": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", - "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", - "dev": true, + "node_modules/sodium-native": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.4.1.tgz", + "integrity": "sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ==", + "hasInstallScript": true, "license": "MIT", + "optional": true, "dependencies": { - "cliui": "^9.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "string-width": "^8.2.1", - "y18n": "^5.0.5", - "yargs-parser": "^22.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" + "node-gyp-build": "^4.3.0" } }, - "node_modules/semantic-release/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", + "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": { - "node": "^20.19.0 || ^22.12.0 || >=23" + "node": ">=0.10.0" } }, - "node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "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": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "node_modules/spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "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==", + "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==", + "devOptional": 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==", + "devOptional": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "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/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "devOptional": true, + "license": "CC0-1.0" + }, + "node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "dev": true, + "license": "ISC", + "dependencies": { + "through2": "~2.0.0" } }, - "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==", + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "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" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" + "internal-slot": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" } }, - "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==", + "node_modules/stream-combiner2/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/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==", + "node_modules/stream-combiner2/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": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "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/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/stream-combiner2/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/stream-combiner2/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", - "engines": { - "node": ">=8" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/side-channel": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", - "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "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", + "optional": true, "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "safe-buffer": "~5.2.0" } }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "license": "WTFPL OR MIT", + "peer": true + }, + "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", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=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==", + "node_modules/string.prototype.trim": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -14009,17 +15731,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/string.prototype.trimend": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.2" }, "engines": { "node": ">= 0.4" @@ -14028,308 +15749,359 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "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==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "license": "MIT", - "dependencies": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/signale/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/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signale/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/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", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/signale/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/strip-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", - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=8" } }, - "node_modules/signale/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" - }, - "node_modules/signale/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/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==", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=4" } }, - "node_modules/signale/node_modules/figures": { + "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/signale/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/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": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/signale/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==", + "node_modules/strip-literal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "js-tokens": "^9.0.1" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "dev": true, "license": "MIT", "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/super-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.1.0.tgz", + "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "function-timeout": "^1.0.1", + "make-asynchronous": "^1.0.1", + "time-span": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sodium-native": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.4.1.tgz", - "integrity": "sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ==", - "hasInstallScript": true, + "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==", "license": "MIT", - "optional": true, "dependencies": { - "node-gyp-build": "^4.3.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=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==", + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, - "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==", + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, - "node_modules/spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", - "dev": true, - "license": "MIT" - }, - "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", + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "license": "MIT", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "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==", + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", "dev": true, "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "devOptional": true, + "license": "ISC", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", "dev": true, - "license": "CC0-1.0" + "license": "MIT", + "engines": { + "node": ">=14.16" + } }, - "node_modules/split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "node_modules/tempy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.2.0.tgz", + "integrity": "sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "through2": "~2.0.0" + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=0.10.0" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, "license": "MIT" }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "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==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" + "thenify": ">= 3.1.0 < 4" }, "engines": { - "node": ">= 0.4" + "node": ">=0.8" } }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT", + "optional": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "license": "MIT", "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/stream-combiner2/node_modules/isarray": { + "node_modules/through2/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/stream-combiner2/node_modules/readable-stream": { + "node_modules/through2/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==", @@ -14345,14 +16117,14 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/stream-combiner2/node_modules/safe-buffer": { + "node_modules/through2/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/stream-combiner2/node_modules/string_decoder": { + "node_modules/through2/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==", @@ -14362,42 +16134,161 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "license": "WTFPL OR MIT", - "peer": true + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "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==", + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "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" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinypool": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "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": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", - "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", "license": "MIT", + "optional": true + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.2", - "es-object-atoms": "^1.1.2", - "has-property-descriptors": "^1.0.2", - "safe-regex-test": "^1.1.0" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, + "engines": { + "node": ">=0.8" + } + }, + "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/traverse": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", + "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14405,1422 +16296,1723 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", - "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=18.12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "node_modules/ts-chacha20": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-chacha20/-/ts-chacha20-1.2.0.tgz", + "integrity": "sha512-PTyPoWYHc2we8P2NTn5hpYG211popWbkjiw+k63xqjeMrx9pPtXSclz9F3fu0Tpr+vfR1xxcQFwsEkh1cXMLqw==", + "license": "MIT" + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/ts-typed-json": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ts-typed-json/-/ts-typed-json-0.3.2.tgz", + "integrity": "sha512-Tdu3BWzaer7R5RvBIJcg9r8HrTZgpJmsX+1meXMJzYypbkj8NK2oJN0yvm4Dp/Iv6tzFa/L5jKRmEVTga6K3nA==", + "license": "MIT", + "optional": true + }, + "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/tsup": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz", + "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.27.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "^0.7.6", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "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/tsup/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", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/strip-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==", + "node_modules/tsup/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/tsx": { + "version": "4.23.12", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.12.tgz", + "integrity": "sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==", + "dev": true, "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, "engines": { - "node": ">=8" + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" } }, - "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==", + "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "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==", + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/strip-literal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", - "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/sucrase": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", - "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "tinyglobby": "^0.2.11", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18" } }, - "node_modules/super-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.1.0.tgz", - "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==", + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "function-timeout": "^1.0.1", - "make-asynchronous": "^1.0.1", - "time-span": "^5.1.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + "node": ">=18" } }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0.0" + "node": ">=18" } }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8.0.0" + "node": ">=18" } }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, "license": "MIT", - "peer": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, "license": "MIT", - "peer": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/tagged-tag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", - "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.16" + "node": ">=18" } }, - "node_modules/tempy": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.2.0.tgz", - "integrity": "sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==", + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], "dev": true, "license": "MIT", - "dependencies": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/tempy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/tempy/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "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==", + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=0.8" + "node": ">=18" } }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/tsx/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" } }, - "node_modules/through2/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/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/through2/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/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], "dev": true, "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" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/through2/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==", + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/through2/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/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/time-span": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", - "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "node_modules/tsx/node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "convert-hrtime": "^5.0.0" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" } }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "node": "*" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "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", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "dependencies": { + "prelude-ls": "^1.2.1" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=4" } }, - "node_modules/tinypool": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", - "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", - "dev": true, - "license": "MIT", + "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==", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=14.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", - "dev": true, + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", "license": "MIT", - "engines": { - "node": ">=14.0.0" + "peer": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/typechain/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==", + "license": "MIT", + "peer": true + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "license": "MIT", + "peer": true, "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "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, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "license": "MIT", + "peer": true, "dependencies": { - "is-number": "^7.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=8.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "license": "BSD-3-Clause", + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "peer": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=0.8" - } - }, - "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/traverse": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", - "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, + "node_modules/typechain/node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } + "peer": true }, - "node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", - "dev": true, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ts-chacha20": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-chacha20/-/ts-chacha20-1.2.0.tgz", - "integrity": "sha512-PTyPoWYHc2we8P2NTn5hpYG211popWbkjiw+k63xqjeMrx9pPtXSclz9F3fu0Tpr+vfR1xxcQFwsEkh1cXMLqw==", - "license": "MIT" - }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "license": "ISC", "peer": true, "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" + "brace-expansion": "^1.1.7" }, - "bin": { - "write-markdown": "dist/write-markdown.js" + "engines": { + "node": "*" } }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "node_modules/typechain/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "license": "MIT", - "peerDependencies": { - "typescript": ">=3.7.0" + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "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==", - "dev": true, - "license": "Apache-2.0" - }, - "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/typechain/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==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } }, - "node_modules/tsup": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz", - "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==", - "dev": true, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "license": "MIT", "dependencies": { - "bundle-require": "^5.1.0", - "cac": "^6.7.14", - "chokidar": "^4.0.3", - "consola": "^3.4.0", - "debug": "^4.4.0", - "esbuild": "^0.27.0", - "fix-dts-default-cjs-exports": "^1.0.0", - "joycon": "^3.1.1", - "picocolors": "^1.1.1", - "postcss-load-config": "^6.0.1", - "resolve-from": "^5.0.0", - "rollup": "^4.34.8", - "source-map": "^0.7.6", - "sucrase": "^3.35.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.11", - "tree-kill": "^1.2.2" - }, - "bin": { - "tsup": "dist/cli-default.js", - "tsup-node": "dist/cli-node.js" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@microsoft/api-extractor": "^7.36.0", - "@swc/core": "^1", - "postcss": "^8.4.12", - "typescript": ">=4.5.0" - }, - "peerDependenciesMeta": { - "@microsoft/api-extractor": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "postcss": { - "optional": true - }, - "typescript": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/tsup/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, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsup/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, "engines": { - "node": ">= 12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsx": { - "version": "4.23.7", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.7.tgz", - "integrity": "sha512-3f/u/+UDCNQ7iwUZW9FCMnNGIHzElGJYh0S/yy8IvWSsn5O7fEO/897FaG7FA2W8yryiRyuwXZ1PYLAKYaqSuQ==", - "dev": true, + "node_modules/typed-array-length": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", "license": "MIT", "dependencies": { - "esbuild": "~0.28.0" + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", "bin": { - "tsx": "dist/cli.mjs" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "node": ">=14.17" } }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", - "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", - "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", "dev": true, - "hasInstallScript": true, - "license": "MIT", + "license": "MIT" + }, + "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, "bin": { - "esbuild": "bin/esbuild" + "uglifyjs": "bin/uglifyjs" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.1", - "@esbuild/android-arm": "0.28.1", - "@esbuild/android-arm64": "0.28.1", - "@esbuild/android-x64": "0.28.1", - "@esbuild/darwin-arm64": "0.28.1", - "@esbuild/darwin-x64": "0.28.1", - "@esbuild/freebsd-arm64": "0.28.1", - "@esbuild/freebsd-x64": "0.28.1", - "@esbuild/linux-arm": "0.28.1", - "@esbuild/linux-arm64": "0.28.1", - "@esbuild/linux-ia32": "0.28.1", - "@esbuild/linux-loong64": "0.28.1", - "@esbuild/linux-mips64el": "0.28.1", - "@esbuild/linux-ppc64": "0.28.1", - "@esbuild/linux-riscv64": "0.28.1", - "@esbuild/linux-s390x": "0.28.1", - "@esbuild/linux-x64": "0.28.1", - "@esbuild/netbsd-arm64": "0.28.1", - "@esbuild/netbsd-x64": "0.28.1", - "@esbuild/openbsd-arm64": "0.28.1", - "@esbuild/openbsd-x64": "0.28.1", - "@esbuild/openharmony-arm64": "0.28.1", - "@esbuild/sunos-x64": "0.28.1", - "@esbuild/win32-arm64": "0.28.1", - "@esbuild/win32-ia32": "0.28.1", - "@esbuild/win32-x64": "0.28.1" + "node": ">=0.8.0" } }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "license": "MIT", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", "dependencies": { - "safe-buffer": "^5.0.1" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "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, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "@fastify/busboy": "^2.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.0" } }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "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==", - "license": "(MIT OR CC0-1.0)", + "node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" + "crypto-random-string": "^4.0.0" }, - "bin": { - "typechain": "dist/cli/cli.js" + "engines": { + "node": ">=12" }, - "peerDependencies": { - "typescript": ">=4.3.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typechain/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==", - "license": "MIT", - "peer": true + "node_modules/universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "dev": true, + "license": "ISC" }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "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", - "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "punycode": "^2.1.0" } }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "dev": true, "license": "MIT", - "peer": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "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==", + "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "builtins": "^1.0.3" } }, - "node_modules/typechain/node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "node_modules/validator": { + "version": "13.15.35", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", + "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", "license": "MIT", - "peer": true + "engines": { + "node": ">= 0.10" + } }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "peer": true, + "node_modules/viem": { + "version": "2.53.1", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.53.1.tgz", + "integrity": "sha512-FhfJ/SW73CVosiyVLmIMVgKDRKYV1AGCLzZoHYvmNayyVff63Qi1ocPCk59LqC/cNw244RbBJjHnmxqXkE7NpA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@noble/curves": "1.9.1", + "@noble/hashes": "1.8.0", + "@scure/bip32": "1.7.0", + "@scure/bip39": "1.6.0", + "abitype": "1.2.3", + "isows": "1.0.7", + "ox": "0.14.29", + "ws": "8.20.1" }, - "engines": { - "node": "*" + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/typechain/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", "license": "MIT", - "peer": true, - "bin": { - "prettier": "bin-prettier.js" + "dependencies": { + "@noble/hashes": "1.8.0" }, "engines": { - "node": ">=10.13.0" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/typechain/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==", + "node_modules/viem/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", - "peer": true, "engines": { - "node": ">= 4.0.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "node_modules/viem/node_modules/abitype": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", + "integrity": "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==", "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" + "funding": { + "url": "https://github.com/sponsors/wevm" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3.22.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "node_modules/viem/node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, "engines": { - "node": ">= 0.4" + "node": ">=10.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">= 0.4" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/typed-array-length": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", - "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", + "node_modules/vite-node": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.1.tgz", + "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.9", - "for-each": "^0.3.5", - "gopd": "^1.2.0", - "is-typed-array": "^1.1.15", - "possible-typed-array-names": "^1.1.0", - "reflect.getprototypeof": "^1.0.10" + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">= 0.4" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/vitest" } }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } + "node_modules/vite-node/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", - "peer": true, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/ufo": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", - "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "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==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, + "os": [ + "android" + ], "engines": { - "node": ">=0.8.0" + "node": ">=12" } }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=14.0" + "node": ">=12" } }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/unicorn-magic": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", - "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/universal-user-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", - "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, - "license": "ISC" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=12" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" } }, - "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==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=12" } }, - "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==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validator": { - "version": "13.15.35", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", - "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.10" + "node": ">=12" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" ], + "dev": true, "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/viem": { - "version": "2.53.1", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.53.1.tgz", - "integrity": "sha512-FhfJ/SW73CVosiyVLmIMVgKDRKYV1AGCLzZoHYvmNayyVff63Qi1ocPCk59LqC/cNw244RbBJjHnmxqXkE7NpA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" ], + "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "1.9.1", - "@noble/hashes": "1.8.0", - "@scure/bip32": "1.7.0", - "@scure/bip39": "1.6.0", - "abitype": "1.2.3", - "isows": "1.0.7", - "ox": "0.14.29", - "ws": "8.20.1" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/viem/node_modules/@noble/curves": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", - "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=12" } }, - "node_modules/viem/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/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=12" } }, - "node_modules/viem/node_modules/ws": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", - "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "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": ">=12" } }, - "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">=12" } }, - "node_modules/vite-node": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.1.tgz", - "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node": ">=12" } }, - "node_modules/vite-node/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "node_modules/vite/node_modules/@esbuild/win32-x64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=12" @@ -16258,6 +18450,16 @@ "node": ">=8" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -16272,7 +18474,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/wordwrapjs": { @@ -16280,7 +18482,6 @@ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "license": "MIT", - "peer": true, "dependencies": { "reduce-flatten": "^2.0.0", "typical": "^5.2.0" @@ -16294,7 +18495,6 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "license": "MIT", - "peer": true, "engines": { "node": ">=8" } From 43350b62d9eee79409dd0ef054dd170958125a8a Mon Sep 17 00:00:00 2001 From: Rishabh Singh Date: Fri, 14 Aug 2026 11:09:16 +0530 Subject: [PATCH 6/7] fix: address code-review findings on gasless commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Redact PIMLICO_API_KEY from error output: viem's HTTP/RPC/timeout errors embed the bundler URL (which carries the key as a query param) verbatim, and every gasless command handler logged that message as-is. - Throw a clear error from getGaslessFactoryAddress if trustvc's gaslessConstants is ever missing a network's factory address, instead of silently casting undefined. - Fix gasless nominate's success message misattributing the nomination to the holder instead of the beneficiary. - Normalize tokenId with addAddressPrefix before gasless minting — mintGasless does BigInt(tokenId) directly, so an unprefixed numeric tokenId would silently parse as decimal instead of hex. --- src/commands/gasless/admin/common.ts | 4 ++-- src/commands/gasless/admin/delegate-user.ts | 3 ++- src/commands/gasless/config.ts | 22 ++++++++++++++++- .../deploy/deploy-platform-paymaster.ts | 8 +++++-- .../deploy/deploy-token-registry-gasless.ts | 9 +++++-- .../title-escrow/accept-return-to-issuer.ts | 4 ++-- src/commands/gasless/title-escrow/nominate.ts | 6 ++--- .../title-escrow/reject-return-to-issuer.ts | 4 ++-- .../reject-transfer-beneficiary.ts | 4 ++-- .../title-escrow/reject-transfer-holder.ts | 4 ++-- .../title-escrow/reject-transfer-owners.ts | 4 ++-- .../gasless/title-escrow/return-to-issuer.ts | 4 ++-- .../title-escrow/transfer-beneficiary.ts | 4 ++-- .../gasless/title-escrow/transfer-holder.ts | 4 ++-- .../gasless/title-escrow/transfer-owners.ts | 4 ++-- src/commands/gasless/token-regitsry/mint.ts | 7 +++--- .../deploy/deploy-platform-paymaster.test.ts | 7 ++++++ .../deploy-token-registry-gasless.test.ts | 4 ++++ .../accept-return-to-issuer.test.ts | 1 + .../gasless/title-escrow/nominate.test.ts | 1 + .../reject-return-to-issuer.test.ts | 1 + .../reject-transfer-beneficiary.test.ts | 1 + .../reject-transfer-holder.test.ts | 1 + .../reject-transfer-owners.test.ts | 1 + .../title-escrow/return-to-issuer.test.ts | 1 + .../title-escrow/transfer-beneficiary.test.ts | 1 + .../title-escrow/transfer-holder.test.ts | 1 + .../title-escrow/transfer-owners.test.ts | 1 + .../gasless/token-regitsry/mint.test.ts | 24 +++++++++++++++++++ 29 files changed, 108 insertions(+), 32 deletions(-) diff --git a/src/commands/gasless/admin/common.ts b/src/commands/gasless/admin/common.ts index 6441e36..6376f74 100644 --- a/src/commands/gasless/admin/common.ts +++ b/src/commands/gasless/admin/common.ts @@ -7,7 +7,7 @@ import { promptNetworkSelection, promptWalletSelection, } from '../../../utils'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { GaslessWalletOption } from '../types'; /** @@ -80,6 +80,6 @@ export const runPaymasterAdminAction = async ({ return txHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/admin/delegate-user.ts b/src/commands/gasless/admin/delegate-user.ts index 49cab77..8d50045 100644 --- a/src/commands/gasless/admin/delegate-user.ts +++ b/src/commands/gasless/admin/delegate-user.ts @@ -13,6 +13,7 @@ import { getEip7702ImplementationAddress, getGaslessRpcUrl, getViemChain, + redactPimlicoApiKey, } from '../config'; // Submits a standalone EIP-7702 authorization for a user's own EOA — the first of the three @@ -76,6 +77,6 @@ export const handler = async (): Promise => { return txHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/config.ts b/src/commands/gasless/config.ts index 9ccf8bc..4664c58 100644 --- a/src/commands/gasless/config.ts +++ b/src/commands/gasless/config.ts @@ -88,6 +88,17 @@ export const getGaslessRpcUrl = (network: GaslessSupportedNetwork): string => { export const getPimlicoBundlerUrl = (network: GaslessSupportedNetwork, apiKey: string): string => `https://api.pimlico.io/v2/${getViemChain(network).id}/rpc?apikey=${apiKey}`; +/** + * viem's HTTP/RPC/timeout errors embed the request URL verbatim in their message (it only strips + * basic-auth credentials, not query params), so a bundler network error would otherwise leak the + * `apikey` query value from `getPimlicoBundlerUrl` straight into command-handler logs. Strips it + * from arbitrary error text before logging. + */ +export const redactPimlicoApiKey = (message: string): string => { + const apiKey = process.env.PIMLICO_API_KEY; + return apiKey ? message.split(apiKey).join('[REDACTED]') : message; +}; + /** * PlatformAccountFactory address for the given network, from @trustvc/trustvc's own * `gaslessConstants`. Deliberately not left for `deployPlatformPaymaster` to default itself — @@ -100,5 +111,14 @@ export const getGaslessFactoryAddress = (network: GaslessSupportedNetwork): `0x$ [NetworkCmdName.Sepolia]: gaslessConstants.GASLESS_FACTORY_ADDRESS_SEPOLIA, [NetworkCmdName.Amoy]: gaslessConstants.GASLESS_FACTORY_ADDRESS_AMOY, }; - return factoryAddress[network] as `0x${string}`; + + const address = factoryAddress[network]; + if (!address) { + throw new Error( + `Missing gasless factory address for ${network} in @trustvc/trustvc's gaslessConstants. ` + + `This indicates an incompatible @trustvc/trustvc version — check for a package update.`, + ); + } + + return address as `0x${string}`; }; diff --git a/src/commands/gasless/deploy/deploy-platform-paymaster.ts b/src/commands/gasless/deploy/deploy-platform-paymaster.ts index babf65b..e47e712 100644 --- a/src/commands/gasless/deploy/deploy-platform-paymaster.ts +++ b/src/commands/gasless/deploy/deploy-platform-paymaster.ts @@ -12,7 +12,11 @@ import { promptNetworkSelection, promptWalletSelection, } from '../../../utils'; -import { assertGaslessSupportedNetwork, getGaslessFactoryAddress } from '../config'; +import { + assertGaslessSupportedNetwork, + getGaslessFactoryAddress, + redactPimlicoApiKey, +} from '../config'; import { GaslessWalletOption } from '../types'; // Deploys the PlatformPaymaster itself — this is a regular, non-gasless transaction. Someone has @@ -111,7 +115,7 @@ export const runDeployPlatformPaymaster = async ( return paymasterAddress; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/deploy/deploy-token-registry-gasless.ts b/src/commands/gasless/deploy/deploy-token-registry-gasless.ts index e507d0c..96eb570 100644 --- a/src/commands/gasless/deploy/deploy-token-registry-gasless.ts +++ b/src/commands/gasless/deploy/deploy-token-registry-gasless.ts @@ -10,7 +10,12 @@ import { promptNetworkSelection, promptWalletSelection, } from '../../../utils'; -import { assertGaslessSupportedNetwork, getGaslessRpcUrl, getViemChain } from '../config'; +import { + assertGaslessSupportedNetwork, + getGaslessRpcUrl, + getViemChain, + redactPimlicoApiKey, +} from '../config'; import { buildGaslessSmartAccountClient } from '../client'; import { checkGaslessDeployEligibility } from '../eligibility'; import { GaslessWalletOption } from '../types'; @@ -145,6 +150,6 @@ export const runDeployTokenRegistryGasless = async ( return deployedAddress ?? transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/accept-return-to-issuer.ts b/src/commands/gasless/title-escrow/accept-return-to-issuer.ts index 59e5459..c2e62ad 100644 --- a/src/commands/gasless/title-escrow/accept-return-to-issuer.ts +++ b/src/commands/gasless/title-escrow/accept-return-to-issuer.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRegistryRun } from '../common'; import { TokenRegistryReturnedDocumentGaslessCommand } from '../types'; @@ -78,6 +78,6 @@ export const runAcceptReturnToIssuerGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/nominate.ts b/src/commands/gasless/title-escrow/nominate.ts index 8267a5f..6db8432 100644 --- a/src/commands/gasless/title-escrow/nominate.ts +++ b/src/commands/gasless/title-escrow/nominate.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRun } from '../common'; import { TitleEscrowNominateBeneficiaryGaslessCommand } from '../types'; @@ -81,12 +81,12 @@ export const runNominateGasless = async ( ); success( - `Transferable record with tokenId ${args.tokenId}'s holder has been successfully nominated to new owner with address ${args.newBeneficiary}`, + `Transferable record with tokenId ${args.tokenId} has successfully nominated a new beneficiary with address ${args.newBeneficiary}`, ); info(`Find more details at ${getEtherscanAddress({ network })}/tx/${transactionHash}`); return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/reject-return-to-issuer.ts b/src/commands/gasless/title-escrow/reject-return-to-issuer.ts index 51a66fe..cb13c96 100644 --- a/src/commands/gasless/title-escrow/reject-return-to-issuer.ts +++ b/src/commands/gasless/title-escrow/reject-return-to-issuer.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRegistryRun } from '../common'; import { TokenRegistryReturnedDocumentGaslessCommand } from '../types'; @@ -78,6 +78,6 @@ export const runRejectReturnToIssuerGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/reject-transfer-beneficiary.ts b/src/commands/gasless/title-escrow/reject-transfer-beneficiary.ts index 3006fb4..d19bfb9 100644 --- a/src/commands/gasless/title-escrow/reject-transfer-beneficiary.ts +++ b/src/commands/gasless/title-escrow/reject-transfer-beneficiary.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRun } from '../common'; import { TitleEscrowRejectTransferGaslessCommand } from '../types'; @@ -85,6 +85,6 @@ export const runRejectTransferOwnerGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/reject-transfer-holder.ts b/src/commands/gasless/title-escrow/reject-transfer-holder.ts index c79084e..70637d5 100644 --- a/src/commands/gasless/title-escrow/reject-transfer-holder.ts +++ b/src/commands/gasless/title-escrow/reject-transfer-holder.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRun } from '../common'; import { TitleEscrowRejectTransferGaslessCommand } from '../types'; @@ -85,6 +85,6 @@ export const runRejectTransferHolderGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/reject-transfer-owners.ts b/src/commands/gasless/title-escrow/reject-transfer-owners.ts index 7b9dec1..e5a924e 100644 --- a/src/commands/gasless/title-escrow/reject-transfer-owners.ts +++ b/src/commands/gasless/title-escrow/reject-transfer-owners.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRun } from '../common'; import { TitleEscrowRejectTransferGaslessCommand } from '../types'; @@ -85,6 +85,6 @@ export const runRejectTransferOwnerHolderGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/return-to-issuer.ts b/src/commands/gasless/title-escrow/return-to-issuer.ts index eed6ce0..497e8fb 100644 --- a/src/commands/gasless/title-escrow/return-to-issuer.ts +++ b/src/commands/gasless/title-escrow/return-to-issuer.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRun } from '../common'; import { TitleEscrowReturnDocumentGaslessCommand } from '../types'; @@ -83,6 +83,6 @@ export const runReturnToIssuerGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/transfer-beneficiary.ts b/src/commands/gasless/title-escrow/transfer-beneficiary.ts index 0824966..1ccce77 100644 --- a/src/commands/gasless/title-escrow/transfer-beneficiary.ts +++ b/src/commands/gasless/title-escrow/transfer-beneficiary.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRun } from '../common'; import { TitleEscrowTransferBeneficiaryGaslessCommand } from '../types'; @@ -87,6 +87,6 @@ export const runTransferBeneficiaryGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/transfer-holder.ts b/src/commands/gasless/title-escrow/transfer-holder.ts index e99911a..d0c1d25 100644 --- a/src/commands/gasless/title-escrow/transfer-holder.ts +++ b/src/commands/gasless/title-escrow/transfer-holder.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRun } from '../common'; import { TitleEscrowTransferHolderGaslessCommand } from '../types'; @@ -86,6 +86,6 @@ export const runTransferHolderGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/title-escrow/transfer-owners.ts b/src/commands/gasless/title-escrow/transfer-owners.ts index 3b69723..9779738 100644 --- a/src/commands/gasless/title-escrow/transfer-owners.ts +++ b/src/commands/gasless/title-escrow/transfer-owners.ts @@ -11,7 +11,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { prepareGaslessRun } from '../common'; import { TitleEscrowTransferOwnersGaslessCommand } from '../types'; @@ -93,6 +93,6 @@ export const runTransferOwnersGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/src/commands/gasless/token-regitsry/mint.ts b/src/commands/gasless/token-regitsry/mint.ts index a7ed9f9..9f3ecbc 100644 --- a/src/commands/gasless/token-regitsry/mint.ts +++ b/src/commands/gasless/token-regitsry/mint.ts @@ -1,6 +1,7 @@ import { error, info, success, warn } from 'signale'; import { mintGasless } from '@trustvc/trustvc'; import { + addAddressPrefix, extractDocumentInfo, getErrorMessage, getEtherscanAddress, @@ -12,7 +13,7 @@ import { verifyDocumentSignature, } from '../../../utils'; import { validateAndEncryptRemark } from '../../helpers'; -import { assertGaslessSupportedNetwork } from '../config'; +import { assertGaslessSupportedNetwork, redactPimlicoApiKey } from '../config'; import { buildGaslessSmartAccountClient } from '../client'; import { checkGaslessMintEligibility } from '../eligibility'; import { TokenRegistryMintGaslessCommand } from '../types'; @@ -108,7 +109,7 @@ export const runMintGasless = async ( { beneficiaryAddress: args.beneficiary, holderAddress: args.holder, - tokenId: args.tokenId, + tokenId: addAddressPrefix(args.tokenId), remarks: args.remark, }, { id: args.encryptionKey }, @@ -121,6 +122,6 @@ export const runMintGasless = async ( return transactionHash; } catch (e) { - error(getErrorMessage(e)); + error(redactPimlicoApiKey(getErrorMessage(e))); } }; diff --git a/tests/commands/gasless/deploy/deploy-platform-paymaster.test.ts b/tests/commands/gasless/deploy/deploy-platform-paymaster.test.ts index 7b59cc3..f37d46d 100644 --- a/tests/commands/gasless/deploy/deploy-platform-paymaster.test.ts +++ b/tests/commands/gasless/deploy/deploy-platform-paymaster.test.ts @@ -64,6 +64,7 @@ vi.mock('../../../../src/utils', async (importOriginal) => { vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((network: string) => network), getGaslessFactoryAddress: vi.fn(() => '0xfactoryfactoryfactoryfactoryfactoryfacto'), + redactPimlicoApiKey: vi.fn((message: string) => message), })); const VALID_SALT = `0x${'11'.repeat(32)}`; @@ -226,6 +227,9 @@ describe('gasless/deploy/deploy-platform-paymaster', () => { (configModule.getGaslessFactoryAddress as MockedFunction).mockReturnValue( '0xfactoryfactoryfactoryfactoryfactoryfacto', ); + (configModule.redactPimlicoApiKey as MockedFunction).mockImplementation( + (message: any) => message, + ); const utils = await import('../../../../src/utils'); (utils.getSupportedNetwork as MockedFunction).mockReturnValue({ networkId: 11155111 }); @@ -332,6 +336,9 @@ describe('gasless/deploy/deploy-platform-paymaster', () => { (configModule.getGaslessFactoryAddress as MockedFunction).mockReturnValue( '0xfactoryfactoryfactoryfactoryfactoryfacto', ); + (configModule.redactPimlicoApiKey as MockedFunction).mockImplementation( + (message: any) => message, + ); const utils = await import('../../../../src/utils'); (utils.getSupportedNetwork as MockedFunction).mockReturnValue({ networkId: 11155111 }); diff --git a/tests/commands/gasless/deploy/deploy-token-registry-gasless.test.ts b/tests/commands/gasless/deploy/deploy-token-registry-gasless.test.ts index 2db0844..e97b11e 100644 --- a/tests/commands/gasless/deploy/deploy-token-registry-gasless.test.ts +++ b/tests/commands/gasless/deploy/deploy-token-registry-gasless.test.ts @@ -73,6 +73,7 @@ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((network: string) => network), getGaslessRpcUrl: vi.fn(() => 'https://sepolia.example-rpc.com'), getViemChain: vi.fn(() => ({ id: 11155111 })), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/client', () => ({ @@ -260,6 +261,9 @@ describe('gasless/deploy/deploy-token-registry-gasless', () => { (configModule.getViemChain as MockedFunction).mockReturnValue({ id: CHAIN_ID_WITH_DEFAULT, }); + (configModule.redactPimlicoApiKey as MockedFunction).mockImplementation( + (message: any) => message, + ); const eligibilityModule = await import('../../../../src/commands/gasless/eligibility'); (eligibilityModule.checkGaslessDeployEligibility as MockedFunction).mockResolvedValue( diff --git a/tests/commands/gasless/title-escrow/accept-return-to-issuer.test.ts b/tests/commands/gasless/title-escrow/accept-return-to-issuer.test.ts index 884cea8..64b3538 100644 --- a/tests/commands/gasless/title-escrow/accept-return-to-issuer.test.ts +++ b/tests/commands/gasless/title-escrow/accept-return-to-issuer.test.ts @@ -60,6 +60,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/title-escrow/nominate.test.ts b/tests/commands/gasless/title-escrow/nominate.test.ts index ac5291f..ce67caa 100644 --- a/tests/commands/gasless/title-escrow/nominate.test.ts +++ b/tests/commands/gasless/title-escrow/nominate.test.ts @@ -59,6 +59,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n: string) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/title-escrow/reject-return-to-issuer.test.ts b/tests/commands/gasless/title-escrow/reject-return-to-issuer.test.ts index b359e3c..69103bd 100644 --- a/tests/commands/gasless/title-escrow/reject-return-to-issuer.test.ts +++ b/tests/commands/gasless/title-escrow/reject-return-to-issuer.test.ts @@ -60,6 +60,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/title-escrow/reject-transfer-beneficiary.test.ts b/tests/commands/gasless/title-escrow/reject-transfer-beneficiary.test.ts index f7c6abe..83a4915 100644 --- a/tests/commands/gasless/title-escrow/reject-transfer-beneficiary.test.ts +++ b/tests/commands/gasless/title-escrow/reject-transfer-beneficiary.test.ts @@ -60,6 +60,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/title-escrow/reject-transfer-holder.test.ts b/tests/commands/gasless/title-escrow/reject-transfer-holder.test.ts index 94c6399..577718b 100644 --- a/tests/commands/gasless/title-escrow/reject-transfer-holder.test.ts +++ b/tests/commands/gasless/title-escrow/reject-transfer-holder.test.ts @@ -60,6 +60,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/title-escrow/reject-transfer-owners.test.ts b/tests/commands/gasless/title-escrow/reject-transfer-owners.test.ts index ed45cef..59da56d 100644 --- a/tests/commands/gasless/title-escrow/reject-transfer-owners.test.ts +++ b/tests/commands/gasless/title-escrow/reject-transfer-owners.test.ts @@ -60,6 +60,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/title-escrow/return-to-issuer.test.ts b/tests/commands/gasless/title-escrow/return-to-issuer.test.ts index 1ce31af..ab5077c 100644 --- a/tests/commands/gasless/title-escrow/return-to-issuer.test.ts +++ b/tests/commands/gasless/title-escrow/return-to-issuer.test.ts @@ -59,6 +59,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n: string) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/title-escrow/transfer-beneficiary.test.ts b/tests/commands/gasless/title-escrow/transfer-beneficiary.test.ts index 4ee0581..ceaf400 100644 --- a/tests/commands/gasless/title-escrow/transfer-beneficiary.test.ts +++ b/tests/commands/gasless/title-escrow/transfer-beneficiary.test.ts @@ -59,6 +59,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n: string) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/title-escrow/transfer-holder.test.ts b/tests/commands/gasless/title-escrow/transfer-holder.test.ts index 98b5efe..836c6b3 100644 --- a/tests/commands/gasless/title-escrow/transfer-holder.test.ts +++ b/tests/commands/gasless/title-escrow/transfer-holder.test.ts @@ -59,6 +59,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n: string) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/title-escrow/transfer-owners.test.ts b/tests/commands/gasless/title-escrow/transfer-owners.test.ts index 9f4f4d4..d528ccb 100644 --- a/tests/commands/gasless/title-escrow/transfer-owners.test.ts +++ b/tests/commands/gasless/title-escrow/transfer-owners.test.ts @@ -59,6 +59,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((n: string) => n), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/common', () => ({ diff --git a/tests/commands/gasless/token-regitsry/mint.test.ts b/tests/commands/gasless/token-regitsry/mint.test.ts index 9249aa4..8e84051 100644 --- a/tests/commands/gasless/token-regitsry/mint.test.ts +++ b/tests/commands/gasless/token-regitsry/mint.test.ts @@ -64,6 +64,7 @@ vi.mock('../../../../src/commands/helpers', () => ({ vi.mock('../../../../src/commands/gasless/config', () => ({ assertGaslessSupportedNetwork: vi.fn((network: string) => network), + redactPimlicoApiKey: vi.fn((message: string) => message), })); vi.mock('../../../../src/commands/gasless/client', () => ({ @@ -222,6 +223,7 @@ describe('gasless/token-registry mint', () => { (configModule.assertGaslessSupportedNetwork as any).mockImplementation( (network: string) => network, ); + (configModule.redactPimlicoApiKey as any).mockImplementation((message: string) => message); getWalletOrSignerMock.mockResolvedValue({ privateKey: '0xprivatekey' }); checkGaslessMintEligibilityMock.mockResolvedValue(undefined); @@ -297,6 +299,28 @@ describe('gasless/token-registry mint', () => { expect(signaleModule.info).toHaveBeenCalledWith(expect.stringContaining('0xtxhash')); }); + it('adds a 0x prefix to an unprefixed hexadecimal tokenId before minting', async () => { + await runMintGasless({ ...baseArgs, tokenId: 'abcdef1234567890' }); + + expect(mintGaslessMock).toHaveBeenCalledWith( + expect.anything(), + expect.anything(), + expect.objectContaining({ tokenId: '0xabcdef1234567890' }), + expect.anything(), + ); + }); + + it('does not alter an already-prefixed numeric tokenId', async () => { + await runMintGasless({ ...baseArgs, tokenId: '0x1234567890' }); + + expect(mintGaslessMock).toHaveBeenCalledWith( + expect.anything(), + expect.anything(), + expect.objectContaining({ tokenId: '0x1234567890' }), + expect.anything(), + ); + }); + it('should log an error and return undefined when eligibility check rejects with an Error', async () => { checkGaslessMintEligibilityMock.mockRejectedValue( new Error('This account cannot mint gaslessly: not authorized'), From 45f8f02d6ba500dab67e889f3198b239c8a37bea Mon Sep 17 00:00:00 2001 From: Rishabh Singh Date: Fri, 14 Aug 2026 13:03:27 +0530 Subject: [PATCH 7/7] fix: code rabbit comments --- src/commands/gasless/eligibility.ts | 2 +- tests/commands/gasless/eligibility.test.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/commands/gasless/eligibility.ts b/src/commands/gasless/eligibility.ts index ef332ef..f87a3fb 100644 --- a/src/commands/gasless/eligibility.ts +++ b/src/commands/gasless/eligibility.ts @@ -94,7 +94,7 @@ export const checkGaslessEligibility = async ({ ); } - const [spent, limit] = dailySpend as unknown as [bigint, bigint, bigint]; + const [spent, limit] = dailySpend; if (limit > 0n && spent >= limit) { throw new Error( `This account cannot perform a gasless transaction: daily sponsored-gas limit reached for ` + diff --git a/tests/commands/gasless/eligibility.test.ts b/tests/commands/gasless/eligibility.test.ts index 537a257..6733a2e 100644 --- a/tests/commands/gasless/eligibility.test.ts +++ b/tests/commands/gasless/eligibility.test.ts @@ -89,7 +89,7 @@ describe('gasless/eligibility', () => { case 'authorizedCallers': return Promise.resolve(true); case 'getUserDailySpend': - return Promise.resolve([0n, 100n]); + return Promise.resolve([0n, 100n, 0n]); case 'getDeposit': return Promise.resolve(1n); default: @@ -179,7 +179,7 @@ describe('gasless/eligibility', () => { it('throws when the daily limit has been reached (limit > 0 and spent >= limit)', async () => { getCodeMock.mockResolvedValue('0xcode'); readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { - if (functionName === 'getUserDailySpend') return Promise.resolve([100n, 100n]); + if (functionName === 'getUserDailySpend') return Promise.resolve([100n, 100n, 0n]); return allPassingReadContract({ functionName }); }); @@ -197,7 +197,7 @@ describe('gasless/eligibility', () => { getCodeMock.mockResolvedValue('0xcode'); readContractMock.mockImplementation(({ functionName }: { functionName: string }) => { if (functionName === 'getUserDailySpend') { - return Promise.resolve([1_000_000_000n, 0n]); + return Promise.resolve([1_000_000_000n, 0n, 0n]); } return allPassingReadContract({ functionName }); });