diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 82ce5e1..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,163 +0,0 @@ -### Changelog - -All notable changes to this project will be documented in this file. Dates are displayed in UTC. - -Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - -### [v9.0.0](https://github.com/fireblocks/fireblocks-cli/compare/v4.0.0...v9.0.0) - -> 1 September 2026 - -- Generated CLI #2809036717 [`#51`](https://github.com/fireblocks/fireblocks-cli/pull/51) - -### [v4.0.0](https://github.com/fireblocks/fireblocks-cli/compare/v3.0.0...v4.0.0) - -> 23 July 2026 - -- Generated CLI #7149 [`#40`](https://github.com/fireblocks/fireblocks-cli/pull/40) -- dump new version 4.0.0 [`1aa2ca3`](https://github.com/fireblocks/fireblocks-cli/commit/1aa2ca3a8d6ea307c855d63e9f33199326b0c60c) - -### [v3.0.0](https://github.com/fireblocks/fireblocks-cli/compare/v2.0.0...v3.0.0) - -> 1 July 2026 - -- Generated CLI #6819 [`#39`](https://github.com/fireblocks/fireblocks-cli/pull/39) -- dump new version 3.0.0 [`a556639`](https://github.com/fireblocks/fireblocks-cli/commit/a5566392ce612a4268ba8aed4322facba0a31e2a) - -### [v2.0.0](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.10...v2.0.0) - -> 28 June 2026 - -- Generated CLI #2689 [`#38`](https://github.com/fireblocks/fireblocks-cli/pull/38) -- dump new version 2.0.0 [`ecdb26e`](https://github.com/fireblocks/fireblocks-cli/commit/ecdb26e807b4f3b479654e2247592079374ea021) - -#### [v1.0.10](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.9...v1.0.10) - -> 11 June 2026 - -- Generated CLI #6460 [`#37`](https://github.com/fireblocks/fireblocks-cli/pull/37) -- dump new version 1.0.10 [`740a28d`](https://github.com/fireblocks/fireblocks-cli/commit/740a28da987ce3998ad606eda826abe80a53195f) - -#### [v1.0.9](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.8...v1.0.9) - -> 2 June 2026 - -- Generated CLI #3180 [`#36`](https://github.com/fireblocks/fireblocks-cli/pull/36) -- dump new version 1.0.9 [`aa7f393`](https://github.com/fireblocks/fireblocks-cli/commit/aa7f393c314ad9046f06751b3bebc40ff242773b) - -#### [v1.0.8](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.7...v1.0.8) - -> 7 May 2026 - -- Generated CLI #3457 [`#35`](https://github.com/fireblocks/fireblocks-cli/pull/35) -- Update README.md [`#34`](https://github.com/fireblocks/fireblocks-cli/pull/34) -- dump new version 1.0.8 [`e4c99fa`](https://github.com/fireblocks/fireblocks-cli/commit/e4c99fa60cc6e0b9777fd471f4af40dcc4b136bc) - -#### [v1.0.7](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.6...v1.0.7) - -> 28 April 2026 - -- Generated CLI #3601 [`#33`](https://github.com/fireblocks/fireblocks-cli/pull/33) -- dump new version 1.0.7 [`d306029`](https://github.com/fireblocks/fireblocks-cli/commit/d3060292702bc3605cb1243d1fcf7c821ec02fdf) - -#### [v1.0.6](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.5...v1.0.6) - -> 27 April 2026 - -- Generated CLI #628 [`#32`](https://github.com/fireblocks/fireblocks-cli/pull/32) -- dump new version 1.0.6 [`b5dab36`](https://github.com/fireblocks/fireblocks-cli/commit/b5dab369afd7a1b57ee5b411c3b5ee039bf212b7) - -#### [v1.0.5](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.4...v1.0.5) - -> 21 April 2026 - -- Generated CLI #4515 [`#29`](https://github.com/fireblocks/fireblocks-cli/pull/29) -- dump new version 1.0.5 [`f038846`](https://github.com/fireblocks/fireblocks-cli/commit/f0388467198de85fd07ee4af6643f13a4c700777) - -#### [v1.0.4](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.3...v1.0.4) - -> 21 April 2026 - -- Generated CLI #6469 [`#28`](https://github.com/fireblocks/fireblocks-cli/pull/28) -- dump new version 1.0.4 [`445f047`](https://github.com/fireblocks/fireblocks-cli/commit/445f047a26c2b1d62c5d084d9ab74c6dd70ff7a1) - -#### [v1.0.3](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.2...v1.0.3) - -> 21 April 2026 - -- Generated CLI #4147 [`#27`](https://github.com/fireblocks/fireblocks-cli/pull/27) -- Generated CLI #3663 [`#26`](https://github.com/fireblocks/fireblocks-cli/pull/26) -- dump new version 1.0.3 [`3d5771d`](https://github.com/fireblocks/fireblocks-cli/commit/3d5771dfc96d51f18bab1dea20f2f810e84cfc8b) -- dump new version 1.0.3 [`653c2b4`](https://github.com/fireblocks/fireblocks-cli/commit/653c2b47fbed3b3c6e0e3e264c3fd21db048702e) - -#### [v1.0.2](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.1...v1.0.2) - -> 20 April 2026 - -- Generated CLI #4144 [`#25`](https://github.com/fireblocks/fireblocks-cli/pull/25) -- release 1.0.2 [`9416c27`](https://github.com/fireblocks/fireblocks-cli/commit/9416c27d05c71a2894682e94f9b93b3e10a54c80) - -#### [v1.0.1](https://github.com/fireblocks/fireblocks-cli/compare/v1.0.0...v1.0.1) - -> 20 April 2026 - -- Generated CLI #2861 [`#24`](https://github.com/fireblocks/fireblocks-cli/pull/24) -- release 1.0.1 [`1c80a47`](https://github.com/fireblocks/fireblocks-cli/commit/1c80a47fae69a42537915f8db5a9a4e1e7c7883d) - -### [v1.0.0](https://github.com/fireblocks/fireblocks-cli/compare/v0.0.7...v1.0.0) - -> 20 April 2026 - -- Generated CLI #2861 [`#23`](https://github.com/fireblocks/fireblocks-cli/pull/23) -- Update README.md [`#22`](https://github.com/fireblocks/fireblocks-cli/pull/22) -- Generated CLI #6187 [`#21`](https://github.com/fireblocks/fireblocks-cli/pull/21) -- release 1.0.0 [`1ceadf9`](https://github.com/fireblocks/fireblocks-cli/commit/1ceadf9200db313a26d7ded2c2e883a7b5a54ca8) -- release 1.0.0 [`166b754`](https://github.com/fireblocks/fireblocks-cli/commit/166b7548fafd1c4dd1f87fcde2b3764df75c9fe3) - -#### [v0.0.7](https://github.com/fireblocks/fireblocks-cli/compare/v0.0.6...v0.0.7) - -> 20 April 2026 - -- Generated CLI #3643 [`#20`](https://github.com/fireblocks/fireblocks-cli/pull/20) -- release 0.0.7 [`3856d2b`](https://github.com/fireblocks/fireblocks-cli/commit/3856d2bb87dc9cf83c6e6a6bc5af20e000dd86e7) - -#### [v0.0.6](https://github.com/fireblocks/fireblocks-cli/compare/v0.0.5...v0.0.6) - -> 20 April 2026 - -- Generated CLI #2002 [`#18`](https://github.com/fireblocks/fireblocks-cli/pull/18) -- release 0.0.6 [`a9f3754`](https://github.com/fireblocks/fireblocks-cli/commit/a9f375413fdb4c3582cc1e098154fd72e6196b13) - -#### [v0.0.5](https://github.com/fireblocks/fireblocks-cli/compare/v0.0.4...v0.0.5) - -> 20 April 2026 - -- Generated CLI #5855 [`#17`](https://github.com/fireblocks/fireblocks-cli/pull/17) -- release 0.0.5 [`c1cbb86`](https://github.com/fireblocks/fireblocks-cli/commit/c1cbb869c72d5233fc103bdd6117031b215fc2dd) - -#### [v0.0.4](https://github.com/fireblocks/fireblocks-cli/compare/v0.0.3...v0.0.4) - -> 19 April 2026 - -- Generated CLI #9358 [`#15`](https://github.com/fireblocks/fireblocks-cli/pull/15) - -#### [v0.0.3](https://github.com/fireblocks/fireblocks-cli/compare/v0.0.2...v0.0.3) - -> 19 April 2026 - -- Generated CLI #3678 [`#13`](https://github.com/fireblocks/fireblocks-cli/pull/13) - -#### [v0.0.2](https://github.com/fireblocks/fireblocks-cli/compare/v0.0.1...v0.0.2) - -> 19 April 2026 - -- Generated CLI #6127 [`#12`](https://github.com/fireblocks/fireblocks-cli/pull/12) - -#### v0.0.1 - -> 19 April 2026 - -- Generated CLI #212 [`#10`](https://github.com/fireblocks/fireblocks-cli/pull/10) -- Generated CLI #6774 [`#8`](https://github.com/fireblocks/fireblocks-cli/pull/8) -- Generated CLI #5771 [`#7`](https://github.com/fireblocks/fireblocks-cli/pull/7) -- Empty commit [`01a4e60`](https://github.com/fireblocks/fireblocks-cli/commit/01a4e60b38b583644d86f6220bb1751ce3594bb0) diff --git a/package.json b/package.json index 8c8e4b7..7b37647 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@fireblocks/fireblocks-cli", "description": "Agent-first CLI for Fireblocks infrastructure. Execute any Fireblocks API operation from the command line.", - "version": "9.0.0", + "version": "0.1.0", "author": "Fireblocks", "repository": { "type": "git", @@ -40,11 +40,7 @@ "./dist", "./oclif.manifest.json" ], - "keywords": [ - "oclif", - "fireblocks", - "cli" - ], + "keywords": ["oclif", "fireblocks", "cli"], "license": "MIT", "main": "dist/index.js", "type": "module", @@ -58,171 +54,177 @@ "topicSeparator": " ", "topics": { "admin-quorum": { - "description": "Admin Quorum operations" + "description": "Admin Quorum operations" }, "api-user": { - "description": "Api User operations" + "description": "Api User operations" + }, + "approvals": { + "description": "Approvals operations (Beta)" }, "audit-logs": { - "description": "Audit Logs operations" + "description": "Audit Logs operations" }, "blockchain-link": { - "description": "Blockchain link operations (Beta)" + "description": "Blockchain link operations (Beta)" }, "blockchains-assets": { - "description": "Blockchains & assets operations" + "description": "Blockchains & assets operations" + }, + "canton": { + "description": "Canton operations (Beta)" }, "compliance": { - "description": "Compliance operations" + "description": "Compliance operations" }, "compliance-screening-configuration": { - "description": "Compliance Screening Configuration operations" + "description": "Compliance Screening Configuration operations" }, "connected-accounts": { - "description": "Connected Accounts operations (Beta)" + "description": "Connected Accounts operations (Beta)" }, "console-user": { - "description": "Console User operations" + "description": "Console User operations" }, "contacts": { - "description": "Contacts operations" + "description": "Contacts operations" }, "contract-interactions": { - "description": "Contract Interactions operations" + "description": "Contract Interactions operations" }, "contract-templates": { - "description": "Contract Templates operations" + "description": "Contract Templates operations" }, "contracts": { - "description": "Contracts operations" + "description": "Contracts operations" }, "cosigners": { - "description": "Cosigners operations (Beta)" + "description": "Cosigners operations (Beta)" }, "deployed-contracts": { - "description": "Deployed Contracts operations" + "description": "Deployed Contracts operations" }, "earn": { - "description": "Earn operations" + "description": "Earn operations" }, "embedded-wallets": { - "description": "Embedded Wallets operations" + "description": "Embedded Wallets operations" }, "exchange-accounts": { - "description": "Exchange accounts operations" + "description": "Exchange accounts operations" }, "external-wallets": { - "description": "External wallets operations" + "description": "External wallets operations" }, "fiat-accounts": { - "description": "Fiat accounts operations" + "description": "Fiat accounts operations" }, "gas-stations": { - "description": "Gas stations operations" + "description": "Gas stations operations" }, "genie": { - "description": "Genie operations (Beta)" + "description": "Genie operations (Beta)" }, "internal-wallets": { - "description": "Internal wallets operations" + "description": "Internal wallets operations" }, "key-link": { - "description": "Key Link operations (Beta)" + "description": "Key Link operations (Beta)" }, "keys": { - "description": "Keys operations (Beta)" + "description": "Keys operations (Beta)" }, "network-connections": { - "description": "Network connections operations" + "description": "Network connections operations" }, "nfts": { - "description": "NFTs operations" + "description": "NFTs operations" }, "off-exchanges": { - "description": "Off exchanges operations" + "description": "Off exchanges operations" }, "onchain-data": { - "description": "Onchain Data operations" + "description": "Onchain Data operations" }, "ota": { - "description": "OTA operations (Beta)" + "description": "OTA operations (Beta)" }, "payments-flows": { - "description": "Payments - Flows operations" + "description": "Payments - Flows operations" }, "payments-payout": { - "description": "Payments - Payout operations" + "description": "Payments - Payout operations" }, "policy-editor": { - "description": "Policy Editor operations (Beta)" + "description": "Policy Editor operations (Beta)" }, "policy-editor-v2": { - "description": "Policy Editor V2 operations" + "description": "Policy Editor V2 operations" }, "reports": { - "description": "Reports operations (Beta)" + "description": "Reports operations (Beta)" }, "reset-device": { - "description": "Reset device operations" + "description": "Reset device operations" }, "security-posture-management": { - "description": "Security Posture Management operations" + "description": "Security Posture Management operations" }, "smart-transfer": { - "description": "Smart Transfer operations" + "description": "Smart Transfer operations" }, "staking": { - "description": "Staking operations" + "description": "Staking operations" }, "tags": { - "description": "Tags operations" + "description": "Tags operations" }, "tokenization": { - "description": "Tokenization operations" + "description": "Tokenization operations" }, "trading": { - "description": "Trading operations (Beta)" + "description": "Trading operations (Beta)" }, "transactions": { - "description": "Transactions operations" + "description": "Transactions operations" }, "travel-rule": { - "description": "Travel Rule operations" + "description": "Travel Rule operations" }, "trlink": { - "description": "TRLink operations" + "description": "TRLink operations" }, "user-groups": { - "description": "User groups operations (Beta)" + "description": "User groups operations (Beta)" }, "users": { - "description": "Users operations" + "description": "Users operations" }, "utxo-management": { - "description": "UTXO Management operations (Beta)" + "description": "UTXO Management operations (Beta)" }, "vaults": { - "description": "Vaults operations" + "description": "Vaults operations" }, "web3-connections": { - "description": "Web3 connections operations" + "description": "Web3 connections operations" }, "webhooks": { - "description": "Webhooks operations" + "description": "Webhooks operations" }, "webhooks-v2": { - "description": "Webhooks V2 operations" + "description": "Webhooks V2 operations" }, "whitelist-ip-addresses": { - "description": "whitelist ip addresses operations" + "description": "whitelist ip addresses operations" }, "workspace": { - "description": "Workspace operations" + "description": "Workspace operations" }, "workspace-status": { - "description": "Workspace Status operations (Beta)" + "description": "Workspace Status operations (Beta)" } - }, +}, "plugins": [ "@oclif/plugin-help", "@oclif/plugin-autocomplete" @@ -240,17 +242,17 @@ "win32-x64" ], "macos": { - "identifier": "com.fireblocks.mycli" + "identifier": "com.fireblocks.mycli" } }, "scripts": { "build": "shx rm -rf dist && tsc -b", "postbuild": "oclif manifest", - "test": "jest", + "test": "node --experimental-vm-modules ./node_modules/jest/bin/jest.js", "pack": "oclif pack tarballs --targets darwin-x64,darwin-arm64,linux-x64,linux-arm64,win32-x64", "pack:mac": "oclif pack macos", "pack:win": "oclif pack win --targets win32-x64", "pack:deb": "oclif pack deb" - }, +}, "types": "dist/index.d.ts" } diff --git a/src/commands/approvals/get-approval-by-id.ts b/src/commands/approvals/get-approval-by-id.ts new file mode 100644 index 0000000..4067bd7 --- /dev/null +++ b/src/commands/approvals/get-approval-by-id.ts @@ -0,0 +1,66 @@ +import {Flags} from '@oclif/core' +import {FireblocksBaseCommand} from '../../lib/base-command.js' + +export default class GetApprovalById extends FireblocksBaseCommand { + static summary = 'Get a single approval request' + + static description = 'Retrieve full detail for a single approval request by ID, including the payload to sign and, when requested, the request\'s \`quorumStatus\`.\n\nBecause this endpoint addresses one request, it accepts \`quorumStatusMode=FULL\`, which adds the participating approvers and their individual approval state.\n\n\`userStatus\` reflects the authenticated user by default. Pass \`userId\` to report it for another user instead.\n\nEndpoint Permission: Owner, Admin, Non-Signing Admin, Approver, Signer, Security Admin, Security Auditor.\n\nOperation ID: getApprovalById\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Approvals/getApprovalById' + + static enableJsonFlag = false + + static flags = { + 'request-id': Flags.string({ + description: 'The approval request ID.', + required: true, + }), + 'user-id': Flags.string({ + description: 'Report \`userStatus\` for this user instead of the authenticated user. This selects whose approval state is returned; it does not change which requests can be fetched. Requires an Admin, Non-Signing Admin, Security Admin or Security Auditor role; other roles are rejected with 403.', + }), + 'quorum-status-mode': Flags.string({ + description: 'How much quorum detail to include in \`quorumStatus\`. \`NONE\` (the default) returns it as \`null\`. \`SUMMARY\` returns the approval thresholds, current counts and status. \`FULL\` adds \`users\` and the per-group \`members\` indexes identifying who may approve and who already has. Any other value is rejected with 400; the parameter is case-sensitive.', + default: 'NONE', + options: ['NONE', 'SUMMARY', 'FULL'], + }), + 'include-headers': Flags.boolean({ + description: 'Include spec-defined response headers in output', + default: false, + }), + } + + static method = 'GET' + static path = '/v1/approvals/{requestId}' + static isBeta = true + static responseHeaders: string[] = ["X-Request-ID"] + + async run(): Promise { + const {flags} = await this.parse(GetApprovalById) + + this.logToStderr('Warning: This command is in beta and may change in future releases.') + + + const headers: Record = {} + + const pathParams: Record = {} + pathParams['requestId'] = String(flags['request-id']) + + const queryParams: Record = {} + if (flags['user-id'] !== undefined && flags['user-id'] !== null) { + queryParams['userId'] = String(flags['user-id']) + } + if (flags['quorum-status-mode'] !== undefined && flags['quorum-status-mode'] !== null) { + queryParams['quorumStatusMode'] = String(flags['quorum-status-mode']) + } + + const result = await this.makeRequest( + 'GET', + '/v1/approvals/{requestId}', + { + headers, + pathParams, + queryParams, + }, + ) + + return result + } +} diff --git a/src/commands/approvals/get-approvals.ts b/src/commands/approvals/get-approvals.ts new file mode 100644 index 0000000..407402e --- /dev/null +++ b/src/commands/approvals/get-approvals.ts @@ -0,0 +1,85 @@ +import {Flags} from '@oclif/core' +import {FireblocksBaseCommand} from '../../lib/base-command.js' + +export default class GetApprovals extends FireblocksBaseCommand { + static summary = 'List approval requests' + + static description = 'Retrieve the pending approval requests the authenticated API user is eligible to act on, including requests the user has already approved that are still pending overall.\n\nThe response is scoped to the authenticated user by default. Pass \`userId\` to read another user\'s queue, or \`includeAllUsers=true\` to read every pending request in the workspace. Both require an Admin, Non-Signing Admin, Security Admin or Security Auditor role and are rejected with 403 otherwise.\n\nSet \`quorumStatusMode=SUMMARY\` to include each request\'s approval thresholds and counts. The per-approver breakdown is available only when fetching a single request — see \`GET /approvals/{requestId}\`.\n\nEndpoint Permission: Owner, Admin, Non-Signing Admin, Approver, Signer, Security Admin, Security Auditor.\n\nOperation ID: getApprovals\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Approvals/getApprovals' + + static enableJsonFlag = false + + static flags = { + 'include-user-approved': Flags.boolean({ + description: 'When true, also include requests the authenticated user has already approved that are still pending overall. Defaults to false (only requests the user has not yet acted on).', + }), + 'user-id': Flags.string({ + description: 'Return the pending requests for this user instead of the authenticated user. Requires an Admin, Non-Signing Admin, Security Admin or Security Auditor role; other roles are rejected with 403. Cannot be combined with \`includeAllUsers=true\` — sending both is rejected with 400.', + }), + 'include-all-users': Flags.boolean({ + description: 'When true, return every pending request in the workspace instead of a single user\'s queue. Defaults to false. Requires an Admin, Non-Signing Admin, Security Admin or Security Auditor role; other roles are rejected with 403. In this mode \`userStatus\` is always \`USER_STATUS_NOT_APPLICABLE\`, because the response is not scoped to one user, and \`includeUserApproved\` has no effect. Cannot be combined with \`userId\`.', + default: false, + }), + 'quorum-status-mode': Flags.string({ + description: 'How much quorum detail to include in each request\'s \`quorumStatus\`. \`NONE\` (the default) returns it as \`null\`. \`SUMMARY\` returns the approval thresholds, current counts and status. \`FULL\` is rejected with 400 on this endpoint because the per-approver breakdown requires a single request — use \`GET /approvals/{requestId}\` for it. Any other value is rejected with 400; the parameter is case-sensitive.', + default: 'NONE', + options: ['NONE', 'SUMMARY'], + }), + 'page-size': Flags.integer({ + description: 'Number of results per page. Maximum 30. Defaults to 20.', + default: 20, + }), + 'page-cursor': Flags.string({ + description: 'Cursor returned from the previous response (the \`next\` field) to fetch the next page.', + }), + 'include-headers': Flags.boolean({ + description: 'Include spec-defined response headers in output', + default: false, + }), + } + + static method = 'GET' + static path = '/v1/approvals' + static isBeta = true + static responseHeaders: string[] = ["X-Request-ID"] + + async run(): Promise { + const {flags} = await this.parse(GetApprovals) + + this.logToStderr('Warning: This command is in beta and may change in future releases.') + + + const headers: Record = {} + + + const queryParams: Record = {} + if (flags['include-user-approved'] !== undefined && flags['include-user-approved'] !== null) { + queryParams['includeUserApproved'] = String(flags['include-user-approved']) + } + if (flags['user-id'] !== undefined && flags['user-id'] !== null) { + queryParams['userId'] = String(flags['user-id']) + } + if (flags['include-all-users'] !== undefined && flags['include-all-users'] !== null) { + queryParams['includeAllUsers'] = String(flags['include-all-users']) + } + if (flags['quorum-status-mode'] !== undefined && flags['quorum-status-mode'] !== null) { + queryParams['quorumStatusMode'] = String(flags['quorum-status-mode']) + } + if (flags['page-size'] !== undefined && flags['page-size'] !== null) { + queryParams['pageSize'] = String(flags['page-size']) + } + if (flags['page-cursor'] !== undefined && flags['page-cursor'] !== null) { + queryParams['pageCursor'] = String(flags['page-cursor']) + } + + const result = await this.makeRequest( + 'GET', + '/v1/approvals', + { + headers, + queryParams, + }, + ) + + return result + } +} diff --git a/src/commands/canton/create-canton-call.ts b/src/commands/canton/create-canton-call.ts new file mode 100644 index 0000000..84930b5 --- /dev/null +++ b/src/commands/canton/create-canton-call.ts @@ -0,0 +1,65 @@ +import {Flags} from '@oclif/core' +import {FireblocksBaseCommand} from '../../lib/base-command.js' + +export default class CreateCantonCall extends FireblocksBaseCommand { + static summary = 'Make a Canton call' + + static description = 'Submits one Canton call. \`type\` names the call and selects the shape of \`payload\`.\nAn unknown or missing \`type\`, or a \`payload\` missing a required field, is a \`400\`. A field that does not belong to the selected \`type\` is ignored rather than rejected.\nFour types are specified but not available in v1 and return \`501\`: \`DTCC_END_INVESTOR_INVITE_CANCEL\`, \`DTCC_END_INVESTOR_OFFBOARD\`, \`DTCC_ALLOW_LIST_ADD\`, \`DTCC_ALLOW_LIST_REMOVE\`. \`TRANSFER_WITHDRAW\` has no owning service at all.\n\nOperation ID: createCantonCall\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Canton/createCantonCall' + + static enableJsonFlag = false + + static flags = { + data: Flags.string({ + description: 'JSON request body', + required: true, + }), + 'include-headers': Flags.boolean({ + description: 'Include spec-defined response headers in output', + default: false, + }), + } + + static method = 'POST' + static path = '/v1/operations/canton/calls' + static isBeta = true + static responseHeaders: string[] = ["X-Request-ID"] + + async run(): Promise { + const {flags} = await this.parse(CreateCantonCall) + + this.logToStderr('Warning: This command is in beta and may change in future releases.') + + let body: Record | undefined + if (flags.data) { + try { + const parsed = JSON.parse(flags.data) + if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) { + this.error('--data must be a JSON object (e.g., \'{"key": "value"}\')') + } + body = parsed as Record + } catch { + this.error('Invalid JSON in --data flag. Ensure the value is valid JSON.') + } + } + + const headers: Record = {} + if (flags['idempotency-key']) { + headers['Idempotency-Key'] = flags['idempotency-key'] + } + + + + await this.confirmOrAbort('POST', '/v1/operations/canton/calls') + + const result = await this.makeRequest( + 'POST', + '/v1/operations/canton/calls', + { + body, + headers, + }, + ) + + return result + } +} diff --git a/src/commands/canton/respond-to-canton-offer.ts b/src/commands/canton/respond-to-canton-offer.ts new file mode 100644 index 0000000..ed2261a --- /dev/null +++ b/src/commands/canton/respond-to-canton-offer.ts @@ -0,0 +1,72 @@ +import {Flags} from '@oclif/core' +import {FireblocksBaseCommand} from '../../lib/base-command.js' + +export default class RespondToCantonOffer extends FireblocksBaseCommand { + static summary = 'Answer an offer' + + static description = 'ONE endpoint for every offer domain. Two layers of discrimination, nested: \`domain\` selects \`response\`, and inside \`response\` the \`responseType\` selects the variant. Both layers are closed, so an onboarding response type sent under \`domain: ALLOCATIONS\` is a \`400\`.\n{"domain":"ONBOARDING","response":{"responseType":"DTCC_…_REJECT","reason":"KYC"}}\n\`domain: TRANSFERS\` is declared so the endpoint covers every offer domain. Transfer responses are not available yet — the domain is part of the contract, not of v1\'s behaviour.\n\nOperation ID: respondToCantonOffer\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Canton/respondToCantonOffer' + + static enableJsonFlag = false + + static flags = { + 'offer-id': Flags.string({ + description: 'The Fireblocks transaction id of the incoming offer being answered.', + required: true, + }), + data: Flags.string({ + description: 'JSON request body', + required: true, + }), + 'include-headers': Flags.boolean({ + description: 'Include spec-defined response headers in output', + default: false, + }), + } + + static method = 'POST' + static path = '/v1/operations/canton/offers/{offerId}/responses' + static isBeta = true + static responseHeaders: string[] = ["X-Request-ID"] + + async run(): Promise { + const {flags} = await this.parse(RespondToCantonOffer) + + this.logToStderr('Warning: This command is in beta and may change in future releases.') + + let body: Record | undefined + if (flags.data) { + try { + const parsed = JSON.parse(flags.data) + if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) { + this.error('--data must be a JSON object (e.g., \'{"key": "value"}\')') + } + body = parsed as Record + } catch { + this.error('Invalid JSON in --data flag. Ensure the value is valid JSON.') + } + } + + const headers: Record = {} + if (flags['idempotency-key']) { + headers['Idempotency-Key'] = flags['idempotency-key'] + } + + const pathParams: Record = {} + pathParams['offerId'] = String(flags['offer-id']) + + + await this.confirmOrAbort('POST', '/v1/operations/canton/offers/{offerId}/responses') + + const result = await this.makeRequest( + 'POST', + '/v1/operations/canton/offers/{offerId}/responses', + { + body, + headers, + pathParams, + }, + ) + + return result + } +} diff --git a/src/commands/security-posture-management/get-security-finding-by-id.ts b/src/commands/security-posture-management/get-security-finding-by-id.ts index a04622c..4cffd72 100644 --- a/src/commands/security-posture-management/get-security-finding-by-id.ts +++ b/src/commands/security-posture-management/get-security-finding-by-id.ts @@ -4,7 +4,7 @@ import {FireblocksBaseCommand} from '../../lib/base-command.js' export default class GetSecurityFindingById extends FireblocksBaseCommand { static summary = 'Get a FSPM security finding by ID' - static description = 'Returns a single FSPM security finding for the workspace, redacted to the public field set.\nEndpoint Roles: Security Admin, Security Auditor.\n\nOperation ID: getSecurityFindingById\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Security%20Posture%20Management/getSecurityFindingById' + static description = 'Returns a single FSPM security finding for the workspace, redacted to the public field set.\nEndpoint Roles: Security Admin, Security Auditor.\n\n**Note:** This endpoint is available only for the FSPM Pro package. It is not available for FSPM Basic.\n\nOperation ID: getSecurityFindingById\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Security%20Posture%20Management/getSecurityFindingById' static enableJsonFlag = false diff --git a/src/commands/security-posture-management/get-security-findings.ts b/src/commands/security-posture-management/get-security-findings.ts index 17b6595..b1b9b22 100644 --- a/src/commands/security-posture-management/get-security-findings.ts +++ b/src/commands/security-posture-management/get-security-findings.ts @@ -4,7 +4,7 @@ import {FireblocksBaseCommand} from '../../lib/base-command.js' export default class GetSecurityFindings extends FireblocksBaseCommand { static summary = 'Get FSPM security findings' - static description = 'Returns a paginated list of FSPM security findings for the workspace.\nEndpoint Roles: Security Admin, Security Auditor.\n\nOperation ID: getSecurityFindings\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Security%20Posture%20Management/getSecurityFindings' + static description = 'Returns a paginated list of FSPM security findings for the workspace.\nEndpoint Roles: Security Admin, Security Auditor.\n\n**Note:** This endpoint is available only for the FSPM Pro package. It is not available for FSPM Basic.\n\nOperation ID: getSecurityFindings\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Security%20Posture%20Management/getSecurityFindings' static enableJsonFlag = false diff --git a/src/commands/security-posture-management/update-security-finding-by-id.ts b/src/commands/security-posture-management/update-security-finding-by-id.ts index b726c88..d22b045 100644 --- a/src/commands/security-posture-management/update-security-finding-by-id.ts +++ b/src/commands/security-posture-management/update-security-finding-by-id.ts @@ -4,7 +4,7 @@ import {FireblocksBaseCommand} from '../../lib/base-command.js' export default class UpdateSecurityFindingById extends FireblocksBaseCommand { static summary = 'Update a FSPM security finding by ID' - static description = 'Accepts or reopens a finding for the workspace. When accepting a finding\n(\`status: "ACCEPTED"\`), \`statusUpdatedReason\` is required.\nEndpoint Roles: Security Admin.\n\nOperation ID: updateSecurityFindingById\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Security%20Posture%20Management/updateSecurityFindingById' + static description = 'Accepts or reopens a finding for the workspace. When accepting a finding\n(\`status: "ACCEPTED"\`), \`statusUpdatedReason\` is required.\nEndpoint Roles: Security Admin.\n\n**Note:** This endpoint is available only for the FSPM Pro package. It is not available for FSPM Basic.\n\nOperation ID: updateSecurityFindingById\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Security%20Posture%20Management/updateSecurityFindingById' static enableJsonFlag = false diff --git a/src/commands/vaults/activate-asset-for-vault-account.ts b/src/commands/vaults/activate-asset-for-vault-account.ts index 90b9dfc..50e89b7 100644 --- a/src/commands/vaults/activate-asset-for-vault-account.ts +++ b/src/commands/vaults/activate-asset-for-vault-account.ts @@ -4,7 +4,7 @@ import {FireblocksBaseCommand} from '../../lib/base-command.js' export default class ActivateAssetForVaultAccount extends FireblocksBaseCommand { static summary = 'Activate a wallet in a vault account' - static description = 'Initiates activation for a wallet in a vault account. \nActivation is required for tokens that need an on-chain transaction for creation (XLM tokens, SOL tokens etc).\nEndpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor.\n\nOperation ID: activateAssetForVaultAccount\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Vaults/activateAssetForVaultAccount' + static description = 'Initiates activation for a wallet in a vault account. \nActivation is required for tokens that need an on-chain transaction for creation.\nEndpoint Permission: Admin, Non-Signing Admin, Signer, Approver, Editor.\n\nOperation ID: activateAssetForVaultAccount\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Vaults/activateAssetForVaultAccount' static enableJsonFlag = false diff --git a/src/commands/webhooks-v2/create-webhook-o-auth.ts b/src/commands/webhooks-v2/create-webhook-o-auth.ts new file mode 100644 index 0000000..595be6f --- /dev/null +++ b/src/commands/webhooks-v2/create-webhook-o-auth.ts @@ -0,0 +1,63 @@ +import {Flags} from '@oclif/core' +import {FireblocksBaseCommand} from '../../lib/base-command.js' + +export default class CreateWebhookOAuth extends FireblocksBaseCommand { + static summary = 'Create OAuth credentials' + + static description = 'Creates a reusable OAuth client credential set. Attach it to a webhook by passing the returned id as that webhook\'s \`webhookOauthId\`. Several webhooks may share one credential set, so rotating its client secret covers all of them at once. The client secret is write-only and is never returned.\n\n**Endpoint Permissions:** Owner, Admin, Non-Signing Admin.\n\nOperation ID: createWebhookOAuth\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Webhooks%20V2/createWebhookOAuth' + + static enableJsonFlag = false + + static flags = { + data: Flags.string({ + description: 'JSON request body', + required: true, + }), + 'include-headers': Flags.boolean({ + description: 'Include spec-defined response headers in output', + default: false, + }), + } + + static method = 'POST' + static path = '/v1/webhooks_settings/oauth' + static isBeta = false + static responseHeaders: string[] = ["X-Request-ID"] + + async run(): Promise { + const {flags} = await this.parse(CreateWebhookOAuth) + + let body: Record | undefined + if (flags.data) { + try { + const parsed = JSON.parse(flags.data) + if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) { + this.error('--data must be a JSON object (e.g., \'{"key": "value"}\')') + } + body = parsed as Record + } catch { + this.error('Invalid JSON in --data flag. Ensure the value is valid JSON.') + } + } + + const headers: Record = {} + if (flags['idempotency-key']) { + headers['Idempotency-Key'] = flags['idempotency-key'] + } + + + + await this.confirmOrAbort('POST', '/v1/webhooks_settings/oauth') + + const result = await this.makeRequest( + 'POST', + '/v1/webhooks_settings/oauth', + { + body, + headers, + }, + ) + + return result + } +} diff --git a/src/commands/webhooks-v2/delete-webhook-o-auth.ts b/src/commands/webhooks-v2/delete-webhook-o-auth.ts new file mode 100644 index 0000000..02e2f1f --- /dev/null +++ b/src/commands/webhooks-v2/delete-webhook-o-auth.ts @@ -0,0 +1,59 @@ +import {Flags} from '@oclif/core' +import {FireblocksBaseCommand} from '../../lib/base-command.js' + +export default class DeleteWebhookOAuth extends FireblocksBaseCommand { + static summary = 'Delete OAuth credentials' + + static description = 'Deletes an OAuth credential set. By default the delete is refused while the credentials are still in use: if any webhook references them, nothing is deleted and the request fails with \`409 Conflict\`, naming the reason and listing the ids of the referencing webhooks. This protects a shared credential set from being removed out from under the webhooks that depend on it, since several webhooks may reference the same one.\n\nPass \`forceDelete=true\` to delete anyway. That detaches every referencing webhook — it clears each webhook\'s \`webhookOauthId\`, it does **not** delete the webhook — then deletes the credential set and returns the deleted resource together with \`detachedWebhookIds\`. The detached webhooks keep delivering notifications, but without an \`Authorization\` header, so their endpoints will see unauthenticated deliveries from that point on.\n\nWhen nothing references the credentials the delete succeeds either way, and \`detachedWebhookIds\` comes back empty.\n\n**Endpoint Permissions:** Owner, Admin, Non-Signing Admin.\n\nOperation ID: deleteWebhookOAuth\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Webhooks%20V2/deleteWebhookOAuth' + + static enableJsonFlag = false + + static flags = { + 'webhook-oauth-id': Flags.string({ + description: 'The unique identifier of the OAuth credentials', + required: true, + }), + 'force-delete': Flags.boolean({ + description: 'Delete the credentials even while webhooks still reference them, detaching those webhooks instead of refusing. Leave it unset, or \`false\`, to get a \`409 Conflict\` whenever anything still references the credentials.', + default: false, + }), + 'include-headers': Flags.boolean({ + description: 'Include spec-defined response headers in output', + default: false, + }), + } + + static method = 'DELETE' + static path = '/v1/webhooks_settings/oauth/{webhookOauthId}' + static isBeta = false + static responseHeaders: string[] = ["X-Request-ID"] + + async run(): Promise { + const {flags} = await this.parse(DeleteWebhookOAuth) + + + const headers: Record = {} + + const pathParams: Record = {} + pathParams['webhookOauthId'] = String(flags['webhook-oauth-id']) + + const queryParams: Record = {} + if (flags['force-delete'] !== undefined && flags['force-delete'] !== null) { + queryParams['forceDelete'] = String(flags['force-delete']) + } + + await this.confirmOrAbort('DELETE', '/v1/webhooks_settings/oauth/{webhookOauthId}') + + const result = await this.makeRequest( + 'DELETE', + '/v1/webhooks_settings/oauth/{webhookOauthId}', + { + headers, + pathParams, + queryParams, + }, + ) + + return result + } +} diff --git a/src/commands/webhooks-v2/get-webhook-o-auth.ts b/src/commands/webhooks-v2/get-webhook-o-auth.ts new file mode 100644 index 0000000..5e2f520 --- /dev/null +++ b/src/commands/webhooks-v2/get-webhook-o-auth.ts @@ -0,0 +1,48 @@ +import {Flags} from '@oclif/core' +import {FireblocksBaseCommand} from '../../lib/base-command.js' + +export default class GetWebhookOAuth extends FireblocksBaseCommand { + static summary = 'Get OAuth credentials by id' + + static description = 'Retrieve an OAuth credential set by its id. The client secret is never returned.\n\nOperation ID: getWebhookOAuth\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Webhooks%20V2/getWebhookOAuth' + + static enableJsonFlag = false + + static flags = { + 'webhook-oauth-id': Flags.string({ + description: 'The unique identifier of the OAuth credentials', + required: true, + }), + 'include-headers': Flags.boolean({ + description: 'Include spec-defined response headers in output', + default: false, + }), + } + + static method = 'GET' + static path = '/v1/webhooks_settings/oauth/{webhookOauthId}' + static isBeta = false + static responseHeaders: string[] = ["X-Request-ID"] + + async run(): Promise { + const {flags} = await this.parse(GetWebhookOAuth) + + + const headers: Record = {} + + const pathParams: Record = {} + pathParams['webhookOauthId'] = String(flags['webhook-oauth-id']) + + + const result = await this.makeRequest( + 'GET', + '/v1/webhooks_settings/oauth/{webhookOauthId}', + { + headers, + pathParams, + }, + ) + + return result + } +} diff --git a/src/commands/webhooks-v2/get-webhook-o-auths.ts b/src/commands/webhooks-v2/get-webhook-o-auths.ts new file mode 100644 index 0000000..48a936b --- /dev/null +++ b/src/commands/webhooks-v2/get-webhook-o-auths.ts @@ -0,0 +1,41 @@ +import {Flags} from '@oclif/core' +import {FireblocksBaseCommand} from '../../lib/base-command.js' + +export default class GetWebhookOAuths extends FireblocksBaseCommand { + static summary = 'Get all OAuth credentials' + + static description = 'Lists every OAuth credential set for the workspace. Client secrets are never returned.\n\nOperation ID: getWebhookOAuths\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Webhooks%20V2/getWebhookOAuths' + + static enableJsonFlag = false + + static flags = { + 'include-headers': Flags.boolean({ + description: 'Include spec-defined response headers in output', + default: false, + }), + } + + static method = 'GET' + static path = '/v1/webhooks_settings/oauth' + static isBeta = false + static responseHeaders: string[] = ["X-Request-ID"] + + async run(): Promise { + const {flags} = await this.parse(GetWebhookOAuths) + + + const headers: Record = {} + + + + const result = await this.makeRequest( + 'GET', + '/v1/webhooks_settings/oauth', + { + headers, + }, + ) + + return result + } +} diff --git a/src/commands/webhooks-v2/update-webhook-o-auth.ts b/src/commands/webhooks-v2/update-webhook-o-auth.ts new file mode 100644 index 0000000..550a9a2 --- /dev/null +++ b/src/commands/webhooks-v2/update-webhook-o-auth.ts @@ -0,0 +1,67 @@ +import {Flags} from '@oclif/core' +import {FireblocksBaseCommand} from '../../lib/base-command.js' + +export default class UpdateWebhookOAuth extends FireblocksBaseCommand { + static summary = 'Update OAuth credentials' + + static description = 'Updates only the fields present in the request; anything omitted is left as it is. Sending \`clientSecret\` on its own rotates the secret for every webhook using these credentials.\n\n\`customJwtClaims\`, \`customBodyParams\` and \`customHeaders\` are all merged key by key rather than replaced, the same way a webhook\'s own \`customHeaders\` behaves: a key sent with a value is added or overwritten, a key sent with a \`null\` value is deleted, and a key you omit is left alone. Since a \`null\` inside a map is the delete mechanism, none of the three accepts \`null\` for the whole field — \`customJwtClaims: null\`, \`customBodyParams: null\` or \`customHeaders: null\` is rejected with a \`400\` rather than ignored. Clear a map by listing each of its keys with a \`null\` value. Because \`null\` is spent on deletion, a claim cannot be set to JSON \`null\` either, on this endpoint or on create. \`mtlsClientSignedCert\` is a scalar rather than a map, so \`null\` there does remove it.\n\n**Endpoint Permissions:** Owner, Admin, Non-Signing Admin.\n\nOperation ID: updateWebhookOAuth\nDocs: https://docs.fireblocks.com/api/swagger-ui/#/Webhooks%20V2/updateWebhookOAuth' + + static enableJsonFlag = false + + static flags = { + 'webhook-oauth-id': Flags.string({ + description: 'The unique identifier of the OAuth credentials', + required: true, + }), + data: Flags.string({ + description: 'JSON request body', + required: true, + }), + 'include-headers': Flags.boolean({ + description: 'Include spec-defined response headers in output', + default: false, + }), + } + + static method = 'PATCH' + static path = '/v1/webhooks_settings/oauth/{webhookOauthId}' + static isBeta = false + static responseHeaders: string[] = ["X-Request-ID"] + + async run(): Promise { + const {flags} = await this.parse(UpdateWebhookOAuth) + + let body: Record | undefined + if (flags.data) { + try { + const parsed = JSON.parse(flags.data) + if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) { + this.error('--data must be a JSON object (e.g., \'{"key": "value"}\')') + } + body = parsed as Record + } catch { + this.error('Invalid JSON in --data flag. Ensure the value is valid JSON.') + } + } + + const headers: Record = {} + + const pathParams: Record = {} + pathParams['webhookOauthId'] = String(flags['webhook-oauth-id']) + + + await this.confirmOrAbort('PATCH', '/v1/webhooks_settings/oauth/{webhookOauthId}') + + const result = await this.makeRequest( + 'PATCH', + '/v1/webhooks_settings/oauth/{webhookOauthId}', + { + body, + headers, + pathParams, + }, + ) + + return result + } +} diff --git a/test/e2e.test.ts b/test/e2e.test.ts index d5fbb67..791c24b 100644 --- a/test/e2e.test.ts +++ b/test/e2e.test.ts @@ -92,8 +92,9 @@ describe('e2e: full command execution flow', () => { '--no-confirm', ]) } catch (error: any) { - // oclif wraps exits in errors; successful exits are expected - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) { + // oclif wraps a successful exit in an error with oclif.exit === 0. + // Anything else — a nonzero exit or a genuine crash — must surface. + if (error?.oclif?.exit !== 0) { throw error } } @@ -130,7 +131,7 @@ describe('e2e: full command execution flow', () => { '--no-confirm', ]) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) { + if (error?.oclif?.exit !== 0) { throw error } } @@ -159,7 +160,7 @@ describe('e2e: full command execution flow', () => { '--no-confirm', ]) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) { + if (error?.oclif?.exit !== 0) { throw error } } @@ -181,7 +182,7 @@ describe('e2e: full command execution flow', () => { try { await GetVaultAccount.run(['--vault-account-id', '123', '--no-confirm']) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) throw error + if (error?.oclif?.exit !== 0) throw error } const output = logSpy.mock.calls[0][0] as string @@ -201,7 +202,7 @@ describe('e2e: full command execution flow', () => { try { await GetVaultAccount.run(['--vault-account-id', '123', '--no-confirm', '--output', 'yaml']) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) throw error + if (error?.oclif?.exit !== 0) throw error } const output = logSpy.mock.calls[0][0] as string @@ -222,7 +223,7 @@ describe('e2e: full command execution flow', () => { try { await GetTransactions.run(['--no-confirm', '-o', 'yaml']) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) throw error + if (error?.oclif?.exit !== 0) throw error } const output = logSpy.mock.calls[0][0] as string @@ -239,7 +240,7 @@ describe('e2e: full command execution flow', () => { try { await GetVaultAccount.run(['--vault-account-id', '456', '--dry-run', '--no-confirm', '--output', 'yaml']) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) throw error + if (error?.oclif?.exit !== 0) throw error } expect(mockFireblocksFetch).not.toHaveBeenCalled() @@ -272,7 +273,7 @@ describe('e2e: full command execution flow', () => { try { await GetTransactions.run(['--include-headers', '--no-confirm']) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) { + if (error?.oclif?.exit !== 0) { throw error } } @@ -314,7 +315,7 @@ describe('e2e: full command execution flow', () => { try { await GetTransactions.run(['--no-confirm']) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) { + if (error?.oclif?.exit !== 0) { throw error } } @@ -349,7 +350,7 @@ describe('e2e: full command execution flow', () => { try { await GetTransactions.run(['--include-headers', '--no-confirm']) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) { + if (error?.oclif?.exit !== 0) { throw error } } @@ -411,7 +412,7 @@ describe('e2e: full command execution flow', () => { try { await GetTransactions.run(['--include-headers', '--no-confirm']) } catch (error: any) { - if (error?.oclif?.exit !== undefined && error.oclif.exit !== 0) { + if (error?.oclif?.exit !== 0) { throw error } } diff --git a/yarn.lock b/yarn.lock index 4244777..5c35c58 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,25 +2,25 @@ # yarn lockfile v1 -"@aws-sdk/checksums@^3.1000.26": - version "3.1000.26" - resolved "https://registry.npmjs.org/@aws-sdk/checksums/-/checksums-3.1000.26.tgz#f241b859f0b13ea725b5257003441bc9d02fcaa4" - integrity sha512-CGznePoL+1oWCSzqmkvlYMpWQEZohPR3LntjKXXfVH+oh6Kd8d+yHLkjpiAGwPIHAxFe4OAq3aKfRnv/wqWIyA== +"@aws-sdk/checksums@^3.1000.28": + version "3.1000.28" + resolved "https://registry.npmjs.org/@aws-sdk/checksums/-/checksums-3.1000.28.tgz#2a057727dc4b575dd84fe756d437caf4331bc974" + integrity sha512-VCpnmyHQ1IH49ni3LXnQj7DPr7rmcJmzYeiCkYdCcfgNtkvOj38cdcL9lapBWoItZWFACJPFJlymqC7/gem3Gw== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/types" "^4.16.1" tslib "^2.6.2" "@aws-sdk/client-cloudfront@^3.1079.0": - version "3.1107.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.1107.0.tgz#20ff8955c6c9765bf07996ac80e622a7a0099f9a" - integrity sha512-4S2xh0hQhQ9AqQg96o/zWmTrQ7qaqb1upjZTW+w1WSW7npy/V2I+usg7T6Xy/xL7+W05a3hqgebi6C+ceveGKQ== + version "3.1113.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.1113.0.tgz#f21fe28dc52c611995b5e62d45a783ee80f58438" + integrity sha512-0GwYxlXNpbyqC169Q4HADgddV5FR4dx7i9+ope902Qd0FP9m1q+PA/Z0obnOHYctwB98D7HsqmLgw21RERvBhw== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/credential-provider-node" "^3.972.78" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/credential-provider-node" "^3.972.80" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/fetch-http-handler" "^5.6.13" "@smithy/node-http-handler" "^4.9.13" @@ -28,29 +28,29 @@ tslib "^2.6.2" "@aws-sdk/client-s3@^3.1079.0": - version "3.1107.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1107.0.tgz#f1c85bbc749977ccab3be7b541a504a45d8e707d" - integrity sha512-95N3VATuqbyhEUO0YHQSsgKdkG872rZXm+O2ZkffsF8RJLRDQAsplVD8/OdWW3vX78vNDogK/zbfD1VG1OcSIA== - dependencies: - "@aws-sdk/checksums" "^3.1000.26" - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/credential-provider-node" "^3.972.78" - "@aws-sdk/middleware-sdk-s3" "^3.972.72" - "@aws-sdk/signature-v4-multi-region" "^3.996.43" - "@aws-sdk/types" "^3.974.2" + version "3.1113.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1113.0.tgz#25775622ba1615968d7dbf24d712d47bc9dda77d" + integrity sha512-NRqdtohoMRyWkEeeznfG1KPN08dclCbl+HFuLPB2v8qPcgoNmTFlLKl9ELiR6hsGXQ4Ur3qvRnoJVEk8ND74pg== + dependencies: + "@aws-sdk/checksums" "^3.1000.28" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/credential-provider-node" "^3.972.80" + "@aws-sdk/middleware-sdk-s3" "^3.972.74" + "@aws-sdk/signature-v4-multi-region" "^3.996.45" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/fetch-http-handler" "^5.6.13" "@smithy/node-http-handler" "^4.9.13" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/core@^3.977.6": - version "3.977.6" - resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.6.tgz#4cc709e9299cfbbd4e5dfb83d82e3e67fb9a569c" - integrity sha512-QiaJV4/zDrB4ZY2mfeSXSzSTc36W16sZXcGz+SPFk0CJ26gziO0cS+4LjJUMAbdeeBOvS0k0Aq1cZpfGdUXxSw== +"@aws-sdk/core@^3.977.8": + version "3.977.8" + resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.8.tgz#b2860d6d6bd4b147dbf906c5e3c8155337742657" + integrity sha512-7+Kcrkvrk9lM/m7jRhHpT4jCdvzGHsuaSRbF8TdzzkY1mRzp/Ogwf9c7H29k4gGhey0BBWhCWr16+t0J61gwmg== dependencies: - "@aws-sdk/types" "^3.974.2" - "@aws-sdk/xml-builder" "^3.972.37" + "@aws-sdk/types" "^3.974.4" + "@aws-sdk/xml-builder" "^3.972.39" "@aws/lambda-invoke-store" "^0.3.0" "@smithy/core" "^3.31.1" "@smithy/signature-v4" "^5.6.12" @@ -58,174 +58,174 @@ bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@^3.972.67": - version "3.972.67" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.67.tgz#7b369da235d280a3c7555eb67fdfc962fc6e6e90" - integrity sha512-rcIpk5kxUqDaaNa6Xk23pQ6ViY7jlqzmfFWCahQcBT97ddXaXYYwzCen9Tz1Jvo6aJft6wDl5bN44/Jw5B4oLA== +"@aws-sdk/credential-provider-env@^3.972.69": + version "3.972.69" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.69.tgz#9ef8e8e6abd048ae4c9bd8ea71fe8e79bcb48204" + integrity sha512-AreCFzcB4kH2HF9031Ot0jSJr3KXvRg6e8uDeub20JEVdZU3Bv0sTq1plc7VsT3KiqutlzH7l0j50UcCWHUioA== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@^3.972.69": - version "3.972.69" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.69.tgz#e6b73f06d8572215790a1facb171b67761bb3ba4" - integrity sha512-nggwJtZ4eeNsUw5IeWBMXsi1ryct5idi0K+/SCRF3kybLubOMaNTb3XCihXpWMiVpyzyPeIrl0zTkzhBH9porA== +"@aws-sdk/credential-provider-http@^3.972.71": + version "3.972.71" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.71.tgz#94f74f2e145df28b0b15849330b99f9c83c3f978" + integrity sha512-A8ObcqVmDMnk4F9NozZ7JwmUu9Q4xyBJkmyq1C5U+wNM9ht9J7+EuuyabsLWXZnOoTqFaJuYBYTKf5CTipkEjA== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/fetch-http-handler" "^5.6.13" "@smithy/node-http-handler" "^4.9.13" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@^3.973.12": - version "3.973.12" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.12.tgz#a3db28dd59fd948325ea4eb7f8efb9b499ed4a7e" - integrity sha512-pNEf/OeyN5X3VmLKlgSO6TqaWmW10CvI3TfwL1XhsuhYjSLT2VDaxFnCPHnOeQXSaFisMX4jNhpETriqN8DOmg== - dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/credential-provider-env" "^3.972.67" - "@aws-sdk/credential-provider-http" "^3.972.69" - "@aws-sdk/credential-provider-login" "^3.972.74" - "@aws-sdk/credential-provider-process" "^3.972.67" - "@aws-sdk/credential-provider-sso" "^3.973.11" - "@aws-sdk/credential-provider-web-identity" "^3.972.73" - "@aws-sdk/nested-clients" "^3.997.41" - "@aws-sdk/types" "^3.974.2" +"@aws-sdk/credential-provider-ini@^3.973.14": + version "3.973.14" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.14.tgz#650d856227a36fbfb954f8b93b89f747e8430dd4" + integrity sha512-7c+Wti2LsERNWMfm7ySz3/6RPopFW3Nmn7s63Xpcq6R/tRuY5hpvkHA2xVgi5ukJbvok9l0IDtVEvqTtg+X7dw== + dependencies: + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/credential-provider-env" "^3.972.69" + "@aws-sdk/credential-provider-http" "^3.972.71" + "@aws-sdk/credential-provider-login" "^3.972.76" + "@aws-sdk/credential-provider-process" "^3.972.69" + "@aws-sdk/credential-provider-sso" "^3.973.13" + "@aws-sdk/credential-provider-web-identity" "^3.972.75" + "@aws-sdk/nested-clients" "^3.997.43" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/credential-provider-imds" "^4.4.16" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-login@^3.972.74": - version "3.972.74" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.74.tgz#c942b01e5fe82d63fc149233d9ec1d7f4b527e15" - integrity sha512-0AQfDcf99TNmqVKv0owHrw/TQs6i4ZE5t9qmz6NvO53bE/sA/tpXhXL9AAcEP1qHc6Zzjd1UMb69+/9zdhvY3g== +"@aws-sdk/credential-provider-login@^3.972.76": + version "3.972.76" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.76.tgz#83dc4012f8d218c6867ecea389103c4ab78f4f7f" + integrity sha512-LVixwOnEJfrrfKHeZjBA8pIMTZjNDq8ak8VpcoWUuCJDrSnBNU8POJksULMgvN089P0MXtQYH2Zs627/MK1K0g== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/nested-clients" "^3.997.41" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/nested-clients" "^3.997.43" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@^3.972.78": - version "3.972.78" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.78.tgz#8e9de78b6bec734781d29fcb3bde57983bd6e869" - integrity sha512-OgPAnfvbGAMWac6yvxJ1ihslrvDpPVwR68D2csospdNCCyPvHk9JLzYKwz48SNiS1T2znDwHauywRKRFfpyYng== - dependencies: - "@aws-sdk/credential-provider-env" "^3.972.67" - "@aws-sdk/credential-provider-http" "^3.972.69" - "@aws-sdk/credential-provider-ini" "^3.973.12" - "@aws-sdk/credential-provider-process" "^3.972.67" - "@aws-sdk/credential-provider-sso" "^3.973.11" - "@aws-sdk/credential-provider-web-identity" "^3.972.73" - "@aws-sdk/types" "^3.974.2" +"@aws-sdk/credential-provider-node@^3.972.80": + version "3.972.80" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.80.tgz#1a3db0a35091468c5cd32d869f031fc6a2420d8e" + integrity sha512-bE2qh8ww4iClO1jHsBXdOE8FUgzDbdxbyorNjSCoPSkQd51k3jODItuPZfuwcLHZqDXsH+bI4AMHhqtuyR7mSg== + dependencies: + "@aws-sdk/credential-provider-env" "^3.972.69" + "@aws-sdk/credential-provider-http" "^3.972.71" + "@aws-sdk/credential-provider-ini" "^3.973.14" + "@aws-sdk/credential-provider-process" "^3.972.69" + "@aws-sdk/credential-provider-sso" "^3.973.13" + "@aws-sdk/credential-provider-web-identity" "^3.972.75" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/credential-provider-imds" "^4.4.16" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@^3.972.67": - version "3.972.67" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.67.tgz#818a86561e23cdc69449105ad2532b25fb6d3ba2" - integrity sha512-IlUEejorGTWKb4/Dm7K5Yw4QxUmXLThLhrvBmzVBqZFTbW72cv9LTcITmo1dsnYriALE4h68mOq4LB99x6sQ7Q== +"@aws-sdk/credential-provider-process@^3.972.69": + version "3.972.69" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.69.tgz#d97e64a37d25662913f6314562781a9c9e95516b" + integrity sha512-9kpTNdZTrcqXTfhxM7fgl9Z68ek3Fu5oe3Yf+A/pJGibEqpgZxz2tSY7SinmyCIU2PJ+ygY4FPoBBnLpocMtrQ== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@^3.973.11": - version "3.973.11" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.11.tgz#cae3068ae37db4f8429e9d67aa5b8d89d43d1ace" - integrity sha512-gAQBkBZxUB84d71+pPcI9L+jh2ujhuAVxc/4FgGiWFDjkPBlMKxzd5XDtkSXTFX8Ro7ansnT88+XadasxMeCRw== +"@aws-sdk/credential-provider-sso@^3.973.13": + version "3.973.13" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.13.tgz#005f76bf069e78089c79ec2c1b9d50a07eddabb3" + integrity sha512-Oc81qauMPzUoTnAS2YKpNwY6sY/LUyQTEeaf6yP197WMxkEBQfcKLR1MFpD7+pNTubXnfkH6gwpji+Gc7iyD2Q== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/nested-clients" "^3.997.41" - "@aws-sdk/token-providers" "3.1103.0" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/nested-clients" "^3.997.43" + "@aws-sdk/token-providers" "3.1111.0" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@^3.972.73": - version "3.972.73" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.73.tgz#f1a007c0ee81c366d6646067e589db3a947e7940" - integrity sha512-SnlEmQa6SjOgs6iOPLUQl1Eyq4AKiAdPQlkOhFhqNfDtDCwibMGvL6QlkSmf3o6vAUSImzdPCxowT5dfQUZP1A== +"@aws-sdk/credential-provider-web-identity@^3.972.75": + version "3.972.75" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.75.tgz#c0a5980c55301aabfbf5f9938f2ba78444ee026e" + integrity sha512-YPN6uoGDgjjjeVFZrcOeCJqmB6zpXoeeNgIjqe+DexJaWqdjVfCCe+VAZwli9Z2h8KhFW8oxkO39emQ1tyz/Mw== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/nested-clients" "^3.997.41" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/nested-clients" "^3.997.43" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@^3.972.72": - version "3.972.72" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.72.tgz#aaf43abc56be77f282510aaa98dd0fd55a4c461b" - integrity sha512-lSAoVPvQxX1d8TOM6waKDBQrvvZcm4w6pCldFAsRUffEaXq6lYY0pPyew3KlLu6Xqb74DXI42hGvSsbGBLljlw== +"@aws-sdk/middleware-sdk-s3@^3.972.74": + version "3.972.74" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.74.tgz#203bb14775dcdc8f2b0c4984125da09708d8496d" + integrity sha512-2lzoV2z2QO5KJZYGOCnIZ1WVQgzMECvwuzr1xb034a++8QW4U4eGrmC2u4yg1xvNv4TLL/Uv5DLyuAiw0b9z7Q== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/signature-v4-multi-region" "^3.996.43" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/signature-v4-multi-region" "^3.996.45" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/nested-clients@^3.997.41": - version "3.997.41" - resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.41.tgz#2a6de81c1405e0b1c2528db2cfebc0c4bae8e8d8" - integrity sha512-RDHqPGQWlF6tatA/Tp3rg6oIwtgN9IVderxE+9av2Y93Dfyu+mO1hZ5Bu2jpfZg2rwdNbsssnwM+sLafIczMlQ== +"@aws-sdk/nested-clients@^3.997.43": + version "3.997.43" + resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.43.tgz#6fa60e5fad1e97267b2773f0750d37511f9d698a" + integrity sha512-bit+VpqWNyi3wHxFoTsTliNXimCSL2r2OeDTm7ZrG+YsTZ2D7ofDJ6r/t9PVBn80i6/v0X2h9Tgw6QP2MAKfPw== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/signature-v4-multi-region" "^3.996.43" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/signature-v4-multi-region" "^3.996.45" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/fetch-http-handler" "^5.6.13" "@smithy/node-http-handler" "^4.9.13" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@^3.996.43": - version "3.996.43" - resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.43.tgz#f23113e6481741a110bb233a43d48aa40556d62b" - integrity sha512-lKekx8bLBXSv4O+cslk9Zfnw2XKSkWBs3uWL5QGhH2ZAQfNS7FE0vcSSN2vD/AhxX54ZTywWxR4STThoeOXlBA== +"@aws-sdk/signature-v4-multi-region@^3.996.45": + version "3.996.45" + resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.45.tgz#7d8d1d2c769327b9b5c624ee577ea1248826af7a" + integrity sha512-bBuyztukzXq6plzFGHAWiQt0QXo+HL8b8lX5cFTzkez/74PtS1c0qPFCIVuHkyoT+miH2qOjAcm1/yoro2ESPA== dependencies: - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/types" "^3.974.4" "@smithy/signature-v4" "^5.6.12" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/token-providers@3.1103.0": - version "3.1103.0" - resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1103.0.tgz#afd08f067303c6cf39d0b94c88405ca27c5f2002" - integrity sha512-N4wy26MNn31ItGVHYHPrEuCIFY4MBBjC+C5v1lJKqIUSA7OZBdhleCY53zCCrXn27hsk7YNOaTuhQu807S4AfQ== +"@aws-sdk/token-providers@3.1111.0": + version "3.1111.0" + resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1111.0.tgz#0a91fe03ab928b32032d0d30c8a191eccb91b3a5" + integrity sha512-JfljgoVtl+s3Qy21n9a7Z48uCQaOXcN74KJ3TEQfPoB293GrXFSt6HSQJF1sTZ8c/5QedEvd3NjJQMO4u9qa5A== dependencies: - "@aws-sdk/core" "^3.977.6" - "@aws-sdk/nested-clients" "^3.997.41" - "@aws-sdk/types" "^3.974.2" + "@aws-sdk/core" "^3.977.8" + "@aws-sdk/nested-clients" "^3.997.43" + "@aws-sdk/types" "^3.974.4" "@smithy/core" "^3.31.1" "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/types@^3.974.2": - version "3.974.2" - resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.2.tgz#05e7ccac417735e0786d430d2d5cc139047a08da" - integrity sha512-3W6IUtSxFbH6X7Wb7DzGCV5QiFQsd0g8bOfntpmDxQlzBoKWUMBu/JPQR0DwkE+Hpnxd6db1tXbOwdeHddG6cA== +"@aws-sdk/types@^3.974.4": + version "3.974.4" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.4.tgz#c68582caa8568de90d106e4717f1559164b6949a" + integrity sha512-dSFDNG00MEz0/xl5gxL62giLd1iYyJsTxZ1I1DOj6lC+bbgLB4TRsYClJg3b62dhXT1uATzsTNXPnC+33EJV3A== dependencies: "@smithy/types" "^4.16.1" tslib "^2.6.2" -"@aws-sdk/xml-builder@^3.972.37": - version "3.972.37" - resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.37.tgz#669363721702d46a500c6ea485a44591e511f280" - integrity sha512-zKq4HQum8JwDyEuyfuI4bbiAcU0KxP6qy+9PR/IsR92IyE/DaBAikzAS50tjxip4bqIIANpCcG+Yyj6CVhXupg== +"@aws-sdk/xml-builder@^3.972.39": + version "3.972.39" + resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.39.tgz#d55108a214b60f1bf88429dc952cb4e9ba9e0632" + integrity sha512-FTti8DS5MMWXNUWiRwXAJeYS+0GHHiMy0+7XOhcwk63ILHmfS2UFy2z/HNpZCSOJJ3P3dnWY6hfYNW3DF0nXUA== dependencies: "@smithy/types" "^4.16.1" tslib "^2.6.2" @@ -1107,19 +1107,18 @@ strict-event-emitter "^0.5.1" "@oclif/core@^4", "@oclif/core@^4.11.11", "@oclif/core@^4.13.3": - version "4.13.3" - resolved "https://registry.npmjs.org/@oclif/core/-/core-4.13.3.tgz#856aa8c48d65e711574dca2955eb0b29d86c1a74" - integrity sha512-wBp2igI2KVwq2ZmpnfmGtOROo7aXZIr3OEtAS16g1wHFBqyEuswL+9K50NJWJvlpAmxd+4dVj/ycawXESU3wQQ== + version "4.13.5" + resolved "https://registry.npmjs.org/@oclif/core/-/core-4.13.5.tgz#9b0d85d9f8680781f78eca515aaf22b1b88e1cc9" + integrity sha512-KcbWlSO+s0Yr9c5wHNC6Npqdh46iJ8t9wCWW19yipT0QmnfZjoTqqqJ1DoP6s3i5P1z5cG35AqS17KL3b20Klw== dependencies: ansi-escapes "^4.3.2" ansis "^3.17.0" clean-stack "^3.0.1" cli-spinners "^2.9.2" debug "^4.4.3" - ejs "^3.1.10" + ejs "^6" get-package-type "^0.1.0" indent-string "^4.0.0" - is-wsl "^2.2.0" lilconfig "^3.1.3" minimatch "^10.2.5" semver "^7.8.1" @@ -1129,6 +1128,7 @@ widest-line "^3.1.0" wordwrap "^1.0.0" wrap-ansi "^7.0.0" + wsl-utils "^0.4.0" "@oclif/plugin-autocomplete@^3.2.42": version "3.2.56" @@ -1240,54 +1240,54 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@smithy/core@^3.31.1": - version "3.31.1" - resolved "https://registry.npmjs.org/@smithy/core/-/core-3.31.1.tgz#a57090db8997917d2f99eeb39db50b6283e60d3c" - integrity sha512-CyogUINxvi7C7LDsh8Syo6hVJOT9ckz4rG8dRZfTJ8r91HkMY59PnNooaj7WcHyxEkxPfBAmbgztZU+xTo76lg== +"@smithy/core@^3.31.1", "@smithy/core@^3.33.2": + version "3.33.2" + resolved "https://registry.npmjs.org/@smithy/core/-/core-3.33.2.tgz#64cad79d96e293e1b2bddd8491d869afe5d94696" + integrity sha512-CUGXpnPkVdjUCbix+83sWLW9VFgQOm44MDOx/ihITJMAnOZKvL8YYIc7DR9pP/tZ8CIRvMiON/TucvygqbHO3w== dependencies: - "@smithy/types" "^4.16.1" + "@smithy/types" "^4.17.2" tslib "^2.6.2" "@smithy/credential-provider-imds@^4.4.16": - version "4.4.16" - resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.4.16.tgz#5197900c258a7c0b6fd2b9dbc11d5410f296d7c5" - integrity sha512-QfuLWAkLzptffFW980AFeHZFdqds2B64rpEd3uJ6lgs3xVn9QegGMUgUcj+4d7dRrAsya3r58ZKpku97WcFb4w== + version "4.5.2" + resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.2.tgz#da3ea9636b5566b36b0761382d841a6d8fdde14f" + integrity sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg== dependencies: - "@smithy/core" "^3.31.1" - "@smithy/types" "^4.16.1" + "@smithy/core" "^3.33.2" + "@smithy/types" "^4.17.2" tslib "^2.6.2" "@smithy/fetch-http-handler@^5.6.13": - version "5.6.13" - resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.6.13.tgz#688830a2d128aa95db5233d4ab827222a0bf4baa" - integrity sha512-4fW86pEUOMbrD5nkbyl/tTvPHHWJFbuB2odl6ps9lWfHoXf9HWh3Q/Smh59qH1g7+c/BSZghX6bbUk4gsiMs8A== + version "5.7.2" + resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.7.2.tgz#29e95cd74fe91495225e26a60569617fecae48cc" + integrity sha512-nZyWTmSpJEXl6VtWVMBJve/7x12DZu6sIX1z1a+ZMaHlQQRs9Zpu6NbTe/gmxYXVRpkjxyDYpZ5gx2IM6f/Wkw== dependencies: - "@smithy/core" "^3.31.1" - "@smithy/types" "^4.16.1" + "@smithy/core" "^3.33.2" + "@smithy/types" "^4.17.2" tslib "^2.6.2" "@smithy/node-http-handler@^4.9.13": - version "4.9.13" - resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.9.13.tgz#6c0811df72deb4890d07bf81a9a8bcdf782ba824" - integrity sha512-Nmd/Nl35zfYrd+a6OO2cDJb3GPh9bgTjIUhcM+JFfjpp8/osCgboDV5nCT1I01Pv6R13eSKDKLSoVa5ZB6Zsfw== + version "4.11.2" + resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.11.2.tgz#68088896f09db7c7cc91bda7bba80376190a11b0" + integrity sha512-avwAh9HM3h2lcfjvP3zYIZGf+XVgLQ91wOJ2qoFbNpW1UZeZb33aGlhTZvtkANHfcGhJroRY64525OjfgOg30g== dependencies: - "@smithy/core" "^3.31.1" - "@smithy/types" "^4.16.1" + "@smithy/core" "^3.33.2" + "@smithy/types" "^4.17.2" tslib "^2.6.2" "@smithy/signature-v4@^5.6.12": - version "5.6.12" - resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.6.12.tgz#ee7a37e299de30e4d5c299b25485141b5b5d31c9" - integrity sha512-I6KLtq3H0qqSuV9vLglfi8puHqzygzWHOnI4z/Rdoo+q50vvo18vBRdPAvvEtcaKROz7Zn6qnPa14kRfPH6PcQ== + version "5.7.2" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.7.2.tgz#26b0c17492d912ce352c3479d1153dd6fefa7f75" + integrity sha512-P7Ki6px6OOrxVtx8K7nLmyx4SlXUW/uTKDdMG44UHefmPGSRMBKe2v+TM59WdLcpUIrBrnuCsIqiM2MbsZjmhw== dependencies: - "@smithy/core" "^3.31.1" - "@smithy/types" "^4.16.1" + "@smithy/core" "^3.33.2" + "@smithy/types" "^4.17.2" tslib "^2.6.2" -"@smithy/types@^4.16.1": - version "4.16.1" - resolved "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz#19e199c234829a51c085caf63f0bb17bb80187e4" - integrity sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg== +"@smithy/types@^4.16.1", "@smithy/types@^4.17.2": + version "4.17.2" + resolved "https://registry.npmjs.org/@smithy/types/-/types-4.17.2.tgz#ad71f6f62460a6409f0e8efc173e2e0f883ea4e6" + integrity sha512-FOKpVZob9MPTn2znRzGrnsMHv7BOsKVw3XiP/cOyYLDVZ9qKp4nifIiSCuUU/fIj5Vu0UOAxCFr+qRAtG0NUkA== dependencies: tslib "^2.6.2" @@ -1299,9 +1299,9 @@ defer-to-connect "^2.0.1" "@tsconfig/node10@^1.0.7": - version "1.0.12" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz#be57ceac1e4692b41be9de6be8c32a106636dba4" - integrity sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ== + version "1.0.13" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.13.tgz#56105a9a8c786e8f15e35746879cf2d52275485b" + integrity sha512-gcLdvR9HO1ZJBypsOGqaP6TFEzb6vIta0KSTLt9NAQ6pXQO3cRgSVyCN6pzYqI9DlJgY71XKO0dpDhCf08b3pg== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -1590,9 +1590,9 @@ balanced-match@^4.0.2: integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== baseline-browser-mapping@^2.11.12: - version "2.11.13" - resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz#660073103c1bee93e54df55f117b7528adf6af19" - integrity sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ== + version "2.11.15" + resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.15.tgz#9c0cac93d7d304f3d61bb41088a102cd62e68676" + integrity sha512-FwMjJJ7HnyZpWe+oWxegG0fezZyBZUagI5LZEoO3GCbtbKNwRfMH9Ue5d5v01PNePBy1QSfPSDTTeVL0Hb9EzA== bowser@^2.11.0: version "2.14.1" @@ -1930,10 +1930,15 @@ ejs@^3.1.10: dependencies: jake "^10.8.5" +ejs@^6: + version "6.0.1" + resolved "https://registry.npmjs.org/ejs/-/ejs-6.0.1.tgz#88ea8ce00335c3575d7c3602dd76e84b0bd60f43" + integrity sha512-UaaM14yby8U3k02ihS1Bmj5Kz2d7CCQM1scxpgs4Mhkq8F1wR2gl3+Ts4h5Ne4Mnt7M9m4Dw7jsuMr3+xO4vZA== + electron-to-chromium@^1.5.402: - version "1.5.404" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.404.tgz#9f34e6d20ae29575fbae701680c2e9f292a92929" - integrity sha512-3WJtd7/lVq2Jnuz6wed1l9+1ZD2u2Tet1/1NBc4Iedkmgbu+I7YuAqdAQ8T+VZtnwysMsAf3IqSq9D1gyZjA2g== + version "1.5.409" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.409.tgz#3d514dd82b2d181d8ade96c53242f4b8c94ab4ed" + integrity sha512-ChI4N44d0B4A6C8prnNjMOaGgE59fUyEVYcRYm2XEXIjMbbvF5i9UL1cblDbpGqiU0uS8FE8UcKxqZqTXdmzbQ== emittery@^0.13.1: version "0.13.1" @@ -2325,10 +2330,10 @@ is-core-module@^2.16.1: dependencies: hasown "^2.0.3" -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -2340,6 +2345,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-node-process@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" @@ -2360,12 +2372,12 @@ is-stream@^2.0.0: resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== +is-wsl@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz#327897b26832a3eb117da6c27492d04ca132594f" + integrity sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw== dependencies: - is-docker "^2.0.0" + is-inside-container "^1.0.0" isexe@^2.0.0: version "2.0.0" @@ -2793,9 +2805,9 @@ jest@^29: jest-cli "^29.7.0" jose@^6.2.1: - version "6.2.8" - resolved "https://registry.npmjs.org/jose/-/jose-6.2.8.tgz#39c1459fe5eac84eb39b1623b8077dcf9ca6c506" - integrity sha512-Bsdjwm3Qsd/P0jR+BHDe3LytDfY7WBq2HmCCLIwuVRHMuEC9ae7/R474GIUdF1NgCyZjzVo/A9DOiOBtXq8ZoQ== + version "6.2.9" + resolved "https://registry.npmjs.org/jose/-/jose-6.2.9.tgz#344fa11af928f8000a4f81972c4d567d587170f0" + integrity sha512-XrchZOFZUl/T3vTwRe8XK+cJrGtMF4th1ARnDfwbBXFKThGhlsxEE4Zu03AD/bjJSt/9jT/mxrOCkJWOg77aPA== js-tokens@^4.0.0: version "4.0.0" @@ -3241,6 +3253,11 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +powershell-utils@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz#5a42c9a824fb4f2f251ccb41aaae73314f5d6ac2" + integrity sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A== + pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -3781,6 +3798,14 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" +wsl-utils@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.4.0.tgz#58334dda6892a81d7acc80417cd6f141a8074958" + integrity sha512-9YmF+2sFEd+T7TkwlmE337F0IVzfDvDknhtpBQxxXzEOfgPphGlFYpyx0cTuCIFj8/p+sqwBYAeGxOMNSzPPDA== + dependencies: + is-wsl "^3.1.0" + powershell-utils "^0.1.0" + y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"