diff --git a/README.md b/README.md
index a0298ab..425c11c 100644
--- a/README.md
+++ b/README.md
@@ -124,6 +124,9 @@ trustvc document-store revoke
# Mint a token to a registry
trustvc mint
+# Deploy a token registry contract
+trustvc token-registry deploy
+
# Transfer document holder
trustvc title-escrow transfer-holder
@@ -175,9 +178,9 @@ trustvc title-escrow reject-transfer-owner-holder
### Blockchain Operations
-- **Token Registry**: Uses `mint` to mint document hashes (tokenIds) to blockchain-based token registries across multiple networks (Ethereum, Polygon, XDC, Stability, Astron).
+- **Token Registry**: Deploy token registry contracts and mint document hashes (tokenIds) to blockchain-based token registries across multiple networks (Ethereum, Polygon, XDC, Stability, Astron).
-- **Document Store**: Uses `documentStoreIssue` and `documentStoreRevoke` to issue and revoke document hashes in deployed document store contracts.
+- **Document Store**: Deploy document store contracts and use `documentStoreIssue` and `documentStoreRevoke` to issue and revoke document hashes in deployed contracts.
- **Title Escrow**: Provides comprehensive transferable records management including holder transfers, beneficiary nominations, endorsements, returns, and rejections using smart contracts.
@@ -197,7 +200,8 @@ trustvc title-escrow reject-transfer-owner-holder
| | [`verify`](#verify) | Verify OpenAttestation documents |
| | [`oa-wrap`](#oa-wrap) | Wrap OpenAttestation documents |
| | [`oa-unwrap`](#oa-unwrap) | Unwrap OpenAttestation documents |
-| **Token Registry** | [`mint`](#mint) | Mint tokens to blockchain registries |
+| **Token Registry** | [`token-registry deploy`](#token-registry-deploy) | Deploy token registry contracts |
+| | [`mint`](#mint) | Mint tokens to blockchain registries |
| | `token-registry mint` | Alternative: `mint` |
| **Document Store** | [`document-store deploy`](#document-store-deploy) | Deploy document store contracts |
| | [`document-store issue`](#document-store-issue) | Issue document hashes |
@@ -508,6 +512,38 @@ Transaction receipt with hash, block number, gas used, and explorer link.
+
+token-registry deploy
+
+Deploys a token registry contract on the blockchain.
+
+**Usage:**
+
+```sh
+trustvc token-registry deploy
+```
+
+**Interactive Prompts:**
+
+- Network selection (Ethereum, Polygon, XDC, Stability, Astron)
+- Token registry name
+- Token registry symbol
+- Wallet/private key option
+- Dry-run option (estimate gas before deployment)
+
+**Output:**
+Transaction receipt with deployed contract address, hash, block number, gas used, and explorer link.
+
+**Supported Networks:**
+
+- Ethereum (Mainnet, Sepolia)
+- Polygon (Mainnet, Amoy Testnet)
+- XDC Network (Mainnet, Apothem Testnet)
+- Stability (Mainnet, Testnet)
+- Astron (Mainnet, Testnet)
+
+
+
token-registry mint
@@ -1126,6 +1162,7 @@ src/commands/
│ └── wrap.ts # Wrap OpenAttestation documents
│ └── unwrap.ts # Unwrap OpenAttestation documents
├── token-registry/
+│ ├── deploy.ts # Deploy token registry contracts
│ └── mint.ts # Mint tokens to registry
├── document-store/
│ ├── deploy.ts # Deploy document store contracts
diff --git a/package-lock.json b/package-lock.json
index 7b3224c..646518a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,7 +10,7 @@
"license": "Apache-2.0",
"dependencies": {
"@inquirer/prompts": "^5.3.8",
- "@trustvc/trustvc": "^2.8.0",
+ "@trustvc/trustvc": "^2.9.1",
"@types/yargs": "^17.0.32",
"chalk": "^4.1.2",
"ethers": "^6.15.0",
@@ -179,98 +179,49 @@
}
},
"node_modules/@aws-sdk/client-kms": {
- "version": "3.989.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.989.0.tgz",
- "integrity": "sha512-QjDyXQYXsS7KJJI2Qz+AXMifSMLy8Ojiy9G8dXTgyqASlH/uufRw0+FSbV0Gvv60VyfQg0bwgvnzPZKZuK+8NA==",
+ "version": "3.997.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.997.0.tgz",
+ "integrity": "sha512-9Tc9TjS159b7THJnGvTc27tZ2ywh98yinpoCIxltfqmviRsQgQbveb8PT1k2UsJEQVG3YG0yDME6ZCLwjUJmLg==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/credential-provider-node": "^3.972.8",
- "@aws-sdk/middleware-host-header": "^3.972.3",
- "@aws-sdk/middleware-logger": "^3.972.3",
- "@aws-sdk/middleware-recursion-detection": "^3.972.3",
- "@aws-sdk/middleware-user-agent": "^3.972.9",
- "@aws-sdk/region-config-resolver": "^3.972.3",
- "@aws-sdk/types": "^3.973.1",
- "@aws-sdk/util-endpoints": "3.989.0",
- "@aws-sdk/util-user-agent-browser": "^3.972.3",
- "@aws-sdk/util-user-agent-node": "^3.972.7",
- "@smithy/config-resolver": "^4.4.6",
- "@smithy/core": "^3.23.0",
- "@smithy/fetch-http-handler": "^5.3.9",
- "@smithy/hash-node": "^4.2.8",
- "@smithy/invalid-dependency": "^4.2.8",
- "@smithy/middleware-content-length": "^4.2.8",
- "@smithy/middleware-endpoint": "^4.4.14",
- "@smithy/middleware-retry": "^4.4.31",
- "@smithy/middleware-serde": "^4.2.9",
- "@smithy/middleware-stack": "^4.2.8",
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/node-http-handler": "^4.4.10",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/smithy-client": "^4.11.3",
- "@smithy/types": "^4.12.0",
- "@smithy/url-parser": "^4.2.8",
- "@smithy/util-base64": "^4.3.0",
- "@smithy/util-body-length-browser": "^4.2.0",
- "@smithy/util-body-length-node": "^4.2.1",
- "@smithy/util-defaults-mode-browser": "^4.3.30",
- "@smithy/util-defaults-mode-node": "^4.2.33",
- "@smithy/util-endpoints": "^3.2.8",
- "@smithy/util-middleware": "^4.2.8",
- "@smithy/util-retry": "^4.2.8",
- "@smithy/util-utf8": "^4.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sso": {
- "version": "3.989.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.989.0.tgz",
- "integrity": "sha512-3sC+J1ru5VFXLgt9KZmXto0M7mnV5RkS6FNGwRMK3XrojSjHso9DLOWjbnXhbNv4motH8vu53L1HK2VC1+Nj5w==",
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/middleware-host-header": "^3.972.3",
- "@aws-sdk/middleware-logger": "^3.972.3",
- "@aws-sdk/middleware-recursion-detection": "^3.972.3",
- "@aws-sdk/middleware-user-agent": "^3.972.9",
- "@aws-sdk/region-config-resolver": "^3.972.3",
- "@aws-sdk/types": "^3.973.1",
- "@aws-sdk/util-endpoints": "3.989.0",
- "@aws-sdk/util-user-agent-browser": "^3.972.3",
- "@aws-sdk/util-user-agent-node": "^3.972.7",
- "@smithy/config-resolver": "^4.4.6",
- "@smithy/core": "^3.23.0",
- "@smithy/fetch-http-handler": "^5.3.9",
- "@smithy/hash-node": "^4.2.8",
- "@smithy/invalid-dependency": "^4.2.8",
- "@smithy/middleware-content-length": "^4.2.8",
- "@smithy/middleware-endpoint": "^4.4.14",
- "@smithy/middleware-retry": "^4.4.31",
- "@smithy/middleware-serde": "^4.2.9",
- "@smithy/middleware-stack": "^4.2.8",
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/node-http-handler": "^4.4.10",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/smithy-client": "^4.11.3",
- "@smithy/types": "^4.12.0",
- "@smithy/url-parser": "^4.2.8",
- "@smithy/util-base64": "^4.3.0",
- "@smithy/util-body-length-browser": "^4.2.0",
- "@smithy/util-body-length-node": "^4.2.1",
- "@smithy/util-defaults-mode-browser": "^4.3.30",
- "@smithy/util-defaults-mode-node": "^4.2.33",
- "@smithy/util-endpoints": "^3.2.8",
- "@smithy/util-middleware": "^4.2.8",
- "@smithy/util-retry": "^4.2.8",
- "@smithy/util-utf8": "^4.2.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/credential-provider-node": "^3.972.12",
+ "@aws-sdk/middleware-host-header": "^3.972.4",
+ "@aws-sdk/middleware-logger": "^3.972.4",
+ "@aws-sdk/middleware-recursion-detection": "^3.972.4",
+ "@aws-sdk/middleware-user-agent": "^3.972.13",
+ "@aws-sdk/region-config-resolver": "^3.972.4",
+ "@aws-sdk/types": "^3.973.2",
+ "@aws-sdk/util-endpoints": "^3.996.1",
+ "@aws-sdk/util-user-agent-browser": "^3.972.4",
+ "@aws-sdk/util-user-agent-node": "^3.972.12",
+ "@smithy/config-resolver": "^4.4.7",
+ "@smithy/core": "^3.23.4",
+ "@smithy/fetch-http-handler": "^5.3.10",
+ "@smithy/hash-node": "^4.2.9",
+ "@smithy/invalid-dependency": "^4.2.9",
+ "@smithy/middleware-content-length": "^4.2.9",
+ "@smithy/middleware-endpoint": "^4.4.18",
+ "@smithy/middleware-retry": "^4.4.35",
+ "@smithy/middleware-serde": "^4.2.10",
+ "@smithy/middleware-stack": "^4.2.9",
+ "@smithy/node-config-provider": "^4.3.9",
+ "@smithy/node-http-handler": "^4.4.11",
+ "@smithy/protocol-http": "^5.3.9",
+ "@smithy/smithy-client": "^4.11.7",
+ "@smithy/types": "^4.12.1",
+ "@smithy/url-parser": "^4.2.9",
+ "@smithy/util-base64": "^4.3.1",
+ "@smithy/util-body-length-browser": "^4.2.1",
+ "@smithy/util-body-length-node": "^4.2.2",
+ "@smithy/util-defaults-mode-browser": "^4.3.34",
+ "@smithy/util-defaults-mode-node": "^4.2.37",
+ "@smithy/util-endpoints": "^3.2.9",
+ "@smithy/util-middleware": "^4.2.9",
+ "@smithy/util-retry": "^4.2.9",
+ "@smithy/util-utf8": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -278,23 +229,23 @@
}
},
"node_modules/@aws-sdk/core": {
- "version": "3.973.9",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.9.tgz",
- "integrity": "sha512-cyUOfJSizn8da7XrBEFBf4UMI4A6JQNX6ZFcKtYmh/CrwfzsDcabv3k/z0bNwQ3pX5aeq5sg/8Bs/ASiL0bJaA==",
+ "version": "3.973.13",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.13.tgz",
+ "integrity": "sha512-eCFiLyBhJR7c/i8hZOETdzj2wsLFzi2L/w9/jajOgwmGqO8xrUExqkTZqdjROkwU62owqeqSuw4sIzlCv1E/ww==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "^3.973.1",
- "@aws-sdk/xml-builder": "^3.972.4",
- "@smithy/core": "^3.23.0",
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/signature-v4": "^5.3.8",
- "@smithy/smithy-client": "^4.11.3",
- "@smithy/types": "^4.12.0",
- "@smithy/util-base64": "^4.3.0",
- "@smithy/util-middleware": "^4.2.8",
- "@smithy/util-utf8": "^4.2.0",
+ "@aws-sdk/types": "^3.973.2",
+ "@aws-sdk/xml-builder": "^3.972.6",
+ "@smithy/core": "^3.23.4",
+ "@smithy/node-config-provider": "^4.3.9",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/protocol-http": "^5.3.9",
+ "@smithy/signature-v4": "^5.3.9",
+ "@smithy/smithy-client": "^4.11.7",
+ "@smithy/types": "^4.12.1",
+ "@smithy/util-base64": "^4.3.1",
+ "@smithy/util-middleware": "^4.2.9",
+ "@smithy/util-utf8": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -302,15 +253,15 @@
}
},
"node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.972.7",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.7.tgz",
- "integrity": "sha512-r8kBtglvLjGxBT87l6Lqkh9fL8yJJ6O4CYQPjKlj3AkCuL4/4784x3rxxXWw9LTKXOo114VB6mjxAuy5pI7XIg==",
+ "version": "3.972.11",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.11.tgz",
+ "integrity": "sha512-hbyoFuVm3qOAGfIPS9t7jCs8GFLFoaOs8ZmYp/chqciuHDyEGv+J365ip7YSvXSrxxUbeW9NyB1hTLt40NBMRg==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -318,20 +269,20 @@
}
},
"node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.972.9",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.9.tgz",
- "integrity": "sha512-40caFblEg/TPrp9EpvyMxp4xlJ5TuTI+A8H6g8FhHn2hfH2PObFAPLF9d5AljK/G69E1YtTklkuQeAwPlV3w8Q==",
+ "version": "3.972.13",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.13.tgz",
+ "integrity": "sha512-a864QxQWFkdCZ5wQF0QZNKTbqAc/DFQNeARp4gOyZZdql5RHjj4CppUSfwAzS9cpw2IPY3eeJjWqLZ1QiDB/6w==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/fetch-http-handler": "^5.3.9",
- "@smithy/node-http-handler": "^4.4.10",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/smithy-client": "^4.11.3",
- "@smithy/types": "^4.12.0",
- "@smithy/util-stream": "^4.5.12",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/fetch-http-handler": "^5.3.10",
+ "@smithy/node-http-handler": "^4.4.11",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/protocol-http": "^5.3.9",
+ "@smithy/smithy-client": "^4.11.7",
+ "@smithy/types": "^4.12.1",
+ "@smithy/util-stream": "^4.5.14",
"tslib": "^2.6.2"
},
"engines": {
@@ -339,24 +290,24 @@
}
},
"node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.972.7",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.7.tgz",
- "integrity": "sha512-zeYKrMwM5bCkHFho/x3+1OL0vcZQ0OhTR7k35tLq74+GP5ieV3juHXTZfa2LVE0Bg75cHIIerpX0gomVOhzo/w==",
+ "version": "3.972.11",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.11.tgz",
+ "integrity": "sha512-kvPFn626ABLzxmjFMoqMRtmFKMeiUdWPhwxhmuPu233tqHnNuXzHv0MtrZlkzHd+rwlh9j0zCbQo89B54wIazQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/credential-provider-env": "^3.972.7",
- "@aws-sdk/credential-provider-http": "^3.972.9",
- "@aws-sdk/credential-provider-login": "^3.972.7",
- "@aws-sdk/credential-provider-process": "^3.972.7",
- "@aws-sdk/credential-provider-sso": "^3.972.7",
- "@aws-sdk/credential-provider-web-identity": "^3.972.7",
- "@aws-sdk/nested-clients": "3.989.0",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/credential-provider-imds": "^4.2.8",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/shared-ini-file-loader": "^4.4.3",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/credential-provider-env": "^3.972.11",
+ "@aws-sdk/credential-provider-http": "^3.972.13",
+ "@aws-sdk/credential-provider-login": "^3.972.11",
+ "@aws-sdk/credential-provider-process": "^3.972.11",
+ "@aws-sdk/credential-provider-sso": "^3.972.11",
+ "@aws-sdk/credential-provider-web-identity": "^3.972.11",
+ "@aws-sdk/nested-clients": "^3.996.1",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/credential-provider-imds": "^4.2.9",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/shared-ini-file-loader": "^4.4.4",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -364,18 +315,18 @@
}
},
"node_modules/@aws-sdk/credential-provider-login": {
- "version": "3.972.7",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.7.tgz",
- "integrity": "sha512-Q103cLU6OjAllYjX7+V+PKQw654jjvZUkD+lbUUiFbqut6gR5zwl1DrelvJPM5hnzIty7BCaxaRB3KMuz3M/ug==",
+ "version": "3.972.11",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.11.tgz",
+ "integrity": "sha512-stdy09EpBTmsxGiXe1vB5qtXNww9wact36/uWLlSV0/vWbCOUAY2JjhPXoDVLk8n+E6r0M5HeZseLk+iTtifxg==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/nested-clients": "3.989.0",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/shared-ini-file-loader": "^4.4.3",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/nested-clients": "^3.996.1",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/protocol-http": "^5.3.9",
+ "@smithy/shared-ini-file-loader": "^4.4.4",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -383,22 +334,22 @@
}
},
"node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.972.8",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.8.tgz",
- "integrity": "sha512-AaDVOT7iNJyLjc3j91VlucPZ4J8Bw+eu9sllRDugJqhHWYyR3Iyp2huBUW8A3+DfHoh70sxGkY92cThAicSzlQ==",
+ "version": "3.972.12",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.12.tgz",
+ "integrity": "sha512-gMWGnHbNSKWRj+PAiuSg0EDpEwpyIgk0v9U6EuZ1C/5/BUv25Way+E+UFB7r+YYkscuBJMJ+ai8E2K0Q8dx50g==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "^3.972.7",
- "@aws-sdk/credential-provider-http": "^3.972.9",
- "@aws-sdk/credential-provider-ini": "^3.972.7",
- "@aws-sdk/credential-provider-process": "^3.972.7",
- "@aws-sdk/credential-provider-sso": "^3.972.7",
- "@aws-sdk/credential-provider-web-identity": "^3.972.7",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/credential-provider-imds": "^4.2.8",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/shared-ini-file-loader": "^4.4.3",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/credential-provider-env": "^3.972.11",
+ "@aws-sdk/credential-provider-http": "^3.972.13",
+ "@aws-sdk/credential-provider-ini": "^3.972.11",
+ "@aws-sdk/credential-provider-process": "^3.972.11",
+ "@aws-sdk/credential-provider-sso": "^3.972.11",
+ "@aws-sdk/credential-provider-web-identity": "^3.972.11",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/credential-provider-imds": "^4.2.9",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/shared-ini-file-loader": "^4.4.4",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -406,16 +357,16 @@
}
},
"node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.972.7",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.7.tgz",
- "integrity": "sha512-hxMo1V3ujWWrQSONxQJAElnjredkRpB6p8SDjnvRq70IwYY38R/CZSys0IbhRPxdgWZ5j12yDRk2OXhxw4Gj3g==",
+ "version": "3.972.11",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.11.tgz",
+ "integrity": "sha512-B049fvbv41vf0Fs5bCtbzHpruBDp61sPiFDxUmkAJ/zvgSAturpj2rqzV1rj2clg4mb44Uxp9rgpcODexNFlFA==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/shared-ini-file-loader": "^4.4.3",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/shared-ini-file-loader": "^4.4.4",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -423,18 +374,18 @@
}
},
"node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.972.7",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.7.tgz",
- "integrity": "sha512-ZGKBOHEj8Ap15jhG2XMncQmKLTqA++2DVU2eZfLu3T/pkwDyhCp5eZv5c/acFxbZcA/6mtxke+vzO/n+aeHs4A==",
+ "version": "3.972.11",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.11.tgz",
+ "integrity": "sha512-vX9z8skN8vPtamVWmSCm4KQohub+1uMuRzIo4urZ2ZUMBAl1bqHatVD/roCb3qRfAyIGvZXCA/AWS03BQRMyCQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso": "3.989.0",
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/token-providers": "3.989.0",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/shared-ini-file-loader": "^4.4.3",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/nested-clients": "^3.996.1",
+ "@aws-sdk/token-providers": "3.997.0",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/shared-ini-file-loader": "^4.4.4",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -442,17 +393,17 @@
}
},
"node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.972.7",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.7.tgz",
- "integrity": "sha512-AbYupBIoSJoVMlbMqBhNvPhqj+CdGtzW7Uk4ZIMBm2br18pc3rkG1VaKVFV85H87QCvLHEnni1idJjaX1wOmIw==",
+ "version": "3.972.11",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.11.tgz",
+ "integrity": "sha512-VR2Ju/QBdOjnWNIYuxRml63eFDLGc6Zl8aDwLi1rzgWo3rLBgtaWhWVBAijhVXzyPdQIOqdL8hvll5ybqumjeQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/nested-clients": "3.989.0",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/shared-ini-file-loader": "^4.4.3",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/nested-clients": "^3.996.1",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/shared-ini-file-loader": "^4.4.4",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -460,14 +411,14 @@
}
},
"node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.972.3",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.3.tgz",
- "integrity": "sha512-aknPTb2M+G3s+0qLCx4Li/qGZH8IIYjugHMv15JTYMe6mgZO8VBpYgeGYsNMGCqCZOcWzuf900jFBG5bopfzmA==",
+ "version": "3.972.4",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.4.tgz",
+ "integrity": "sha512-4q2Vg7/zOB10huDBLjzzTwVjBpG22X3J3ief2XrJEgTaANZrNfA3/cGbCVNAibSbu/nIYA7tDk8WCdsIzDDc4Q==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "^3.973.1",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/protocol-http": "^5.3.9",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -475,13 +426,13 @@
}
},
"node_modules/@aws-sdk/middleware-logger": {
- "version": "3.972.3",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.3.tgz",
- "integrity": "sha512-Ftg09xNNRqaz9QNzlfdQWfpqMCJbsQdnZVJP55jfhbKi1+FTWxGuvfPoBhDHIovqWKjqbuiew3HuhxbJ0+OjgA==",
+ "version": "3.972.4",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.4.tgz",
+ "integrity": "sha512-xFqPvTysuZAHSkdygT+ken/5rzkR7fhOoDPejAJQslZpp0XBepmCJnDOqA57ERtCTBpu8wpjTFI1ETd4S0AXEw==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "^3.973.1",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -489,15 +440,15 @@
}
},
"node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.972.3",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.3.tgz",
- "integrity": "sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==",
+ "version": "3.972.4",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.4.tgz",
+ "integrity": "sha512-tVbRaayUZ7y2bOb02hC3oEPTqQf2A0HpPDwdMl1qTmye/q8Mq1F1WiIoFkQwG/YQFvbyErYIDMbYzIlxzzLtjQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "^3.973.1",
+ "@aws-sdk/types": "^3.973.2",
"@aws/lambda-invoke-store": "^0.2.2",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/types": "^4.12.0",
+ "@smithy/protocol-http": "^5.3.9",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -505,17 +456,17 @@
}
},
"node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.972.9",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.9.tgz",
- "integrity": "sha512-1g1B7yf7KzessB0mKNiV9gAHEwbM662xgU+VE4LxyGe6kVGZ8LqYsngjhE+Stna09CJ7Pxkjr6Uq1OtbGwJJJg==",
+ "version": "3.972.13",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.13.tgz",
+ "integrity": "sha512-p1kVYbzBxRmhuOHoL/ANJPCedqUxnVgkEjxPoxt5pQv/yzppHM7aBWciYEE9TZY59M421D3GjLfZIZBoEFboVQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/types": "^3.973.1",
- "@aws-sdk/util-endpoints": "3.989.0",
- "@smithy/core": "^3.23.0",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/types": "^3.973.2",
+ "@aws-sdk/util-endpoints": "^3.996.1",
+ "@smithy/core": "^3.23.4",
+ "@smithy/protocol-http": "^5.3.9",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -523,48 +474,48 @@
}
},
"node_modules/@aws-sdk/nested-clients": {
- "version": "3.989.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.989.0.tgz",
- "integrity": "sha512-Dbk2HMPU3mb6RrSRzgf0WCaWSbgtZG258maCpuN2/ONcAQNpOTw99V5fU5CA1qVK6Vkm4Fwj2cnOnw7wbGVlOw==",
+ "version": "3.996.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.1.tgz",
+ "integrity": "sha512-XHVLFRGkuV2gh2uwBahCt65ALMb5wMpqplXEZIvFnWOCPlk60B7h7M5J9Em243K8iICDiWY6KhBEqVGfjTqlLA==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/middleware-host-header": "^3.972.3",
- "@aws-sdk/middleware-logger": "^3.972.3",
- "@aws-sdk/middleware-recursion-detection": "^3.972.3",
- "@aws-sdk/middleware-user-agent": "^3.972.9",
- "@aws-sdk/region-config-resolver": "^3.972.3",
- "@aws-sdk/types": "^3.973.1",
- "@aws-sdk/util-endpoints": "3.989.0",
- "@aws-sdk/util-user-agent-browser": "^3.972.3",
- "@aws-sdk/util-user-agent-node": "^3.972.7",
- "@smithy/config-resolver": "^4.4.6",
- "@smithy/core": "^3.23.0",
- "@smithy/fetch-http-handler": "^5.3.9",
- "@smithy/hash-node": "^4.2.8",
- "@smithy/invalid-dependency": "^4.2.8",
- "@smithy/middleware-content-length": "^4.2.8",
- "@smithy/middleware-endpoint": "^4.4.14",
- "@smithy/middleware-retry": "^4.4.31",
- "@smithy/middleware-serde": "^4.2.9",
- "@smithy/middleware-stack": "^4.2.8",
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/node-http-handler": "^4.4.10",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/smithy-client": "^4.11.3",
- "@smithy/types": "^4.12.0",
- "@smithy/url-parser": "^4.2.8",
- "@smithy/util-base64": "^4.3.0",
- "@smithy/util-body-length-browser": "^4.2.0",
- "@smithy/util-body-length-node": "^4.2.1",
- "@smithy/util-defaults-mode-browser": "^4.3.30",
- "@smithy/util-defaults-mode-node": "^4.2.33",
- "@smithy/util-endpoints": "^3.2.8",
- "@smithy/util-middleware": "^4.2.8",
- "@smithy/util-retry": "^4.2.8",
- "@smithy/util-utf8": "^4.2.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/middleware-host-header": "^3.972.4",
+ "@aws-sdk/middleware-logger": "^3.972.4",
+ "@aws-sdk/middleware-recursion-detection": "^3.972.4",
+ "@aws-sdk/middleware-user-agent": "^3.972.13",
+ "@aws-sdk/region-config-resolver": "^3.972.4",
+ "@aws-sdk/types": "^3.973.2",
+ "@aws-sdk/util-endpoints": "^3.996.1",
+ "@aws-sdk/util-user-agent-browser": "^3.972.4",
+ "@aws-sdk/util-user-agent-node": "^3.972.12",
+ "@smithy/config-resolver": "^4.4.7",
+ "@smithy/core": "^3.23.4",
+ "@smithy/fetch-http-handler": "^5.3.10",
+ "@smithy/hash-node": "^4.2.9",
+ "@smithy/invalid-dependency": "^4.2.9",
+ "@smithy/middleware-content-length": "^4.2.9",
+ "@smithy/middleware-endpoint": "^4.4.18",
+ "@smithy/middleware-retry": "^4.4.35",
+ "@smithy/middleware-serde": "^4.2.10",
+ "@smithy/middleware-stack": "^4.2.9",
+ "@smithy/node-config-provider": "^4.3.9",
+ "@smithy/node-http-handler": "^4.4.11",
+ "@smithy/protocol-http": "^5.3.9",
+ "@smithy/smithy-client": "^4.11.7",
+ "@smithy/types": "^4.12.1",
+ "@smithy/url-parser": "^4.2.9",
+ "@smithy/util-base64": "^4.3.1",
+ "@smithy/util-body-length-browser": "^4.2.1",
+ "@smithy/util-body-length-node": "^4.2.2",
+ "@smithy/util-defaults-mode-browser": "^4.3.34",
+ "@smithy/util-defaults-mode-node": "^4.2.37",
+ "@smithy/util-endpoints": "^3.2.9",
+ "@smithy/util-middleware": "^4.2.9",
+ "@smithy/util-retry": "^4.2.9",
+ "@smithy/util-utf8": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -572,15 +523,15 @@
}
},
"node_modules/@aws-sdk/region-config-resolver": {
- "version": "3.972.3",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.3.tgz",
- "integrity": "sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==",
+ "version": "3.972.4",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.4.tgz",
+ "integrity": "sha512-3GrJYv5eI65oCKveBZP7Q246dVP+tqeys9aKMB0dfX1glUWfppWlxIu52derqdNb9BX9lxYmeiaBcBIqOAYSgQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "^3.973.1",
- "@smithy/config-resolver": "^4.4.6",
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/config-resolver": "^4.4.7",
+ "@smithy/node-config-provider": "^4.3.9",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -588,17 +539,17 @@
}
},
"node_modules/@aws-sdk/token-providers": {
- "version": "3.989.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.989.0.tgz",
- "integrity": "sha512-OdBByMv+OjOZoekrk4THPFpLuND5aIQbDHCGh3n2rvifAbm31+6e0OLhxSeCF1UMPm+nKq12bXYYEoCIx5SQBg==",
+ "version": "3.997.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.997.0.tgz",
+ "integrity": "sha512-UdG36F7lU9aTqGFRieEyuRUJlgEJBqKeKKekC0esH21DbUSKhPR1kZBah214kYasIaWe1hLJLaqUigoTa5hZAQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/core": "^3.973.9",
- "@aws-sdk/nested-clients": "3.989.0",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/shared-ini-file-loader": "^4.4.3",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/core": "^3.973.13",
+ "@aws-sdk/nested-clients": "^3.996.1",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/property-provider": "^4.2.9",
+ "@smithy/shared-ini-file-loader": "^4.4.4",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -606,12 +557,12 @@
}
},
"node_modules/@aws-sdk/types": {
- "version": "3.973.1",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz",
- "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==",
+ "version": "3.973.2",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.2.tgz",
+ "integrity": "sha512-maTZwGsALtnAw4TJr/S6yERAosTwPduu0XhUV+SdbvRZtCOgSgk1ttL2R0XYzvkYSpvbtJocn77tBXq2AKglBw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -619,15 +570,15 @@
}
},
"node_modules/@aws-sdk/util-endpoints": {
- "version": "3.989.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.989.0.tgz",
- "integrity": "sha512-eKmAOeQM4Qusq0jtcbZPiNWky8XaojByKC/n+THbJ8vJf7t4ys8LlcZ4PrBSHZISe9cC484mQsPVOQh6iySjqw==",
+ "version": "3.996.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.1.tgz",
+ "integrity": "sha512-7cJyd+M5i0IoqWkJa1KFx8KNCGIx+Ywu+lT53KpqX7ReVwz03DCKUqvZ/y65vdKwo9w9/HptSAeLDluO5MpGIg==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "^3.973.1",
- "@smithy/types": "^4.12.0",
- "@smithy/url-parser": "^4.2.8",
- "@smithy/util-endpoints": "^3.2.8",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/types": "^4.12.1",
+ "@smithy/url-parser": "^4.2.9",
+ "@smithy/util-endpoints": "^3.2.9",
"tslib": "^2.6.2"
},
"engines": {
@@ -647,27 +598,27 @@
}
},
"node_modules/@aws-sdk/util-user-agent-browser": {
- "version": "3.972.3",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.3.tgz",
- "integrity": "sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==",
+ "version": "3.972.4",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.4.tgz",
+ "integrity": "sha512-GHb+8XHv6hfLWKQKAKaSOm+vRvogg07s+FWtbR3+eCXXPSFn9XVmiYF4oypAxH7dGIvoxkVG/buHEnzYukyJiA==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "^3.973.1",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/types": "^4.12.1",
"bowser": "^2.11.0",
"tslib": "^2.6.2"
}
},
"node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.972.7",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.7.tgz",
- "integrity": "sha512-oyhv+FjrgHjP+F16cmsrJzNP4qaRJzkV1n9Lvv4uyh3kLqo3rIe9NSBSBa35f2TedczfG2dD+kaQhHBB47D6Og==",
+ "version": "3.972.12",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.12.tgz",
+ "integrity": "sha512-c1n3wBK6te+Vd9qU86nF8AsYuiBsxLn0AADGWyFX7vEADr3btaAg5iPQT6GYj6rvzSOEVVisvaAatOWInlJUbQ==",
"license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/middleware-user-agent": "^3.972.9",
- "@aws-sdk/types": "^3.973.1",
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/types": "^4.12.0",
+ "@aws-sdk/middleware-user-agent": "^3.972.13",
+ "@aws-sdk/types": "^3.973.2",
+ "@smithy/node-config-provider": "^4.3.9",
+ "@smithy/types": "^4.12.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -683,13 +634,13 @@
}
},
"node_modules/@aws-sdk/xml-builder": {
- "version": "3.972.4",
- "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz",
- "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==",
+ "version": "3.972.6",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.6.tgz",
+ "integrity": "sha512-YrXu+UnfC8IdARa4ZkrpcyuRmA/TVgYW6Lcdtvi34NQgRjM1hTirNirN+rGb+s/kNomby8oJiIAu0KNbiZC7PA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
- "fast-xml-parser": "5.3.4",
+ "@smithy/types": "^4.12.1",
+ "fast-xml-parser": "5.3.6",
"tslib": "^2.6.2"
},
"engines": {
@@ -3196,12 +3147,12 @@
"dev": true
},
"node_modules/@smithy/abort-controller": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz",
- "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.10.tgz",
+ "integrity": "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3209,16 +3160,16 @@
}
},
"node_modules/@smithy/config-resolver": {
- "version": "4.4.6",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz",
- "integrity": "sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==",
+ "version": "4.4.9",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.9.tgz",
+ "integrity": "sha512-ejQvXqlcU30h7liR9fXtj7PIAau1t/sFbJpgWPfiYDs7zd16jpH0IsSXKcba2jF6ChTXvIjACs27kNMc5xxE2Q==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/types": "^4.12.0",
- "@smithy/util-config-provider": "^4.2.0",
- "@smithy/util-endpoints": "^3.2.8",
- "@smithy/util-middleware": "^4.2.8",
+ "@smithy/node-config-provider": "^4.3.10",
+ "@smithy/types": "^4.13.0",
+ "@smithy/util-config-provider": "^4.2.1",
+ "@smithy/util-endpoints": "^3.3.1",
+ "@smithy/util-middleware": "^4.2.10",
"tslib": "^2.6.2"
},
"engines": {
@@ -3226,20 +3177,20 @@
}
},
"node_modules/@smithy/core": {
- "version": "3.23.0",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.0.tgz",
- "integrity": "sha512-Yq4UPVoQICM9zHnByLmG8632t2M0+yap4T7ANVw482J0W7HW0pOuxwVmeOwzJqX2Q89fkXz0Vybz55Wj2Xzrsg==",
+ "version": "3.23.6",
+ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.6.tgz",
+ "integrity": "sha512-4xE+0L2NrsFKpEVFlFELkIHQddBvMbQ41LRIP74dGCXnY1zQ9DgksrBcRBDJT+iOzGy4VEJIeU3hkUK5mn06kg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/middleware-serde": "^4.2.9",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/types": "^4.12.0",
- "@smithy/util-base64": "^4.3.0",
- "@smithy/util-body-length-browser": "^4.2.0",
- "@smithy/util-middleware": "^4.2.8",
- "@smithy/util-stream": "^4.5.12",
- "@smithy/util-utf8": "^4.2.0",
- "@smithy/uuid": "^1.1.0",
+ "@smithy/middleware-serde": "^4.2.11",
+ "@smithy/protocol-http": "^5.3.10",
+ "@smithy/types": "^4.13.0",
+ "@smithy/util-base64": "^4.3.1",
+ "@smithy/util-body-length-browser": "^4.2.1",
+ "@smithy/util-middleware": "^4.2.10",
+ "@smithy/util-stream": "^4.5.15",
+ "@smithy/util-utf8": "^4.2.1",
+ "@smithy/uuid": "^1.1.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3247,15 +3198,15 @@
}
},
"node_modules/@smithy/credential-provider-imds": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz",
- "integrity": "sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.10.tgz",
+ "integrity": "sha512-3bsMLJJLTZGZqVGGeBVFfLzuRulVsGTj12BzRKODTHqUABpIr0jMN1vN3+u6r2OfyhAQ2pXaMZWX/swBK5I6PQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/types": "^4.12.0",
- "@smithy/url-parser": "^4.2.8",
+ "@smithy/node-config-provider": "^4.3.10",
+ "@smithy/property-provider": "^4.2.10",
+ "@smithy/types": "^4.13.0",
+ "@smithy/url-parser": "^4.2.10",
"tslib": "^2.6.2"
},
"engines": {
@@ -3263,15 +3214,15 @@
}
},
"node_modules/@smithy/fetch-http-handler": {
- "version": "5.3.9",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz",
- "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==",
+ "version": "5.3.11",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.11.tgz",
+ "integrity": "sha512-wbTRjOxdFuyEg0CpumjZO0hkUl+fetJFqxNROepuLIoijQh51aMBmzFLfoQdwRjxsuuS2jizzIUTjPWgd8pd7g==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/querystring-builder": "^4.2.8",
- "@smithy/types": "^4.12.0",
- "@smithy/util-base64": "^4.3.0",
+ "@smithy/protocol-http": "^5.3.10",
+ "@smithy/querystring-builder": "^4.2.10",
+ "@smithy/types": "^4.13.0",
+ "@smithy/util-base64": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3279,14 +3230,14 @@
}
},
"node_modules/@smithy/hash-node": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.8.tgz",
- "integrity": "sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.10.tgz",
+ "integrity": "sha512-1VzIOI5CcsvMDvP3iv1vG/RfLJVVVc67dCRyLSB2Hn9SWCZrDO3zvcIzj3BfEtqRW5kcMg5KAeVf1K3dR6nD3w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
- "@smithy/util-buffer-from": "^4.2.0",
- "@smithy/util-utf8": "^4.2.0",
+ "@smithy/types": "^4.13.0",
+ "@smithy/util-buffer-from": "^4.2.1",
+ "@smithy/util-utf8": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3294,12 +3245,12 @@
}
},
"node_modules/@smithy/invalid-dependency": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz",
- "integrity": "sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.10.tgz",
+ "integrity": "sha512-vy9KPNSFUU0ajFYk0sDZIYiUlAWGEAhRfehIr5ZkdFrRFTAuXEPUd41USuqHU6vvLX4r6Q9X7MKBco5+Il0Org==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3307,9 +3258,9 @@
}
},
"node_modules/@smithy/is-array-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz",
- "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.1.tgz",
+ "integrity": "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -3319,13 +3270,13 @@
}
},
"node_modules/@smithy/middleware-content-length": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz",
- "integrity": "sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.10.tgz",
+ "integrity": "sha512-TQZ9kX5c6XbjhaEBpvhSvMEZ0klBs1CFtOdPFwATZSbC9UeQfKHPLPN9Y+I6wZGMOavlYTOlHEPDrt42PMSH9w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/types": "^4.12.0",
+ "@smithy/protocol-http": "^5.3.10",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3333,18 +3284,18 @@
}
},
"node_modules/@smithy/middleware-endpoint": {
- "version": "4.4.14",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.14.tgz",
- "integrity": "sha512-FUFNE5KVeaY6U/GL0nzAAHkaCHzXLZcY1EhtQnsAqhD8Du13oPKtMB9/0WK4/LK6a/T5OZ24wPoSShff5iI6Ag==",
+ "version": "4.4.20",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.20.tgz",
+ "integrity": "sha512-9W6Np4ceBP3XCYAGLoMCmn8t2RRVzuD1ndWPLBbv7H9CrwM9Bprf6Up6BM9ZA/3alodg0b7Kf6ftBK9R1N04vw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^3.23.0",
- "@smithy/middleware-serde": "^4.2.9",
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/shared-ini-file-loader": "^4.4.3",
- "@smithy/types": "^4.12.0",
- "@smithy/url-parser": "^4.2.8",
- "@smithy/util-middleware": "^4.2.8",
+ "@smithy/core": "^3.23.6",
+ "@smithy/middleware-serde": "^4.2.11",
+ "@smithy/node-config-provider": "^4.3.10",
+ "@smithy/shared-ini-file-loader": "^4.4.5",
+ "@smithy/types": "^4.13.0",
+ "@smithy/url-parser": "^4.2.10",
+ "@smithy/util-middleware": "^4.2.10",
"tslib": "^2.6.2"
},
"engines": {
@@ -3352,19 +3303,19 @@
}
},
"node_modules/@smithy/middleware-retry": {
- "version": "4.4.31",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.31.tgz",
- "integrity": "sha512-RXBzLpMkIrxBPe4C8OmEOHvS8aH9RUuCOH++Acb5jZDEblxDjyg6un72X9IcbrGTJoiUwmI7hLypNfuDACypbg==",
+ "version": "4.4.37",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.37.tgz",
+ "integrity": "sha512-/1psZZllBBSQ7+qo5+hhLz7AEPGLx3Z0+e3ramMBEuPK2PfvLK4SrncDB9VegX5mBn+oP/UTDrM6IHrFjvX1ZA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/service-error-classification": "^4.2.8",
- "@smithy/smithy-client": "^4.11.3",
- "@smithy/types": "^4.12.0",
- "@smithy/util-middleware": "^4.2.8",
- "@smithy/util-retry": "^4.2.8",
- "@smithy/uuid": "^1.1.0",
+ "@smithy/node-config-provider": "^4.3.10",
+ "@smithy/protocol-http": "^5.3.10",
+ "@smithy/service-error-classification": "^4.2.10",
+ "@smithy/smithy-client": "^4.12.0",
+ "@smithy/types": "^4.13.0",
+ "@smithy/util-middleware": "^4.2.10",
+ "@smithy/util-retry": "^4.2.10",
+ "@smithy/uuid": "^1.1.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3372,13 +3323,13 @@
}
},
"node_modules/@smithy/middleware-serde": {
- "version": "4.2.9",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz",
- "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==",
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.11.tgz",
+ "integrity": "sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/types": "^4.12.0",
+ "@smithy/protocol-http": "^5.3.10",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3386,12 +3337,12 @@
}
},
"node_modules/@smithy/middleware-stack": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz",
- "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.10.tgz",
+ "integrity": "sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3399,14 +3350,14 @@
}
},
"node_modules/@smithy/node-config-provider": {
- "version": "4.3.8",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz",
- "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==",
+ "version": "4.3.10",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.10.tgz",
+ "integrity": "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/property-provider": "^4.2.8",
- "@smithy/shared-ini-file-loader": "^4.4.3",
- "@smithy/types": "^4.12.0",
+ "@smithy/property-provider": "^4.2.10",
+ "@smithy/shared-ini-file-loader": "^4.4.5",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3414,15 +3365,15 @@
}
},
"node_modules/@smithy/node-http-handler": {
- "version": "4.4.10",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.10.tgz",
- "integrity": "sha512-u4YeUwOWRZaHbWaebvrs3UhwQwj+2VNmcVCwXcYTvPIuVyM7Ex1ftAj+fdbG/P4AkBwLq/+SKn+ydOI4ZJE9PA==",
+ "version": "4.4.12",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.12.tgz",
+ "integrity": "sha512-zo1+WKJkR9x7ZtMeMDAAsq2PufwiLDmkhcjpWPRRkmeIuOm6nq1qjFICSZbnjBvD09ei8KMo26BWxsu2BUU+5w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/abort-controller": "^4.2.8",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/querystring-builder": "^4.2.8",
- "@smithy/types": "^4.12.0",
+ "@smithy/abort-controller": "^4.2.10",
+ "@smithy/protocol-http": "^5.3.10",
+ "@smithy/querystring-builder": "^4.2.10",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3430,12 +3381,12 @@
}
},
"node_modules/@smithy/property-provider": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz",
- "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.10.tgz",
+ "integrity": "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3443,12 +3394,12 @@
}
},
"node_modules/@smithy/protocol-http": {
- "version": "5.3.8",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz",
- "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==",
+ "version": "5.3.10",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz",
+ "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3456,13 +3407,13 @@
}
},
"node_modules/@smithy/querystring-builder": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz",
- "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.10.tgz",
+ "integrity": "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
- "@smithy/util-uri-escape": "^4.2.0",
+ "@smithy/types": "^4.13.0",
+ "@smithy/util-uri-escape": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3470,12 +3421,12 @@
}
},
"node_modules/@smithy/querystring-parser": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz",
- "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.10.tgz",
+ "integrity": "sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3483,24 +3434,24 @@
}
},
"node_modules/@smithy/service-error-classification": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz",
- "integrity": "sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.10.tgz",
+ "integrity": "sha512-0R/+/Il5y8nB/By90o8hy/bWVYptbIfvoTYad0igYQO5RefhNCDmNzqxaMx7K1t/QWo0d6UynqpqN5cCQt1MCg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0"
+ "@smithy/types": "^4.13.0"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@smithy/shared-ini-file-loader": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz",
- "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==",
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.5.tgz",
+ "integrity": "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3508,18 +3459,18 @@
}
},
"node_modules/@smithy/signature-v4": {
- "version": "5.3.8",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.8.tgz",
- "integrity": "sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==",
+ "version": "5.3.10",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.10.tgz",
+ "integrity": "sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/is-array-buffer": "^4.2.0",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/types": "^4.12.0",
- "@smithy/util-hex-encoding": "^4.2.0",
- "@smithy/util-middleware": "^4.2.8",
- "@smithy/util-uri-escape": "^4.2.0",
- "@smithy/util-utf8": "^4.2.0",
+ "@smithy/is-array-buffer": "^4.2.1",
+ "@smithy/protocol-http": "^5.3.10",
+ "@smithy/types": "^4.13.0",
+ "@smithy/util-hex-encoding": "^4.2.1",
+ "@smithy/util-middleware": "^4.2.10",
+ "@smithy/util-uri-escape": "^4.2.1",
+ "@smithy/util-utf8": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3527,17 +3478,17 @@
}
},
"node_modules/@smithy/smithy-client": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.11.3.tgz",
- "integrity": "sha512-Q7kY5sDau8OoE6Y9zJoRGgje8P4/UY0WzH8R2ok0PDh+iJ+ZnEKowhjEqYafVcubkbYxQVaqwm3iufktzhprGg==",
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.0.tgz",
+ "integrity": "sha512-R8bQ9K3lCcXyZmBnQqUZJF4ChZmtWT5NLi6x5kgWx5D+/j0KorXcA0YcFg/X5TOgnTCy1tbKc6z2g2y4amFupQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^3.23.0",
- "@smithy/middleware-endpoint": "^4.4.14",
- "@smithy/middleware-stack": "^4.2.8",
- "@smithy/protocol-http": "^5.3.8",
- "@smithy/types": "^4.12.0",
- "@smithy/util-stream": "^4.5.12",
+ "@smithy/core": "^3.23.6",
+ "@smithy/middleware-endpoint": "^4.4.20",
+ "@smithy/middleware-stack": "^4.2.10",
+ "@smithy/protocol-http": "^5.3.10",
+ "@smithy/types": "^4.13.0",
+ "@smithy/util-stream": "^4.5.15",
"tslib": "^2.6.2"
},
"engines": {
@@ -3545,9 +3496,9 @@
}
},
"node_modules/@smithy/types": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz",
- "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==",
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz",
+ "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -3557,13 +3508,13 @@
}
},
"node_modules/@smithy/url-parser": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz",
- "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.10.tgz",
+ "integrity": "sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/querystring-parser": "^4.2.8",
- "@smithy/types": "^4.12.0",
+ "@smithy/querystring-parser": "^4.2.10",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3571,13 +3522,13 @@
}
},
"node_modules/@smithy/util-base64": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz",
- "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.1.tgz",
+ "integrity": "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/util-buffer-from": "^4.2.0",
- "@smithy/util-utf8": "^4.2.0",
+ "@smithy/util-buffer-from": "^4.2.1",
+ "@smithy/util-utf8": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3585,9 +3536,9 @@
}
},
"node_modules/@smithy/util-body-length-browser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz",
- "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.1.tgz",
+ "integrity": "sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -3597,9 +3548,9 @@
}
},
"node_modules/@smithy/util-body-length-node": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz",
- "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==",
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.2.tgz",
+ "integrity": "sha512-4rHqBvxtJEBvsZcFQSPQqXP2b/yy/YlB66KlcEgcH2WNoOKCKB03DSLzXmOsXjbl8dJ4OEYTn31knhdznwk7zw==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -3609,12 +3560,12 @@
}
},
"node_modules/@smithy/util-buffer-from": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz",
- "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.1.tgz",
+ "integrity": "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/is-array-buffer": "^4.2.0",
+ "@smithy/is-array-buffer": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3622,9 +3573,9 @@
}
},
"node_modules/@smithy/util-config-provider": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz",
- "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.1.tgz",
+ "integrity": "sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -3634,14 +3585,14 @@
}
},
"node_modules/@smithy/util-defaults-mode-browser": {
- "version": "4.3.30",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.30.tgz",
- "integrity": "sha512-cMni0uVU27zxOiU8TuC8pQLC1pYeZ/xEMxvchSK/ILwleRd1ugobOcIRr5vXtcRqKd4aBLWlpeBoDPJJ91LQng==",
+ "version": "4.3.36",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.36.tgz",
+ "integrity": "sha512-R0smq7EHQXRVMxkAxtH5akJ/FvgAmNF6bUy/GwY/N20T4GrwjT633NFm0VuRpC+8Bbv8R9A0DoJ9OiZL/M3xew==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/property-provider": "^4.2.8",
- "@smithy/smithy-client": "^4.11.3",
- "@smithy/types": "^4.12.0",
+ "@smithy/property-provider": "^4.2.10",
+ "@smithy/smithy-client": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3649,17 +3600,17 @@
}
},
"node_modules/@smithy/util-defaults-mode-node": {
- "version": "4.2.33",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.33.tgz",
- "integrity": "sha512-LEb2aq5F4oZUSzWBG7S53d4UytZSkOEJPXcBq/xbG2/TmK9EW5naUZ8lKu1BEyWMzdHIzEVN16M3k8oxDq+DJA==",
+ "version": "4.2.39",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.39.tgz",
+ "integrity": "sha512-otWuoDm35btJV1L8MyHrPl462B07QCdMTktKc7/yM+Psv6KbED/ziXiHnmr7yPHUjfIwE9S8Max0LO24Mo3ZVg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/config-resolver": "^4.4.6",
- "@smithy/credential-provider-imds": "^4.2.8",
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/property-provider": "^4.2.8",
- "@smithy/smithy-client": "^4.11.3",
- "@smithy/types": "^4.12.0",
+ "@smithy/config-resolver": "^4.4.9",
+ "@smithy/credential-provider-imds": "^4.2.10",
+ "@smithy/node-config-provider": "^4.3.10",
+ "@smithy/property-provider": "^4.2.10",
+ "@smithy/smithy-client": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3667,13 +3618,13 @@
}
},
"node_modules/@smithy/util-endpoints": {
- "version": "3.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz",
- "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.3.1.tgz",
+ "integrity": "sha512-xyctc4klmjmieQiF9I1wssBWleRV0RhJ2DpO8+8yzi2LO1Z+4IWOZNGZGNj4+hq9kdo+nyfrRLmQTzc16Op2Vg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.3.8",
- "@smithy/types": "^4.12.0",
+ "@smithy/node-config-provider": "^4.3.10",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3681,9 +3632,9 @@
}
},
"node_modules/@smithy/util-hex-encoding": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz",
- "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.1.tgz",
+ "integrity": "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -3693,12 +3644,12 @@
}
},
"node_modules/@smithy/util-middleware": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz",
- "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.10.tgz",
+ "integrity": "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.12.0",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3706,13 +3657,13 @@
}
},
"node_modules/@smithy/util-retry": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.8.tgz",
- "integrity": "sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.10.tgz",
+ "integrity": "sha512-HrBzistfpyE5uqTwiyLsFHscgnwB0kgv8vySp7q5kZ0Eltn/tjosaSGGDj/jJ9ys7pWzIP/icE2d+7vMKXLv7A==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/service-error-classification": "^4.2.8",
- "@smithy/types": "^4.12.0",
+ "@smithy/service-error-classification": "^4.2.10",
+ "@smithy/types": "^4.13.0",
"tslib": "^2.6.2"
},
"engines": {
@@ -3720,18 +3671,18 @@
}
},
"node_modules/@smithy/util-stream": {
- "version": "4.5.12",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.12.tgz",
- "integrity": "sha512-D8tgkrmhAX/UNeCZbqbEO3uqyghUnEmmoO9YEvRuwxjlkKKUE7FOgCJnqpTlQPe9MApdWPky58mNQQHbnCzoNg==",
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.15.tgz",
+ "integrity": "sha512-OlOKnaqnkU9X+6wEkd7mN+WB7orPbCVDauXOj22Q7VtiTkvy7ZdSsOg4QiNAZMgI4OkvNf+/VLUC3VXkxuWJZw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/fetch-http-handler": "^5.3.9",
- "@smithy/node-http-handler": "^4.4.10",
- "@smithy/types": "^4.12.0",
- "@smithy/util-base64": "^4.3.0",
- "@smithy/util-buffer-from": "^4.2.0",
- "@smithy/util-hex-encoding": "^4.2.0",
- "@smithy/util-utf8": "^4.2.0",
+ "@smithy/fetch-http-handler": "^5.3.11",
+ "@smithy/node-http-handler": "^4.4.12",
+ "@smithy/types": "^4.13.0",
+ "@smithy/util-base64": "^4.3.1",
+ "@smithy/util-buffer-from": "^4.2.1",
+ "@smithy/util-hex-encoding": "^4.2.1",
+ "@smithy/util-utf8": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3739,9 +3690,9 @@
}
},
"node_modules/@smithy/util-uri-escape": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz",
- "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.1.tgz",
+ "integrity": "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -3751,12 +3702,12 @@
}
},
"node_modules/@smithy/util-utf8": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz",
- "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.1.tgz",
+ "integrity": "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/util-buffer-from": "^4.2.0",
+ "@smithy/util-buffer-from": "^4.2.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -3764,9 +3715,9 @@
}
},
"node_modules/@smithy/uuid": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz",
- "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.1.tgz",
+ "integrity": "sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -4247,9 +4198,9 @@
"license": "Apache-2.0"
},
"node_modules/@trustvc/trustvc": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/@trustvc/trustvc/-/trustvc-2.8.0.tgz",
- "integrity": "sha512-9ALOVQkkNFc7Ngx/Lm/FMP6kqWpWI6wTSSNeDrb81vaRl51uQ8RcUW4ErFHNrfGJkiR0WrjxnGEHNRFSnWlYtw==",
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/@trustvc/trustvc/-/trustvc-2.9.1.tgz",
+ "integrity": "sha512-ehKfXbf5Mrsd8Zcdhl17pT74viC8TZpUtc9Y9Bgst9x6zEXyKfh+FShvlYSXvyqyL77YmXO88hhNsOVxY2m6Pg==",
"license": "Apache-2.0",
"dependencies": {
"@tradetrust-tt/dnsprove": "^2.18.0",
@@ -5109,9 +5060,9 @@
}
},
"node_modules/asn1.js/node_modules/bn.js": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
- "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
+ "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
"license": "MIT"
},
"node_modules/assert-plus": {
@@ -5266,9 +5217,9 @@
}
},
"node_modules/bn.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
- "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz",
+ "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==",
"license": "MIT"
},
"node_modules/bowser": {
@@ -6112,9 +6063,9 @@
}
},
"node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
- "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "version": "4.12.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
+ "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
"license": "MIT"
},
"node_modules/emoji-regex": {
@@ -6860,9 +6811,9 @@
]
},
"node_modules/fast-xml-parser": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.4.tgz",
- "integrity": "sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==",
+ "version": "5.3.6",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz",
+ "integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==",
"funding": [
{
"type": "github",
@@ -6871,7 +6822,7 @@
],
"license": "MIT",
"dependencies": {
- "strnum": "^2.1.0"
+ "strnum": "^2.1.2"
},
"bin": {
"fxparser": "src/cli/cli.js"
@@ -7523,9 +7474,9 @@
}
},
"node_modules/har-validator/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -10949,9 +10900,9 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.22",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
- "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==",
+ "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==",
"license": "CC0-1.0",
"optional": true
},
@@ -11651,9 +11602,9 @@
"peer": true
},
"node_modules/typechain/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz",
+ "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==",
"license": "ISC",
"peer": true,
"dependencies": {
diff --git a/package.json b/package.json
index 8637371..1df3acf 100644
--- a/package.json
+++ b/package.json
@@ -34,7 +34,7 @@
},
"dependencies": {
"@inquirer/prompts": "^5.3.8",
- "@trustvc/trustvc": "^2.8.0",
+ "@trustvc/trustvc": "^2.9.1",
"@types/yargs": "^17.0.32",
"chalk": "^4.1.2",
"ethers": "^6.15.0",
diff --git a/src/commands/helpers.ts b/src/commands/helpers.ts
index 3651da6..b11785e 100644
--- a/src/commands/helpers.ts
+++ b/src/commands/helpers.ts
@@ -1,5 +1,5 @@
// External dependencies
-import { BytesLike, Wallet, HDNodeWallet, ZeroAddress, Provider, Signer } from 'ethers';
+import { BytesLike, Wallet, HDNodeWallet, ZeroAddress, Provider, Signer, ethers } from 'ethers';
import signale from 'signale';
import {
v5Contracts,
@@ -14,7 +14,7 @@ import { encrypt } from '@trustvc/trustvc';
import { ConnectedSigner } from '../utils';
// Contract factories from TrustVC v5
-const { TitleEscrow__factory, TradeTrustToken__factory } = v5Contracts;
+const { TitleEscrow__factory, TradeTrustToken__factory, TDocDeployer__factory } = v5Contracts;
// Interface for connectToTokenRegistry function arguments
interface ConnectToTokenRegistryArgs {
@@ -22,6 +22,11 @@ interface ConnectToTokenRegistryArgs {
wallet: Wallet | HDNodeWallet | ConnectedSigner | Signer;
}
+interface ConnectToTDocDeployerContractArgs {
+ tDocDeployerContractAddress: string;
+ wallet: Wallet | HDNodeWallet | ConnectedSigner | Signer;
+}
+
/**
* Connects to a token registry contract instance.
*
@@ -37,7 +42,8 @@ export const connectToTokenRegistry = async ({
try {
// Connect to the token registry contract
signale.info(`Connecting to token registry at: ${address}`);
- const tokenRegistry = TradeTrustToken__factory.connect(address, wallet);
+ const tokenRegistry = new ethers.Contract(address, TradeTrustToken__factory.abi, wallet as any);
+ // TradeTrustToken__factory.connect(address, wallet);
// Validate the connection was successful
if (!tokenRegistry) {
@@ -55,6 +61,39 @@ export const connectToTokenRegistry = async ({
throw error;
}
};
+export const connectToTDocDeployerContract = async ({
+ tDocDeployerContractAddress,
+ wallet,
+}: ConnectToTDocDeployerContractArgs): Promise> => {
+ try {
+ // Connect to the deployer contract
+ signale.info(`Connecting to Deployer contract at: ${tDocDeployerContractAddress}`);
+
+ // Cast to any to handle ethers v5/v6 compatibility
+ // The CLI uses ethers v6 wallets but @trustvc/trustvc uses ethers v5 contract factories
+ const deployerContract = new ethers.Contract(
+ tDocDeployerContractAddress,
+ TDocDeployer__factory.abi,
+ wallet as any,
+ );
+ // TDocDeployer__factory.connect(address, wallet as any);
+
+ // Validate the connection was successful
+ if (!deployerContract) {
+ const error = `Failed to connect to Deployer contract at address: ${tDocDeployerContractAddress}`;
+ signale.error(error);
+ throw new Error(error);
+ }
+
+ signale.success(`Successfully connected to Deployer contract`);
+ return deployerContract;
+ } catch (error) {
+ signale.error(
+ `Error in connectToTDocDeployerContract: ${error instanceof Error ? error.message : String(error)}`,
+ );
+ throw error;
+ }
+};
// Interface for connectToTitleEscrow function arguments
interface ConnectToTitleEscrowArgs {
tokenId: string;
@@ -80,7 +119,8 @@ export const connectToTitleEscrow = async ({
try {
// Connect to the token registry contract
signale.info(`Connecting to token registry at: ${address}`);
- const tokenRegistry = TradeTrustToken__factory.connect(address, wallet);
+ const tokenRegistry = new ethers.Contract(address, TradeTrustToken__factory.abi, wallet as any);
+ // TradeTrustToken__factory.connect(address, wallet);
// Fetch the title escrow address by getting the owner of the token
signale.info(`Fetching title escrow address for tokenId: ${tokenId}`);
@@ -96,7 +136,12 @@ export const connectToTitleEscrow = async ({
// Connect to the title escrow contract
signale.info(`Connecting to title escrow at: ${titleEscrowAddress}`);
- const titleEscrow = TitleEscrow__factory.connect(titleEscrowAddress, wallet);
+ const titleEscrow = new ethers.Contract(
+ titleEscrowAddress,
+ TitleEscrow__factory.abi,
+ wallet as any,
+ );
+ // TitleEscrow__factory.connect(titleEscrowAddress, wallet);
// Validate the connection was successful
if (!titleEscrow) {
@@ -126,7 +171,7 @@ export const connectToDocumentStore = async ({
try {
// Connect to the document store contract
signale.info(`Connecting to document store at: ${address}`);
- const documentStore = DocumentStore__factory.connect(address, wallet);
+ const documentStore = DocumentStore__factory.connect(address, wallet as any);
// Validate the connection was successful
if (!documentStore) {
@@ -149,6 +194,10 @@ export const connectToDocumentStoreFactory = async () => {
return new DocumentStore__factory();
};
+export const connectToTradeTrustTokenFactory = async () => {
+ return new TradeTrustToken__factory();
+};
+
// Interface for validateEndorseChangeOwner function arguments
interface validateEndorseChangeOwnerArgs {
newHolder: string;
diff --git a/src/commands/title-escrow/accept-return-to-issuer.ts b/src/commands/title-escrow/accept-return-to-issuer.ts
index 49a06f7..8098f53 100644
--- a/src/commands/title-escrow/accept-return-to-issuer.ts
+++ b/src/commands/title-escrow/accept-return-to-issuer.ts
@@ -1,7 +1,7 @@
import { error, success, info } from 'signale';
import signale from 'signale';
import { TransactionReceipt } from 'ethers';
-import { v5Contracts, CHAIN_ID, acceptReturned as acceptReturnedImpl } from '@trustvc/trustvc';
+import { CHAIN_ID, acceptReturned as acceptReturnedImpl } from '@trustvc/trustvc';
import { BaseTitleEscrowCommand as TitleEscrowReturnDocumentCommand } from '../../types';
import {
displayTransactionPrice,
@@ -19,9 +19,7 @@ import {
promptRemark,
performDryRunWithConfirmation,
} from '../../utils';
-import { validateAndEncryptRemark } from '../helpers';
-
-const { TradeTrustToken__factory } = v5Contracts;
+import { connectToTokenRegistry, validateAndEncryptRemark } from '../helpers';
export const command = 'accept-return-to-issuer';
@@ -142,10 +140,10 @@ export const acceptReturned = async ({
network,
getTransactionCallback: async () => {
// Connect to the token registry contract instance
- const tokenRegistryInstance = await TradeTrustToken__factory.connect(
- tokenRegistryAddress,
+ const tokenRegistryInstance = await connectToTokenRegistry({
+ address: tokenRegistryAddress,
wallet,
- );
+ });
// Validate and encrypt the remark if encryption key is provided
const encryptedRemark = validateAndEncryptRemark(remark, encryptionKey);
diff --git a/src/commands/title-escrow/reject-return-to-issuer.ts b/src/commands/title-escrow/reject-return-to-issuer.ts
index b14b3bb..d75ddce 100644
--- a/src/commands/title-escrow/reject-return-to-issuer.ts
+++ b/src/commands/title-escrow/reject-return-to-issuer.ts
@@ -1,7 +1,7 @@
import { error, success, info } from 'signale';
import signale from 'signale';
import { TransactionReceipt } from 'ethers';
-import { v5Contracts, CHAIN_ID, rejectReturned as rejectReturnedImpl } from '@trustvc/trustvc';
+import { CHAIN_ID, rejectReturned as rejectReturnedImpl } from '@trustvc/trustvc';
import { BaseTitleEscrowCommand as TitleEscrowReturnDocumentCommand } from '../../types';
import {
displayTransactionPrice,
@@ -19,9 +19,7 @@ import {
promptRemark,
performDryRunWithConfirmation,
} from '../../utils';
-import { validateAndEncryptRemark } from '../helpers';
-
-const { TradeTrustToken__factory } = v5Contracts;
+import { connectToTokenRegistry, validateAndEncryptRemark } from '../helpers';
export const command = 'reject-return-to-issuer';
@@ -143,10 +141,10 @@ export const rejectReturned = async ({
network,
getTransactionCallback: async () => {
// Connect to the token registry contract instance
- const tokenRegistryInstance = await TradeTrustToken__factory.connect(
- tokenRegistryAddress,
+ const tokenRegistryInstance = await connectToTokenRegistry({
+ address: tokenRegistryAddress,
wallet,
- );
+ });
// Validate and encrypt the remark if encryption key is provided
const encryptedRemark = validateAndEncryptRemark(remark, encryptionKey);
diff --git a/src/commands/token-registry/deploy.ts b/src/commands/token-registry/deploy.ts
new file mode 100644
index 0000000..1cef3ff
--- /dev/null
+++ b/src/commands/token-registry/deploy.ts
@@ -0,0 +1,255 @@
+import { error, info, success } from 'signale';
+import { CHAIN_ID, deployTokenRegistry, v5Utils, v5ContractAddress } from '@trustvc/trustvc';
+import { input, confirm } from '@inquirer/prompts';
+import {
+ displayTransactionPrice,
+ getErrorMessage,
+ getEtherscanAddress,
+ NetworkCmdName,
+ promptWalletSelection,
+ promptNetworkSelection,
+ getWalletOrSigner,
+ getSupportedNetwork,
+ performDryRunWithConfirmation,
+ promptAddress,
+ supportedNetwork,
+} from '../../utils';
+import {
+ connectToTDocDeployerContract,
+ connectToTradeTrustTokenFactory,
+ waitForTransaction,
+} from '../helpers';
+import { TransactionReceipt, Provider } from 'ethers';
+
+export const command = 'deploy';
+
+export const describe = 'Deploys a document store contract on the blockchain';
+
+export const handler = async (): Promise => {
+ try {
+ const answers = await promptForInputs();
+ if (!answers) return;
+
+ await deployTokenRegistryContract(answers);
+ } catch (err: unknown) {
+ error(err instanceof Error ? err.message : String(err));
+ }
+};
+
+// Define the command type
+type DeployTokenRegistryCommand = {
+ registryName: string;
+ registrySymbol: string;
+ standalone: boolean;
+ factoryAddress?: string;
+ tokenRegistryImplAddress?: string;
+ deployerContractAddress?: string;
+ network: string;
+ owner: string;
+ encryptedWalletPath?: string;
+ key?: string;
+ keyFile?: string;
+ maxPriorityFeePerGasScale: number;
+};
+
+// Prompt user for all required inputs
+export const promptForInputs = async (): Promise => {
+ // Network selection
+ const network = await promptNetworkSelection();
+
+ // Registry name
+ const registryName = await input({
+ message: 'Enter the name of the token registry:',
+ required: true,
+ validate: (value: string) => {
+ if (!value || value.trim() === '') {
+ return 'Registry name is required';
+ }
+ return true;
+ },
+ });
+
+ // Registry symbol
+ const registrySymbol = await input({
+ message: 'Enter the symbol of the token registry:',
+ required: true,
+ validate: (value: string) => {
+ if (!value || value.trim() === '') {
+ return 'Registry symbol is required';
+ }
+ return true;
+ },
+ });
+
+ // Ask if standalone or not (true = standalone, false = factory deployment)
+ const standalone = await confirm({
+ message: 'Is this a standalone deployment?',
+ default: true,
+ });
+
+ // Conditionally prompt for addresses based on deployment type
+ let factoryAddress: string | undefined;
+ let tokenRegistryImplAddress: string | undefined;
+ let deployerContractAddress: string | undefined;
+
+ if (standalone) {
+ // Standalone deployment: only ask for factory address
+ factoryAddress = await promptAddress('factory', 'optional', true);
+ } else {
+ // Factory deployment: ask for implementation and deployer contract addresses
+ tokenRegistryImplAddress = await promptAddress(
+ 'token registry implementation',
+ 'optional',
+ true,
+ );
+ deployerContractAddress = await promptAddress('deployer contract', 'optional', true);
+ }
+
+ // Wallet selection
+ const { encryptedWalletPath, key, keyFile } = await promptWalletSelection();
+
+ // Build the result object with proper typing
+ const baseResult = {
+ network,
+ registryName,
+ registrySymbol,
+ factoryAddress,
+ tokenRegistryImplAddress,
+ deployerContractAddress,
+ standalone,
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ // Add wallet-specific properties based on selected wallet type
+ if (encryptedWalletPath) {
+ return {
+ ...baseResult,
+ encryptedWalletPath,
+ } as DeployTokenRegistryCommand;
+ } else if (keyFile) {
+ return {
+ ...baseResult,
+ keyFile,
+ } as DeployTokenRegistryCommand;
+ } else if (key) {
+ return {
+ ...baseResult,
+ key,
+ } as DeployTokenRegistryCommand;
+ }
+
+ // For environment variable case (when all wallet options are undefined)
+ return baseResult as DeployTokenRegistryCommand;
+};
+
+// Deploy the document store with the provided inputs
+export const deployTokenRegistryContract = async ({
+ network,
+ registryName,
+ registrySymbol,
+ standalone,
+ factoryAddress,
+ tokenRegistryImplAddress,
+ deployerContractAddress,
+ ...rest
+}: DeployTokenRegistryCommand) => {
+ try {
+ const wallet = await getWalletOrSigner({ network, ...rest });
+ const chainId = supportedNetwork[network as NetworkCmdName].networkId;
+
+ const { TitleEscrowFactory, TokenImplementation, Deployer } = v5ContractAddress;
+ const defaultTitleEscrowFactoryAddress = TitleEscrowFactory[chainId];
+ const defaultTokenImplementationContractAddress = TokenImplementation[chainId];
+ const defaultDeployerContractAddress = Deployer[chainId];
+
+ // Use new variables to avoid reassigning destructured parameters
+ const finalDeployerContractAddress = deployerContractAddress ?? defaultDeployerContractAddress;
+ const finalFactoryAddress = factoryAddress ?? defaultTitleEscrowFactoryAddress;
+ const finalTokenRegistryImplAddress =
+ tokenRegistryImplAddress ?? defaultTokenImplementationContractAddress;
+
+ // Automatic dry run for Ethereum and Polygon networks
+ const shouldProceed = await performDryRunWithConfirmation({
+ network,
+ getTransactionCallback: async () => {
+ let tx;
+
+ if (!standalone) {
+ const tDocDeployer = await connectToTDocDeployerContract({
+ tDocDeployerContractAddress: finalDeployerContractAddress,
+ wallet: wallet,
+ });
+ const initParam = v5Utils.encodeInitParams({
+ name: registryName,
+ symbol: registrySymbol,
+ deployer: await wallet.getAddress(),
+ });
+ // Populate the transaction for gas estimation
+ tx = await tDocDeployer.deploy.populateTransaction(
+ finalTokenRegistryImplAddress,
+ initParam,
+ );
+ } else {
+ const tradeTrustTokenFactory = await connectToTradeTrustTokenFactory();
+ // Populate the transaction for gas estimation
+ tx = await tradeTrustTokenFactory.getDeployTransaction(
+ registryName,
+ registrySymbol,
+ finalFactoryAddress,
+ );
+ }
+
+ // Ensure the transaction has a 'from' address for proper gas estimation
+ return {
+ ...tx,
+ from: await wallet.getAddress(),
+ };
+ },
+ });
+
+ if (!shouldProceed) {
+ process.exit(0);
+ }
+
+ info(`Deploying token registry ${registryName}`);
+
+ const transaction = await deployTokenRegistry(registryName, registrySymbol, wallet, {
+ chainId: getSupportedNetwork(network).networkId as unknown as CHAIN_ID,
+ standalone,
+ factoryAddress: finalFactoryAddress,
+ tokenRegistryImplAddress: finalTokenRegistryImplAddress,
+ deployerContractAddress: finalDeployerContractAddress,
+ });
+
+ const receipt = standalone
+ ? transaction
+ : await waitForTransaction(transaction, wallet.provider as Provider);
+
+ displayTransactionPrice(receipt, network as NetworkCmdName);
+
+ const { hash } = receipt as unknown as TransactionReceipt;
+ let contractAddress = receipt.contractAddress;
+ // Extract the deployed token registry address from the logs
+ // When a contract is deployed via factory, the first logs are emitted by the newly deployed contract
+ // during its initialization. The first log's address is the deployed contract address.
+ if (!contractAddress) {
+ if (receipt.logs && receipt.logs.length > 0) {
+ // Get the address from the first log - this is the deployed contract
+ contractAddress = receipt.logs[0].address;
+ }
+ }
+
+ if (!contractAddress) {
+ error('Failed to extract deployed token registry address from transaction receipt');
+ return null;
+ }
+
+ success(`Token registry ${registryName} deployed at ${contractAddress}`);
+ info(`Find more details at ${getEtherscanAddress({ network: network })}/tx/${hash}`);
+
+ return contractAddress;
+ } catch (e) {
+ console.log(e);
+ error(getErrorMessage(e));
+ }
+};
diff --git a/src/utils/cli-options.ts b/src/utils/cli-options.ts
index cb75c78..2b68576 100644
--- a/src/utils/cli-options.ts
+++ b/src/utils/cli-options.ts
@@ -485,7 +485,11 @@ export const promptRemark = async (registryVersion: string): Promise => {
+export const promptAddress = async (
+ role: string,
+ description?: string,
+ optional?: boolean,
+): Promise => {
const roleCapitalized = role.charAt(0).toUpperCase() + role.slice(1);
const messageText = description
? `Enter the address of the ${role} (${description}):`
@@ -493,9 +497,11 @@ export const promptAddress = async (role: string, description?: string): Promise
const address = await input({
message: messageText,
- required: true,
+ required: optional ? false : true,
validate: (value: string) => {
- if (!value || value.trim() === '') {
+ if (optional && (!value || value.trim() === '')) {
+ return true;
+ } else if (!value || value.trim() === '') {
return `${roleCapitalized} address is required`;
}
if (!/^0x[a-fA-F0-9]{40}$/.test(value)) {
@@ -505,6 +511,11 @@ export const promptAddress = async (role: string, description?: string): Promise
},
});
+ // Return undefined for empty strings when optional
+ if (optional && (!address || address.trim() === '')) {
+ return undefined;
+ }
+
return address;
};
diff --git a/tests/commands/token-registry/deploy.test.ts b/tests/commands/token-registry/deploy.test.ts
new file mode 100644
index 0000000..b05a15d
--- /dev/null
+++ b/tests/commands/token-registry/deploy.test.ts
@@ -0,0 +1,690 @@
+import { beforeEach, describe, expect, it, MockedFunction, vi } from 'vitest';
+import {
+ handler,
+ deployTokenRegistryContract,
+ promptForInputs,
+} from '../../../src/commands/token-registry/deploy';
+import { NetworkCmdName } from '../../../src/utils';
+
+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();
+ constructor() {}
+ },
+ error: vi.fn(),
+ info: vi.fn(),
+ success: vi.fn(),
+ };
+});
+
+vi.mock('@inquirer/prompts', () => ({
+ select: vi.fn(),
+ input: vi.fn(),
+ confirm: vi.fn(),
+ password: vi.fn(),
+}));
+
+vi.mock('@trustvc/trustvc', () => ({
+ deployTokenRegistry: vi.fn(),
+ v5Contracts: {
+ TitleEscrow__factory: {},
+ TradeTrustToken__factory: {},
+ },
+ v5ContractAddress: {
+ TitleEscrowFactory: {
+ 1: '0xFactoryMainnet',
+ 11155111: '0xFactorySepolia',
+ 137: '0xFactoryMatic',
+ },
+ TokenImplementation: {
+ 1: '0xTokenImplMainnet',
+ 11155111: '0xTokenImplSepolia',
+ 137: '0xTokenImplMatic',
+ },
+ Deployer: {
+ 1: '0xDeployerMainnet',
+ 11155111: '0xDeployerSepolia',
+ 137: '0xDeployerMatic',
+ },
+ },
+ v5Utils: {
+ encodeInitParams: vi.fn(() => '0xencodedparams'),
+ },
+ checkSupportsInterface: vi.fn(),
+ v4SupportInterfaceIds: {},
+ v5SupportInterfaceIds: {},
+ encrypt: vi.fn(),
+ SUPPORTED_CHAINS: {
+ 1: {
+ name: 'mainnet',
+ explorerUrl: 'https://etherscan.io',
+ rpcUrl: 'https://mainnet.infura.io/v3/test',
+ nativeCurrency: { symbol: 'ETH', decimals: 18 },
+ },
+ 11155111: {
+ name: 'sepolia',
+ explorerUrl: 'https://sepolia.etherscan.io',
+ rpcUrl: 'https://sepolia.infura.io/v3/test',
+ nativeCurrency: { symbol: 'ETH', decimals: 18 },
+ },
+ 137: {
+ name: 'matic',
+ explorerUrl: 'https://polygonscan.com',
+ rpcUrl: 'https://polygon-mainnet.infura.io/v3/test',
+ nativeCurrency: { symbol: 'MATIC', decimals: 18 },
+ },
+ },
+ CHAIN_ID: {
+ mainnet: 1,
+ sepolia: 11155111,
+ matic: 137,
+ },
+}));
+
+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://etherscan.io'),
+ displayTransactionPrice: vi.fn(),
+ getSupportedNetwork: vi.fn((network: string) => ({
+ networkId: network === 'sepolia' ? 11155111 : network === 'matic' ? 137 : 1,
+ })),
+ supportedNetwork: {
+ mainnet: { networkId: 1 },
+ sepolia: { networkId: 11155111 },
+ matic: { networkId: 137 },
+ },
+ promptNetworkSelection: vi.fn(),
+ promptAddress: vi.fn(),
+ promptWalletSelection: vi.fn(),
+ performDryRunWithConfirmation: vi.fn(async () => true),
+ };
+});
+
+vi.mock('../../../src/commands/helpers', () => ({
+ connectToTDocDeployerContract: vi.fn(async () => ({
+ deploy: {
+ populateTransaction: vi.fn(),
+ },
+ })),
+ connectToTradeTrustTokenFactory: vi.fn(async () => ({
+ getDeployTransaction: vi.fn(),
+ })),
+ waitForTransaction: vi.fn(),
+}));
+
+describe('token-registry/deploy', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ vi.resetAllMocks();
+ });
+
+ describe('promptForInputs', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ vi.resetAllMocks();
+ });
+
+ it('should return correct answers for standalone deployment with encrypted wallet', async () => {
+ const mockInputs = {
+ registryName: 'Test Token Registry',
+ registrySymbol: 'TTR',
+ standalone: true,
+ factoryAddress: '0x1234567890123456789012345678901234567890',
+ network: NetworkCmdName.Sepolia,
+ };
+
+ const utils = await import('../../../src/utils');
+ (utils.promptNetworkSelection as any).mockResolvedValue(mockInputs.network);
+
+ const inquirer = await import('@inquirer/prompts');
+ (inquirer.input as any)
+ .mockResolvedValueOnce(mockInputs.registryName)
+ .mockResolvedValueOnce(mockInputs.registrySymbol);
+ (inquirer.confirm as any).mockResolvedValue(true);
+
+ (utils.promptAddress as any).mockResolvedValue(mockInputs.factoryAddress);
+ (utils.promptWalletSelection as any).mockResolvedValue({
+ encryptedWalletPath: './wallet.json',
+ });
+
+ const result = await promptForInputs();
+
+ expect(result.registryName).toBe(mockInputs.registryName);
+ expect(result.registrySymbol).toBe(mockInputs.registrySymbol);
+ expect(result.standalone).toBe(true);
+ expect(result.factoryAddress).toBe(mockInputs.factoryAddress);
+ expect(result.network).toBe(NetworkCmdName.Sepolia);
+ expect(result.maxPriorityFeePerGasScale).toBe(1);
+ expect((result as any).encryptedWalletPath).toBe('./wallet.json');
+ });
+
+ it('should return correct answers for factory deployment with implementation addresses', async () => {
+ const mockInputs = {
+ registryName: 'Factory Token Registry',
+ registrySymbol: 'FTR',
+ standalone: false,
+ tokenRegistryImplAddress: '0x1111111111111111111111111111111111111111',
+ deployerContractAddress: '0x2222222222222222222222222222222222222222',
+ network: NetworkCmdName.Mainnet,
+ };
+
+ const utils = await import('../../../src/utils');
+ (utils.promptNetworkSelection as any).mockResolvedValue(mockInputs.network);
+
+ const inquirer = await import('@inquirer/prompts');
+ (inquirer.input as any)
+ .mockResolvedValueOnce(mockInputs.registryName)
+ .mockResolvedValueOnce(mockInputs.registrySymbol);
+ (inquirer.confirm as any).mockResolvedValue(false);
+
+ (utils.promptAddress as any)
+ .mockResolvedValueOnce(mockInputs.tokenRegistryImplAddress)
+ .mockResolvedValueOnce(mockInputs.deployerContractAddress);
+ (utils.promptWalletSelection as any).mockResolvedValue({
+ keyFile: './private-key.txt',
+ });
+
+ const result = await promptForInputs();
+
+ expect(result.registryName).toBe(mockInputs.registryName);
+ expect(result.registrySymbol).toBe(mockInputs.registrySymbol);
+ expect(result.standalone).toBe(false);
+ expect(result.tokenRegistryImplAddress).toBe(mockInputs.tokenRegistryImplAddress);
+ expect(result.deployerContractAddress).toBe(mockInputs.deployerContractAddress);
+ expect((result as any).keyFile).toBe('./private-key.txt');
+ });
+
+ it('should return correct answers with direct private key', async () => {
+ const mockInputs = {
+ registryName: 'Key Token Registry',
+ registrySymbol: 'KTR',
+ standalone: true,
+ network: NetworkCmdName.Matic,
+ };
+
+ const utils = await import('../../../src/utils');
+ (utils.promptNetworkSelection as any).mockResolvedValue(mockInputs.network);
+
+ const inquirer = await import('@inquirer/prompts');
+ (inquirer.input as any)
+ .mockResolvedValueOnce(mockInputs.registryName)
+ .mockResolvedValueOnce(mockInputs.registrySymbol);
+ (inquirer.confirm as any).mockResolvedValue(true);
+
+ (utils.promptAddress as any).mockResolvedValue(undefined);
+ (utils.promptWalletSelection as any).mockResolvedValue({
+ key: '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
+ });
+
+ const result = await promptForInputs();
+
+ expect(result.registryName).toBe(mockInputs.registryName);
+ expect((result as any).key).toBe(
+ '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
+ );
+ });
+
+ it('should validate registry name is required', async () => {
+ const utils = await import('../../../src/utils');
+ (utils.promptNetworkSelection as any).mockResolvedValue(NetworkCmdName.Sepolia);
+
+ const inquirer = await import('@inquirer/prompts');
+ const inputMock = inquirer.input as any;
+
+ let callCount = 0;
+ // Test the validation function
+ inputMock.mockImplementation(async ({ validate }: any) => {
+ callCount++;
+ if (callCount === 1) {
+ const validationResult = validate('');
+ expect(validationResult).toBe('Registry name is required');
+ return 'Valid Name';
+ }
+ return 'SYMBOL';
+ });
+
+ (inquirer.confirm as any).mockResolvedValue(true);
+ (utils.promptAddress as any).mockResolvedValue(undefined);
+ (utils.promptWalletSelection as any).mockResolvedValue({ key: '0xkey' });
+
+ await promptForInputs();
+ });
+
+ it('should validate registry symbol is required', async () => {
+ const utils = await import('../../../src/utils');
+ (utils.promptNetworkSelection as any).mockResolvedValue(NetworkCmdName.Sepolia);
+
+ const inquirer = await import('@inquirer/prompts');
+ const inputMock = inquirer.input as any;
+
+ let callCount = 0;
+ inputMock.mockImplementation(async ({ validate }: any) => {
+ callCount++;
+ if (callCount === 1) {
+ return 'Registry Name';
+ }
+ // Second call is for symbol
+ const validationResult = validate(' ');
+ expect(validationResult).toBe('Registry symbol is required');
+ return 'SYMBOL';
+ });
+
+ (inquirer.confirm as any).mockResolvedValue(true);
+ (utils.promptAddress as any).mockResolvedValue(undefined);
+ (utils.promptWalletSelection as any).mockResolvedValue({ key: '0xkey' });
+
+ await promptForInputs();
+ });
+ });
+
+ describe('deployTokenRegistryContract', () => {
+ let deployTokenRegistryMock: MockedFunction;
+ let getWalletOrSignerMock: MockedFunction;
+ let waitForTransactionMock: MockedFunction;
+
+ beforeEach(async () => {
+ vi.clearAllMocks();
+
+ const trustvcModule = await import('@trustvc/trustvc');
+ deployTokenRegistryMock = trustvcModule.deployTokenRegistry as MockedFunction;
+
+ const walletModule = await import('../../../src/utils/wallet');
+ getWalletOrSignerMock = walletModule.getWalletOrSigner as MockedFunction;
+
+ const helpersModule = await import('../../../src/commands/helpers');
+ waitForTransactionMock = helpersModule.waitForTransaction as MockedFunction;
+
+ // Setup wallet mock
+ getWalletOrSignerMock.mockResolvedValue({
+ provider: {},
+ getAddress: vi.fn().mockResolvedValue('0xsigner'),
+ });
+
+ // Re-setup performDryRunWithConfirmation to always return true (proceed)
+ const utils = await import('../../../src/utils');
+ (utils.performDryRunWithConfirmation as any).mockResolvedValue(true);
+ (utils.getSupportedNetwork as any).mockImplementation((network: string) => ({
+ networkId: network === 'sepolia' ? 11155111 : network === 'matic' ? 137 : 1,
+ }));
+ });
+
+ it('should successfully deploy standalone token registry', async () => {
+ const mockArgs: any = {
+ registryName: 'Test Registry',
+ registrySymbol: 'TEST',
+ standalone: true,
+ factoryAddress: '0x1234567890123456789012345678901234567890',
+ network: NetworkCmdName.Sepolia,
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ const mockReceipt = {
+ hash: '0xtxhash123',
+ contractAddress: '0xdeployedcontract',
+ blockNumber: 12345,
+ gasUsed: BigInt(100000),
+ logs: [],
+ };
+
+ deployTokenRegistryMock.mockResolvedValue(mockReceipt);
+
+ const result = await deployTokenRegistryContract(mockArgs);
+
+ expect(deployTokenRegistryMock).toHaveBeenCalledWith(
+ mockArgs.registryName,
+ mockArgs.registrySymbol,
+ expect.anything(),
+ expect.objectContaining({
+ chainId: 11155111,
+ standalone: true,
+ factoryAddress: mockArgs.factoryAddress,
+ }),
+ );
+ expect(result).toBe(mockReceipt.contractAddress);
+ });
+
+ it('should successfully deploy factory-based token registry', async () => {
+ const mockArgs: any = {
+ registryName: 'Factory Registry',
+ registrySymbol: 'FACT',
+ standalone: false,
+ tokenRegistryImplAddress: '0x1111111111111111111111111111111111111111',
+ deployerContractAddress: '0x2222222222222222222222222222222222222222',
+ network: NetworkCmdName.Sepolia,
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ const mockTransaction = {
+ hash: '0xtxhash456',
+ wait: vi.fn().mockResolvedValue({
+ hash: '0xtxhash456',
+ blockNumber: 12346,
+ }),
+ };
+
+ const mockReceipt = {
+ hash: '0xtxhash456',
+ contractAddress: null,
+ blockNumber: 12346,
+ gasUsed: BigInt(200000),
+ logs: [
+ {
+ address: '0xdeployedviaFactory',
+ topics: [],
+ data: '0x',
+ },
+ ],
+ };
+
+ deployTokenRegistryMock.mockResolvedValue(mockTransaction);
+ waitForTransactionMock.mockResolvedValue(mockReceipt);
+
+ const result = await deployTokenRegistryContract(mockArgs);
+
+ expect(deployTokenRegistryMock).toHaveBeenCalledWith(
+ mockArgs.registryName,
+ mockArgs.registrySymbol,
+ expect.anything(),
+ expect.objectContaining({
+ chainId: 11155111,
+ standalone: false,
+ tokenRegistryImplAddress: mockArgs.tokenRegistryImplAddress,
+ deployerContractAddress: mockArgs.deployerContractAddress,
+ }),
+ );
+ expect(waitForTransactionMock).toHaveBeenCalled();
+ expect(result).toBe('0xdeployedviaFactory');
+ });
+
+ it('should use default addresses when not provided', async () => {
+ const mockArgs: any = {
+ registryName: 'Default Registry',
+ registrySymbol: 'DEF',
+ standalone: true,
+ network: NetworkCmdName.Sepolia,
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ const mockReceipt = {
+ hash: '0xtxhash789',
+ contractAddress: '0xdefaultdeployed',
+ blockNumber: 12347,
+ gasUsed: BigInt(150000),
+ logs: [],
+ };
+
+ deployTokenRegistryMock.mockResolvedValue(mockReceipt);
+
+ const result = await deployTokenRegistryContract(mockArgs);
+
+ expect(deployTokenRegistryMock).toHaveBeenCalledWith(
+ mockArgs.registryName,
+ mockArgs.registrySymbol,
+ expect.anything(),
+ expect.objectContaining({
+ factoryAddress: '0xFactorySepolia',
+ tokenRegistryImplAddress: '0xTokenImplSepolia',
+ deployerContractAddress: '0xDeployerSepolia',
+ }),
+ );
+ expect(result).toBe(mockReceipt.contractAddress);
+ });
+
+ it('should handle errors during deployment', async () => {
+ const mockArgs: any = {
+ registryName: 'Error Registry',
+ registrySymbol: 'ERR',
+ standalone: true,
+ network: NetworkCmdName.Sepolia,
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ const errorMessage = 'Deployment failed: insufficient funds';
+ deployTokenRegistryMock.mockRejectedValue(new Error(errorMessage));
+
+ const result = await deployTokenRegistryContract(mockArgs);
+
+ expect(result).toBeUndefined();
+ expect(deployTokenRegistryMock).toHaveBeenCalled();
+ });
+
+ it('should handle missing contract address in receipt', async () => {
+ const mockArgs: any = {
+ registryName: 'No Address Registry',
+ registrySymbol: 'NAR',
+ standalone: true,
+ network: NetworkCmdName.Sepolia,
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ const mockReceipt = {
+ hash: '0xtxhash999',
+ contractAddress: null,
+ blockNumber: 12348,
+ gasUsed: BigInt(100000),
+ logs: [],
+ };
+
+ deployTokenRegistryMock.mockResolvedValue(mockReceipt);
+
+ const result = await deployTokenRegistryContract(mockArgs);
+
+ expect(result).toBeNull();
+ });
+
+ it('should exit when dry run is not confirmed', async () => {
+ const mockArgs: any = {
+ registryName: 'Cancelled Registry',
+ registrySymbol: 'CAN',
+ standalone: true,
+ network: NetworkCmdName.Sepolia,
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ const utils = await import('../../../src/utils');
+ (utils.performDryRunWithConfirmation as any).mockResolvedValueOnce(false);
+
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {}) as any);
+
+ await deployTokenRegistryContract(mockArgs);
+
+ expect(exitSpy).toHaveBeenCalledWith(0);
+
+ exitSpy.mockRestore();
+
+ // Reset the mock back to true for other tests
+ (utils.performDryRunWithConfirmation as any).mockResolvedValue(true);
+ });
+
+ it('should handle dry run transaction population for standalone deployment', async () => {
+ const mockArgs: any = {
+ registryName: 'Dry Run Registry',
+ registrySymbol: 'DRY',
+ standalone: true,
+ network: NetworkCmdName.Sepolia,
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ const utils = await import('../../../src/utils');
+ let capturedCallback: any;
+ (utils.performDryRunWithConfirmation as any).mockImplementation(
+ async ({ getTransactionCallback }: any) => {
+ capturedCallback = getTransactionCallback;
+ return true;
+ },
+ );
+
+ const helpersModule = await import('../../../src/commands/helpers');
+ const mockFactory = {
+ getDeployTransaction: vi.fn().mockResolvedValue({
+ to: '0xfactory',
+ data: '0xdata',
+ }),
+ };
+ (helpersModule.connectToTradeTrustTokenFactory as any).mockResolvedValue(mockFactory);
+
+ const mockReceipt = {
+ hash: '0xtxhash',
+ contractAddress: '0xdeployed',
+ logs: [],
+ };
+ deployTokenRegistryMock.mockResolvedValue(mockReceipt);
+
+ await deployTokenRegistryContract(mockArgs);
+
+ expect(capturedCallback).toBeDefined();
+ if (capturedCallback) {
+ const tx = await capturedCallback();
+ expect(tx.from).toBe('0xsigner');
+ }
+ });
+
+ it('should handle dry run transaction population for factory deployment', async () => {
+ const mockArgs: any = {
+ registryName: 'Factory Dry Run',
+ registrySymbol: 'FDR',
+ standalone: false,
+ tokenRegistryImplAddress: '0x1111111111111111111111111111111111111111',
+ deployerContractAddress: '0x2222222222222222222222222222222222222222',
+ network: NetworkCmdName.Sepolia,
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ const utils = await import('../../../src/utils');
+ let capturedCallback: any;
+ (utils.performDryRunWithConfirmation as any).mockImplementation(
+ async ({ getTransactionCallback }: any) => {
+ capturedCallback = getTransactionCallback;
+ return true;
+ },
+ );
+
+ const helpersModule = await import('../../../src/commands/helpers');
+ const mockDeployer = {
+ deploy: {
+ populateTransaction: vi.fn().mockResolvedValue({
+ to: '0xdeployer',
+ data: '0xdata',
+ }),
+ },
+ };
+ (helpersModule.connectToTDocDeployerContract as any).mockResolvedValue(mockDeployer);
+
+ const mockTransaction = { hash: '0xtx' };
+ const mockReceipt = {
+ hash: '0xtx',
+ contractAddress: null,
+ logs: [{ address: '0xdeployed' }],
+ };
+ deployTokenRegistryMock.mockResolvedValue(mockTransaction);
+ waitForTransactionMock.mockResolvedValue(mockReceipt);
+
+ await deployTokenRegistryContract(mockArgs);
+
+ expect(capturedCallback).toBeDefined();
+ if (capturedCallback) {
+ const tx = await capturedCallback();
+ expect(tx.from).toBe('0xsigner');
+ }
+ });
+ });
+
+ describe('handler', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ vi.resetAllMocks();
+ });
+
+ it('should successfully execute the complete deployment flow', async () => {
+ const mockInputs: any = {
+ network: NetworkCmdName.Sepolia,
+ registryName: 'Handler Registry',
+ registrySymbol: 'HDL',
+ standalone: true,
+ factoryAddress: '0x1234567890123456789012345678901234567890',
+ encryptedWalletPath: './wallet.json',
+ maxPriorityFeePerGasScale: 1,
+ };
+
+ const utils = await import('../../../src/utils');
+ (utils.promptNetworkSelection as any).mockResolvedValue(mockInputs.network);
+
+ const inquirer = await import('@inquirer/prompts');
+ (inquirer.input as any)
+ .mockResolvedValueOnce(mockInputs.registryName)
+ .mockResolvedValueOnce(mockInputs.registrySymbol);
+ (inquirer.confirm as any).mockResolvedValue(true);
+
+ (utils.promptAddress as any).mockResolvedValue(mockInputs.factoryAddress);
+ (utils.promptWalletSelection as any).mockResolvedValue({
+ encryptedWalletPath: mockInputs.encryptedWalletPath,
+ });
+
+ const trustvcModule = await import('@trustvc/trustvc');
+ const deployMock = trustvcModule.deployTokenRegistry as MockedFunction;
+ deployMock.mockResolvedValue({
+ hash: '0xtxhash',
+ contractAddress: '0xdeployed',
+ logs: [],
+ });
+
+ const walletModule = await import('../../../src/utils/wallet');
+ const getWalletOrSignerMock = walletModule.getWalletOrSigner as MockedFunction;
+ getWalletOrSignerMock.mockResolvedValue({
+ provider: {},
+ getAddress: vi.fn().mockResolvedValue('0xsigner'),
+ });
+
+ const result = await handler();
+
+ expect(result).toBeUndefined();
+ });
+
+ it('should handle errors in handler', async () => {
+ const errorMessage = 'Network selection error';
+ const utils = await import('../../../src/utils');
+ (utils.promptNetworkSelection as any).mockRejectedValue(new Error(errorMessage));
+
+ await handler();
+
+ const signaleModule = await import('signale');
+ expect(signaleModule.error).toHaveBeenCalledWith(errorMessage);
+ });
+
+ it('should handle non-Error exceptions in handler', async () => {
+ const errorMessage = 'String error';
+ const utils = await import('../../../src/utils');
+ (utils.promptNetworkSelection as any).mockRejectedValue(errorMessage);
+
+ await handler();
+
+ const signaleModule = await import('signale');
+ expect(signaleModule.error).toHaveBeenCalledWith(errorMessage);
+ });
+
+ it('should return early if promptForInputs returns falsy value', async () => {
+ const utils = await import('../../../src/utils');
+ (utils.promptNetworkSelection as any).mockResolvedValue(null);
+
+ const trustvcModule = await import('@trustvc/trustvc');
+ const deployMock = trustvcModule.deployTokenRegistry as MockedFunction;
+
+ await handler();
+
+ expect(deployMock).not.toHaveBeenCalled();
+ });
+ });
+});