diff --git a/.gitignore b/.gitignore index 31bcc6dcd..145c02626 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,14 @@ config.toml .env .ipynb_checkpoints .idea -@space-operator/contracts/node_modules @space-operator/client-next/node_modules -node_modules \ No newline at end of file +@space-operator/client/node_modules +@space-operator/contracts/node_modules +@space-operator/flow-lib/node_modules +crates/cmds-deno/node_modules +node_modules +.claude/settings.local.json +local-config.jsonc +.gitignore +.claude/settings.json +.claude/settings.local.json diff --git a/Cargo.lock b/Cargo.lock index 2689b56a9..d7c424c27 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4436,6 +4436,7 @@ dependencies = [ "chrono", "cmds-bun", "cmds-deno", + "cmds-image", "cmds-pdg", "cmds-solana", "cmds-std", diff --git a/bun.lock b/bun.lock index 8fcb9c5c9..2d8aaed73 100644 --- a/bun.lock +++ b/bun.lock @@ -24,9 +24,13 @@ "crates/cmds-bun": { "name": "cmds-bun", "dependencies": { + "@solana-program/token-2022": "^0.6.1", + "@solana/kit": "^5.0.0", + "@solana/token-acl-gate-sdk": "^0.2.0", + "@solana/token-acl-sdk": "^0.3.0", "@space-operator/bun-command-rpc": "workspace:*", "@space-operator/flow-lib-bun": "workspace:*", - "@umbra-privacy/sdk": "^2.1.1", + "@umbra-privacy/sdk": "^4.0.0", "@umbra-privacy/web-zk-prover": "^2.0.1", "privacycash": "^1.1.20", "snarkjs": "^0.7.6", @@ -73,83 +77,83 @@ "@solana-program/system": ["@solana-program/system@0.11.0", "", { "peerDependencies": { "@solana/kit": "^6.0.0" } }, "sha512-SJeQVTkqGZzIXd7XHlCxnfpKpvPZghB1IFwddPPG04ydVXtDLRWp9wLoTR5Prkl9FIWRe/c5VgT4nxyzW1cAuQ=="], - "@solana-program/token-2022": ["@solana-program/token-2022@0.9.0", "", { "peerDependencies": { "@solana/kit": "^6.0.0", "@solana/sysvars": "^5.0" } }, "sha512-j8fPBc/oUApYF7aW0ub6cIV7dbbtXC+Y6oDcI9SUs6BXXSq+lj7p7XRU+GEH8qWfyQ5ziRiOLI9s2AZjJY1Icg=="], + "@solana-program/token-2022": ["@solana-program/token-2022@0.6.1", "", { "peerDependencies": { "@solana/kit": "^5.0", "@solana/sysvars": "^5.0" } }, "sha512-Ex02cruDMGfBMvZZCrggVR45vdQQSI/unHVpt/7HPt/IwFYB4eTlXtO8otYZyqV/ce5GqZ8S6uwyRf0zy6fdbA=="], - "@solana/accounts": ["@solana/accounts@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h3zQFjwZjmy+YxgTGOEna6g74Tsn4hTBaBCslwPT4QjqWhywe2JrM2Ab0ANfJcj7g/xrHF5QJ/FnUIcyUTeVfQ=="], + "@solana/accounts": ["@solana/accounts@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TfOY9xixg5rizABuLVuZ9XI2x2tmWUC/OoN556xwfDlhBHBjKfszicYYOyD6nbFmwTGYarCmyGIdteXxTXIdhQ=="], - "@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + "@solana/addresses": ["@solana/addresses@5.5.1", "", { "dependencies": { "@solana/assertions": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5xoah3Q9G30HQghu/9BiHLb5pzlPKRC3zydQDmE3O9H//WfayxTFppsUDCL6FjYUHqj/wzK6CWHySglc2RkpdA=="], - "@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + "@solana/assertions": ["@solana/assertions@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-YTCSWAlGwSlVPnWtWLm3ukz81wH4j2YaCveK+TjpvUU88hTy6fmUqxi0+hvAMAe4zKXpJyj3Az7BrLJRxbIm4Q=="], "@solana/buffer-layout": ["@solana/buffer-layout@4.0.1", "", { "dependencies": { "buffer": "~6.0.3" } }, "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA=="], "@solana/buffer-layout-utils": ["@solana/buffer-layout-utils@0.2.0", "", { "dependencies": { "@solana/buffer-layout": "^4.0.0", "@solana/web3.js": "^1.32.0", "bigint-buffer": "^1.1.5", "bignumber.js": "^9.0.1" } }, "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g=="], - "@solana/codecs": ["@solana/codecs@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/options": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-WfqMqUXk4jcCJQ9nfKqjDcCJN2Pt8/AKe/E78z8OcblFGVJnTzcu2yZpE2gsqM+DJyCVKdQmOY+NS8Uckk5e5w=="], + "@solana/codecs": ["@solana/codecs@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/options": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Vea29nJub/bXjfzEV7ZZQ/PWr1pYLZo3z0qW0LQL37uKKVzVFRQlwetd7INk3YtTD3xm9WUYr7bCvYUk3uKy2g=="], - "@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + "@solana/codecs-core": ["@solana/codecs-core@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-TgBt//bbKBct0t6/MpA8ElaOA3sa8eYVvR7LGslCZ84WiAwwjCY0lW/lOYsFHJQzwREMdUyuEyy5YWBKtdh8Rw=="], - "@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + "@solana/codecs-data-structures": ["@solana/codecs-data-structures@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-97bJWGyUY9WvBz3mX1UV3YPWGDTez6btCfD0ip3UVEXJbItVuUiOkzcO5iFDUtQT5riKT6xC+Mzl+0nO76gd0w=="], - "@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], + "@solana/codecs-numbers": ["@solana/codecs-numbers@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rllMIZAHqmtvC0HO/dc/21wDuWaD0B8Ryv8o+YtsICQBuiL/0U4AGwH7Pi5GNFySYk0/crSuwfIqQFtmxNSPFw=="], - "@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + "@solana/codecs-strings": ["@solana/codecs-strings@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-7klX4AhfHYA+uKKC/nxRGP2MntbYQCR3N6+v7bk1W/rSxYuhNmt+FN8aoThSZtWIKwN6BEyR1167ka8Co1+E7A=="], - "@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + "@solana/errors": ["@solana/errors@5.5.1", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-vFO3p+S7HoyyrcAectnXbdsMfwUzY2zYFUc2DEe5BwpiE9J1IAxPBGjOWO6hL1bbYdBrlmjNx8DXCslqS+Kcmg=="], - "@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + "@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Ni7s2FN33zTzhTFgRjEbOVFO+UAmK8qi3Iu0/GRFYK4jN696OjKHnboSQH/EacQ+yGqS54bfxf409wU5dsLLCw=="], - "@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + "@solana/functional": ["@solana/functional@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-tTHoJcEQq3gQx5qsdsDJ0LEJeFzwNpXD80xApW9o/PPoCNimI3SALkZl+zNW8VnxRrV3l3yYvfHWBKe/X3WG3w=="], - "@solana/instruction-plans": ["@solana/instruction-plans@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-zp2asevpyMwvhajHYM1aruYpO+xf3LSwHEI2FK6E2hddYZaEhuBy+bz+NZ1ixCyfx3iXcq7MamlFQc2ySHDyUQ=="], + "@solana/instruction-plans": ["@solana/instruction-plans@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/promises": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-7z3CB7YMcFKuVvgcnNY8bY6IsZ8LG61Iytbz7HpNVGX2u1RthOs1tRW8luTzSG1MPL0Ox7afyAVMYeFqSPHnaQ=="], - "@solana/instructions": ["@solana/instructions@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-2mQP/1qqr5PCfaVMzs9KofBjpyS7J1sBV6PidGoX9Dg5/4UgwJJ+7yfCVQPn37l1nKCShm4I+pQAy5vbmrxJmA=="], + "@solana/instructions": ["@solana/instructions@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h0G1CG6S+gUUSt0eo6rOtsaXRBwCq1+Js2a+Ps9Bzk9q7YHNFA75/X0NWugWLgC92waRp66hrjMTiYYnLBoWOQ=="], - "@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], + "@solana/keys": ["@solana/keys@5.5.1", "", { "dependencies": { "@solana/assertions": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-KRD61cL7CRL+b4r/eB9dEoVxIf/2EJ1Pm1DmRYhtSUAJD2dJ5Xw8QFuehobOGm9URqQ7gaQl+Fkc1qvDlsWqKg=="], - "@solana/kit": ["@solana/kit@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/addresses": "6.5.0", "@solana/codecs": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instruction-plans": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/plugin-core": "6.5.0", "@solana/plugin-interfaces": "6.5.0", "@solana/program-client-core": "6.5.0", "@solana/programs": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/signers": "6.5.0", "@solana/sysvars": "6.5.0", "@solana/transaction-confirmation": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-4ysrtqMRd7CTYRv179gQq4kbw9zMsJCLhWjiyOmLZ4co4ld3L654D8ykW7yqWE5PJwF0hzEfheE7oBscO37nvw=="], + "@solana/kit": ["@solana/kit@5.5.1", "", { "dependencies": { "@solana/accounts": "5.5.1", "@solana/addresses": "5.5.1", "@solana/codecs": "5.5.1", "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/instruction-plans": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/offchain-messages": "5.5.1", "@solana/plugin-core": "5.5.1", "@solana/programs": "5.5.1", "@solana/rpc": "5.5.1", "@solana/rpc-api": "5.5.1", "@solana/rpc-parsed-types": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-subscriptions": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/signers": "5.5.1", "@solana/sysvars": "5.5.1", "@solana/transaction-confirmation": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-irKUGiV2yRoyf+4eGQ/ZeCRxa43yjFEL1DUI5B0DkcfZw3cr0VJtVJnrG8OtVF01vT0OUfYOcUn6zJW5TROHvQ=="], - "@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + "@solana/nominal-types": ["@solana/nominal-types@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-I1ImR+kfrLFxN5z22UDiTWLdRZeKtU0J/pkWkO8qm/8WxveiwdIv4hooi8pb6JnlR4mSrWhq0pCIOxDYrL9GIQ=="], - "@solana/offchain-messages": ["@solana/offchain-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-IYuidJCwfXg5xlh3rkflkA1fbTKWTsip8MdI+znvXm87grfqOYCTd6t/SKiV4BhLl/65Tn0wB/zvZ1cmzJqa1w=="], + "@solana/offchain-messages": ["@solana/offchain-messages@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/keys": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-g+xHH95prTU+KujtbOzj8wn+C7ZNoiLhf3hj6nYq3MTyxOXtBEysguc97jJveUZG0K97aIKG6xVUlMutg5yxhw=="], - "@solana/options": ["@solana/options@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-jdZjSKGCQpsMFK+3CiUEI7W9iGsndi46R4Abk66ULNLDoMsjvfqNy8kqktm0TN0++EX8dKEecpFwxFaA4VlY5g=="], + "@solana/options": ["@solana/options@5.5.1", "", { "dependencies": { "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-eo971c9iLNLmk+yOFyo7yKIJzJ/zou6uKpy6mBuyb/thKtS/haiKIc3VLhyTXty3OH2PW8yOlORJnv4DexJB8A=="], - "@solana/plugin-core": ["@solana/plugin-core@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-L6N69oNQOAqljH4GnLTaxpwJB0nibW9DrybHZxpGWshyv6b/EvwvkDVRKj5bNqtCG+HRZUHnEhLi1UgZVNkjpQ=="], + "@solana/plugin-core": ["@solana/plugin-core@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-VUZl30lDQFJeiSyNfzU1EjYt2QZvoBFKEwjn1lilUJw7KgqD5z7mbV7diJhT+dLFs36i0OsjXvq5kSygn8YJ3A=="], "@solana/plugin-interfaces": ["@solana/plugin-interfaces@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/instruction-plans": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/signers": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/ZlybbMaR7P4ySersOe1huioMADWze0AzsHbzgkpt5dJUv2tz5cpaKdu7TEVQkUZAFhLdqXQULNGqAU5neOgzg=="], "@solana/program-client-core": ["@solana/program-client-core@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0", "@solana/instruction-plans": "6.5.0", "@solana/instructions": "6.5.0", "@solana/plugin-interfaces": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/signers": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-eUz1xSeDKySGIjToAryPmlESdj8KX0Np7R+Pjt+kSFGw5Jgmn/Inh4o8luoeEnf5XwbvSPVb4aHpIsDyoUVbIg=="], - "@solana/programs": ["@solana/programs@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-srn3nEROBxCnBpVz/bvLkVln1BZtk3bS3nuReu3yaeOLkKl8b0h1Zp0YmXVyXHzdMcYahsTvKKLR1ZtLZEyEPA=="], + "@solana/programs": ["@solana/programs@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-7U9kn0Jsx1NuBLn5HRTFYh78MV4XN145Yc3WP/q5BlqAVNlMoU9coG5IUTJIG847TUqC1lRto3Dnpwm6T4YRpA=="], - "@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + "@solana/promises": ["@solana/promises@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-T9lfuUYkGykJmppEcssNiCf6yiYQxJkhiLPP+pyAc2z84/7r3UVIb2tNJk4A9sucS66pzJnVHZKcZVGUUp6wzA=="], - "@solana/rpc": ["@solana/rpc@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-transport-http": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-lGj7ZMVOR3Rf16aByXD6ghrMqw3G8rAMuWCHU4uMKES5M5VLqNv6o71bSyoTxVMGrmYdbALOvCbFMFINAxtoBg=="], + "@solana/rpc": ["@solana/rpc@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/fast-stable-stringify": "5.5.1", "@solana/functional": "5.5.1", "@solana/rpc-api": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-transport-http": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ku8zTUMrkCWci66PRIBC+1mXepEnZH/q1f3ck0kJZ95a06bOTl5KU7HeXWtskkyefzARJ5zvCs54AD5nxjQJ+A=="], - "@solana/rpc-api": ["@solana/rpc-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b+kftroO8vZFzLHj7Nk/uATS3HOlBUsUqdGg3eTQrW1pFgkyq5yIoEYHeFF7ApUN/SJLTK86U8ofCaXabd2SXA=="], + "@solana/rpc-api": ["@solana/rpc-api@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/keys": "5.5.1", "@solana/rpc-parsed-types": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XWOQQPhKl06Vj0xi3RYHAc6oEQd8B82okYJ04K7N0Vvy3J4PN2cxeK7klwkjgavdcN9EVkYCChm2ADAtnztKnA=="], - "@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-129c8meL6CxRg56/HfhkFOpwYteQH9Rt0wyXOXZQx3a3FNpcJLd4JdPvxDsLBE3EupEkXLGVku/1bGKz+F2J+g=="], + "@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HEi3G2nZqGEsa3vX6U0FrXLaqnUCg4SKIUrOe8CezD+cSFbRTOn3rCLrUmJrhVyXlHoQVaRO9mmeovk31jWxJg=="], - "@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + "@solana/rpc-spec": ["@solana/rpc-spec@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/rpc-spec-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-m3LX2bChm3E3by4mQrH4YwCAFY57QBzuUSWqlUw7ChuZ+oLLOq7b2czi4i6L4Vna67j3eCmB3e+4tqy1j5wy7Q=="], - "@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + "@solana/rpc-spec-types": ["@solana/rpc-spec-types@5.5.1", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-6OFKtRpIEJQs8Jb2C4OO8KyP2h2Hy1MFhatMAoXA+0Ik8S3H+CicIuMZvGZ91mIu/tXicuOOsNNLu3HAkrakrw=="], - "@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions-api": "6.5.0", "@solana/rpc-subscriptions-channel-websocket": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-EenogPQw9Iy8VUj8anu7xoBnPk7gu1J6sAi4MTVlNVz02sNjdUBJoSS0PRJZuhSM1ktPTtHrNwqlXP8TxPR7jg=="], + "@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/fast-stable-stringify": "5.5.1", "@solana/functional": "5.5.1", "@solana/promises": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-subscriptions-api": "5.5.1", "@solana/rpc-subscriptions-channel-websocket": "5.5.1", "@solana/rpc-subscriptions-spec": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/subscribable": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CTMy5bt/6mDh4tc6vUJms9EcuZj3xvK0/xq8IQ90rhkpYvate91RjBP+egvjgSayUg9yucU9vNuUpEjz4spM7w=="], - "@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-smqNjT2C5Vf9nWGIwiYOLOP744gRWKi2i2g0i3ZVdsfoouvB0d/WTQ2bbWq47MrdV8FSuGnjAOM3dRIwYmYOWw=="], + "@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/keys": "5.5.1", "@solana/rpc-subscriptions-spec": "5.5.1", "@solana/rpc-transformers": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5Oi7k+GdeS8xR2ly1iuSFkAv6CZqwG0Z6b1QZKbEgxadE1XGSDrhM2cn59l+bqCozUWCqh4c/A2znU/qQjROlw=="], - "@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/subscribable": "6.5.0", "ws": "^8.19.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-xRKH3ZwIoV9Zua9Gp0RR0eL8lXNgx+iNIkE3F0ROlOzI48lt4lRJ7jLrHQCN3raVtkatFVuEyZ7e9eLHK9zhAw=="], + "@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/rpc-subscriptions-spec": "5.5.1", "@solana/subscribable": "5.5.1", "ws": "^8.19.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-7tGfBBrYY8TrngOyxSHoCU5shy86iA9SRMRrPSyBhEaZRAk6dnbdpmUTez7gtdVo0BCvh9nzQtUycKWSS7PnFQ=="], - "@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Mi8g9rNS2lG7lyNkDhOVfQVfDC7hXKgH+BlI5qKGk+8cfyU7VDq6tVjDysu6kBWGOPHZxyCvcL6+xW/EkdVoAg=="], + "@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/promises": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/subscribable": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iq+rGq5fMKP3/mKHPNB6MC8IbVW41KGZg83Us/+LE3AWOTWV1WT20KT2iH1F1ik9roi42COv/TpoZZvhKj45XQ=="], - "@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + "@solana/rpc-transformers": ["@solana/rpc-transformers@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-OsWqLCQdcrRJKvHiMmwFhp9noNZ4FARuMkHT5us3ustDLXaxOjF0gfqZLnMkulSLcKt7TGXqMhBV+HCo7z5M8Q=="], - "@solana/rpc-transport-http": ["@solana/rpc-transport-http@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "undici-types": "^7.22.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-A3qgDGiUIHdtAfc2OyazlQa7IvRh+xyl0dmzaZlz4rY7Oc7Xk8jmXtaKGkgXihLyAK3oVSqSz5gn9yEfx55eXA=="], + "@solana/rpc-transport-http": ["@solana/rpc-transport-http@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1", "@solana/rpc-spec": "5.5.1", "@solana/rpc-spec-types": "5.5.1", "undici-types": "^7.19.2" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-yv8GoVSHqEV0kUJEIhkdOVkR2SvJ6yoWC51cJn2rSV7plr6huLGe0JgujCmB7uZhhaLbcbP3zxXxu9sOjsi7Fg=="], - "@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + "@solana/rpc-types": ["@solana/rpc-types@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/nominal-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-bibTFQ7PbHJJjGJPmfYC2I+/5CRFS4O2p9WwbFraX1Keeel+nRrt/NBXIy8veP5AEn2sVJIyJPpWBRpCx1oATA=="], - "@solana/signers": ["@solana/signers@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-AL75/DyDUhc+QQ+VGZT7aRwJNzIUTWvmLNXQRlCVhLRuyroXzZEL2WJBs8xOwbZXjY8weacfYT7UNM8qK6ucDg=="], + "@solana/signers": ["@solana/signers@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/errors": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/offchain-messages": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-FY0IVaBT2kCAze55vEieR6hag4coqcuJ31Aw3hqRH7mv6sV8oqwuJmUrx+uFwOp1gwd5OEAzlv6N4hOOple4sQ=="], "@solana/spl-token": ["@solana/spl-token@0.4.14", "", { "dependencies": { "@solana/buffer-layout": "^4.0.0", "@solana/buffer-layout-utils": "^0.2.0", "@solana/spl-token-group": "^0.0.7", "@solana/spl-token-metadata": "^0.1.6", "buffer": "^6.0.3" }, "peerDependencies": { "@solana/web3.js": "^1.95.5" } }, "sha512-u09zr96UBpX4U685MnvQsNzlvw9TiY005hk1vJmJr7gMJldoPG1eYU5/wNEyOA5lkMLiR/gOi9SFD4MefOYEsA=="], @@ -157,15 +161,19 @@ "@solana/spl-token-metadata": ["@solana/spl-token-metadata@0.1.6", "", { "dependencies": { "@solana/codecs": "2.0.0-rc.1" }, "peerDependencies": { "@solana/web3.js": "^1.95.3" } }, "sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA=="], - "@solana/subscribable": ["@solana/subscribable@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Jmy2NYmQN68FsQzKJ5CY3qrxXBJdb5qtJKp8B4byPPO5liKNIsC59HpT0Tq8MCNSfBMmOkWF2rrVot2/g1iB1A=="], + "@solana/subscribable": ["@solana/subscribable@5.5.1", "", { "dependencies": { "@solana/errors": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-9K0PsynFq0CsmK1CDi5Y2vUIJpCqkgSS5yfDN0eKPgHqEptLEaia09Kaxc90cSZDZU5mKY/zv1NBmB6Aro9zQQ=="], - "@solana/sysvars": ["@solana/sysvars@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iLSS5qj0MWNiGH1LN1E4jhGsXH9D3tWSjwaB6zK9LjhLdVYcPfkosBkj7s0EHHrH03QlwiuFdU0Y2kH8Jcp8kw=="], + "@solana/sysvars": ["@solana/sysvars@5.5.1", "", { "dependencies": { "@solana/accounts": "5.5.1", "@solana/codecs": "5.5.1", "@solana/errors": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k3Quq87Mm+geGUu1GWv6knPk0ALsfY6EKSJGw9xUJDHzY/RkYSBnh0RiOrUhtFm2TDNjOailg8/m0VHmi3reFA=="], - "@solana/transaction-confirmation": ["@solana/transaction-confirmation@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hfdRBq4toZj7DRMgBN3F0VtJpmTAEtcVTTDZoiszoSpSVa2cAvFth6KypIqASVFZyi9t4FKolLP8ASd3/39UQg=="], + "@solana/token-acl-gate-sdk": ["@solana/token-acl-gate-sdk@0.2.0", "", { "dependencies": { "@solana/kit": "^5.0.0" }, "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-jCbt1J8SI+jPdi8DLajKpN9V3x2B9FXbDRltXcM4jrIVuWsNQ6W6/yn8N65uwUUw4wrTD6MJUT2sMD+QDbY7Gg=="], - "@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + "@solana/token-acl-sdk": ["@solana/token-acl-sdk@0.3.0", "", { "dependencies": { "@solana-program/token-2022": "0.6.1", "@solana/kit": "^5.0.0" } }, "sha512-EobWRJ5G31wPQ0au1ZaW/0cbLDkrY/XBomuRMhO0pzsW/gSLaLRNenj2NBU3lh4bi6VdV8Qb+INb9g4LgCoCbA=="], - "@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + "@solana/transaction-confirmation": ["@solana/transaction-confirmation@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/keys": "5.5.1", "@solana/promises": "5.5.1", "@solana/rpc": "5.5.1", "@solana/rpc-subscriptions": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1", "@solana/transactions": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-j4mKlYPHEyu+OD7MBt3jRoX4ScFgkhZC6H65on4Fux6LMScgivPJlwnKoZMnsgxFgWds0pl+BYzSiALDsXlYtw=="], + + "@solana/transaction-messages": ["@solana/transaction-messages@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/instructions": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/rpc-types": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-aXyhMCEaAp3M/4fP0akwBBQkFPr4pfwoC5CLDq999r/FUwDax2RE/h4Ic7h2Xk+JdcUwsb+rLq85Y52hq84XvQ=="], + + "@solana/transactions": ["@solana/transactions@5.5.1", "", { "dependencies": { "@solana/addresses": "5.5.1", "@solana/codecs-core": "5.5.1", "@solana/codecs-data-structures": "5.5.1", "@solana/codecs-numbers": "5.5.1", "@solana/codecs-strings": "5.5.1", "@solana/errors": "5.5.1", "@solana/functional": "5.5.1", "@solana/instructions": "5.5.1", "@solana/keys": "5.5.1", "@solana/nominal-types": "5.5.1", "@solana/rpc-types": "5.5.1", "@solana/transaction-messages": "5.5.1" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-8hHtDxtqalZ157pnx6p8k10D7J/KY/biLzfgh9R09VNLLY3Fqi7kJvJCr7M2ik3oRll56pxhraAGCC9yIT6eOA=="], "@solana/wallet-standard-features": ["@solana/wallet-standard-features@1.3.0", "", { "dependencies": { "@wallet-standard/base": "^1.1.0", "@wallet-standard/features": "^1.1.0" } }, "sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg=="], @@ -199,7 +207,7 @@ "@umbra-privacy/indexer-read-service-client": ["@umbra-privacy/indexer-read-service-client@2.0.1", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0", "@umbra-privacy/indexer-proto-gen": "2.0.1" } }, "sha512-sIlN8TwUBjKUO8ZFE9teGbO3GiqjPMpB2uqlFeF2O7XGNBXkQ5g9PjqNiCBZ8xJOIq8bEJNxUceezj64EAhOjA=="], - "@umbra-privacy/sdk": ["@umbra-privacy/sdk@2.1.1", "", { "dependencies": { "@noble/ciphers": "^2.1.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "@solana/kit": "^6.0.1", "@solana/wallet-standard-features": "^1.3.0", "@umbra-privacy/arcium-codama": "2.0.1", "@umbra-privacy/indexer-read-service-client": "2.0.1", "@umbra-privacy/umbra-codama": "2.0.2", "@wallet-standard/core": "^1.1.0" } }, "sha512-GHV4UXxdcQmCO42asPQVN+Tl5PpOGjvYmnQtUIMuh3MezDdGXPXlRHn07POx65774kF62Mv3zAuvsw9Ukf9gsw=="], + "@umbra-privacy/sdk": ["@umbra-privacy/sdk@4.0.0", "", { "dependencies": { "@noble/ciphers": "^2.1.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "@solana/kit": "^6.0.1", "@solana/wallet-standard-features": "^1.3.0", "@umbra-privacy/arcium-codama": "2.0.1", "@umbra-privacy/indexer-read-service-client": "2.0.1", "@umbra-privacy/umbra-codama": "2.0.2", "@wallet-standard/core": "^1.1.0" } }, "sha512-QZtOql8/jutjI4tyoaTbplCPChxYGmFn2qM7BSlmoTtL5uaQT8DskfpgZlzIyUESMa4xYqIxqrQVH+ApdfPnmw=="], "@umbra-privacy/umbra-codama": ["@umbra-privacy/umbra-codama@2.0.2", "", { "dependencies": { "@solana-program/system": "^0.11.0", "@solana-program/token-2022": "^0.9.0", "@solana/kit": "^6.0.1", "@solana/sysvars": "^6.0.1" } }, "sha512-ogGoHbxTQyvEdaPOyYTAx48XNQgvXcvkt5CdTKwPbRrcb3J6zhYEvrdyFBlOuI8GKjcpITi+5AiPnd41BikRHQ=="], @@ -387,7 +395,7 @@ "underscore": ["underscore@1.13.6", "", {}, "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="], - "undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="], + "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], "utf-8-validate": ["utf-8-validate@6.0.6", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-q3l3P9UtEEiAHcsgsqTgf9PPjctrDWoIXW3NpOHFdRDbLvu4DLIcxHangJ4RLrWkBcKjmcs/6NkerI8T/rE4LA=="], @@ -415,29 +423,43 @@ "@coral-xyz/anchor/superstruct": ["superstruct@0.15.5", "", {}, "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ=="], + "@solana-program/system/@solana/kit": ["@solana/kit@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/addresses": "6.5.0", "@solana/codecs": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instruction-plans": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/plugin-core": "6.5.0", "@solana/plugin-interfaces": "6.5.0", "@solana/program-client-core": "6.5.0", "@solana/programs": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/signers": "6.5.0", "@solana/sysvars": "6.5.0", "@solana/transaction-confirmation": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-4ysrtqMRd7CTYRv179gQq4kbw9zMsJCLhWjiyOmLZ4co4ld3L654D8ykW7yqWE5PJwF0hzEfheE7oBscO37nvw=="], + "@solana/buffer-layout-utils/@solana/web3.js": ["@solana/web3.js@1.98.4", "", { "dependencies": { "@babel/runtime": "^7.25.0", "@noble/curves": "^1.4.2", "@noble/hashes": "^1.4.0", "@solana/buffer-layout": "^4.0.1", "@solana/codecs-numbers": "^2.1.0", "agentkeepalive": "^4.5.0", "bn.js": "^5.2.1", "borsh": "^0.7.0", "bs58": "^4.0.1", "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", "jayson": "^4.1.1", "node-fetch": "^2.7.0", "rpc-websockets": "^9.0.2", "superstruct": "^2.0.2" } }, "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw=="], - "@solana/codecs/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + "@solana/errors/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - "@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + "@solana/plugin-interfaces/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], - "@solana/codecs-numbers/@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], + "@solana/plugin-interfaces/@solana/instruction-plans": ["@solana/instruction-plans@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-zp2asevpyMwvhajHYM1aruYpO+xf3LSwHEI2FK6E2hddYZaEhuBy+bz+NZ1ixCyfx3iXcq7MamlFQc2ySHDyUQ=="], - "@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], + "@solana/plugin-interfaces/@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], - "@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + "@solana/plugin-interfaces/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], - "@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + "@solana/plugin-interfaces/@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Mi8g9rNS2lG7lyNkDhOVfQVfDC7hXKgH+BlI5qKGk+8cfyU7VDq6tVjDysu6kBWGOPHZxyCvcL6+xW/EkdVoAg=="], - "@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + "@solana/plugin-interfaces/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], - "@solana/options/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + "@solana/plugin-interfaces/@solana/signers": ["@solana/signers@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-AL75/DyDUhc+QQ+VGZT7aRwJNzIUTWvmLNXQRlCVhLRuyroXzZEL2WJBs8xOwbZXjY8weacfYT7UNM8qK6ucDg=="], - "@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + "@solana/program-client-core/@solana/accounts": ["@solana/accounts@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h3zQFjwZjmy+YxgTGOEna6g74Tsn4hTBaBCslwPT4QjqWhywe2JrM2Ab0ANfJcj7g/xrHF5QJ/FnUIcyUTeVfQ=="], + + "@solana/program-client-core/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@solana/program-client-core/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana/program-client-core/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@solana/program-client-core/@solana/instruction-plans": ["@solana/instruction-plans@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-zp2asevpyMwvhajHYM1aruYpO+xf3LSwHEI2FK6E2hddYZaEhuBy+bz+NZ1ixCyfx3iXcq7MamlFQc2ySHDyUQ=="], - "@solana/rpc-transport-http/undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], + "@solana/program-client-core/@solana/instructions": ["@solana/instructions@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-2mQP/1qqr5PCfaVMzs9KofBjpyS7J1sBV6PidGoX9Dg5/4UgwJJ+7yfCVQPn37l1nKCShm4I+pQAy5vbmrxJmA=="], - "@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + "@solana/program-client-core/@solana/rpc-api": ["@solana/rpc-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b+kftroO8vZFzLHj7Nk/uATS3HOlBUsUqdGg3eTQrW1pFgkyq5yIoEYHeFF7ApUN/SJLTK86U8ofCaXabd2SXA=="], + + "@solana/program-client-core/@solana/signers": ["@solana/signers@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-AL75/DyDUhc+QQ+VGZT7aRwJNzIUTWvmLNXQRlCVhLRuyroXzZEL2WJBs8xOwbZXjY8weacfYT7UNM8qK6ucDg=="], + + "@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], "@solana/spl-token/@solana/web3.js": ["@solana/web3.js@1.98.4", "", { "dependencies": { "@babel/runtime": "^7.25.0", "@noble/curves": "^1.4.2", "@noble/hashes": "^1.4.0", "@solana/buffer-layout": "^4.0.1", "@solana/codecs-numbers": "^2.1.0", "agentkeepalive": "^4.5.0", "bn.js": "^5.2.1", "borsh": "^0.7.0", "bs58": "^4.0.1", "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", "jayson": "^4.1.1", "node-fetch": "^2.7.0", "rpc-websockets": "^9.0.2", "superstruct": "^2.0.2" } }, "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw=="], @@ -449,22 +471,30 @@ "@solana/spl-token-metadata/@solana/web3.js": ["@solana/web3.js@1.98.4", "", { "dependencies": { "@babel/runtime": "^7.25.0", "@noble/curves": "^1.4.2", "@noble/hashes": "^1.4.0", "@solana/buffer-layout": "^4.0.1", "@solana/codecs-numbers": "^2.1.0", "agentkeepalive": "^4.5.0", "bn.js": "^5.2.1", "borsh": "^0.7.0", "bs58": "^4.0.1", "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", "jayson": "^4.1.1", "node-fetch": "^2.7.0", "rpc-websockets": "^9.0.2", "superstruct": "^2.0.2" } }, "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw=="], - "@solana/sysvars/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], - - "@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], - - "@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], - "@solana/web3.js/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], "@swc/helpers/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "@types/bn.js/@types/node": ["@types/node@22.7.5", "", { "dependencies": { "undici-types": "~6.19.2" } }, "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ=="], + "@umbra-privacy/arcium-codama/@solana/kit": ["@solana/kit@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/addresses": "6.5.0", "@solana/codecs": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instruction-plans": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/plugin-core": "6.5.0", "@solana/plugin-interfaces": "6.5.0", "@solana/program-client-core": "6.5.0", "@solana/programs": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/signers": "6.5.0", "@solana/sysvars": "6.5.0", "@solana/transaction-confirmation": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-4ysrtqMRd7CTYRv179gQq4kbw9zMsJCLhWjiyOmLZ4co4ld3L654D8ykW7yqWE5PJwF0hzEfheE7oBscO37nvw=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars": ["@solana/sysvars@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iLSS5qj0MWNiGH1LN1E4jhGsXH9D3tWSjwaB6zK9LjhLdVYcPfkosBkj7s0EHHrH03QlwiuFdU0Y2kH8Jcp8kw=="], + "@umbra-privacy/sdk/@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="], "@umbra-privacy/sdk/@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], + "@umbra-privacy/sdk/@solana/kit": ["@solana/kit@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/addresses": "6.5.0", "@solana/codecs": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instruction-plans": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/plugin-core": "6.5.0", "@solana/plugin-interfaces": "6.5.0", "@solana/program-client-core": "6.5.0", "@solana/programs": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/signers": "6.5.0", "@solana/sysvars": "6.5.0", "@solana/transaction-confirmation": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-4ysrtqMRd7CTYRv179gQq4kbw9zMsJCLhWjiyOmLZ4co4ld3L654D8ykW7yqWE5PJwF0hzEfheE7oBscO37nvw=="], + + "@umbra-privacy/umbra-codama/@solana-program/token-2022": ["@solana-program/token-2022@0.9.0", "", { "peerDependencies": { "@solana/kit": "^6.0.0", "@solana/sysvars": "^5.0" } }, "sha512-j8fPBc/oUApYF7aW0ub6cIV7dbbtXC+Y6oDcI9SUs6BXXSq+lj7p7XRU+GEH8qWfyQ5ziRiOLI9s2AZjJY1Icg=="], + + "@umbra-privacy/umbra-codama/@solana/kit": ["@solana/kit@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/addresses": "6.5.0", "@solana/codecs": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instruction-plans": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/plugin-core": "6.5.0", "@solana/plugin-interfaces": "6.5.0", "@solana/program-client-core": "6.5.0", "@solana/programs": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/signers": "6.5.0", "@solana/sysvars": "6.5.0", "@solana/transaction-confirmation": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-4ysrtqMRd7CTYRv179gQq4kbw9zMsJCLhWjiyOmLZ4co4ld3L654D8ykW7yqWE5PJwF0hzEfheE7oBscO37nvw=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars": ["@solana/sysvars@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iLSS5qj0MWNiGH1LN1E4jhGsXH9D3tWSjwaB6zK9LjhLdVYcPfkosBkj7s0EHHrH03QlwiuFdU0Y2kH8Jcp8kw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk": ["@umbra-privacy/sdk@2.1.1", "", { "dependencies": { "@noble/ciphers": "^2.1.1", "@noble/curves": "^2.0.1", "@noble/hashes": "^2.0.1", "@solana/kit": "^6.0.1", "@solana/wallet-standard-features": "^1.3.0", "@umbra-privacy/arcium-codama": "2.0.1", "@umbra-privacy/indexer-read-service-client": "2.0.1", "@umbra-privacy/umbra-codama": "2.0.2", "@wallet-standard/core": "^1.1.0" } }, "sha512-GHV4UXxdcQmCO42asPQVN+Tl5PpOGjvYmnQtUIMuh3MezDdGXPXlRHn07POx65774kF62Mv3zAuvsw9Ukf9gsw=="], + "@wallet-standard/errors/commander": ["commander@13.1.0", "", {}, "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw=="], "borsh/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], @@ -491,15 +521,175 @@ "rpc-websockets/ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + "@coral-xyz/anchor/@solana/web3.js/@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], + "@coral-xyz/anchor/@solana/web3.js/superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], "@coral-xyz/anchor/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "@solana-program/system/@solana/kit/@solana/accounts": ["@solana/accounts@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h3zQFjwZjmy+YxgTGOEna6g74Tsn4hTBaBCslwPT4QjqWhywe2JrM2Ab0ANfJcj7g/xrHF5QJ/FnUIcyUTeVfQ=="], + + "@solana-program/system/@solana/kit/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@solana-program/system/@solana/kit/@solana/codecs": ["@solana/codecs@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/options": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-WfqMqUXk4jcCJQ9nfKqjDcCJN2Pt8/AKe/E78z8OcblFGVJnTzcu2yZpE2gsqM+DJyCVKdQmOY+NS8Uckk5e5w=="], + + "@solana-program/system/@solana/kit/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@solana-program/system/@solana/kit/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana-program/system/@solana/kit/@solana/instruction-plans": ["@solana/instruction-plans@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-zp2asevpyMwvhajHYM1aruYpO+xf3LSwHEI2FK6E2hddYZaEhuBy+bz+NZ1ixCyfx3iXcq7MamlFQc2ySHDyUQ=="], + + "@solana-program/system/@solana/kit/@solana/instructions": ["@solana/instructions@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-2mQP/1qqr5PCfaVMzs9KofBjpyS7J1sBV6PidGoX9Dg5/4UgwJJ+7yfCVQPn37l1nKCShm4I+pQAy5vbmrxJmA=="], + + "@solana-program/system/@solana/kit/@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], + + "@solana-program/system/@solana/kit/@solana/offchain-messages": ["@solana/offchain-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-IYuidJCwfXg5xlh3rkflkA1fbTKWTsip8MdI+znvXm87grfqOYCTd6t/SKiV4BhLl/65Tn0wB/zvZ1cmzJqa1w=="], + + "@solana-program/system/@solana/kit/@solana/plugin-core": ["@solana/plugin-core@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-L6N69oNQOAqljH4GnLTaxpwJB0nibW9DrybHZxpGWshyv6b/EvwvkDVRKj5bNqtCG+HRZUHnEhLi1UgZVNkjpQ=="], + + "@solana-program/system/@solana/kit/@solana/programs": ["@solana/programs@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-srn3nEROBxCnBpVz/bvLkVln1BZtk3bS3nuReu3yaeOLkKl8b0h1Zp0YmXVyXHzdMcYahsTvKKLR1ZtLZEyEPA=="], + + "@solana-program/system/@solana/kit/@solana/rpc": ["@solana/rpc@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-transport-http": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-lGj7ZMVOR3Rf16aByXD6ghrMqw3G8rAMuWCHU4uMKES5M5VLqNv6o71bSyoTxVMGrmYdbALOvCbFMFINAxtoBg=="], + + "@solana-program/system/@solana/kit/@solana/rpc-api": ["@solana/rpc-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b+kftroO8vZFzLHj7Nk/uATS3HOlBUsUqdGg3eTQrW1pFgkyq5yIoEYHeFF7ApUN/SJLTK86U8ofCaXabd2SXA=="], + + "@solana-program/system/@solana/kit/@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-129c8meL6CxRg56/HfhkFOpwYteQH9Rt0wyXOXZQx3a3FNpcJLd4JdPvxDsLBE3EupEkXLGVku/1bGKz+F2J+g=="], + + "@solana-program/system/@solana/kit/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions-api": "6.5.0", "@solana/rpc-subscriptions-channel-websocket": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-EenogPQw9Iy8VUj8anu7xoBnPk7gu1J6sAi4MTVlNVz02sNjdUBJoSS0PRJZuhSM1ktPTtHrNwqlXP8TxPR7jg=="], + + "@solana-program/system/@solana/kit/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@solana-program/system/@solana/kit/@solana/signers": ["@solana/signers@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-AL75/DyDUhc+QQ+VGZT7aRwJNzIUTWvmLNXQRlCVhLRuyroXzZEL2WJBs8xOwbZXjY8weacfYT7UNM8qK6ucDg=="], + + "@solana-program/system/@solana/kit/@solana/sysvars": ["@solana/sysvars@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iLSS5qj0MWNiGH1LN1E4jhGsXH9D3tWSjwaB6zK9LjhLdVYcPfkosBkj7s0EHHrH03QlwiuFdU0Y2kH8Jcp8kw=="], + + "@solana-program/system/@solana/kit/@solana/transaction-confirmation": ["@solana/transaction-confirmation@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hfdRBq4toZj7DRMgBN3F0VtJpmTAEtcVTTDZoiszoSpSVa2cAvFth6KypIqASVFZyi9t4FKolLP8ASd3/39UQg=="], + + "@solana-program/system/@solana/kit/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@solana-program/system/@solana/kit/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + + "@solana/buffer-layout-utils/@solana/web3.js/@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], + "@solana/buffer-layout-utils/@solana/web3.js/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], "@solana/buffer-layout-utils/@solana/web3.js/superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], - "@solana/codecs-numbers/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + "@solana/plugin-interfaces/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@solana/plugin-interfaces/@solana/addresses/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana/plugin-interfaces/@solana/addresses/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/plugin-interfaces/@solana/addresses/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@solana/plugin-interfaces/@solana/addresses/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/instructions": ["@solana/instructions@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-2mQP/1qqr5PCfaVMzs9KofBjpyS7J1sBV6PidGoX9Dg5/4UgwJJ+7yfCVQPn37l1nKCShm4I+pQAy5vbmrxJmA=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + + "@solana/plugin-interfaces/@solana/keys/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@solana/plugin-interfaces/@solana/keys/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana/plugin-interfaces/@solana/keys/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/plugin-interfaces/@solana/keys/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@solana/plugin-interfaces/@solana/keys/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/plugin-interfaces/@solana/rpc-spec/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@solana/plugin-interfaces/@solana/rpc-spec/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@solana/plugin-interfaces/@solana/rpc-subscriptions-spec/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@solana/plugin-interfaces/@solana/rpc-subscriptions-spec/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@solana/plugin-interfaces/@solana/rpc-subscriptions-spec/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@solana/plugin-interfaces/@solana/rpc-subscriptions-spec/@solana/subscribable": ["@solana/subscribable@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Jmy2NYmQN68FsQzKJ5CY3qrxXBJdb5qtJKp8B4byPPO5liKNIsC59HpT0Tq8MCNSfBMmOkWF2rrVot2/g1iB1A=="], + + "@solana/plugin-interfaces/@solana/rpc-types/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana/plugin-interfaces/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/plugin-interfaces/@solana/rpc-types/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@solana/plugin-interfaces/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/instructions": ["@solana/instructions@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-2mQP/1qqr5PCfaVMzs9KofBjpyS7J1sBV6PidGoX9Dg5/4UgwJJ+7yfCVQPn37l1nKCShm4I+pQAy5vbmrxJmA=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/offchain-messages": ["@solana/offchain-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-IYuidJCwfXg5xlh3rkflkA1fbTKWTsip8MdI+znvXm87grfqOYCTd6t/SKiV4BhLl/65Tn0wB/zvZ1cmzJqa1w=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + + "@solana/program-client-core/@solana/accounts/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/accounts/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@solana/program-client-core/@solana/accounts/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@solana/program-client-core/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@solana/program-client-core/@solana/addresses/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/addresses/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-129c8meL6CxRg56/HfhkFOpwYteQH9Rt0wyXOXZQx3a3FNpcJLd4JdPvxDsLBE3EupEkXLGVku/1bGKz+F2J+g=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + + "@solana/program-client-core/@solana/signers/@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], + + "@solana/program-client-core/@solana/signers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/signers/@solana/offchain-messages": ["@solana/offchain-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-IYuidJCwfXg5xlh3rkflkA1fbTKWTsip8MdI+znvXm87grfqOYCTd6t/SKiV4BhLl/65Tn0wB/zvZ1cmzJqa1w=="], + + "@solana/program-client-core/@solana/signers/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@solana/program-client-core/@solana/signers/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], "@solana/spl-token-group/@solana/codecs/@solana/codecs-core": ["@solana/codecs-core@2.0.0-rc.1", "", { "dependencies": { "@solana/errors": "2.0.0-rc.1" }, "peerDependencies": { "typescript": ">=5" } }, "sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ=="], @@ -511,6 +701,8 @@ "@solana/spl-token-group/@solana/codecs/@solana/options": ["@solana/options@2.0.0-rc.1", "", { "dependencies": { "@solana/codecs-core": "2.0.0-rc.1", "@solana/codecs-data-structures": "2.0.0-rc.1", "@solana/codecs-numbers": "2.0.0-rc.1", "@solana/codecs-strings": "2.0.0-rc.1", "@solana/errors": "2.0.0-rc.1" }, "peerDependencies": { "typescript": ">=5" } }, "sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA=="], + "@solana/spl-token-group/@solana/web3.js/@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], + "@solana/spl-token-group/@solana/web3.js/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], "@solana/spl-token-group/@solana/web3.js/superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], @@ -525,76 +717,1378 @@ "@solana/spl-token-metadata/@solana/codecs/@solana/options": ["@solana/options@2.0.0-rc.1", "", { "dependencies": { "@solana/codecs-core": "2.0.0-rc.1", "@solana/codecs-data-structures": "2.0.0-rc.1", "@solana/codecs-numbers": "2.0.0-rc.1", "@solana/codecs-strings": "2.0.0-rc.1", "@solana/errors": "2.0.0-rc.1" }, "peerDependencies": { "typescript": ">=5" } }, "sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA=="], + "@solana/spl-token-metadata/@solana/web3.js/@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], + "@solana/spl-token-metadata/@solana/web3.js/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], "@solana/spl-token-metadata/@solana/web3.js/superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], + "@solana/spl-token/@solana/web3.js/@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], + "@solana/spl-token/@solana/web3.js/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], "@solana/spl-token/@solana/web3.js/superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], "@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "@types/bn.js/@types/node/undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/accounts": ["@solana/accounts@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h3zQFjwZjmy+YxgTGOEna6g74Tsn4hTBaBCslwPT4QjqWhywe2JrM2Ab0ANfJcj7g/xrHF5QJ/FnUIcyUTeVfQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/codecs": ["@solana/codecs@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/options": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-WfqMqUXk4jcCJQ9nfKqjDcCJN2Pt8/AKe/E78z8OcblFGVJnTzcu2yZpE2gsqM+DJyCVKdQmOY+NS8Uckk5e5w=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/instruction-plans": ["@solana/instruction-plans@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-zp2asevpyMwvhajHYM1aruYpO+xf3LSwHEI2FK6E2hddYZaEhuBy+bz+NZ1ixCyfx3iXcq7MamlFQc2ySHDyUQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/instructions": ["@solana/instructions@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-2mQP/1qqr5PCfaVMzs9KofBjpyS7J1sBV6PidGoX9Dg5/4UgwJJ+7yfCVQPn37l1nKCShm4I+pQAy5vbmrxJmA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/offchain-messages": ["@solana/offchain-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-IYuidJCwfXg5xlh3rkflkA1fbTKWTsip8MdI+znvXm87grfqOYCTd6t/SKiV4BhLl/65Tn0wB/zvZ1cmzJqa1w=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/plugin-core": ["@solana/plugin-core@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-L6N69oNQOAqljH4GnLTaxpwJB0nibW9DrybHZxpGWshyv6b/EvwvkDVRKj5bNqtCG+HRZUHnEhLi1UgZVNkjpQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/programs": ["@solana/programs@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-srn3nEROBxCnBpVz/bvLkVln1BZtk3bS3nuReu3yaeOLkKl8b0h1Zp0YmXVyXHzdMcYahsTvKKLR1ZtLZEyEPA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc": ["@solana/rpc@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-transport-http": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-lGj7ZMVOR3Rf16aByXD6ghrMqw3G8rAMuWCHU4uMKES5M5VLqNv6o71bSyoTxVMGrmYdbALOvCbFMFINAxtoBg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-api": ["@solana/rpc-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b+kftroO8vZFzLHj7Nk/uATS3HOlBUsUqdGg3eTQrW1pFgkyq5yIoEYHeFF7ApUN/SJLTK86U8ofCaXabd2SXA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-129c8meL6CxRg56/HfhkFOpwYteQH9Rt0wyXOXZQx3a3FNpcJLd4JdPvxDsLBE3EupEkXLGVku/1bGKz+F2J+g=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions-api": "6.5.0", "@solana/rpc-subscriptions-channel-websocket": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-EenogPQw9Iy8VUj8anu7xoBnPk7gu1J6sAi4MTVlNVz02sNjdUBJoSS0PRJZuhSM1ktPTtHrNwqlXP8TxPR7jg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/signers": ["@solana/signers@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-AL75/DyDUhc+QQ+VGZT7aRwJNzIUTWvmLNXQRlCVhLRuyroXzZEL2WJBs8xOwbZXjY8weacfYT7UNM8qK6ucDg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-confirmation": ["@solana/transaction-confirmation@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hfdRBq4toZj7DRMgBN3F0VtJpmTAEtcVTTDZoiszoSpSVa2cAvFth6KypIqASVFZyi9t4FKolLP8ASd3/39UQg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/accounts": ["@solana/accounts@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h3zQFjwZjmy+YxgTGOEna6g74Tsn4hTBaBCslwPT4QjqWhywe2JrM2Ab0ANfJcj7g/xrHF5QJ/FnUIcyUTeVfQ=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/accounts": ["@solana/accounts@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h3zQFjwZjmy+YxgTGOEna6g74Tsn4hTBaBCslwPT4QjqWhywe2JrM2Ab0ANfJcj7g/xrHF5QJ/FnUIcyUTeVfQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/codecs": ["@solana/codecs@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/options": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-WfqMqUXk4jcCJQ9nfKqjDcCJN2Pt8/AKe/E78z8OcblFGVJnTzcu2yZpE2gsqM+DJyCVKdQmOY+NS8Uckk5e5w=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/instruction-plans": ["@solana/instruction-plans@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-zp2asevpyMwvhajHYM1aruYpO+xf3LSwHEI2FK6E2hddYZaEhuBy+bz+NZ1ixCyfx3iXcq7MamlFQc2ySHDyUQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/instructions": ["@solana/instructions@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-2mQP/1qqr5PCfaVMzs9KofBjpyS7J1sBV6PidGoX9Dg5/4UgwJJ+7yfCVQPn37l1nKCShm4I+pQAy5vbmrxJmA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages": ["@solana/offchain-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-IYuidJCwfXg5xlh3rkflkA1fbTKWTsip8MdI+znvXm87grfqOYCTd6t/SKiV4BhLl/65Tn0wB/zvZ1cmzJqa1w=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/plugin-core": ["@solana/plugin-core@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-L6N69oNQOAqljH4GnLTaxpwJB0nibW9DrybHZxpGWshyv6b/EvwvkDVRKj5bNqtCG+HRZUHnEhLi1UgZVNkjpQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/programs": ["@solana/programs@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-srn3nEROBxCnBpVz/bvLkVln1BZtk3bS3nuReu3yaeOLkKl8b0h1Zp0YmXVyXHzdMcYahsTvKKLR1ZtLZEyEPA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc": ["@solana/rpc@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-transport-http": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-lGj7ZMVOR3Rf16aByXD6ghrMqw3G8rAMuWCHU4uMKES5M5VLqNv6o71bSyoTxVMGrmYdbALOvCbFMFINAxtoBg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-api": ["@solana/rpc-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b+kftroO8vZFzLHj7Nk/uATS3HOlBUsUqdGg3eTQrW1pFgkyq5yIoEYHeFF7ApUN/SJLTK86U8ofCaXabd2SXA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-129c8meL6CxRg56/HfhkFOpwYteQH9Rt0wyXOXZQx3a3FNpcJLd4JdPvxDsLBE3EupEkXLGVku/1bGKz+F2J+g=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions-api": "6.5.0", "@solana/rpc-subscriptions-channel-websocket": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-EenogPQw9Iy8VUj8anu7xoBnPk7gu1J6sAi4MTVlNVz02sNjdUBJoSS0PRJZuhSM1ktPTtHrNwqlXP8TxPR7jg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/signers": ["@solana/signers@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-AL75/DyDUhc+QQ+VGZT7aRwJNzIUTWvmLNXQRlCVhLRuyroXzZEL2WJBs8xOwbZXjY8weacfYT7UNM8qK6ucDg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/sysvars": ["@solana/sysvars@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iLSS5qj0MWNiGH1LN1E4jhGsXH9D3tWSjwaB6zK9LjhLdVYcPfkosBkj7s0EHHrH03QlwiuFdU0Y2kH8Jcp8kw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation": ["@solana/transaction-confirmation@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hfdRBq4toZj7DRMgBN3F0VtJpmTAEtcVTTDZoiszoSpSVa2cAvFth6KypIqASVFZyi9t4FKolLP8ASd3/39UQg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/accounts": ["@solana/accounts@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h3zQFjwZjmy+YxgTGOEna6g74Tsn4hTBaBCslwPT4QjqWhywe2JrM2Ab0ANfJcj7g/xrHF5QJ/FnUIcyUTeVfQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/codecs": ["@solana/codecs@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/options": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-WfqMqUXk4jcCJQ9nfKqjDcCJN2Pt8/AKe/E78z8OcblFGVJnTzcu2yZpE2gsqM+DJyCVKdQmOY+NS8Uckk5e5w=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/instruction-plans": ["@solana/instruction-plans@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-zp2asevpyMwvhajHYM1aruYpO+xf3LSwHEI2FK6E2hddYZaEhuBy+bz+NZ1ixCyfx3iXcq7MamlFQc2ySHDyUQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/instructions": ["@solana/instructions@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-2mQP/1qqr5PCfaVMzs9KofBjpyS7J1sBV6PidGoX9Dg5/4UgwJJ+7yfCVQPn37l1nKCShm4I+pQAy5vbmrxJmA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/offchain-messages": ["@solana/offchain-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-IYuidJCwfXg5xlh3rkflkA1fbTKWTsip8MdI+znvXm87grfqOYCTd6t/SKiV4BhLl/65Tn0wB/zvZ1cmzJqa1w=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/plugin-core": ["@solana/plugin-core@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-L6N69oNQOAqljH4GnLTaxpwJB0nibW9DrybHZxpGWshyv6b/EvwvkDVRKj5bNqtCG+HRZUHnEhLi1UgZVNkjpQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/programs": ["@solana/programs@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-srn3nEROBxCnBpVz/bvLkVln1BZtk3bS3nuReu3yaeOLkKl8b0h1Zp0YmXVyXHzdMcYahsTvKKLR1ZtLZEyEPA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc": ["@solana/rpc@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-transport-http": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-lGj7ZMVOR3Rf16aByXD6ghrMqw3G8rAMuWCHU4uMKES5M5VLqNv6o71bSyoTxVMGrmYdbALOvCbFMFINAxtoBg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-api": ["@solana/rpc-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b+kftroO8vZFzLHj7Nk/uATS3HOlBUsUqdGg3eTQrW1pFgkyq5yIoEYHeFF7ApUN/SJLTK86U8ofCaXabd2SXA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-129c8meL6CxRg56/HfhkFOpwYteQH9Rt0wyXOXZQx3a3FNpcJLd4JdPvxDsLBE3EupEkXLGVku/1bGKz+F2J+g=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions-api": "6.5.0", "@solana/rpc-subscriptions-channel-websocket": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-EenogPQw9Iy8VUj8anu7xoBnPk7gu1J6sAi4MTVlNVz02sNjdUBJoSS0PRJZuhSM1ktPTtHrNwqlXP8TxPR7jg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/signers": ["@solana/signers@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-AL75/DyDUhc+QQ+VGZT7aRwJNzIUTWvmLNXQRlCVhLRuyroXzZEL2WJBs8xOwbZXjY8weacfYT7UNM8qK6ucDg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-confirmation": ["@solana/transaction-confirmation@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hfdRBq4toZj7DRMgBN3F0VtJpmTAEtcVTTDZoiszoSpSVa2cAvFth6KypIqASVFZyi9t4FKolLP8ASd3/39UQg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/accounts": ["@solana/accounts@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h3zQFjwZjmy+YxgTGOEna6g74Tsn4hTBaBCslwPT4QjqWhywe2JrM2Ab0ANfJcj7g/xrHF5QJ/FnUIcyUTeVfQ=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@noble/curves": ["@noble/curves@2.0.1", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit": ["@solana/kit@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/addresses": "6.5.0", "@solana/codecs": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instruction-plans": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/plugin-core": "6.5.0", "@solana/plugin-interfaces": "6.5.0", "@solana/program-client-core": "6.5.0", "@solana/programs": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/signers": "6.5.0", "@solana/sysvars": "6.5.0", "@solana/transaction-confirmation": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-4ysrtqMRd7CTYRv179gQq4kbw9zMsJCLhWjiyOmLZ4co4ld3L654D8ykW7yqWE5PJwF0hzEfheE7oBscO37nvw=="], + "borsh/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "ethers/@types/node/undici-types": ["undici-types@6.19.8", "", {}, "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="], + + "privacycash/@solana/web3.js/@solana/codecs-numbers": ["@solana/codecs-numbers@2.3.0", "", { "dependencies": { "@solana/codecs-core": "2.3.0", "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg=="], + "privacycash/@solana/web3.js/borsh": ["borsh@0.7.0", "", { "dependencies": { "bn.js": "^5.2.0", "bs58": "^4.0.0", "text-encoding-utf-8": "^1.0.2" } }, "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA=="], "privacycash/@solana/web3.js/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], "privacycash/@solana/web3.js/superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], - "@solana/buffer-layout-utils/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "@coral-xyz/anchor/@solana/web3.js/@solana/codecs-numbers/@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], - "@solana/spl-token-group/@solana/codecs/@solana/codecs-core/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@coral-xyz/anchor/@solana/web3.js/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], - "@solana/spl-token-group/@solana/codecs/@solana/codecs-data-structures/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana-program/system/@solana/kit/@solana/accounts/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], - "@solana/spl-token-group/@solana/codecs/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana-program/system/@solana/kit/@solana/accounts/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], - "@solana/spl-token-group/@solana/codecs/@solana/codecs-strings/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana-program/system/@solana/kit/@solana/accounts/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], - "@solana/spl-token-group/@solana/codecs/@solana/options/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana-program/system/@solana/kit/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], - "@solana/spl-token-group/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "@solana-program/system/@solana/kit/@solana/addresses/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-core/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana-program/system/@solana/kit/@solana/addresses/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-data-structures/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana-program/system/@solana/kit/@solana/addresses/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana-program/system/@solana/kit/@solana/codecs/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-strings/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana-program/system/@solana/kit/@solana/codecs/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/options/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + "@solana-program/system/@solana/kit/@solana/codecs/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], - "@solana/spl-token-metadata/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "@solana-program/system/@solana/kit/@solana/codecs/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], - "@solana/spl-token/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "@solana-program/system/@solana/kit/@solana/codecs/@solana/options": ["@solana/options@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-jdZjSKGCQpsMFK+3CiUEI7W9iGsndi46R4Abk66ULNLDoMsjvfqNy8kqktm0TN0++EX8dKEecpFwxFaA4VlY5g=="], - "privacycash/@solana/web3.js/borsh/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], + "@solana-program/system/@solana/kit/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], - "privacycash/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "@solana-program/system/@solana/kit/@solana/instruction-plans/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], - "@solana/spl-token-group/@solana/codecs/@solana/codecs-core/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/instructions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], - "@solana/spl-token-group/@solana/codecs/@solana/codecs-data-structures/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/keys/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], - "@solana/spl-token-group/@solana/codecs/@solana/codecs-numbers/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/keys/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], - "@solana/spl-token-group/@solana/codecs/@solana/codecs-strings/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/keys/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], - "@solana/spl-token-group/@solana/codecs/@solana/options/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/keys/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-core/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/offchain-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-data-structures/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-numbers/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-strings/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/offchain-messages/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], - "@solana/spl-token-metadata/@solana/codecs/@solana/options/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + "@solana-program/system/@solana/kit/@solana/offchain-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], - "privacycash/@solana/web3.js/borsh/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + "@solana-program/system/@solana/kit/@solana/rpc/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@solana-program/system/@solana/kit/@solana/rpc/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@solana-program/system/@solana/kit/@solana/rpc/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@solana-program/system/@solana/kit/@solana/rpc/@solana/rpc-transport-http": ["@solana/rpc-transport-http@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "undici-types": "^7.22.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-A3qgDGiUIHdtAfc2OyazlQa7IvRh+xyl0dmzaZlz4rY7Oc7Xk8jmXtaKGkgXihLyAK3oVSqSz5gn9yEfx55eXA=="], + + "@solana-program/system/@solana/kit/@solana/rpc-api/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana-program/system/@solana/kit/@solana/rpc-api/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana-program/system/@solana/kit/@solana/rpc-api/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@solana-program/system/@solana/kit/@solana/rpc-api/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-smqNjT2C5Vf9nWGIwiYOLOP744gRWKi2i2g0i3ZVdsfoouvB0d/WTQ2bbWq47MrdV8FSuGnjAOM3dRIwYmYOWw=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/subscribable": "6.5.0", "ws": "^8.19.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-xRKH3ZwIoV9Zua9Gp0RR0eL8lXNgx+iNIkE3F0ROlOzI48lt4lRJ7jLrHQCN3raVtkatFVuEyZ7e9eLHK9zhAw=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Mi8g9rNS2lG7lyNkDhOVfQVfDC7hXKgH+BlI5qKGk+8cfyU7VDq6tVjDysu6kBWGOPHZxyCvcL6+xW/EkdVoAg=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions/@solana/subscribable": ["@solana/subscribable@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Jmy2NYmQN68FsQzKJ5CY3qrxXBJdb5qtJKp8B4byPPO5liKNIsC59HpT0Tq8MCNSfBMmOkWF2rrVot2/g1iB1A=="], + + "@solana-program/system/@solana/kit/@solana/rpc-types/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana-program/system/@solana/kit/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana-program/system/@solana/kit/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana-program/system/@solana/kit/@solana/signers/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana-program/system/@solana/kit/@solana/signers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana-program/system/@solana/kit/@solana/sysvars/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana-program/system/@solana/kit/@solana/sysvars/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana-program/system/@solana/kit/@solana/sysvars/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana-program/system/@solana/kit/@solana/transaction-confirmation/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@solana-program/system/@solana/kit/@solana/transaction-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana-program/system/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana-program/system/@solana/kit/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/transaction-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana-program/system/@solana/kit/@solana/transactions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana-program/system/@solana/kit/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana-program/system/@solana/kit/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/transactions/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana-program/system/@solana/kit/@solana/transactions/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/buffer-layout-utils/@solana/web3.js/@solana/codecs-numbers/@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], + + "@solana/buffer-layout-utils/@solana/web3.js/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], + + "@solana/buffer-layout-utils/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + + "@solana/plugin-interfaces/@solana/addresses/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/addresses/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/instructions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transaction-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transaction-messages/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transaction-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transactions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transactions/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transactions/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transactions/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/plugin-interfaces/@solana/keys/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/keys/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/plugin-interfaces/@solana/rpc-spec/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/plugin-interfaces/@solana/rpc-subscriptions-spec/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/plugin-interfaces/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/rpc-types/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/offchain-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/offchain-messages/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transaction-messages/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transactions/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transactions/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/program-client-core/@solana/accounts/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/accounts/@solana/rpc-spec/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@solana/program-client-core/@solana/accounts/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/accounts/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/addresses/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/keys/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/keys/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/keys/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/keys/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/keys/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-spec/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-transformers/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-transformers/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transaction-messages/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transaction-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transactions/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transactions/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana/program-client-core/@solana/signers/@solana/keys/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@solana/program-client-core/@solana/signers/@solana/keys/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/signers/@solana/offchain-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/program-client-core/@solana/signers/@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/offchain-messages/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/signers/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/program-client-core/@solana/signers/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/transaction-messages/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/program-client-core/@solana/signers/@solana/transaction-messages/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@solana/program-client-core/@solana/signers/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@solana/program-client-core/@solana/signers/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/transactions/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/signers/@solana/transactions/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@solana/program-client-core/@solana/signers/@solana/transactions/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@solana/spl-token-group/@solana/codecs/@solana/codecs-core/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-group/@solana/codecs/@solana/codecs-data-structures/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-group/@solana/codecs/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-group/@solana/codecs/@solana/codecs-strings/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-group/@solana/codecs/@solana/options/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-group/@solana/web3.js/@solana/codecs-numbers/@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], + + "@solana/spl-token-group/@solana/web3.js/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], + + "@solana/spl-token-group/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-core/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-data-structures/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-strings/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/options/@solana/errors": ["@solana/errors@2.0.0-rc.1", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="], + + "@solana/spl-token-metadata/@solana/web3.js/@solana/codecs-numbers/@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], + + "@solana/spl-token-metadata/@solana/web3.js/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], + + "@solana/spl-token-metadata/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + + "@solana/spl-token/@solana/web3.js/@solana/codecs-numbers/@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], + + "@solana/spl-token/@solana/web3.js/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], + + "@solana/spl-token/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/accounts/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/accounts/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/accounts/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/addresses/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/addresses/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/addresses/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/codecs/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/codecs/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/codecs/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/codecs/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/codecs/@solana/options": ["@solana/options@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-jdZjSKGCQpsMFK+3CiUEI7W9iGsndi46R4Abk66ULNLDoMsjvfqNy8kqktm0TN0++EX8dKEecpFwxFaA4VlY5g=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/instruction-plans/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/instructions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/keys/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/keys/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/keys/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/keys/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/offchain-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc/@solana/rpc-transport-http": ["@solana/rpc-transport-http@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "undici-types": "^7.22.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-A3qgDGiUIHdtAfc2OyazlQa7IvRh+xyl0dmzaZlz4rY7Oc7Xk8jmXtaKGkgXihLyAK3oVSqSz5gn9yEfx55eXA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-api/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-api/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-api/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-api/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-smqNjT2C5Vf9nWGIwiYOLOP744gRWKi2i2g0i3ZVdsfoouvB0d/WTQ2bbWq47MrdV8FSuGnjAOM3dRIwYmYOWw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/subscribable": "6.5.0", "ws": "^8.19.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-xRKH3ZwIoV9Zua9Gp0RR0eL8lXNgx+iNIkE3F0ROlOzI48lt4lRJ7jLrHQCN3raVtkatFVuEyZ7e9eLHK9zhAw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Mi8g9rNS2lG7lyNkDhOVfQVfDC7hXKgH+BlI5qKGk+8cfyU7VDq6tVjDysu6kBWGOPHZxyCvcL6+xW/EkdVoAg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions/@solana/subscribable": ["@solana/subscribable@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Jmy2NYmQN68FsQzKJ5CY3qrxXBJdb5qtJKp8B4byPPO5liKNIsC59HpT0Tq8MCNSfBMmOkWF2rrVot2/g1iB1A=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-types/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/signers/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/signers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-confirmation/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transactions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transactions/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transactions/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/accounts/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/accounts/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/accounts/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/rpc-types/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/accounts/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/accounts/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/accounts/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/options": ["@solana/options@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-jdZjSKGCQpsMFK+3CiUEI7W9iGsndi46R4Abk66ULNLDoMsjvfqNy8kqktm0TN0++EX8dKEecpFwxFaA4VlY5g=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/instruction-plans/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/instructions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/rpc-transport-http": ["@solana/rpc-transport-http@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "undici-types": "^7.22.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-A3qgDGiUIHdtAfc2OyazlQa7IvRh+xyl0dmzaZlz4rY7Oc7Xk8jmXtaKGkgXihLyAK3oVSqSz5gn9yEfx55eXA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-smqNjT2C5Vf9nWGIwiYOLOP744gRWKi2i2g0i3ZVdsfoouvB0d/WTQ2bbWq47MrdV8FSuGnjAOM3dRIwYmYOWw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/subscribable": "6.5.0", "ws": "^8.19.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-xRKH3ZwIoV9Zua9Gp0RR0eL8lXNgx+iNIkE3F0ROlOzI48lt4lRJ7jLrHQCN3raVtkatFVuEyZ7e9eLHK9zhAw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Mi8g9rNS2lG7lyNkDhOVfQVfDC7hXKgH+BlI5qKGk+8cfyU7VDq6tVjDysu6kBWGOPHZxyCvcL6+xW/EkdVoAg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/subscribable": ["@solana/subscribable@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Jmy2NYmQN68FsQzKJ5CY3qrxXBJdb5qtJKp8B4byPPO5liKNIsC59HpT0Tq8MCNSfBMmOkWF2rrVot2/g1iB1A=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/signers/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/signers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/sysvars/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/sysvars/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/sysvars/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/accounts/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/accounts/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/accounts/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/addresses/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/addresses/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/addresses/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/codecs/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/codecs/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/codecs/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/codecs/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/codecs/@solana/options": ["@solana/options@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-jdZjSKGCQpsMFK+3CiUEI7W9iGsndi46R4Abk66ULNLDoMsjvfqNy8kqktm0TN0++EX8dKEecpFwxFaA4VlY5g=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/instruction-plans/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/instructions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/keys/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/keys/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/keys/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/keys/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/offchain-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc/@solana/rpc-transport-http": ["@solana/rpc-transport-http@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "undici-types": "^7.22.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-A3qgDGiUIHdtAfc2OyazlQa7IvRh+xyl0dmzaZlz4rY7Oc7Xk8jmXtaKGkgXihLyAK3oVSqSz5gn9yEfx55eXA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-api/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-api/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-api/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-api/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-smqNjT2C5Vf9nWGIwiYOLOP744gRWKi2i2g0i3ZVdsfoouvB0d/WTQ2bbWq47MrdV8FSuGnjAOM3dRIwYmYOWw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/subscribable": "6.5.0", "ws": "^8.19.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-xRKH3ZwIoV9Zua9Gp0RR0eL8lXNgx+iNIkE3F0ROlOzI48lt4lRJ7jLrHQCN3raVtkatFVuEyZ7e9eLHK9zhAw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Mi8g9rNS2lG7lyNkDhOVfQVfDC7hXKgH+BlI5qKGk+8cfyU7VDq6tVjDysu6kBWGOPHZxyCvcL6+xW/EkdVoAg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions/@solana/subscribable": ["@solana/subscribable@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Jmy2NYmQN68FsQzKJ5CY3qrxXBJdb5qtJKp8B4byPPO5liKNIsC59HpT0Tq8MCNSfBMmOkWF2rrVot2/g1iB1A=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-types/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/signers/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/signers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-confirmation/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transactions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transactions/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transactions/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/accounts/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/accounts/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/accounts/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/rpc-types/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/accounts": ["@solana/accounts@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-h3zQFjwZjmy+YxgTGOEna6g74Tsn4hTBaBCslwPT4QjqWhywe2JrM2Ab0ANfJcj7g/xrHF5QJ/FnUIcyUTeVfQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/addresses": ["@solana/addresses@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iD4/u3CWchQcPofbwzteaE9RnFJSoi654Rnhru5fOu6U2XOte3+7t50d6OxdxQ109ho2LqZyVtyCo2Wb7u1aJQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/codecs": ["@solana/codecs@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/options": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-WfqMqUXk4jcCJQ9nfKqjDcCJN2Pt8/AKe/E78z8OcblFGVJnTzcu2yZpE2gsqM+DJyCVKdQmOY+NS8Uckk5e5w=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/errors": ["@solana/errors@6.5.0", "", { "dependencies": { "chalk": "5.6.2", "commander": "14.0.3" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "errors": "bin/cli.mjs" } }, "sha512-XPc0I8Ck6vgx8Uu+LVLewx/1RWDkXkY3lU+1aN1kmbrPAQWbX4Txk7GPmuIIFpyys8o5aKocYfNxJOPKvfaQhg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/functional": ["@solana/functional@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-/KYgY7ZpBJfkN8+qlIvxuBpxv32U9jHXIOOJh3U5xk8Ncsa9Ex5VwbU9NkOf43MJjoIamsP0vARCHjcqJwe5JQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/instruction-plans": ["@solana/instruction-plans@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-zp2asevpyMwvhajHYM1aruYpO+xf3LSwHEI2FK6E2hddYZaEhuBy+bz+NZ1ixCyfx3iXcq7MamlFQc2ySHDyUQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/instructions": ["@solana/instructions@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-2mQP/1qqr5PCfaVMzs9KofBjpyS7J1sBV6PidGoX9Dg5/4UgwJJ+7yfCVQPn37l1nKCShm4I+pQAy5vbmrxJmA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/keys": ["@solana/keys@6.5.0", "", { "dependencies": { "@solana/assertions": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-CN5jmodX9j5CZKrWLM5XGaRlrLl/Ebl4vgqDXrnwC2NiSfUslLsthuORMuVUTDqkzBX/jd/tgVXFRH2NYNzREQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages": ["@solana/offchain-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-IYuidJCwfXg5xlh3rkflkA1fbTKWTsip8MdI+znvXm87grfqOYCTd6t/SKiV4BhLl/65Tn0wB/zvZ1cmzJqa1w=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/plugin-core": ["@solana/plugin-core@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-L6N69oNQOAqljH4GnLTaxpwJB0nibW9DrybHZxpGWshyv6b/EvwvkDVRKj5bNqtCG+HRZUHnEhLi1UgZVNkjpQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/programs": ["@solana/programs@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-srn3nEROBxCnBpVz/bvLkVln1BZtk3bS3nuReu3yaeOLkKl8b0h1Zp0YmXVyXHzdMcYahsTvKKLR1ZtLZEyEPA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc": ["@solana/rpc@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-api": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-transport-http": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-lGj7ZMVOR3Rf16aByXD6ghrMqw3G8rAMuWCHU4uMKES5M5VLqNv6o71bSyoTxVMGrmYdbALOvCbFMFINAxtoBg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-api": ["@solana/rpc-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-parsed-types": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b+kftroO8vZFzLHj7Nk/uATS3HOlBUsUqdGg3eTQrW1pFgkyq5yIoEYHeFF7ApUN/SJLTK86U8ofCaXabd2SXA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-parsed-types": ["@solana/rpc-parsed-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-129c8meL6CxRg56/HfhkFOpwYteQH9Rt0wyXOXZQx3a3FNpcJLd4JdPvxDsLBE3EupEkXLGVku/1bGKz+F2J+g=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions": ["@solana/rpc-subscriptions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/fast-stable-stringify": "6.5.0", "@solana/functional": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-subscriptions-api": "6.5.0", "@solana/rpc-subscriptions-channel-websocket": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-EenogPQw9Iy8VUj8anu7xoBnPk7gu1J6sAi4MTVlNVz02sNjdUBJoSS0PRJZuhSM1ktPTtHrNwqlXP8TxPR7jg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-types": ["@solana/rpc-types@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/nominal-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hxts27+Z2VNv4IjXGcXkqbj/MgrN9Xtw/4iE1qZk68T2OAb5vA4b8LHchsOHmHvrzZfo8XDvB9mModCdM3JPsQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/signers": ["@solana/signers@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/offchain-messages": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-AL75/DyDUhc+QQ+VGZT7aRwJNzIUTWvmLNXQRlCVhLRuyroXzZEL2WJBs8xOwbZXjY8weacfYT7UNM8qK6ucDg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/sysvars": ["@solana/sysvars@6.5.0", "", { "dependencies": { "@solana/accounts": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-iLSS5qj0MWNiGH1LN1E4jhGsXH9D3tWSjwaB6zK9LjhLdVYcPfkosBkj7s0EHHrH03QlwiuFdU0Y2kH8Jcp8kw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation": ["@solana/transaction-confirmation@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/keys": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc": "6.5.0", "@solana/rpc-subscriptions": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-hfdRBq4toZj7DRMgBN3F0VtJpmTAEtcVTTDZoiszoSpSVa2cAvFth6KypIqASVFZyi9t4FKolLP8ASd3/39UQg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages": ["@solana/transaction-messages@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-ueXkm5xaRlqYBFAlABhaCKK/DuzIYSot0FybwSDeOQCDy2hvU9Zda16Iwa1n56M0fG+XUvFJz2woG3u9DhQh1g=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transactions": ["@solana/transactions@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/instructions": "6.5.0", "@solana/keys": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-b3eJrrGmwpk64VLHjOrmXKAahPpba42WX/FqSUn4WRXPoQjga7Mb57yp+EaRVeQfjszKCkF+13yu+ni6iv2NFQ=="], + + "privacycash/@solana/web3.js/@solana/codecs-numbers/@solana/codecs-core": ["@solana/codecs-core@2.3.0", "", { "dependencies": { "@solana/errors": "2.3.0" }, "peerDependencies": { "typescript": ">=5.3.3" } }, "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw=="], + + "privacycash/@solana/web3.js/@solana/codecs-numbers/@solana/errors": ["@solana/errors@2.3.0", "", { "dependencies": { "chalk": "^5.4.1", "commander": "^14.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ=="], + + "privacycash/@solana/web3.js/borsh/bs58": ["bs58@4.0.1", "", { "dependencies": { "base-x": "^3.0.2" } }, "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw=="], + + "privacycash/@solana/web3.js/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + + "@coral-xyz/anchor/@solana/web3.js/@solana/codecs-numbers/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana-program/system/@solana/kit/@solana/accounts/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/addresses/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/codecs/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/codecs/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/codecs/@solana/options/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/keys/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/offchain-messages/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/rpc-api/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/rpc-api/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + + "@solana-program/system/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana-program/system/@solana/kit/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/rpc/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@solana-program/system/@solana/kit/@solana/sysvars/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@solana-program/system/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana-program/system/@solana/kit/@solana/transactions/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/buffer-layout-utils/@solana/web3.js/@solana/codecs-numbers/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/instruction-plans/@solana/transactions/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/offchain-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/offchain-messages/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/plugin-interfaces/@solana/signers/@solana/transactions/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/keys/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transactions/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/rpc-api/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/keys/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/offchain-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/offchain-messages/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/transaction-messages/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/transaction-messages/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@solana/program-client-core/@solana/signers/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/transactions/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/transactions/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/spl-token-group/@solana/codecs/@solana/codecs-core/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-group/@solana/codecs/@solana/codecs-data-structures/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-group/@solana/codecs/@solana/codecs-numbers/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-group/@solana/codecs/@solana/codecs-strings/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-group/@solana/codecs/@solana/options/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-group/@solana/web3.js/@solana/codecs-numbers/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-core/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-data-structures/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-numbers/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/codecs-strings/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-metadata/@solana/codecs/@solana/options/@solana/errors/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "@solana/spl-token-metadata/@solana/web3.js/@solana/codecs-numbers/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@solana/spl-token/@solana/web3.js/@solana/codecs-numbers/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/accounts/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/addresses/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/codecs/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/codecs/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/codecs/@solana/options/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/keys/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-api/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-api/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/rpc/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/kit/@solana/transactions/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/accounts/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/accounts/@solana/addresses/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/accounts/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/accounts/@solana/rpc-spec/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/rpc-types/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/arcium-codama/@solana/sysvars/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/accounts/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/options/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/sysvars/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/accounts/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/addresses/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/codecs/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/codecs/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/codecs/@solana/options/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/keys/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/offchain-messages/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-api/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-api/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/rpc/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/kit/@solana/transactions/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/accounts/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/accounts/@solana/addresses/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/accounts/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/accounts/@solana/rpc-spec/@solana/rpc-spec-types": ["@solana/rpc-spec-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-XasJp+sOW6PLfNoalzoLnm+j3LEZF8XOQmSrOqv9AGrGxQckkuOf6iXZucWTqeNKdstsOpU28BN2B6qOavfRzQ=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/rpc-types/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/umbra-codama/@solana/sysvars/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/accounts/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/accounts/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/accounts/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/options": ["@solana/options@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-data-structures": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/codecs-strings": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-jdZjSKGCQpsMFK+3CiUEI7W9iGsndi46R4Abk66ULNLDoMsjvfqNy8kqktm0TN0++EX8dKEecpFwxFaA4VlY5g=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/instruction-plans/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/instructions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/assertions": ["@solana/assertions@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rEAf40TtC9r6EtJFLe39WID4xnTNT6hdOVRfD1xDzmIQdVOyGgIbJGt2FAuB/uQDKLWneWMnvGDBim+K61Bljw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/rpc-transport-http": ["@solana/rpc-transport-http@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "undici-types": "^7.22.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-A3qgDGiUIHdtAfc2OyazlQa7IvRh+xyl0dmzaZlz4rY7Oc7Xk8jmXtaKGkgXihLyAK3oVSqSz5gn9yEfx55eXA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/rpc-spec": ["@solana/rpc-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/rpc-spec-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-k4O7Kg0QfVyjUqQovL+WZJ1iuPzq0jiUDcWYgvzFjYVxQDVOIZmAol7yTvLEL4maVmf0tNFDsrDaB6t75MKRZA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/fast-stable-stringify": ["@solana/fast-stable-stringify@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-5ATQDwBVZMoenX5KS23uFswtaAGoaZB9TthzUXle3tkU3tOfgQTuEWEoqEBYc7ct0sK6LtyE1XXT/NP5YvAkkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-api": ["@solana/rpc-subscriptions-api@6.5.0", "", { "dependencies": { "@solana/addresses": "6.5.0", "@solana/keys": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/rpc-transformers": "6.5.0", "@solana/rpc-types": "6.5.0", "@solana/transaction-messages": "6.5.0", "@solana/transactions": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-smqNjT2C5Vf9nWGIwiYOLOP744gRWKi2i2g0i3ZVdsfoouvB0d/WTQ2bbWq47MrdV8FSuGnjAOM3dRIwYmYOWw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket": ["@solana/rpc-subscriptions-channel-websocket@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/rpc-subscriptions-spec": "6.5.0", "@solana/subscribable": "6.5.0", "ws": "^8.19.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-xRKH3ZwIoV9Zua9Gp0RR0eL8lXNgx+iNIkE3F0ROlOzI48lt4lRJ7jLrHQCN3raVtkatFVuEyZ7e9eLHK9zhAw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-spec": ["@solana/rpc-subscriptions-spec@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/promises": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/subscribable": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Mi8g9rNS2lG7lyNkDhOVfQVfDC7hXKgH+BlI5qKGk+8cfyU7VDq6tVjDysu6kBWGOPHZxyCvcL6+xW/EkdVoAg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers": ["@solana/rpc-transformers@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0", "@solana/functional": "6.5.0", "@solana/nominal-types": "6.5.0", "@solana/rpc-spec-types": "6.5.0", "@solana/rpc-types": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-kS0d+LuuSLfsod2cm2xp0mNj65PL1aomwu6VKtubmsdESwPXHIaI9XrpkPCBuhNSz1SwVp4OkfK5O/VOOHYHSw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/subscribable": ["@solana/subscribable@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Jmy2NYmQN68FsQzKJ5CY3qrxXBJdb5qtJKp8B4byPPO5liKNIsC59HpT0Tq8MCNSfBMmOkWF2rrVot2/g1iB1A=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/signers/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/signers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/sysvars/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/sysvars/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/sysvars/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation/@solana/promises": ["@solana/promises@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n5rsA3YwOO2nUst6ghuVw6RSnuZQYqevqBKqVYbw11Z4XezsoQ6hb78opW3J9YNYapw9wLWy6tEfUsJjY+xtGw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-data-structures": ["@solana/codecs-data-structures@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Rxi5zVJ1YA+E6FoSQ7RHP+3DF4U7ski0mJ3H5CsYQP24QLRlBqWB3X6m2n9GHT5O3s49UR0sqeF4oyq0lF8bKw=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-strings": ["@solana/codecs-strings@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/codecs-numbers": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "fastestsmallesttextencoderdecoder": "^1.0.22", "typescript": "^5.0.0" }, "optionalPeers": ["fastestsmallesttextencoderdecoder", "typescript"] }, "sha512-9TuQQxumA9gWJeJzbv1GUg0+o0nZp204EijX3efR+lgBOKbkU7W0UWp33ygAZ+RvWE+kTs48ePoYoJ7UHpyxkQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "privacycash/@solana/web3.js/@solana/codecs-numbers/@solana/errors/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], + + "privacycash/@solana/web3.js/borsh/bs58/base-x": ["base-x@3.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA=="], + + "@solana/program-client-core/@solana/instruction-plans/@solana/transaction-messages/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@solana/program-client-core/@solana/signers/@solana/transaction-messages/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/accounts/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/addresses/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/codecs/@solana/options/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/keys/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/offchain-messages/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-api/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-subscriptions-channel-websocket/ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-subscriptions/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc-types/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/rpc/@solana/rpc-transformers/@solana/nominal-types": ["@solana/nominal-types@6.5.0", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-HngIM2nlaDPXk0EDX0PklFqpjGDKuOFnlEKS0bfr2F9CorFwiNhNjhb9lPH+FdgsogD1wJ8wgLMMk1LZWn5kgQ=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/sysvars/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-core": ["@solana/codecs-core@6.5.0", "", { "dependencies": { "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-Wb+YUj7vUKz5CxqZkrkugtQjxOP2fkMKnffySRlAmVAkpRnQvBY/2eP3VJAKTgDD4ru9xHSIQSpDu09hC/cQZg=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-confirmation/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transaction-messages/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-data-structures/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], + + "@umbra-privacy/web-zk-prover/@umbra-privacy/sdk/@solana/kit/@solana/transactions/@solana/codecs-strings/@solana/codecs-numbers": ["@solana/codecs-numbers@6.5.0", "", { "dependencies": { "@solana/codecs-core": "6.5.0", "@solana/errors": "6.5.0" }, "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-gU/7eYqD+zl2Kwzo7ctt7YHaxF+c3RX164F+iU4X02dwq8DGVcypp+kmEF1QaO6OiShtdryTxhL+JJmEBjhdfA=="], } } diff --git a/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_balance.jsonc b/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_balance.jsonc index 9e6fcad6c..ad3561787 100644 --- a/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_balance.jsonc +++ b/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_balance.jsonc @@ -16,7 +16,7 @@ ], "required": true, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key || public key)" + "tooltip": "Local Solana keypair with secret key bytes. Flow adapter wallets are not supported by the Privacy Cash SDK." }, { "name": "rpc_url", diff --git a/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_deposit.jsonc b/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_deposit.jsonc index f8b5651fe..2b25a3ea0 100644 --- a/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_deposit.jsonc +++ b/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_deposit.jsonc @@ -16,7 +16,7 @@ ], "required": true, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key || public key)" + "tooltip": "Local Solana keypair with secret key bytes. Flow adapter wallets are not supported by the Privacy Cash SDK." }, { "name": "rpc_url", diff --git a/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_withdraw.jsonc b/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_withdraw.jsonc index ff2f0404d..91ec99287 100644 --- a/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_withdraw.jsonc +++ b/crates/cmds-bun/node-definitions/privacy_cash/privacy_cash_withdraw.jsonc @@ -16,7 +16,7 @@ ], "required": true, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key || public key)" + "tooltip": "Local Solana keypair with secret key bytes. Flow adapter wallets are not supported by the Privacy Cash SDK." }, { "name": "rpc_url", @@ -39,11 +39,12 @@ { "name": "recipient", "type_bounds": [ + "pubkey", "string" ], "required": true, "passthrough": false, - "tooltip": "Recipient address (Base58 public key)" + "tooltip": "Recipient wallet address" } ], "outputs": [ diff --git a/crates/cmds-bun/node-definitions/relay/email_relay_receive.jsonc b/crates/cmds-bun/node-definitions/relay/email_relay_receive.jsonc new file mode 100644 index 000000000..b211d87eb --- /dev/null +++ b/crates/cmds-bun/node-definitions/relay/email_relay_receive.jsonc @@ -0,0 +1,80 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "resend_receive_email", + "prefix": "resend", + "description": "Parse an inbound email from a Resend or SendGrid webhook. Extracts sender, recipient, subject, and body. Strips quoted reply content automatically.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/relay/email_relay_receive.ts", + "ports": { + "inputs": [ + { + "name": "webhook_payload", + "type_bounds": ["free"], + "required": true, + "passthrough": false, + "tooltip": "Parsed webhook payload from Resend or SendGrid inbound parse" + } + ], + "outputs": [ + { + "name": "from", + "type": "string", + "tooltip": "Sender email address" + }, + { + "name": "to", + "type": "string", + "tooltip": "Recipient email address" + }, + { + "name": "subject", + "type": "string", + "tooltip": "Email subject line" + }, + { + "name": "body", + "type": "string", + "tooltip": "Cleaned message body (quoted reply content stripped)" + }, + { + "name": "raw_body", + "type": "string", + "tooltip": "Full original plain text body" + }, + { + "name": "html_body", + "type": "string", + "tooltip": "HTML body if present" + }, + { + "name": "headers", + "type": "object", + "tooltip": "Email headers" + }, + { + "name": "received_at", + "type": "string", + "tooltip": "ISO timestamp when parsed" + } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Resend", + "program": "resend", + "category": "notification", + "icon_url": null, + "tags": ["email", "resend", "webhook", "inbound", "receive"] + }, + "external_version": { + "program_id": "resend_webhook", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": null + } +} diff --git a/crates/cmds-bun/node-definitions/relay/email_relay_send.jsonc b/crates/cmds-bun/node-definitions/relay/email_relay_send.jsonc new file mode 100644 index 000000000..07b899289 --- /dev/null +++ b/crates/cmds-bun/node-definitions/relay/email_relay_send.jsonc @@ -0,0 +1,106 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "resend_send_email", + "prefix": "resend", + "description": "Send an email via the Resend API. Supports text, HTML, reply-to, CC, and BCC. Use with upstream nodes to build relay addresses for privacy patterns.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/relay/email_relay_send.ts", + "ports": { + "inputs": [ + { + "name": "api_key", + "type_bounds": ["string"], + "required": true, + "passthrough": false, + "tooltip": "Resend API key" + }, + { + "name": "from", + "type_bounds": ["string"], + "required": true, + "passthrough": false, + "tooltip": "Sender email address (e.g. 'Name ')" + }, + { + "name": "to", + "type_bounds": ["string"], + "required": true, + "passthrough": false, + "tooltip": "Recipient email address" + }, + { + "name": "subject", + "type_bounds": ["string"], + "required": true, + "passthrough": false, + "tooltip": "Email subject line" + }, + { + "name": "text", + "type_bounds": ["string"], + "required": false, + "passthrough": false, + "tooltip": "Plain text body (provide text and/or html)" + }, + { + "name": "html", + "type_bounds": ["string"], + "required": false, + "passthrough": false, + "tooltip": "HTML body (provide text and/or html)" + }, + { + "name": "reply_to", + "type_bounds": ["string"], + "required": false, + "passthrough": false, + "tooltip": "Reply-to address (useful for relay patterns)" + }, + { + "name": "cc", + "type_bounds": ["string"], + "required": false, + "passthrough": false, + "tooltip": "CC recipient(s) — comma-separated or single address" + }, + { + "name": "bcc", + "type_bounds": ["string"], + "required": false, + "passthrough": false, + "tooltip": "BCC recipient(s) — comma-separated or single address" + } + ], + "outputs": [ + { + "name": "message_id", + "type": "string", + "tooltip": "Resend message ID" + }, + { + "name": "status", + "type": "string", + "tooltip": "Send status" + } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Resend", + "program": "resend", + "category": "notification", + "icon_url": null, + "tags": ["email", "resend", "notification", "send"] + }, + "external_version": { + "program_id": "resend_api", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": "https://api.resend.com", + "api_version": null, + "source_repo": "https://github.com/resend/resend-node" + } +} diff --git a/crates/cmds-bun/node-definitions/relay/sms_relay_receive.jsonc b/crates/cmds-bun/node-definitions/relay/sms_relay_receive.jsonc new file mode 100644 index 000000000..b78040c0e --- /dev/null +++ b/crates/cmds-bun/node-definitions/relay/sms_relay_receive.jsonc @@ -0,0 +1,80 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "twilio_receive_sms", + "prefix": "twilio", + "description": "Parse an inbound SMS/MMS from a Twilio webhook. Extracts sender, recipient, body, media URLs, and geo-location data. Wire outputs to Deno/Rhai for relay routing.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/relay/sms_relay_receive.ts", + "ports": { + "inputs": [ + { + "name": "webhook_payload", + "type_bounds": ["free"], + "required": true, + "passthrough": false, + "tooltip": "Parsed webhook payload from Twilio" + } + ], + "outputs": [ + { + "name": "from", + "type": "string", + "tooltip": "Sender phone number" + }, + { + "name": "to", + "type": "string", + "tooltip": "Twilio number that received the message" + }, + { + "name": "body", + "type": "string", + "tooltip": "SMS/MMS message body" + }, + { + "name": "message_sid", + "type": "string", + "tooltip": "Twilio Message SID" + }, + { + "name": "num_media", + "type": "number", + "tooltip": "Number of media attachments" + }, + { + "name": "media_urls", + "type": "json", + "tooltip": "Array of media attachment URLs (MMS)" + }, + { + "name": "from_location", + "type": "string", + "tooltip": "Sender's location (City, State, Country)" + }, + { + "name": "received_at", + "type": "string", + "tooltip": "ISO timestamp when parsed" + } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Twilio", + "program": "twilio", + "category": "notification", + "icon_url": null, + "tags": ["sms", "twilio", "webhook", "inbound", "receive", "mms"] + }, + "external_version": { + "program_id": "twilio_webhook", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": null + } +} diff --git a/crates/cmds-bun/node-definitions/relay/sms_relay_send.jsonc b/crates/cmds-bun/node-definitions/relay/sms_relay_send.jsonc new file mode 100644 index 000000000..05d6e3968 --- /dev/null +++ b/crates/cmds-bun/node-definitions/relay/sms_relay_send.jsonc @@ -0,0 +1,97 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "twilio_send_sms", + "prefix": "twilio", + "description": "Send an SMS or MMS via the Twilio API. Supports text messages, media URLs (MMS), and status callbacks. Use with upstream nodes to construct relay message bodies.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/relay/sms_relay_send.ts", + "ports": { + "inputs": [ + { + "name": "account_sid", + "type_bounds": ["string"], + "required": true, + "passthrough": false, + "tooltip": "Twilio Account SID" + }, + { + "name": "auth_token", + "type_bounds": ["string"], + "required": true, + "passthrough": false, + "tooltip": "Twilio Auth Token" + }, + { + "name": "from", + "type_bounds": ["string"], + "required": true, + "passthrough": false, + "tooltip": "Twilio phone number to send from (E.164 format, e.g. +15551234567)" + }, + { + "name": "to", + "type_bounds": ["string"], + "required": true, + "passthrough": false, + "tooltip": "Recipient phone number (E.164 format)" + }, + { + "name": "body", + "type_bounds": ["string"], + "required": true, + "passthrough": false, + "tooltip": "Message body text (max 1600 chars)" + }, + { + "name": "media_url", + "type_bounds": ["string"], + "required": false, + "passthrough": false, + "tooltip": "URL of media to attach (MMS). Supports images, GIFs, video." + }, + { + "name": "status_callback", + "type_bounds": ["string"], + "required": false, + "passthrough": false, + "tooltip": "URL for delivery status webhooks" + } + ], + "outputs": [ + { + "name": "message_sid", + "type": "string", + "tooltip": "Twilio Message SID" + }, + { + "name": "status", + "type": "string", + "tooltip": "Message status (queued/sending/sent/delivered/failed)" + }, + { + "name": "date_created", + "type": "string", + "tooltip": "Timestamp when Twilio accepted the message" + } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Twilio", + "program": "twilio", + "category": "notification", + "icon_url": null, + "tags": ["sms", "twilio", "notification", "send", "mms"] + }, + "external_version": { + "program_id": "twilio_api", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": "https://api.twilio.com", + "api_version": "2010-04-01", + "source_repo": "https://github.com/twilio/twilio-node" + } +} diff --git a/crates/cmds-bun/node-definitions/solana/transfer_sol.jsonc b/crates/cmds-bun/node-definitions/solana/transfer_sol.jsonc index fcffc29c1..90b150aa1 100644 --- a/crates/cmds-bun/node-definitions/solana/transfer_sol.jsonc +++ b/crates/cmds-bun/node-definitions/solana/transfer_sol.jsonc @@ -16,7 +16,7 @@ ], "required": false, "passthrough": false, - "tooltip": "Transaction fee payer (defaults to sender)" + "tooltip": "Transaction fee payer. Accepts local keypairs or Flow wallet adapter outputs (defaults to sender)." }, { "name": "sender", @@ -25,7 +25,7 @@ ], "required": true, "passthrough": false, - "tooltip": "Sender keypair that signs and sends SOL" + "tooltip": "Sender wallet. Accepts local keypairs or Flow wallet adapter outputs." }, { "name": "recipient", diff --git a/crates/cmds-bun/node-definitions/token_acl/gate_add_wallet.jsonc b/crates/cmds-bun/node-definitions/token_acl/gate_add_wallet.jsonc new file mode 100644 index 000000000..33605d557 --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/gate_add_wallet.jsonc @@ -0,0 +1,39 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "gate_add_wallet", + "prefix": "token_acl", + "description": "Token ACL Gate: add a wallet entry to an allow/block list (creates per-wallet PDA).", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/gate_add_wallet.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "List authority" }, + { "name": "list_config", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "ListConfig PDA" }, + { "name": "wallet", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Wallet to add to list" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl_gate", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "abl-gate", "srfc37", "allowlist"] + }, + "external_version": { + "program_id": "GATEzzqxhJnsWF6vHRsgtixxSB8PaQdcqGEVTEHWiULz", + "sdk_crate": null, + "sdk_version": "0.2.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/token-acl-gate" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/gate_create_list.jsonc b/crates/cmds-bun/node-definitions/token_acl/gate_create_list.jsonc new file mode 100644 index 000000000..36231870d --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/gate_create_list.jsonc @@ -0,0 +1,40 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "gate_create_list", + "prefix": "token_acl", + "description": "Token ACL Gate: create an allow / allow-EOA / block list. Seed (any pubkey) namespaces the list.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/gate_create_list.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "List authority (who can add/remove wallets)" }, + { "name": "seed", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Pubkey used as list namespace seed" }, + { "name": "mode", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "Allow | AllowAllEoas | Block (default: Allow)" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" }, + { "name": "list_config", "type": "string", "optional": false, "tooltip": "Derived ListConfig PDA address" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl_gate", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "abl-gate", "srfc37", "allowlist", "blocklist"] + }, + "external_version": { + "program_id": "GATEzzqxhJnsWF6vHRsgtixxSB8PaQdcqGEVTEHWiULz", + "sdk_crate": null, + "sdk_version": "0.2.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/token-acl-gate" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/gate_delete_list.jsonc b/crates/cmds-bun/node-definitions/token_acl/gate_delete_list.jsonc new file mode 100644 index 000000000..160229218 --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/gate_delete_list.jsonc @@ -0,0 +1,38 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "gate_delete_list", + "prefix": "token_acl", + "description": "Token ACL Gate: delete an allow/block list (reclaims rent to authority).", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/gate_delete_list.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "List authority" }, + { "name": "list_config", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "ListConfig PDA to delete" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl_gate", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "abl-gate", "srfc37"] + }, + "external_version": { + "program_id": "GATEzzqxhJnsWF6vHRsgtixxSB8PaQdcqGEVTEHWiULz", + "sdk_crate": null, + "sdk_version": "0.2.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/token-acl-gate" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/gate_remove_wallet.jsonc b/crates/cmds-bun/node-definitions/token_acl/gate_remove_wallet.jsonc new file mode 100644 index 000000000..3f9114672 --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/gate_remove_wallet.jsonc @@ -0,0 +1,39 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "gate_remove_wallet", + "prefix": "token_acl", + "description": "Token ACL Gate: remove a wallet from an allow/block list (closes entry PDA).", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/gate_remove_wallet.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "List authority" }, + { "name": "list_config", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "ListConfig PDA" }, + { "name": "wallet", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Wallet to remove" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl_gate", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "abl-gate", "srfc37"] + }, + "external_version": { + "program_id": "GATEzzqxhJnsWF6vHRsgtixxSB8PaQdcqGEVTEHWiULz", + "sdk_crate": null, + "sdk_version": "0.2.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/token-acl-gate" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/gate_setup_extra_metas.jsonc b/crates/cmds-bun/node-definitions/token_acl/gate_setup_extra_metas.jsonc new file mode 100644 index 000000000..b641983a0 --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/gate_setup_extra_metas.jsonc @@ -0,0 +1,40 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "gate_setup_extra_metas", + "prefix": "token_acl", + "description": "Token ACL Gate: initialize the thaw/freeze extra-metas PDA for a mint so the Token ACL program can resolve gate-specific accounts. Pass the set of lists to consult.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/gate_setup_extra_metas.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "MintConfig.authority signer" }, + { "name": "mint", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Token-2022 mint" }, + { "name": "lists", "type_bounds": ["array", "json"], "required": true, "passthrough": false, "tooltip": "Array of ListConfig PDAs to consult during thaw/freeze checks" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" }, + { "name": "extra_metas", "type": "string", "optional": false, "tooltip": "Address of the created extra-metas PDA" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl_gate", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "abl-gate", "srfc37", "extra-metas", "tlv"] + }, + "external_version": { + "program_id": "GATEzzqxhJnsWF6vHRsgtixxSB8PaQdcqGEVTEHWiULz", + "sdk_crate": null, + "sdk_version": "0.2.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/token-acl-gate" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/token_acl_create_config.jsonc b/crates/cmds-bun/node-definitions/token_acl/token_acl_create_config.jsonc new file mode 100644 index 000000000..db8910afd --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/token_acl_create_config.jsonc @@ -0,0 +1,86 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "token_acl_create_config", + "prefix": "token_acl", + "description": "Token ACL (sRFC37): create a MintConfig PDA for a Token-2022 mint, delegating freeze authority to the Token ACL program with a chosen gating program (default = reference ABL Gate).", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/token_acl_create_config.ts", + "ports": { + "inputs": [ + { + "name": "fee_payer", + "type_bounds": ["keypair"], + "required": true, + "passthrough": false, + "tooltip": "Pays transaction fees and account rent" + }, + { + "name": "authority", + "type_bounds": ["keypair"], + "required": true, + "passthrough": false, + "tooltip": "MintConfig authority. If the mint's current freeze authority, this also transfers freeze authority to the Token ACL MintConfig PDA." + }, + { + "name": "mint", + "type_bounds": ["pubkey", "string"], + "required": true, + "passthrough": false, + "tooltip": "Token-2022 mint address" + }, + { + "name": "gating_program", + "type_bounds": ["pubkey", "string"], + "required": false, + "passthrough": false, + "tooltip": "Gate program pubkey (defaults to reference ABL Gate GATEzz...ULz)" + }, + { + "name": "rpc_url", + "type_bounds": ["string"], + "required": false, + "passthrough": false, + "tooltip": "Solana JSON-RPC URL (default: devnet)" + } + ], + "outputs": [ + { + "name": "signature", + "type": "string", + "optional": false, + "tooltip": "Transaction signature" + }, + { + "name": "mint_config_pda", + "type": "string", + "optional": false, + "tooltip": "Derived MintConfig PDA address (delegated freeze authority)" + } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl", + "category": "token", + "icon_url": null, + "tags": [ + "token-acl", + "srfc37", + "token-2022", + "permissioned-tokens", + "abl-gate" + ] + }, + "external_version": { + "program_id": "TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP", + "sdk_crate": null, + "sdk_version": "0.3.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-program/token-acl" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/token_acl_freeze.jsonc b/crates/cmds-bun/node-definitions/token_acl/token_acl_freeze.jsonc new file mode 100644 index 000000000..dce1e8a26 --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/token_acl_freeze.jsonc @@ -0,0 +1,39 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "token_acl_freeze", + "prefix": "token_acl", + "description": "Token ACL: permissioned freeze — MintConfig.authority directly freezes a Token-2022 account (sanctions / revocation).", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/token_acl_freeze.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "MintConfig.authority signer" }, + { "name": "mint", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Token-2022 mint" }, + { "name": "token_account", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Token account to freeze" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "srfc37", "token-2022", "permissioned-tokens", "freeze"] + }, + "external_version": { + "program_id": "TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP", + "sdk_crate": null, + "sdk_version": "0.3.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-program/token-acl" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/token_acl_set_authority.jsonc b/crates/cmds-bun/node-definitions/token_acl/token_acl_set_authority.jsonc new file mode 100644 index 000000000..5a3828fc0 --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/token_acl_set_authority.jsonc @@ -0,0 +1,39 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "token_acl_set_authority", + "prefix": "token_acl", + "description": "Token ACL: rotate MintConfig.authority (controls gating program changes and permissioned thaw/freeze).", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/token_acl_set_authority.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Current MintConfig.authority" }, + { "name": "mint", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Token-2022 mint address" }, + { "name": "new_authority", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "New MintConfig.authority pubkey" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "srfc37", "token-2022", "permissioned-tokens"] + }, + "external_version": { + "program_id": "TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP", + "sdk_crate": null, + "sdk_version": "0.3.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-program/token-acl" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/token_acl_set_gating_program.jsonc b/crates/cmds-bun/node-definitions/token_acl/token_acl_set_gating_program.jsonc new file mode 100644 index 000000000..46f6b3142 --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/token_acl_set_gating_program.jsonc @@ -0,0 +1,39 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "token_acl_set_gating_program", + "prefix": "token_acl", + "description": "Token ACL: change the MintConfig.gating_program — hot-swap the allow/block list contract that decides permissionless thaw/freeze.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/token_acl_set_gating_program.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "MintConfig.authority signer" }, + { "name": "mint", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Token-2022 mint" }, + { "name": "new_gating_program", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "New gate program address" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "srfc37", "token-2022", "permissioned-tokens", "gate-program"] + }, + "external_version": { + "program_id": "TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP", + "sdk_crate": null, + "sdk_version": "0.3.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-program/token-acl" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/token_acl_thaw.jsonc b/crates/cmds-bun/node-definitions/token_acl/token_acl_thaw.jsonc new file mode 100644 index 000000000..cab3c1938 --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/token_acl_thaw.jsonc @@ -0,0 +1,39 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "token_acl_thaw", + "prefix": "token_acl", + "description": "Token ACL: permissioned thaw — MintConfig.authority directly thaws a Token-2022 account.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/token_acl_thaw.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "MintConfig.authority signer" }, + { "name": "mint", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Token-2022 mint" }, + { "name": "token_account", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Token account to thaw" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "srfc37", "token-2022", "permissioned-tokens", "thaw"] + }, + "external_version": { + "program_id": "TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP", + "sdk_crate": null, + "sdk_version": "0.3.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-program/token-acl" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/token_acl_thaw_permissionless.jsonc b/crates/cmds-bun/node-definitions/token_acl/token_acl_thaw_permissionless.jsonc new file mode 100644 index 000000000..51251286f --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/token_acl_thaw_permissionless.jsonc @@ -0,0 +1,43 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "token_acl_thaw_permissionless", + "prefix": "token_acl", + "description": "Token ACL: permissionless thaw — anyone can call; gating program decides whether to succeed. Auto-resolves thaw-extra-metas PDA + remaining accounts. Idempotent variant by default.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/token_acl_thaw_permissionless.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer (also acts as caller/authority if `authority` omitted)" }, + { "name": "authority", "type_bounds": ["keypair"], "required": false, "passthrough": false, "tooltip": "Optional override signer — otherwise uses fee_payer" }, + { "name": "mint", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Token-2022 mint" }, + { "name": "token_account", "type_bounds": ["pubkey", "string"], "required": false, "passthrough": false, "tooltip": "Token account to thaw. If omitted, derived as the ATA of mint+owner." }, + { "name": "token_account_owner", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Owner wallet of the token account (needed for gate program checks and ATA derivation)" }, + { "name": "create_ata", "type_bounds": ["bool"], "required": false, "passthrough": false, "tooltip": "When true, bundles an ATA-create instruction before the thaw (holder self-onboarding path)" }, + { "name": "idempotent", "type_bounds": ["bool"], "required": false, "passthrough": false, "tooltip": "Use idempotent variant (default true)" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" }, + { "name": "token_account", "type": "string", "optional": false, "tooltip": "The (possibly newly created) token account address" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "srfc37", "token-2022", "permissioned-tokens", "thaw", "permissionless"] + }, + "external_version": { + "program_id": "TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP", + "sdk_crate": null, + "sdk_version": "0.3.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-program/token-acl" + } +} diff --git a/crates/cmds-bun/node-definitions/token_acl/token_acl_toggle_permissionless.jsonc b/crates/cmds-bun/node-definitions/token_acl/token_acl_toggle_permissionless.jsonc new file mode 100644 index 000000000..b5a52eacc --- /dev/null +++ b/crates/cmds-bun/node-definitions/token_acl/token_acl_toggle_permissionless.jsonc @@ -0,0 +1,40 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "token_acl_toggle_permissionless", + "prefix": "token_acl", + "description": "Token ACL: enable/disable permissionless thaw and/or permissionless freeze on a MintConfig.", + "type": "bun", + "author_handle": "spo", + "source_code": "crates/cmds-bun/src/token_acl/token_acl_toggle_permissionless.ts", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "Tx fee payer" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "passthrough": false, "tooltip": "MintConfig.authority signer" }, + { "name": "mint", "type_bounds": ["pubkey", "string"], "required": true, "passthrough": false, "tooltip": "Token-2022 mint" }, + { "name": "thaw_enabled", "type_bounds": ["bool"], "required": true, "passthrough": false, "tooltip": "Enable permissionless thaw" }, + { "name": "freeze_enabled", "type_bounds": ["bool"], "required": true, "passthrough": false, "tooltip": "Enable permissionless freeze" }, + { "name": "rpc_url", "type_bounds": ["string"], "required": false, "passthrough": false, "tooltip": "RPC URL (default: devnet)" } + ], + "outputs": [ + { "name": "signature", "type": "string", "optional": false, "tooltip": "Transaction signature" } + ] + }, + "config_schema": {}, + "config": {}, + "classification": { + "vendor": "Solana", + "program": "token_acl", + "category": "token", + "icon_url": null, + "tags": ["token-acl", "srfc37", "token-2022", "permissioned-tokens"] + }, + "external_version": { + "program_id": "TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP", + "sdk_crate": null, + "sdk_version": "0.3.0", + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-program/token-acl" + } +} diff --git a/crates/cmds-bun/node-definitions/umbra/umbra_claim_utxo.jsonc b/crates/cmds-bun/node-definitions/umbra/umbra_claim_utxo.jsonc index 5135df98b..3b469d349 100644 --- a/crates/cmds-bun/node-definitions/umbra/umbra_claim_utxo.jsonc +++ b/crates/cmds-bun/node-definitions/umbra/umbra_claim_utxo.jsonc @@ -9,14 +9,24 @@ "source_code": "crates/cmds-bun/src/umbra/umbra_claim_utxo.ts", "ports": { "inputs": [ + { + "name": "pubkey", + "type_bounds": [ + "pubkey", + "string" + ], + "required": false, + "passthrough": false, + "tooltip": "Base58 public key of the signer. Signs via the connected wallet (private key stays in the wallet). Preferred over `keypair` for user flows. Provide either `pubkey` or `keypair`." + }, { "name": "keypair", "type_bounds": [ - "bytes" + "keypair" ], - "required": true, + "required": false, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key ∥ public key)" + "tooltip": "Solana keypair or Flow wallet output. Local wallets sign directly; adapter wallets fall back to connected-wallet signing. Provide either `pubkey` or `keypair`; `keypair` wins if both are set." }, { "name": "network", diff --git a/crates/cmds-bun/node-definitions/umbra/umbra_create_utxo.jsonc b/crates/cmds-bun/node-definitions/umbra/umbra_create_utxo.jsonc index 98b74bd21..56c6ade91 100644 --- a/crates/cmds-bun/node-definitions/umbra/umbra_create_utxo.jsonc +++ b/crates/cmds-bun/node-definitions/umbra/umbra_create_utxo.jsonc @@ -9,14 +9,24 @@ "source_code": "crates/cmds-bun/src/umbra/umbra_create_utxo.ts", "ports": { "inputs": [ + { + "name": "pubkey", + "type_bounds": [ + "pubkey", + "string" + ], + "required": false, + "passthrough": false, + "tooltip": "Base58 public key of the signer. Signs via the connected wallet (private key stays in the wallet). Preferred over `keypair` for user flows. Provide either `pubkey` or `keypair`." + }, { "name": "keypair", "type_bounds": [ - "bytes" + "keypair" ], - "required": true, + "required": false, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key ∥ public key)" + "tooltip": "Solana keypair or Flow wallet output. Local wallets sign directly; adapter wallets fall back to connected-wallet signing. Provide either `pubkey` or `keypair`; `keypair` wins if both are set." }, { "name": "network", diff --git a/crates/cmds-bun/node-definitions/umbra/umbra_deposit.jsonc b/crates/cmds-bun/node-definitions/umbra/umbra_deposit.jsonc index e0ce0622d..109fff58a 100644 --- a/crates/cmds-bun/node-definitions/umbra/umbra_deposit.jsonc +++ b/crates/cmds-bun/node-definitions/umbra/umbra_deposit.jsonc @@ -9,14 +9,24 @@ "source_code": "crates/cmds-bun/src/umbra/umbra_deposit.ts", "ports": { "inputs": [ + { + "name": "pubkey", + "type_bounds": [ + "pubkey", + "string" + ], + "required": false, + "passthrough": false, + "tooltip": "Base58 public key of the signer. Signs via the connected wallet (private key stays in the wallet). Preferred over `keypair` for user flows. Provide either `pubkey` or `keypair`." + }, { "name": "keypair", "type_bounds": [ - "bytes" + "keypair" ], - "required": true, + "required": false, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key ∥ public key)" + "tooltip": "Solana keypair or Flow wallet output. Local wallets sign directly; adapter wallets fall back to connected-wallet signing. Provide either `pubkey` or `keypair`; `keypair` wins if both are set." }, { "name": "network", diff --git a/crates/cmds-bun/node-definitions/umbra/umbra_fetch_utxos.jsonc b/crates/cmds-bun/node-definitions/umbra/umbra_fetch_utxos.jsonc index e0cff841d..f2785fcfc 100644 --- a/crates/cmds-bun/node-definitions/umbra/umbra_fetch_utxos.jsonc +++ b/crates/cmds-bun/node-definitions/umbra/umbra_fetch_utxos.jsonc @@ -9,14 +9,24 @@ "source_code": "crates/cmds-bun/src/umbra/umbra_fetch_utxos.ts", "ports": { "inputs": [ + { + "name": "pubkey", + "type_bounds": [ + "pubkey", + "string" + ], + "required": false, + "passthrough": false, + "tooltip": "Base58 public key of the signer. Signs via the connected wallet (private key stays in the wallet). Preferred over `keypair` for user flows. Provide either `pubkey` or `keypair`." + }, { "name": "keypair", "type_bounds": [ - "bytes" + "keypair" ], - "required": true, + "required": false, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key ∥ public key)" + "tooltip": "Solana keypair or Flow wallet output. Local wallets sign directly; adapter wallets fall back to connected-wallet signing. Provide either `pubkey` or `keypair`; `keypair` wins if both are set." }, { "name": "network", diff --git a/crates/cmds-bun/node-definitions/umbra/umbra_query_account.jsonc b/crates/cmds-bun/node-definitions/umbra/umbra_query_account.jsonc index 9ec976dfc..d4b0ea2dc 100644 --- a/crates/cmds-bun/node-definitions/umbra/umbra_query_account.jsonc +++ b/crates/cmds-bun/node-definitions/umbra/umbra_query_account.jsonc @@ -9,14 +9,24 @@ "source_code": "crates/cmds-bun/src/umbra/umbra_query_account.ts", "ports": { "inputs": [ + { + "name": "pubkey", + "type_bounds": [ + "pubkey", + "string" + ], + "required": false, + "passthrough": false, + "tooltip": "Base58 public key of the signer. Signs via the connected wallet (private key stays in the wallet). Preferred over `keypair` for user flows. Provide either `pubkey` or `keypair`." + }, { "name": "keypair", "type_bounds": [ - "bytes" + "keypair" ], - "required": true, + "required": false, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key ∥ public key)" + "tooltip": "Solana keypair or Flow wallet output. Local wallets sign directly; adapter wallets fall back to connected-wallet signing. Provide either `pubkey` or `keypair`; `keypair` wins if both are set." }, { "name": "network", diff --git a/crates/cmds-bun/node-definitions/umbra/umbra_query_balance.jsonc b/crates/cmds-bun/node-definitions/umbra/umbra_query_balance.jsonc index d35053f8c..e0bf80aea 100644 --- a/crates/cmds-bun/node-definitions/umbra/umbra_query_balance.jsonc +++ b/crates/cmds-bun/node-definitions/umbra/umbra_query_balance.jsonc @@ -9,14 +9,24 @@ "source_code": "crates/cmds-bun/src/umbra/umbra_query_balance.ts", "ports": { "inputs": [ + { + "name": "pubkey", + "type_bounds": [ + "pubkey", + "string" + ], + "required": false, + "passthrough": false, + "tooltip": "Base58 public key of the signer. Signs via the connected wallet (private key stays in the wallet). Preferred over `keypair` for user flows. Provide either `pubkey` or `keypair`." + }, { "name": "keypair", "type_bounds": [ - "bytes" + "keypair" ], - "required": true, + "required": false, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key ∥ public key)" + "tooltip": "Solana keypair or Flow wallet output. Local wallets sign directly; adapter wallets fall back to connected-wallet signing. Provide either `pubkey` or `keypair`; `keypair` wins if both are set." }, { "name": "network", diff --git a/crates/cmds-bun/node-definitions/umbra/umbra_register.jsonc b/crates/cmds-bun/node-definitions/umbra/umbra_register.jsonc index d87753704..b3eda0230 100644 --- a/crates/cmds-bun/node-definitions/umbra/umbra_register.jsonc +++ b/crates/cmds-bun/node-definitions/umbra/umbra_register.jsonc @@ -9,14 +9,24 @@ "source_code": "crates/cmds-bun/src/umbra/umbra_register.ts", "ports": { "inputs": [ + { + "name": "pubkey", + "type_bounds": [ + "pubkey", + "string" + ], + "required": false, + "passthrough": false, + "tooltip": "Base58 public key of the signer. Signs via the connected wallet (private key stays in the wallet). Preferred over `keypair` for user flows. Provide either `pubkey` or `keypair`." + }, { "name": "keypair", "type_bounds": [ - "bytes" + "keypair" ], - "required": true, + "required": false, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key ∥ public key)" + "tooltip": "Solana keypair or Flow wallet output. Local wallets sign directly; adapter wallets fall back to connected-wallet signing. Provide either `pubkey` or `keypair`; `keypair` wins if both are set." }, { "name": "network", diff --git a/crates/cmds-bun/node-definitions/umbra/umbra_withdraw.jsonc b/crates/cmds-bun/node-definitions/umbra/umbra_withdraw.jsonc index 2f08b7209..ddae32435 100644 --- a/crates/cmds-bun/node-definitions/umbra/umbra_withdraw.jsonc +++ b/crates/cmds-bun/node-definitions/umbra/umbra_withdraw.jsonc @@ -9,14 +9,24 @@ "source_code": "crates/cmds-bun/src/umbra/umbra_withdraw.ts", "ports": { "inputs": [ + { + "name": "pubkey", + "type_bounds": [ + "pubkey", + "string" + ], + "required": false, + "passthrough": false, + "tooltip": "Base58 public key of the signer. Signs via the connected wallet (private key stays in the wallet). Preferred over `keypair` for user flows. Provide either `pubkey` or `keypair`." + }, { "name": "keypair", "type_bounds": [ - "bytes" + "keypair" ], - "required": true, + "required": false, "passthrough": false, - "tooltip": "64-byte Solana keypair (secret key ∥ public key)" + "tooltip": "Solana keypair or Flow wallet output. Local wallets sign directly; adapter wallets fall back to connected-wallet signing. Provide either `pubkey` or `keypair`; `keypair` wins if both are set." }, { "name": "network", diff --git a/crates/cmds-bun/package.json b/crates/cmds-bun/package.json index 27fef3d2d..673b3de26 100644 --- a/crates/cmds-bun/package.json +++ b/crates/cmds-bun/package.json @@ -5,9 +5,13 @@ "dependencies": { "@space-operator/bun-command-rpc": "workspace:*", "@space-operator/flow-lib-bun": "workspace:*", - "@umbra-privacy/sdk": "^2.1.1", + "@umbra-privacy/sdk": "^4.0.0", "@umbra-privacy/web-zk-prover": "^2.0.1", "snarkjs": "^0.7.6", - "privacycash": "^1.1.20" + "privacycash": "^1.1.20", + "@solana/kit": "^5.0.0", + "@solana/token-acl-sdk": "^0.3.0", + "@solana/token-acl-gate-sdk": "^0.2.0", + "@solana-program/token-2022": "^0.6.1" } } diff --git a/crates/cmds-bun/src/lib.rs b/crates/cmds-bun/src/lib.rs index 90e90d858..455273732 100644 --- a/crates/cmds-bun/src/lib.rs +++ b/crates/cmds-bun/src/lib.rs @@ -230,6 +230,20 @@ const COMPANION_MODULES: &[(&str, &str)] = &[ "/src/privacy_cash/privacy_cash_common.ts" )), ), + ( + "./token_acl_common.ts", + include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/src/token_acl/token_acl_common.ts" + )), + ), + ( + "./relay_common.ts", + include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/src/relay/relay_common.ts" + )), + ), ]; /// If cmd.ts imports any known companion modules, write them into the temp dir. diff --git a/crates/cmds-bun/src/privacy_cash/privacy_cash_common.ts b/crates/cmds-bun/src/privacy_cash/privacy_cash_common.ts index a395ff0ba..c0c4274e4 100644 --- a/crates/cmds-bun/src/privacy_cash/privacy_cash_common.ts +++ b/crates/cmds-bun/src/privacy_cash/privacy_cash_common.ts @@ -1,52 +1,52 @@ /** * Shared helpers for Privacy Cash bun nodes. * - * Creates PrivacyCash SDK instances from keypair input. + * Creates PrivacyCash SDK instances from signer input. * The SDK handles ZK proof generation (snarkjs), transaction building, * and relay submission internally. * - * Accepts either: - * - 64-byte Uint8Array (raw keypair bytes) - * - web3.js Keypair object (from BaseCommand keypair deserialization) + * Privacy Cash requires a local secret key because it derives an encryption key + * from the wallet. Flow adapter wallets only expose a public key + signing + * service token, which is not enough for this SDK. */ import { PrivacyCash } from "privacycash"; -import { Keypair } from "@solana/web3.js"; +import { Keypair, PublicKey } from "@solana/web3.js"; /** Devnet program ID for Privacy Cash */ export const DEVNET_PROGRAM_ID = "ATZj4jZ4FFzkvAcvk27DW9GRkgSbFnHo49fKKPQXU7VS"; /** Mainnet program ID for Privacy Cash */ export const MAINNET_PROGRAM_ID = "9fhQBbumKEFuXtMBDw8AaQyAjCorLGJQiS3skWZdQyQD"; +export function resolvePrivacyCashKeypair(keypairInput: any): Keypair { + if (keypairInput instanceof Keypair) { + return keypairInput; + } + + const secretKeyBytes = extractSecretKeyBytes(keypairInput); + if (secretKeyBytes) { + return Keypair.fromSecretKey(secretKeyBytes); + } + + if (extractAdapterWalletPubkey(keypairInput)) { + throw new Error( + "Privacy Cash bun nodes require a local Solana keypair with secret key bytes. Flow adapter wallets are not supported because the Privacy Cash SDK derives an encryption key from the private key.", + ); + } + + throw new Error( + `Cannot create keypair from input: ${typeof keypairInput}, ` + + `keys: ${keypairInput ? Object.keys(keypairInput).join(",") : "null"}`, + ); +} + /** * Create a PrivacyCash SDK client from a keypair input. - * - * Handles multiple input formats: - * - Uint8Array (64 bytes): raw keypair bytes - * - Keypair object: web3.js Keypair from BaseCommand deserialization - * - Any object with secretKey: duck-typed Keypair */ export function createPrivacyCashClient( keypairInput: any, rpcUrl: string, ): PrivacyCash { - let keypair: Keypair; - - if (keypairInput instanceof Keypair) { - keypair = keypairInput; - } else if (keypairInput instanceof Uint8Array && keypairInput.length === 64) { - keypair = Keypair.fromSecretKey(keypairInput); - } else if (keypairInput?.secretKey) { - // web3.js Keypair object (may be from different module instance) - keypair = Keypair.fromSecretKey(new Uint8Array(keypairInput.secretKey)); - } else if (keypairInput?._keypair?.secretKey) { - // Internal Keypair format - keypair = Keypair.fromSecretKey(new Uint8Array(keypairInput._keypair.secretKey)); - } else { - throw new Error( - `Cannot create keypair from input: ${typeof keypairInput}, ` + - `keys: ${keypairInput ? Object.keys(keypairInput).join(",") : "null"}`, - ); - } + const keypair = resolvePrivacyCashKeypair(keypairInput); // Pass secret key as number[] to avoid Keypair instanceof mismatch // between the framework's web3.js and the SDK's bundled web3.js @@ -55,3 +55,139 @@ export function createPrivacyCashClient( owner: Array.from(keypair.secretKey), }); } + +export function toRecipientAddress(value: unknown): string { + if (typeof value === "string" && value.length > 0) { + return value; + } + if (value instanceof PublicKey) { + return value.toBase58(); + } + if (value instanceof Uint8Array && value.length === 32) { + return new PublicKey(value).toBase58(); + } + if (Array.isArray(value) && value.length === 32) { + return new PublicKey(value).toBase58(); + } + if (typeof value === "object" && value !== null) { + const record = value as Record; + if (typeof record.S === "string" && record.S.length > 0) { + return record.S; + } + if (typeof record.B3 === "string" && record.B3.length > 0) { + return record.B3; + } + if (typeof (value as { toBase58?: () => string }).toBase58 === "function") { + return (value as { toBase58: () => string }).toBase58(); + } + const indexed = extractIndexedBytes(record, 32); + if (indexed) { + return new PublicKey(indexed).toBase58(); + } + } + throw new Error("Missing required input: recipient (Base58 public key)"); +} + +function extractSecretKeyBytes(value: unknown): Uint8Array | null { + if (value === undefined || value === null) return null; + if (value instanceof Uint8Array) { + return value.length === 64 ? value : null; + } + if (Array.isArray(value) && value.length === 64) { + return new Uint8Array(value as number[]); + } + if (typeof value === "object") { + const record = value as Record; + const nestedSecretKey = record.secretKey ?? record._keypair; + if (nestedSecretKey && typeof nestedSecretKey === "object") { + const maybeSecret = (nestedSecretKey as Record).secretKey ?? + nestedSecretKey; + if (maybeSecret instanceof Uint8Array && maybeSecret.length === 64) { + return maybeSecret; + } + if (Array.isArray(maybeSecret) && maybeSecret.length === 64) { + return new Uint8Array(maybeSecret as number[]); + } + if (typeof maybeSecret === "object" && maybeSecret !== null) { + return extractIndexedBytes(maybeSecret as Record, 64); + } + } + return extractIndexedBytes(record, 64); + } + return null; +} + +function extractAdapterWalletPubkey(value: unknown): PublicKey | null { + if (!isRustWalletAdapterRecord(value)) return null; + try { + return new PublicKey(toRecipientAddress(value.public_key)); + } catch { + return null; + } +} + +function isRustWalletAdapterRecord( + value: unknown, +): value is { public_key: unknown; token: string | null } { + if (typeof value !== "object" || value === null) return false; + const record = value as Record; + return "public_key" in record && + "token" in record && + (record.token === null || typeof record.token === "string"); +} + +function extractIndexedBytes( + record: Record, + size: number, +): Uint8Array | null { + if (!(String(0) in record) || !(String(size - 1) in record)) { + return null; + } + const bytes = new Uint8Array(size); + for (let i = 0; i < size; i++) { + bytes[i] = Number(record[String(i)] ?? 0); + } + return bytes; +} + +import { describe, expect, test } from "bun:test"; +try { + describe("privacy_cash_common", () => { + test("resolvePrivacyCashKeypair: accepts local keypair-like input", () => { + const keypair = Keypair.generate(); + const resolved = resolvePrivacyCashKeypair({ + secretKey: Array.from(keypair.secretKey), + }); + expect(Array.from(resolved.secretKey)).toEqual(Array.from(keypair.secretKey)); + }); + + test("resolvePrivacyCashKeypair: rejects adapter wallets with a clear error", () => { + const keypair = Keypair.generate(); + expect(() => + resolvePrivacyCashKeypair({ + public_key: keypair.publicKey.toBytes(), + token: null, + }) + ).toThrow("Flow adapter wallets are not supported"); + }); + + test("resolvePrivacyCashKeypair: ignores non-Rust wallet-shaped plain objects", () => { + const keypair = Keypair.generate(); + expect(() => + resolvePrivacyCashKeypair({ + publicKey: keypair.publicKey.toBytes(), + }) + ).toThrow("Cannot create keypair from input"); + }); + + test("toRecipientAddress: accepts PublicKey and pubkey wrappers", () => { + const publicKey = Keypair.generate().publicKey; + expect(toRecipientAddress(publicKey)).toBe(publicKey.toBase58()); + expect(toRecipientAddress({ B3: publicKey.toBase58() })).toBe( + publicKey.toBase58(), + ); + }); + }); +} catch (_) { + // Not running under `bun test` +} diff --git a/crates/cmds-bun/src/privacy_cash/privacy_cash_deposit.ts b/crates/cmds-bun/src/privacy_cash/privacy_cash_deposit.ts index c814de4d4..135ce1d76 100644 --- a/crates/cmds-bun/src/privacy_cash/privacy_cash_deposit.ts +++ b/crates/cmds-bun/src/privacy_cash/privacy_cash_deposit.ts @@ -1,5 +1,28 @@ import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; import { createPrivacyCashClient } from "./privacy_cash_common.ts"; +import type { PrivacyCash } from "privacycash"; + +type PrivacyCashDepositClient = Pick; + +export async function executePrivacyCashDeposit( + client: PrivacyCashDepositClient, + amount: unknown, +): Promise<{ signature: string }> { + const amountLamports = Number(amount); + if (!Number.isFinite(amountLamports) || amountLamports <= 0) { + throw new Error(`Invalid amount: ${amount}. Must be a positive number of lamports.`); + } + + console.log(`Depositing ${amountLamports} lamports into Privacy Cash...`); + + const result = await client.deposit({ lamports: amountLamports }); + + console.log("Deposit complete:", JSON.stringify(result)); + + return { + signature: result.tx ?? String(result), + }; +} export default class PrivacyCashDeposit extends BaseCommand { override async run(ctx: Context, inputs: any): Promise { @@ -7,21 +30,7 @@ export default class PrivacyCashDeposit extends BaseCommand { inputs.keypair, inputs.rpc_url, ); - - const amountLamports = Number(inputs.amount); - if (!Number.isFinite(amountLamports) || amountLamports <= 0) { - throw new Error(`Invalid amount: ${inputs.amount}. Must be a positive number of lamports.`); - } - - console.log(`Depositing ${amountLamports} lamports into Privacy Cash...`); - - const result = await client.deposit(); - - console.log("Deposit complete:", JSON.stringify(result)); - - return { - signature: result.tx ?? String(result), - }; + return await executePrivacyCashDeposit(client, inputs.amount); } } @@ -42,6 +51,21 @@ try { const ctx = {} as Context; await expect(cmd.run(ctx, {})).rejects.toThrow(); }); + + test("executePrivacyCashDeposit: forwards lamports to the SDK", async () => { + let received: unknown; + const client = { + async deposit(args: unknown) { + received = args; + return { tx: "deposit-signature" }; + }, + } satisfies PrivacyCashDepositClient; + + await expect(executePrivacyCashDeposit(client, "12345")).resolves.toEqual({ + signature: "deposit-signature", + }); + expect(received).toEqual({ lamports: 12345 }); + }); }); } catch (_) { // Not running under `bun test` diff --git a/crates/cmds-bun/src/privacy_cash/privacy_cash_withdraw.ts b/crates/cmds-bun/src/privacy_cash/privacy_cash_withdraw.ts index 380bf9e90..8e4562d2d 100644 --- a/crates/cmds-bun/src/privacy_cash/privacy_cash_withdraw.ts +++ b/crates/cmds-bun/src/privacy_cash/privacy_cash_withdraw.ts @@ -1,32 +1,46 @@ import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; -import { createPrivacyCashClient } from "./privacy_cash_common.ts"; +import { + createPrivacyCashClient, + toRecipientAddress, +} from "./privacy_cash_common.ts"; +import type { PrivacyCash } from "privacycash"; -export default class PrivacyCashWithdraw extends BaseCommand { - override async run(ctx: Context, inputs: any): Promise { - const client = createPrivacyCashClient( - inputs.keypair, - inputs.rpc_url, - ); +type PrivacyCashWithdrawClient = Pick; - const amountLamports = Number(inputs.amount); - if (!Number.isFinite(amountLamports) || amountLamports <= 0) { - throw new Error(`Invalid amount: ${inputs.amount}. Must be a positive number of lamports.`); - } +export async function executePrivacyCashWithdraw( + client: PrivacyCashWithdrawClient, + amount: unknown, + recipientInput: unknown, +): Promise<{ signature: string }> { + const amountLamports = Number(amount); + if (!Number.isFinite(amountLamports) || amountLamports <= 0) { + throw new Error(`Invalid amount: ${amount}. Must be a positive number of lamports.`); + } - if (!inputs.recipient) { - throw new Error("Missing required input: recipient (Base58 public key)"); - } + const recipient = toRecipientAddress(recipientInput); - console.log(`Withdrawing ${amountLamports} lamports from Privacy Cash...`); - console.log(` recipient: ${inputs.recipient}`); + console.log(`Withdrawing ${amountLamports} lamports from Privacy Cash...`); + console.log(` recipient: ${recipient}`); - const result = await client.withdraw(); + const result = await client.withdraw({ + lamports: amountLamports, + recipientAddress: recipient, + }); - console.log("Withdraw complete:", JSON.stringify(result)); + console.log("Withdraw complete:", JSON.stringify(result)); + + return { + signature: result.tx ?? String(result), + }; +} - return { - signature: result.tx ?? String(result), - }; +export default class PrivacyCashWithdraw extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const client = createPrivacyCashClient( + inputs.keypair, + inputs.rpc_url, + ); + return await executePrivacyCashWithdraw(client, inputs.amount, inputs.recipient); } } @@ -47,5 +61,27 @@ try { const ctx = {} as Context; await expect(cmd.run(ctx, {})).rejects.toThrow(); }); + + test("executePrivacyCashWithdraw: forwards lamports and recipient to the SDK", async () => { + let received: unknown; + const client = { + async withdraw(args: unknown) { + received = args; + return { tx: "withdraw-signature" }; + }, + } satisfies PrivacyCashWithdrawClient; + + await expect( + executePrivacyCashWithdraw(client, "456", { + toBase58: () => "8opHzTAnfzRpPEx21XtnrVTX28YQuCpAjcn1PczScKh", + }), + ).resolves.toEqual({ + signature: "withdraw-signature", + }); + expect(received).toEqual({ + lamports: 456, + recipientAddress: "8opHzTAnfzRpPEx21XtnrVTX28YQuCpAjcn1PczScKh", + }); + }); }); } catch (_) {} diff --git a/crates/cmds-bun/src/relay/email_relay_receive.ts b/crates/cmds-bun/src/relay/email_relay_receive.ts new file mode 100644 index 000000000..fd06d92ff --- /dev/null +++ b/crates/cmds-bun/src/relay/email_relay_receive.ts @@ -0,0 +1,105 @@ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; + +/** + * Parse an inbound email webhook payload. + * + * Generic inbound email parser — works with Resend or SendGrid + * inbound parse webhooks. Extracts sender, recipient, subject, + * and body from the webhook payload. + * + * For privacy relay patterns, wire the `to` output into a + * Deno/Rhai script that parses your relay address format. + */ +export default class ResendReceiveEmail extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const { webhook_payload } = inputs; + + if (!webhook_payload) throw new Error("webhook_payload is required"); + + const payload = typeof webhook_payload === "string" + ? JSON.parse(webhook_payload) + : webhook_payload; + + // Normalize across Resend and SendGrid webhook formats + const to = normalizeRecipient(payload.to); + const from = payload.from || payload.sender || ""; + const subject = payload.subject || ""; + const textBody = payload.text || payload.plain || payload.TextBody || ""; + const htmlBody = payload.html || payload.HtmlBody || ""; + const headers = payload.headers || {}; + + // Strip quoted reply content (keep only new message) + const cleanBody = stripQuotedReply(textBody); + + return { + from, + to, + subject, + body: cleanBody, + raw_body: textBody, + html_body: htmlBody, + headers, + received_at: new Date().toISOString(), + }; + } +} + +/** Normalize recipient field (may be string, array, or array of objects). */ +function normalizeRecipient(to: any): string { + if (!to) return ""; + if (typeof to === "string") return to; + if (Array.isArray(to)) { + const first = to[0]; + if (typeof first === "string") return first; + if (first?.address) return first.address; + if (first?.email) return first.email; + return String(first); + } + return String(to); +} + +/** Strip common quoted reply markers from email body. */ +function stripQuotedReply(text: string): string { + const lines = text.split("\n"); + const cutoff = lines.findIndex( + (line) => + (line.startsWith("On ") && line.includes(" wrote:")) || + line.startsWith(">") || + line.startsWith("---") || + line.startsWith("___") || + /^-{2,}\s*Original Message\s*-{2,}/i.test(line) + ); + if (cutoff > 0) { + return lines.slice(0, cutoff).join("\n").trim(); + } + return text.trim(); +} + +// ── Tests ─────────────────────────────────────────────────────────────── +import { test, expect, describe } from "bun:test"; +try { + describe("ResendReceiveEmail", () => { + test("build: class can be instantiated", () => { + const nd = { type: "bun", node_id: "test", inputs: [], outputs: [], config: {} } as any; + const cmd = new ResendReceiveEmail(nd); + expect(cmd).toBeInstanceOf(BaseCommand); + }); + + test("run: parses webhook payload", async () => { + const nd = { type: "bun", node_id: "test", inputs: [], outputs: [], config: {} } as any; + const cmd = new ResendReceiveEmail(nd); + const ctx = {} as Context; + const result = await cmd.run(ctx, { + webhook_payload: { + to: ["user@example.com"], + from: "sender@test.com", + subject: "Hello", + text: "Message body\n\nOn Mon wrote:\n> Old message", + }, + }); + expect(result.to).toBe("user@example.com"); + expect(result.from).toBe("sender@test.com"); + expect(result.body).toBe("Message body"); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/relay/email_relay_send.ts b/crates/cmds-bun/src/relay/email_relay_send.ts new file mode 100644 index 000000000..94d7ada78 --- /dev/null +++ b/crates/cmds-bun/src/relay/email_relay_send.ts @@ -0,0 +1,72 @@ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { resendSendEmail } from "./relay_common.ts"; + +/** + * Send an email via the Resend API. + * + * Generic email sending node — works for any use case: + * transactional, notifications, relay, marketing, etc. + * Use upstream Deno/Rhai nodes to construct from/reply-to + * addresses for privacy relay patterns. + */ +export default class ResendSendEmail extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const { api_key, from, to, reply_to, subject, text, html, cc, bcc } = inputs; + + if (!api_key) throw new Error("api_key (Resend API key) is required"); + if (!from) throw new Error("from email address is required"); + if (!to) throw new Error("to email address is required"); + if (!subject) throw new Error("subject is required"); + if (!text && !html) throw new Error("text or html body is required"); + + console.log(`Sending email: ${from} -> ${to}`); + + const result = await resendSendEmail({ + api_key, + from, + to, + reply_to: reply_to || undefined, + subject, + text: text || undefined, + html: html || undefined, + cc: cc ? (Array.isArray(cc) ? cc : [cc]) : undefined, + bcc: bcc ? (Array.isArray(bcc) ? bcc : [bcc]) : undefined, + }); + + console.log("Email sent:", JSON.stringify(result)); + + return { + message_id: result.id, + status: "sent", + }; + } +} + +// ── Tests ─────────────────────────────────────────────────────────────── +import { test, expect, describe } from "bun:test"; +try { + describe("ResendSendEmail", () => { + test("build: class can be instantiated", () => { + const nd = { type: "bun", node_id: "test", inputs: [], outputs: [], config: {} } as any; + const cmd = new ResendSendEmail(nd); + expect(cmd).toBeInstanceOf(BaseCommand); + expect(cmd.run).toBeInstanceOf(Function); + }); + + test("run: rejects with missing api_key", async () => { + const nd = { type: "bun", node_id: "test", inputs: [], outputs: [], config: {} } as any; + const cmd = new ResendSendEmail(nd); + const ctx = {} as Context; + await expect(cmd.run(ctx, {})).rejects.toThrow("api_key"); + }); + + test("run: rejects with missing body", async () => { + const nd = { type: "bun", node_id: "test", inputs: [], outputs: [], config: {} } as any; + const cmd = new ResendSendEmail(nd); + const ctx = {} as Context; + await expect( + cmd.run(ctx, { api_key: "k", from: "a@b.c", to: "d@e.f", subject: "Hi" }) + ).rejects.toThrow("text or html"); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/relay/relay_common.ts b/crates/cmds-bun/src/relay/relay_common.ts new file mode 100644 index 000000000..35b51c597 --- /dev/null +++ b/crates/cmds-bun/src/relay/relay_common.ts @@ -0,0 +1,94 @@ +/** + * Shared helpers for email (Resend) and SMS (Twilio) Bun nodes. + * + * Generic API clients — not tied to any specific use case. + */ + +/** Resend API: send an email. Returns { id: string }. */ +export async function resendSendEmail(params: { + api_key: string; + from: string; + to: string | string[]; + reply_to?: string; + subject: string; + text?: string; + html?: string; + cc?: string[]; + bcc?: string[]; + headers?: Record; + tags?: Array<{ name: string; value: string }>; +}): Promise<{ id: string }> { + const toArr = Array.isArray(params.to) ? params.to : [params.to]; + + const body: Record = { + from: params.from, + to: toArr, + subject: params.subject, + }; + if (params.reply_to) body.reply_to = params.reply_to; + if (params.html) body.html = params.html; + if (params.text) body.text = params.text; + if (params.cc?.length) body.cc = params.cc; + if (params.bcc?.length) body.bcc = params.bcc; + if (params.headers) body.headers = params.headers; + if (params.tags?.length) body.tags = params.tags; + + const resp = await fetch("https://api.resend.com/emails", { + method: "POST", + headers: { + "Authorization": `Bearer ${params.api_key}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(body), + }); + + if (!resp.ok) { + const err = await resp.text(); + throw new Error(`Resend API error ${resp.status}: ${err}`); + } + + return resp.json(); +} + +/** Twilio API: send an SMS. Returns { sid: string, status: string, ... }. */ +export async function twilioSendSms(params: { + account_sid: string; + auth_token: string; + from: string; + to: string; + body: string; + status_callback?: string; + media_url?: string[]; +}): Promise<{ sid: string; status: string; date_created: string }> { + const url = `https://api.twilio.com/2010-04-01/Accounts/${params.account_sid}/Messages.json`; + + const formData = new URLSearchParams(); + formData.set("From", params.from); + formData.set("To", params.to); + formData.set("Body", params.body); + if (params.status_callback) formData.set("StatusCallback", params.status_callback); + if (params.media_url) { + for (const url of params.media_url) { + formData.append("MediaUrl", url); + } + } + + const credentials = btoa(`${params.account_sid}:${params.auth_token}`); + + const resp = await fetch(url, { + method: "POST", + headers: { + "Authorization": `Basic ${credentials}`, + "Content-Type": "application/x-www-form-urlencoded", + }, + body: formData.toString(), + }); + + if (!resp.ok) { + const err = await resp.text(); + throw new Error(`Twilio API error ${resp.status}: ${err}`); + } + + const result = await resp.json(); + return { sid: result.sid, status: result.status, date_created: result.date_created }; +} diff --git a/crates/cmds-bun/src/relay/sms_relay_receive.ts b/crates/cmds-bun/src/relay/sms_relay_receive.ts new file mode 100644 index 000000000..a61b43b43 --- /dev/null +++ b/crates/cmds-bun/src/relay/sms_relay_receive.ts @@ -0,0 +1,84 @@ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; + +/** + * Parse an inbound SMS webhook payload from Twilio. + * + * Generic inbound SMS parser — extracts sender, recipient, + * body, and metadata from Twilio's webhook format. + * + * For privacy relay patterns, wire the `from` and `body` + * outputs into a Deno/Rhai script that performs your + * relay routing logic. + */ +export default class TwilioReceiveSms extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const { webhook_payload } = inputs; + + if (!webhook_payload) throw new Error("webhook_payload is required"); + + const payload = typeof webhook_payload === "string" + ? JSON.parse(webhook_payload) + : webhook_payload; + + // Twilio webhook format (form-encoded, but may arrive as parsed JSON) + const from = payload.From || payload.from || ""; + const to = payload.To || payload.to || ""; + const body = (payload.Body || payload.body || "").trim(); + const messageSid = payload.MessageSid || payload.message_sid || payload.SmsSid || ""; + const numMedia = parseInt(payload.NumMedia || "0", 10); + const fromCity = payload.FromCity || ""; + const fromState = payload.FromState || ""; + const fromCountry = payload.FromCountry || ""; + + // Collect media URLs if any (MMS) + const mediaUrls: string[] = []; + for (let i = 0; i < numMedia; i++) { + const url = payload[`MediaUrl${i}`]; + if (url) mediaUrls.push(url); + } + + return { + from, + to, + body, + message_sid: messageSid, + num_media: numMedia, + media_urls: mediaUrls, + from_location: [fromCity, fromState, fromCountry].filter(Boolean).join(", "), + received_at: new Date().toISOString(), + }; + } +} + +// ── Tests ─────────────────────────────────────────────────────────────── +import { test, expect, describe } from "bun:test"; +try { + describe("TwilioReceiveSms", () => { + test("build: class can be instantiated", () => { + const nd = { type: "bun", node_id: "test", inputs: [], outputs: [], config: {} } as any; + const cmd = new TwilioReceiveSms(nd); + expect(cmd).toBeInstanceOf(BaseCommand); + }); + + test("run: parses Twilio webhook", async () => { + const nd = { type: "bun", node_id: "test", inputs: [], outputs: [], config: {} } as any; + const cmd = new TwilioReceiveSms(nd); + const ctx = {} as Context; + const result = await cmd.run(ctx, { + webhook_payload: { + From: "+15551234567", + To: "+15559876543", + Body: "Hello world", + MessageSid: "SM1234567890", + NumMedia: "0", + FromCity: "San Francisco", + FromState: "CA", + FromCountry: "US", + }, + }); + expect(result.from).toBe("+15551234567"); + expect(result.body).toBe("Hello world"); + expect(result.from_location).toBe("San Francisco, CA, US"); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/relay/sms_relay_send.ts b/crates/cmds-bun/src/relay/sms_relay_send.ts new file mode 100644 index 000000000..afff19a27 --- /dev/null +++ b/crates/cmds-bun/src/relay/sms_relay_send.ts @@ -0,0 +1,61 @@ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { twilioSendSms } from "./relay_common.ts"; + +/** + * Send an SMS via the Twilio API. + * + * Generic SMS sending node — works for any use case: + * notifications, alerts, 2FA, relay, marketing, etc. + * Use upstream Deno/Rhai nodes to construct the message + * body for privacy relay patterns. + */ +export default class TwilioSendSms extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const { account_sid, auth_token, from, to, body, status_callback, media_url } = inputs; + + if (!account_sid) throw new Error("account_sid (Twilio Account SID) is required"); + if (!auth_token) throw new Error("auth_token (Twilio Auth Token) is required"); + if (!from) throw new Error("from phone number is required (e.g. +15551234567)"); + if (!to) throw new Error("to phone number is required"); + if (!body) throw new Error("body (message text) is required"); + + console.log(`Sending SMS: ${from} -> ${to} (${body.length} chars)`); + + const result = await twilioSendSms({ + account_sid, + auth_token, + from, + to, + body, + status_callback: status_callback || undefined, + media_url: media_url ? (Array.isArray(media_url) ? media_url : [media_url]) : undefined, + }); + + console.log("SMS sent:", JSON.stringify(result)); + + return { + message_sid: result.sid, + status: result.status, + date_created: result.date_created, + }; + } +} + +// ── Tests ─────────────────────────────────────────────────────────────── +import { test, expect, describe } from "bun:test"; +try { + describe("TwilioSendSms", () => { + test("build: class can be instantiated", () => { + const nd = { type: "bun", node_id: "test", inputs: [], outputs: [], config: {} } as any; + const cmd = new TwilioSendSms(nd); + expect(cmd).toBeInstanceOf(BaseCommand); + }); + + test("run: rejects with missing account_sid", async () => { + const nd = { type: "bun", node_id: "test", inputs: [], outputs: [], config: {} } as any; + const cmd = new TwilioSendSms(nd); + const ctx = {} as Context; + await expect(cmd.run(ctx, {})).rejects.toThrow("account_sid"); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/solana/transfer_sol.ts b/crates/cmds-bun/src/solana/transfer_sol.ts index 652c4f046..900d2c878 100644 --- a/crates/cmds-bun/src/solana/transfer_sol.ts +++ b/crates/cmds-bun/src/solana/transfer_sol.ts @@ -1,24 +1,65 @@ import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; import { Instructions } from "@space-operator/flow-lib-bun/context"; +import bs58 from "bs58"; import { Keypair, PublicKey, SystemProgram, } from "@solana/web3.js"; +type InstructionSigner = Keypair | PublicKey; + +export function resolveTransferSignerInput(input: unknown): InstructionSigner { + if (input instanceof Keypair || input instanceof PublicKey) { + return input; + } + if (input instanceof Uint8Array) { + if (input.length === 64) return Keypair.fromSecretKey(input); + if (input.length === 32) return new PublicKey(input); + } + if (Array.isArray(input)) { + if (input.length === 64) return Keypair.fromSecretKey(new Uint8Array(input)); + if (input.length === 32) return new PublicKey(input); + } + if (typeof input === "object" && input !== null) { + const record = input as Record; + const secretKey = extractSecretKeyBytes(record); + if (secretKey) { + return Keypair.fromSecretKey(secretKey); + } + const publicKey = extractPublicKey(record); + if (publicKey) { + return publicKey; + } + } + throw new Error( + "transfer_sol_bun requires `sender` and `fee_payer` to be either a local Solana keypair or a Flow adapter wallet object with `public_key`.", + ); +} + +export function encodeTransactionSignature( + signature: Uint8Array | undefined, +): string | undefined { + return signature ? bs58.encode(signature) : undefined; +} + +function toSignerPubkey(signer: InstructionSigner): PublicKey { + return signer instanceof Keypair ? signer.publicKey : signer; +} + export default class TransferSol extends BaseCommand { override async run( ctx: Context, inputs: { - fee_payer?: Keypair; - sender: Keypair; + fee_payer?: unknown; + sender: unknown; recipient: PublicKey; amount: number; submit?: boolean; }, ): Promise<{ signature?: string }> { - const senderKeypair = inputs.sender; - const senderPubkey = senderKeypair.publicKey; + const senderSigner = resolveTransferSignerInput(inputs.sender); + const senderPubkey = toSignerPubkey(senderSigner); const recipient = inputs.recipient; const lamports = inputs.amount; const submit = inputs.submit ?? true; @@ -42,21 +83,20 @@ export default class TransferSol extends BaseCommand { let feePayer = senderPubkey; if (inputs.fee_payer) { - const feePayerKeypair = inputs.fee_payer; - if (!feePayerKeypair.publicKey.equals(senderPubkey)) { - feePayer = feePayerKeypair.publicKey; - signers.push(feePayerKeypair); + const feePayerSigner = resolveTransferSignerInput(inputs.fee_payer); + const feePayerPubkey = toSignerPubkey(feePayerSigner); + if (!feePayerPubkey.equals(senderPubkey)) { + feePayer = feePayerPubkey; + signers.push(feePayerSigner); } } - signers.push(senderKeypair); + signers.push(senderSigner); const instructions = new Instructions(feePayer, signers, [instruction]); const result = await ctx.execute(instructions, {}); - const signature = result.signature - ? Buffer.from(result.signature).toString("base64") - : undefined; + const signature = encodeTransactionSignature(result.signature); console.log("Transfer complete:", signature); @@ -64,6 +104,82 @@ export default class TransferSol extends BaseCommand { } } +function extractSecretKeyBytes(record: Record): Uint8Array | null { + const nestedSecretKey = record.secretKey ?? + (record._keypair && + typeof record._keypair === "object" + ? (record._keypair as Record).secretKey + : undefined); + + if (nestedSecretKey instanceof Uint8Array && nestedSecretKey.length === 64) { + return nestedSecretKey; + } + if (Array.isArray(nestedSecretKey) && nestedSecretKey.length === 64) { + return new Uint8Array(nestedSecretKey); + } + if (typeof nestedSecretKey === "object" && nestedSecretKey !== null) { + return extractIndexedBytes(nestedSecretKey as Record, 64); + } + + return extractIndexedBytes(record, 64); +} + +function extractPublicKey(record: Record): PublicKey | null { + const adapterPublicKey = extractRustWalletAdapterPublicKey(record); + const candidate = adapterPublicKey ?? record; + if (candidate instanceof PublicKey) { + return candidate; + } + if (candidate instanceof Uint8Array && candidate.length === 32) { + return new PublicKey(candidate); + } + if (Array.isArray(candidate) && candidate.length === 32) { + return new PublicKey(candidate); + } + if (typeof candidate === "object" && candidate !== null) { + const candidateRecord = candidate as Record; + if (typeof candidateRecord.S === "string" && candidateRecord.S.length > 0) { + return new PublicKey(candidateRecord.S); + } + if (typeof candidateRecord.B3 === "string" && candidateRecord.B3.length > 0) { + return new PublicKey(candidateRecord.B3); + } + if (typeof (candidate as { toBase58?: () => string }).toBase58 === "function") { + return new PublicKey((candidate as { toBase58: () => string }).toBase58()); + } + const indexed = extractIndexedBytes(candidateRecord, 32); + if (indexed) { + return new PublicKey(indexed); + } + } + return null; +} + +function extractRustWalletAdapterPublicKey( + record: Record, +): unknown { + if (!("public_key" in record) || !("token" in record)) { + return undefined; + } + return record.token === null || typeof record.token === "string" + ? record.public_key + : undefined; +} + +function extractIndexedBytes( + record: Record, + size: number, +): Uint8Array | null { + if (!(String(0) in record) || !(String(size - 1) in record)) { + return null; + } + const bytes = new Uint8Array(size); + for (let i = 0; i < size; i++) { + bytes[i] = Number(record[String(i)] ?? 0); + } + return bytes; +} + // ── Tests (only run under `bun test`, safe to import elsewhere) ─────── import { test, expect, describe } from "bun:test"; try { @@ -80,6 +196,52 @@ try { expect(cmd).toBeInstanceOf(BaseCommand); expect(cmd.run).toBeInstanceOf(Function); }); + + test("resolveTransferSignerInput: accepts adapter wallet objects", () => { + const publicKey = Keypair.generate().publicKey; + const signer = resolveTransferSignerInput({ + public_key: publicKey.toBytes(), + token: null, + }); + expect(toSignerPubkey(signer).toBase58()).toBe(publicKey.toBase58()); + }); + + test("resolveTransferSignerInput: rejects non-Rust wallet-shaped plain objects", () => { + const publicKey = Keypair.generate().publicKey; + expect(() => + resolveTransferSignerInput({ + publicKey: publicKey.toBytes(), + }) + ).toThrow("Flow adapter wallet object with `public_key`"); + }); + + test("run: returns base58 transaction signatures", async () => { + const nd = { + type: "bun", + node_id: "test", + inputs: [], + outputs: [], + config: {}, + } as any; + const cmd = new TransferSol(nd); + const sender = Keypair.generate().publicKey; + const recipient = Keypair.generate().publicKey; + + const result = await cmd.run( + { + async execute() { + return { signature: new Uint8Array([1, 2, 3, 4]) }; + }, + } as Context, + { + sender: { public_key: sender.toBytes(), token: null }, + recipient, + amount: 1, + }, + ); + + expect(result.signature).toBe(bs58.encode(new Uint8Array([1, 2, 3, 4]))); + }); }); } catch (_) { // Not running under `bun test` diff --git a/crates/cmds-bun/src/token_acl/gate_add_wallet.ts b/crates/cmds-bun/src/token_acl/gate_add_wallet.ts new file mode 100644 index 000000000..bdc25d78e --- /dev/null +++ b/crates/cmds-bun/src/token_acl/gate_add_wallet.ts @@ -0,0 +1,38 @@ +/** + * Token ACL Gate: add a wallet to an allow/block list. + * Creates the per-wallet entry PDA that the gate's can-thaw/freeze check reads. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { getAddWalletInstructionAsync } from "@solana/token-acl-gate-sdk"; +import { newSignerCache, signAndSendSingle, toAddress, toKitSigner } from "./token_acl_common.ts"; + +export default class TokenAclGateAddWallet extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const listConfig = toAddress(inputs.list_config); + const wallet = toAddress(inputs.wallet); + + const ix = await getAddWalletInstructionAsync({ + authority: authoritySigner, + payer: payerSigner, + listConfig, + wallet, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclGateAddWallet", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclGateAddWallet(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/gate_create_list.ts b/crates/cmds-bun/src/token_acl/gate_create_list.ts new file mode 100644 index 000000000..addf5f5e7 --- /dev/null +++ b/crates/cmds-bun/src/token_acl/gate_create_list.ts @@ -0,0 +1,51 @@ +/** + * Token ACL Gate: create an allow / allow-EOA / block list. + * Mode: 0=Allow, 1=AllowAllEoas, 2=Block. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { + getCreateListInstructionAsync, + findListConfigPda, + Mode, +} from "@solana/token-acl-gate-sdk"; +import { newSignerCache, signAndSendSingle, toAddress, toKitSigner } from "./token_acl_common.ts"; + +export default class TokenAclGateCreateList extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const seed = toAddress(inputs.seed); + const modeInput = inputs.mode ?? "Allow"; + const mode = + typeof modeInput === "number" + ? modeInput + : (Mode as any)[modeInput] ?? Mode.Allow; + + const ix = await getCreateListInstructionAsync({ + authority: authoritySigner, + payer: payerSigner, + mode, + seed, + }); + + const [listConfig] = await findListConfigPda({ + authority: authoritySigner.address, + seed, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature, list_config: listConfig }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclGateCreateList", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclGateCreateList(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/gate_delete_list.ts b/crates/cmds-bun/src/token_acl/gate_delete_list.ts new file mode 100644 index 000000000..6cb1da62b --- /dev/null +++ b/crates/cmds-bun/src/token_acl/gate_delete_list.ts @@ -0,0 +1,34 @@ +/** + * Token ACL Gate: delete a list (reclaims rent to authority). + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { getDeleteListInstruction } from "@solana/token-acl-gate-sdk"; +import { newSignerCache, signAndSendSingle, toAddress, toKitSigner } from "./token_acl_common.ts"; + +export default class TokenAclGateDeleteList extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const listConfig = toAddress(inputs.list_config); + + const ix = getDeleteListInstruction({ + authority: authoritySigner, + listConfig, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclGateDeleteList", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclGateDeleteList(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/gate_remove_wallet.ts b/crates/cmds-bun/src/token_acl/gate_remove_wallet.ts new file mode 100644 index 000000000..fed30ae96 --- /dev/null +++ b/crates/cmds-bun/src/token_acl/gate_remove_wallet.ts @@ -0,0 +1,42 @@ +/** + * Token ACL Gate: remove a wallet from an allow/block list by closing its + * entry PDA. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { + getRemoveWalletInstruction, + findWalletEntryPda, +} from "@solana/token-acl-gate-sdk"; +import { newSignerCache, signAndSendSingle, toAddress, toKitSigner } from "./token_acl_common.ts"; + +export default class TokenAclGateRemoveWallet extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const listConfig = toAddress(inputs.list_config); + const wallet = toAddress(inputs.wallet); + + const [walletEntry] = await findWalletEntryPda({ listConfig, wallet }); + + const ix = getRemoveWalletInstruction({ + authority: authoritySigner, + listConfig, + walletEntry, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclGateRemoveWallet", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclGateRemoveWallet(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/gate_setup_extra_metas.ts b/crates/cmds-bun/src/token_acl/gate_setup_extra_metas.ts new file mode 100644 index 000000000..575a204f6 --- /dev/null +++ b/crates/cmds-bun/src/token_acl/gate_setup_extra_metas.ts @@ -0,0 +1,60 @@ +/** + * Token ACL Gate: initialize the extra-metas PDAs for thaw/freeze so the + * Token ACL program can resolve gate-specific accounts when calling can-thaw / + * can-freeze. Must be called once per mint, passing the lists (allow + block) + * the gate should consult. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { getSetupExtraMetasInstruction } from "@solana/token-acl-gate-sdk"; +import { findMintConfigPda } from "@solana/token-acl-sdk"; +import { findThawExtraMetasAccountPda } from "@solana/token-acl-sdk"; +import { + newSignerCache, + signAndSendSingle, + toAddress, + toKitSigner, + ABL_GATE_PROGRAM_ID, +} from "./token_acl_common.ts"; +import type { Address } from "@solana/kit"; + +export default class TokenAclGateSetupExtraMetas extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const mint = toAddress(inputs.mint); + + const lists: Address[] = Array.isArray(inputs.lists) + ? inputs.lists.map((v: any) => toAddress(v)) + : []; + + const [tokenAclMintConfig] = await findMintConfigPda({ mint }); + const [extraMetas] = await findThawExtraMetasAccountPda( + { mint }, + { programAddress: toAddress(ABL_GATE_PROGRAM_ID) }, + ); + + const ix = getSetupExtraMetasInstruction({ + authority: authoritySigner, + payer: payerSigner, + tokenAclMintConfig, + mint, + extraMetas, + lists, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature, extra_metas: extraMetas }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclGateSetupExtraMetas", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclGateSetupExtraMetas(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/token_acl_common.ts b/crates/cmds-bun/src/token_acl/token_acl_common.ts new file mode 100644 index 000000000..3513229a7 --- /dev/null +++ b/crates/cmds-bun/src/token_acl/token_acl_common.ts @@ -0,0 +1,359 @@ +/** + * Shared helpers for Token ACL (sRFC37) bun nodes. + * + * Bridges the framework's `@solana/web3.js` v1 Keypair I/O to the new-gen + * `@solana/kit` runtime that `@solana/token-acl-sdk` is built on. + * + * The SDK expects: + * - `TransactionSigner` (kit) instead of `Keypair` (web3.js v1) + * - `Address` (branded string) instead of `PublicKey` + * - Pipe-based tx message construction + `signAndSendTransactionMessageWithSigners` + */ +import { + address, + createKeyPairSignerFromBytes, + createSolanaRpc, + createSolanaRpcSubscriptions, + sendAndConfirmTransactionFactory, + pipe, + createTransactionMessage, + setTransactionMessageFeePayerSigner, + setTransactionMessageLifetimeUsingBlockhash, + appendTransactionMessageInstructions, + getSignatureFromTransaction, + getSignersFromTransactionMessage, + signTransactionMessageWithSigners, + type Address, + type TransactionSigner, + type TransactionModifyingSigner, + type Instruction, + type Rpc, + type SolanaRpcApi, + type Transaction, + type TransactionWithinSizeLimit, + type TransactionWithLifetime, +} from "@solana/kit"; +import type { Context } from "@space-operator/flow-lib-bun"; +import { Keypair, PublicKey } from "@solana/web3.js"; + +/** Canonical Token ACL program (mainnet + devnet) */ +export const TOKEN_ACL_PROGRAM_ID = "TACLkU6CiCdkQN2MjoyDkVg2yAH9zkxiHDsiztQ52TP"; +/** Canonical ABL Gate Program (reference "always-allow / allow-block-list" gate) */ +export const ABL_GATE_PROGRAM_ID = "GATEzzqxhJnsWF6vHRsgtixxSB8PaQdcqGEVTEHWiULz"; + +/** + * Normalise whatever keypair shape the framework handed us into raw 64-byte + * secret key bytes. + */ +function toSecretKeyBytes(keypairInput: any): Uint8Array { + if (keypairInput instanceof Uint8Array && keypairInput.length === 64) { + return keypairInput; + } + if (keypairInput instanceof Keypair) { + return keypairInput.secretKey; + } + if (keypairInput?.secretKey) { + return new Uint8Array(keypairInput.secretKey); + } + if (keypairInput?._keypair?.secretKey) { + return new Uint8Array(keypairInput._keypair.secretKey); + } + const directIndexed = extractIndexedBytes(keypairInput, 64); + if (directIndexed) { + return directIndexed; + } + if (keypairInput?.secretKey) { + const nestedIndexed = extractIndexedBytes(keypairInput.secretKey, 64); + if (nestedIndexed) { + return nestedIndexed; + } + } + throw new Error( + `Cannot normalise keypair: ${typeof keypairInput}, keys=${ + keypairInput ? Object.keys(keypairInput).join(",") : "null" + }`, + ); +} + +type FlowAdapterTransactionSigner = TransactionModifyingSigner & { + __flow_backend_adapter: true; +}; + +function isFlowAdapterTransactionSigner( + signer: TransactionSigner, +): signer is FlowAdapterTransactionSigner { + return (signer as { __flow_backend_adapter?: boolean }).__flow_backend_adapter === + true; +} + +function extractAdapterWalletAddress(keypairInput: any): Address | null { + if (!isRustWalletAdapterRecord(keypairInput)) { + return null; + } + try { + return toAddress(keypairInput.public_key); + } catch { + return null; + } +} + +function isRustWalletAdapterRecord( + value: unknown, +): value is { public_key: unknown; token: string | null } { + if (typeof value !== "object" || value === null) return false; + const record = value as Record; + return "public_key" in record && + "token" in record && + (record.token === null || typeof record.token === "string"); +} + +function createAdapterTransactionSigner( + ctx: Context, + signerAddress: Address, +): FlowAdapterTransactionSigner { + const publicKey = new PublicKey(signerAddress); + return { + __flow_backend_adapter: true, + address: signerAddress, + async modifyAndSignTransactions( + transactions: readonly ( + | Transaction + | (Transaction & TransactionWithLifetime) + )[], + ): Promise< + readonly (Transaction & TransactionWithinSizeLimit & TransactionWithLifetime)[] + > { + return await Promise.all( + transactions.map(async (transaction) => { + const { signature, new_message } = await ctx.requestSignature( + publicKey, + new Uint8Array(transaction.messageBytes), + ); + return { + ...transaction, + messageBytes: (new_message ?? transaction.messageBytes) as typeof transaction.messageBytes, + signatures: { + ...transaction.signatures, + [signerAddress]: signature, + }, + } as Transaction & TransactionWithinSizeLimit & TransactionWithLifetime; + }), + ); + }, + }; +} + +/** + * Convert raw 64-byte secret → `@solana/kit` `TransactionSigner`. + * + * `@solana/kit`'s tx builder requires a *single* signer instance per address; + * passing two separately-constructed signers for the same pubkey raises + * "Multiple distinct signers were identified for address". We dedupe against + * `cache` (pass the same Map across multiple `toKitSigner` calls within a + * single node run) so `fee_payer === authority` wiring works naturally. + */ +export async function toKitSigner( + ctx: Context, + keypairInput: any, + cache?: Map, +): Promise { + let signer: TransactionSigner; + const adapterAddress = extractAdapterWalletAddress(keypairInput); + if (adapterAddress) { + signer = createAdapterTransactionSigner(ctx, adapterAddress); + } else { + const bytes = toSecretKeyBytes(keypairInput); + signer = await createKeyPairSignerFromBytes(bytes); + } + if (!cache) return signer; + const existing = cache.get(signer.address); + if (existing) { + if (isFlowAdapterTransactionSigner(existing) && + !isFlowAdapterTransactionSigner(signer)) { + cache.set(signer.address, signer); + return signer; + } + return existing; + } + cache.set(signer.address, signer); + return signer; +} + +/** Fresh signer cache for one node run — pass to every `toKitSigner` call. */ +export function newSignerCache(): Map { + return new Map(); +} + +/** + * Build RPC + subscription handles from an `rpc_url`. + * + * Subscription URL is derived by swapping http(s) → ws(s); callers may pass an + * explicit `wsUrl` to override. + */ +export function createRpc( + rpcUrl: string, + wsUrl?: string, +): { + rpc: Rpc; + rpcSubscriptions: ReturnType; +} { + const ws = + wsUrl ?? + rpcUrl.replace(/^http(s?):\/\//, (_m, s) => (s ? "wss://" : "ws://")); + return { + rpc: createSolanaRpc(rpcUrl), + rpcSubscriptions: createSolanaRpcSubscriptions(ws), + }; +} + +/** + * Coerce a pubkey-ish input to kit `Address`. + * + * Handles: + * - plain base58 string + * - web3.js PublicKey-like (has `.toBase58()`) + * - IValue-wrapped strings (`{S: "..."}`, `{B3: "..."}` — the shapes the + * flow2 runtime uses when handing typed values to bun nodes). + */ +export function toAddress(v: any): Address { + if (typeof v === "string") return address(v); + if (v instanceof Uint8Array && v.length === 32) { + return address(new PublicKey(v).toBase58()); + } + if (Array.isArray(v) && v.length === 32) { + return address(new PublicKey(v).toBase58()); + } + if (v && typeof v === "object") { + if (typeof v.S === "string") return address(v.S); + if (typeof v.B3 === "string") return address(v.B3); + if (typeof v.toBase58 === "function") return address(v.toBase58()); + const indexed = extractIndexedBytes(v as Record, 32); + if (indexed) return address(new PublicKey(indexed).toBase58()); + } + throw new Error( + `Cannot coerce to Address: ${typeof v} ${ + v && typeof v === "object" ? `keys=${Object.keys(v).join(",")}` : String(v) + }`, + ); +} + +/** + * Build a single-instruction tx, sign with the provided signer, send, and + * wait for confirmation. Returns the base58 signature string. + */ +export async function signAndSendSingle( + rpcUrl: string, + feePayer: TransactionSigner, + instruction: Instruction, +): Promise { + return signAndSendMany(rpcUrl, feePayer, [instruction]); +} + +export async function signAndSendMany( + rpcUrl: string, + feePayer: TransactionSigner, + instructions: Instruction[], +): Promise { + const { rpc, rpcSubscriptions } = createRpc(rpcUrl); + const { value: latestBlockhash } = await rpc + .getLatestBlockhash({ commitment: "confirmed" }) + .send(); + + const txMessage = pipe( + createTransactionMessage({ version: 0 }), + (m) => setTransactionMessageFeePayerSigner(feePayer, m), + (m) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, m), + (m) => appendTransactionMessageInstructions(instructions, m), + ); + + const adapterSignerAddresses = new Set( + getSignersFromTransactionMessage(txMessage) + .filter(isFlowAdapterTransactionSigner) + .map((signer) => signer.address), + ); + if (adapterSignerAddresses.size > 1) { + throw new Error( + "Token ACL bun nodes currently support at most one distinct Flow adapter wallet signer per transaction. Use a local keypair for the second signer, or make fee_payer and authority the same wallet.", + ); + } + + const signedTx = await signTransactionMessageWithSigners(txMessage); + const signature = getSignatureFromTransaction(signedTx); + + const sendAndConfirm = sendAndConfirmTransactionFactory({ + rpc, + rpcSubscriptions, + }); + await sendAndConfirm(signedTx, { commitment: "confirmed" }); + return signature; +} + +function extractIndexedBytes( + value: unknown, + size: number, +): Uint8Array | null { + if (typeof value !== "object" || value === null) { + return null; + } + const record = value as Record; + if (!(String(0) in record) || !(String(size - 1) in record)) { + return null; + } + const bytes = new Uint8Array(size); + for (let i = 0; i < size; i++) { + bytes[i] = Number(record[String(i)] ?? 0); + } + return bytes; +} + +import { describe, expect, test } from "bun:test"; +try { + describe("token_acl_common", () => { + test("toAddress: accepts indexed pubkey bytes", () => { + const publicKey = Keypair.generate().publicKey; + const indexed = Object.fromEntries( + Array.from(publicKey.toBytes(), (value, index) => [String(index), value]), + ); + expect(toAddress(indexed)).toBe(publicKey.toBase58()); + }); + + test("toKitSigner: adapter wallets sign through ctx.requestSignature", async () => { + const publicKey = Keypair.generate().publicKey; + const signature = new Uint8Array(64).fill(7); + const newMessage = new Uint8Array([9, 8, 7]); + const signer = await toKitSigner( + { + async requestSignature() { + return { signature, new_message: newMessage }; + }, + } as Context, + { public_key: publicKey.toBytes(), token: null }, + ); + + expect(isFlowAdapterTransactionSigner(signer)).toBe(true); + const [signedTransaction] = await (signer as FlowAdapterTransactionSigner) + .modifyAndSignTransactions([ + { + messageBytes: new Uint8Array([1, 2, 3]), + signatures: {}, + } as Transaction & TransactionWithLifetime, + ]); + + expect(Array.from(signedTransaction.messageBytes)).toEqual(Array.from(newMessage)); + expect(Array.from(signedTransaction.signatures[publicKey.toBase58()]!)).toEqual( + Array.from(signature), + ); + }); + + test("toKitSigner: does not treat non-Rust wallet-shaped objects as adapter wallets", async () => { + await expect( + toKitSigner( + {} as Context, + { publicKey: Keypair.generate().publicKey.toBytes() }, + ), + ).rejects.toThrow("Cannot normalise keypair"); + }); + }); +} catch (_) { + // Not running under `bun test` +} diff --git a/crates/cmds-bun/src/token_acl/token_acl_create_config.ts b/crates/cmds-bun/src/token_acl/token_acl_create_config.ts new file mode 100644 index 000000000..8603eebb3 --- /dev/null +++ b/crates/cmds-bun/src/token_acl/token_acl_create_config.ts @@ -0,0 +1,87 @@ +/** + * Token ACL: create MintConfig PDA for a Token-2022 mint. + * + * Pre-requisite: the mint's freeze authority must already be set to the Token + * ACL program's MintConfig PDA (or, if the mint's current freeze authority + * signs this tx, `createConfig` will set it for them). + * + * After this runs, the Token ACL program acts as the mint's delegated freeze + * authority, and the provided gating program decides who can permissionlessly + * thaw / freeze token accounts. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { + getCreateConfigInstructionAsync, + findMintConfigPda, +} from "@solana/token-acl-sdk"; +import { TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022"; +import { + ABL_GATE_PROGRAM_ID, + newSignerCache, + signAndSendSingle, + toAddress, + toKitSigner, +} from "./token_acl_common.ts"; +import type { Address } from "@solana/kit"; + +export default class TokenAclCreateConfig extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + + const mint = toAddress(inputs.mint); + const gatingProgram: Address = inputs.gating_program + ? toAddress(inputs.gating_program) + : toAddress(ABL_GATE_PROGRAM_ID); + + const ix = await getCreateConfigInstructionAsync({ + payer: payerSigner.address, + authority: authoritySigner, + mint, + gatingProgram, + tokenProgram: TOKEN_2022_PROGRAM_ADDRESS, + }); + + const [mintConfig] = await findMintConfigPda({ mint }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + + return { signature, mint_config_pda: mintConfig }; + } +} + +// ── Tests (only run under `bun test`) ───────────────────────────────── +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclCreateConfig", () => { + test("build: class can be instantiated", () => { + const nd = { + type: "bun", + node_id: "test", + inputs: [], + outputs: [], + config: {}, + } as any; + const cmd = new TokenAclCreateConfig(nd); + expect(cmd).toBeInstanceOf(BaseCommand); + expect(cmd.run).toBeInstanceOf(Function); + }); + + test("run: rejects without keypair", async () => { + const nd = { + type: "bun", + node_id: "test", + inputs: [], + outputs: [], + config: {}, + } as any; + const cmd = new TokenAclCreateConfig(nd); + const ctx = {} as Context; + await expect(cmd.run(ctx, {})).rejects.toThrow(); + }); + }); +} catch (_) { + // not under `bun test` +} diff --git a/crates/cmds-bun/src/token_acl/token_acl_freeze.ts b/crates/cmds-bun/src/token_acl/token_acl_freeze.ts new file mode 100644 index 000000000..c2475998d --- /dev/null +++ b/crates/cmds-bun/src/token_acl/token_acl_freeze.ts @@ -0,0 +1,38 @@ +/** + * Token ACL: permissioned freeze. MintConfig.authority signs and freezes a TA. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { getFreezeInstructionAsync } from "@solana/token-acl-sdk"; +import { TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022"; +import { newSignerCache, signAndSendSingle, toAddress, toKitSigner } from "./token_acl_common.ts"; + +export default class TokenAclFreeze extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const mint = toAddress(inputs.mint); + const tokenAccount = toAddress(inputs.token_account); + + const ix = await getFreezeInstructionAsync({ + authority: authoritySigner, + mint, + tokenAccount, + tokenProgram: TOKEN_2022_PROGRAM_ADDRESS, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclFreeze", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclFreeze(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/token_acl_set_authority.ts b/crates/cmds-bun/src/token_acl/token_acl_set_authority.ts new file mode 100644 index 000000000..f383d57c5 --- /dev/null +++ b/crates/cmds-bun/src/token_acl/token_acl_set_authority.ts @@ -0,0 +1,41 @@ +/** + * Token ACL: rotate the MintConfig.authority. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { + getSetAuthorityInstruction, + findMintConfigPda, +} from "@solana/token-acl-sdk"; +import { newSignerCache, signAndSendSingle, toAddress, toKitSigner } from "./token_acl_common.ts"; + +export default class TokenAclSetAuthority extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const mint = toAddress(inputs.mint); + const newAuthority = toAddress(inputs.new_authority); + + const [mintConfig] = await findMintConfigPda({ mint }); + + const ix = getSetAuthorityInstruction({ + authority: authoritySigner, + mintConfig, + newAuthority, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclSetAuthority", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclSetAuthority(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/token_acl_set_gating_program.ts b/crates/cmds-bun/src/token_acl/token_acl_set_gating_program.ts new file mode 100644 index 000000000..d6eb9153b --- /dev/null +++ b/crates/cmds-bun/src/token_acl/token_acl_set_gating_program.ts @@ -0,0 +1,41 @@ +/** + * Token ACL: change the MintConfig.gating_program. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { + getSetGatingProgramInstruction, + findMintConfigPda, +} from "@solana/token-acl-sdk"; +import { newSignerCache, signAndSendSingle, toAddress, toKitSigner } from "./token_acl_common.ts"; + +export default class TokenAclSetGatingProgram extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const mint = toAddress(inputs.mint); + const newGatingProgram = toAddress(inputs.new_gating_program); + + const [mintConfig] = await findMintConfigPda({ mint }); + + const ix = getSetGatingProgramInstruction({ + authority: authoritySigner, + mintConfig, + newGatingProgram, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclSetGatingProgram", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclSetGatingProgram(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/token_acl_thaw.ts b/crates/cmds-bun/src/token_acl/token_acl_thaw.ts new file mode 100644 index 000000000..1bdac883b --- /dev/null +++ b/crates/cmds-bun/src/token_acl/token_acl_thaw.ts @@ -0,0 +1,38 @@ +/** + * Token ACL: permissioned thaw. MintConfig.authority signs and thaws a TA. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { getThawInstructionAsync } from "@solana/token-acl-sdk"; +import { TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022"; +import { newSignerCache, signAndSendSingle, toAddress, toKitSigner } from "./token_acl_common.ts"; + +export default class TokenAclThaw extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const mint = toAddress(inputs.mint); + const tokenAccount = toAddress(inputs.token_account); + + const ix = await getThawInstructionAsync({ + authority: authoritySigner, + mint, + tokenAccount, + tokenProgram: TOKEN_2022_PROGRAM_ADDRESS, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclThaw", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclThaw(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/token_acl_thaw_permissionless.ts b/crates/cmds-bun/src/token_acl/token_acl_thaw_permissionless.ts new file mode 100644 index 000000000..90b240f7d --- /dev/null +++ b/crates/cmds-bun/src/token_acl/token_acl_thaw_permissionless.ts @@ -0,0 +1,120 @@ +/** + * Token ACL: permissionless thaw. Anyone can call; gating program decides. + * + * Uses the idempotent variant by default (returns early if TA already + * `Initialized`). Automatically resolves the thaw-extra-metas PDA + remaining + * accounts declared by the gating program's TLV metadata. + * + * When `create_ata: true`, this bundles an ATA-create instruction before the + * thaw using the SDK's `createTokenAccountWithAcl` helper — the holder's + * self-onboarding path (one tx creates ATA and thaws it permissionlessly). + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { + createThawPermissionlessIdempotentInstructionWithExtraMetas, + createThawPermissionlessInstructionWithExtraMetas, +} from "@solana/token-acl-sdk"; +import { fetchEncodedAccount } from "@solana/kit"; +import { + findAssociatedTokenPda, + getCreateAssociatedTokenIdempotentInstruction, + TOKEN_2022_PROGRAM_ADDRESS, +} from "@solana-program/token-2022"; +import { + TOKEN_ACL_PROGRAM_ID, + createRpc, + newSignerCache, + signAndSendMany, + signAndSendSingle, + toAddress, + toKitSigner, +} from "./token_acl_common.ts"; + +export default class TokenAclThawPermissionless extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = inputs.authority + ? await toKitSigner(ctx, inputs.authority, signerCache) + : payerSigner; + + const mint = toAddress(inputs.mint); + const tokenAccountOwner = toAddress(inputs.token_account_owner); + const idempotent = inputs.idempotent !== false; + const createAta = Boolean(inputs.create_ata); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const { rpc } = createRpc(rpcUrl); + const programAddress = toAddress(TOKEN_ACL_PROGRAM_ID); + + // Derive ATA if not supplied + const tokenAccount = inputs.token_account + ? toAddress(inputs.token_account) + : (await findAssociatedTokenPda({ + mint, + owner: tokenAccountOwner, + tokenProgram: TOKEN_2022_PROGRAM_ADDRESS, + }))[0]; + + const accountRetriever = (addr: any) => fetchEncodedAccount(rpc, addr); + + if (createAta) { + // Build the ATA-create instruction manually. We bypass the SDK's + // createTokenAccountWithAcl helper because it requires the mint to + // carry a TokenMetadata extension declaring `token_acl` — for the + // minimum-viable ACL pilot we only require DefaultAccountState. + const ataCreateIx = getCreateAssociatedTokenIdempotentInstruction({ + owner: tokenAccountOwner, + mint, + ata: tokenAccount, + payer: payerSigner, + tokenProgram: TOKEN_2022_PROGRAM_ADDRESS, + }); + const thawIx = + await createThawPermissionlessIdempotentInstructionWithExtraMetas( + authoritySigner, + tokenAccount, + mint, + tokenAccountOwner, + programAddress, + accountRetriever, + ); + const signature = await signAndSendMany(rpcUrl, payerSigner, [ + ataCreateIx, + thawIx, + ]); + return { signature, token_account: tokenAccount }; + } + + const ix = idempotent + ? await createThawPermissionlessIdempotentInstructionWithExtraMetas( + authoritySigner, + tokenAccount, + mint, + tokenAccountOwner, + programAddress, + accountRetriever, + ) + : await createThawPermissionlessInstructionWithExtraMetas( + authoritySigner, + tokenAccount, + mint, + tokenAccountOwner, + programAddress, + accountRetriever, + ); + + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature, token_account: tokenAccount }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclThawPermissionless", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclThawPermissionless(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/token_acl/token_acl_toggle_permissionless.ts b/crates/cmds-bun/src/token_acl/token_acl_toggle_permissionless.ts new file mode 100644 index 000000000..9c26f3d5f --- /dev/null +++ b/crates/cmds-bun/src/token_acl/token_acl_toggle_permissionless.ts @@ -0,0 +1,43 @@ +/** + * Token ACL: toggle permissionless thaw / freeze flags on MintConfig. + */ +import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; +import { + getTogglePermissionlessInstructionsInstruction, + findMintConfigPda, +} from "@solana/token-acl-sdk"; +import { newSignerCache, signAndSendSingle, toAddress, toKitSigner } from "./token_acl_common.ts"; + +export default class TokenAclTogglePermissionless extends BaseCommand { + override async run(ctx: Context, inputs: any): Promise { + const signerCache = newSignerCache(); + const payerSigner = await toKitSigner(ctx, inputs.fee_payer, signerCache); + const authoritySigner = await toKitSigner(ctx, inputs.authority, signerCache); + const mint = toAddress(inputs.mint); + const thawEnabled = Boolean(inputs.thaw_enabled); + const freezeEnabled = Boolean(inputs.freeze_enabled); + + const [mintConfig] = await findMintConfigPda({ mint }); + + const ix = getTogglePermissionlessInstructionsInstruction({ + authority: authoritySigner, + mintConfig, + thawEnabled, + freezeEnabled, + }); + + const rpcUrl = inputs.rpc_url ?? "https://api.devnet.solana.com"; + const signature = await signAndSendSingle(rpcUrl, payerSigner, ix); + return { signature }; + } +} + +import { test, expect, describe } from "bun:test"; +try { + describe("TokenAclTogglePermissionless", () => { + test("build", () => { + const nd = { type: "bun", node_id: "t", inputs: [], outputs: [], config: {} } as any; + expect(new TokenAclTogglePermissionless(nd)).toBeInstanceOf(BaseCommand); + }); + }); +} catch (_) {} diff --git a/crates/cmds-bun/src/umbra/umbra_claim_utxo.ts b/crates/cmds-bun/src/umbra/umbra_claim_utxo.ts index 3b7208ba4..546d6254c 100644 --- a/crates/cmds-bun/src/umbra/umbra_claim_utxo.ts +++ b/crates/cmds-bun/src/umbra/umbra_claim_utxo.ts @@ -6,6 +6,7 @@ import { createRustProver, getPrimarySignature, logUmbraError, + resolveUmbraSignerBytes, safeJsonStringify, wrapZkProver, } from "./umbra_common.ts"; @@ -14,7 +15,7 @@ export default class UmbraClaimUtxo extends BaseCommand { override async run(ctx: Context, inputs: any): Promise { console.log("[claim_utxo] phase: client_creation"); const client = await createUmbraClient( - new Uint8Array(inputs.keypair), + resolveUmbraSignerBytes(inputs), inputs.network, inputs.rpc_url, ctx, @@ -25,12 +26,20 @@ export default class UmbraClaimUtxo extends BaseCommand { "claim_utxo", createRustProver("claimDepositIntoConfidentialAmount"), ); - const relayer = createRelayer(); + const relayer = createRelayer(inputs.network); console.log("[claim_utxo] phase: function_creation"); + // SDK requires fetchBatchMerkleProof in deps. It's attached to the + // client when indexerApiEndpoint is configured (see SDK index.js:784). + const fetchBatchMerkleProof = (client as any).fetchBatchMerkleProof; + if (!fetchBatchMerkleProof) { + throw new Error( + "Umbra client is missing fetchBatchMerkleProof — indexerApiEndpoint not configured for this network.", + ); + } const claimUtxo = getReceiverClaimableUtxoToEncryptedBalanceClaimerFunction( { client }, - { zkProver, relayer } as any, + { zkProver, relayer, fetchBatchMerkleProof } as any, ); console.log("[claim_utxo] phase: execution"); diff --git a/crates/cmds-bun/src/umbra/umbra_common.ts b/crates/cmds-bun/src/umbra/umbra_common.ts index 5153e298e..76da6bfe2 100644 --- a/crates/cmds-bun/src/umbra/umbra_common.ts +++ b/crates/cmds-bun/src/umbra/umbra_common.ts @@ -14,13 +14,24 @@ import { getUmbraRelayer, } from "@umbra-privacy/sdk"; import * as snarkjs from "snarkjs"; -import { PublicKey } from "@solana/web3.js"; -import type { Context } from "@space-operator/flow-lib-bun"; +import { Keypair, PublicKey } from "@solana/web3.js"; +import { BaseCommand, Value, type Context } from "@space-operator/flow-lib-bun"; -export const INDEXER_ENDPOINT = +export const INDEXER_ENDPOINT_MAINNET = "https://acqzie0a1h.execute-api.eu-central-1.amazonaws.com"; -export const RELAYER_ENDPOINT = +export const INDEXER_ENDPOINT_DEVNET = + "https://utxo-indexer.api-devnet.umbraprivacy.com"; +// Backward-compatible alias; prefer the network-specific constants above. +export const INDEXER_ENDPOINT = INDEXER_ENDPOINT_MAINNET; +export const RELAYER_ENDPOINT_MAINNET = "https://6yn4ndrv2i.execute-api.eu-central-1.amazonaws.com"; +// Devnet relayer inferred from the indexer URL pattern +// (utxo-indexer.api-devnet.umbraprivacy.com → relayer.api-devnet.umbraprivacy.com). +// If Umbra publishes a different devnet relayer domain, override via env or update here. +export const RELAYER_ENDPOINT_DEVNET = + "https://relayer.api-devnet.umbraprivacy.com"; +// Backward-compatible alias; prefer the network-specific constants above. +export const RELAYER_ENDPOINT = RELAYER_ENDPOINT_MAINNET; const SUPPORTED_NETWORKS = ["mainnet", "devnet"] as const; @@ -155,6 +166,165 @@ export function getPrimarySignature(result: unknown): string { return safeJsonStringify(result); } +/** + * Resolve signer bytes for an Umbra node from its raw inputs. + * + * Accepts either: + * - `inputs.pubkey` (base58 string) — signs via the flow framework's + * wallet adapter through ctx.requestSignature / ctx.requestMessageSignature. + * Preferred for user-initiated flows: the private key never leaves the + * wallet. The Umbra SDK's master seed is derived from signMessage, so + * this path supports ZK operations too. + * - `inputs.keypair` — a `@solana/web3.js` Keypair object as delivered by + * the SO wallet adapter (any wallet node: hardcoded / generated / + * api_input). The framework materialises the Keypair for us; we pull + * its `.secretKey` (64-byte secret ∥ public). Intended for automation + * where a programmatic caller hands us the private half through the + * normal wallet binding machinery — no raw-bytes plumbing in the flow + * graph. + * + * Also accepts raw bytes / ArrayLike for backward compatibility + * with any legacy callers that wired bytes into this port before the + * type_bounds tightened to `keypair`. + * + * If both are provided, `keypair` wins (explicit-over-implicit). + */ +export function resolveUmbraSignerBytes(inputs: { + keypair?: unknown; + pubkey?: unknown; +}): Uint8Array { + if (inputs.keypair !== undefined && inputs.keypair !== null) { + const kp: any = inputs.keypair; + // Already raw bytes wired in. + if (kp instanceof Uint8Array) return kp; + + const secretKeyBytes = extractSecretKeyBytes(kp); + if (secretKeyBytes) { + return secretKeyBytes; + } + + // Flow wallet nodes can emit adapter-wallet objects on a `keypair` + // port when the backing wallet is user-controlled and the secret key + // is not available to the backend. + const adapterPubkeyBytes = extractAdapterWalletPubkeyBytes(kp); + if (adapterPubkeyBytes) { + return adapterPubkeyBytes; + } + + // Legacy: caller wired in a plain array / ArrayLike. + if (typeof kp?.length === "number") { + return new Uint8Array(kp as ArrayLike); + } + + throw new Error( + "Umbra node received an unsupported `keypair` input shape. Expected a Solana Keypair, 64-byte secret key, or Flow adapter wallet object with `public_key`.", + ); + } + const pubkeyBytes = extractPubkeyBytes(inputs.pubkey); + if (pubkeyBytes) { + return pubkeyBytes; + } + throw new Error( + "Umbra node requires either `pubkey` (base58 string or 32-byte array; signs via wallet adapter) or `keypair` (Solana Keypair from the framework wallet adapter; signs locally).", + ); +} + +// Accept every shape a `pubkey`-typed or `string`-typed input may take in +// bun nodes: raw 32-byte array-likes (Uint8Array, Array, or index-keyed +// objects the way the flow runtime serializes pubkeys), IValue wrappers +// ({B3: "..."}, {S: "..."}), plain base58 strings, and PublicKey-likes. +function extractPubkeyBytes(value: unknown): Uint8Array | null { + if (value === undefined || value === null) return null; + if (value instanceof Uint8Array) { + return value.length === 32 ? value : null; + } + if (Array.isArray(value) && value.length === 32) { + return new Uint8Array(value as number[]); + } + if (typeof value === "string" && value.length > 0) { + return new PublicKey(value).toBytes(); + } + if (typeof value === "object") { + const record = value as Record; + if (typeof record.B3 === "string" && record.B3.length > 0) { + return new PublicKey(record.B3).toBytes(); + } + if (typeof record.S === "string" && record.S.length > 0) { + return new PublicKey(record.S).toBytes(); + } + const maybePk = value as { toBase58?: () => string }; + if (typeof maybePk.toBase58 === "function") { + return new PublicKey(maybePk.toBase58()).toBytes(); + } + // Index-keyed plain object: {0: 255, 1: 130, ..., 31: 42} + if ("0" in record && "31" in record) { + const bytes = new Uint8Array(32); + for (let i = 0; i < 32; i++) { + bytes[i] = Number(record[String(i)] ?? 0); + } + return bytes; + } + } + return null; +} + +function extractSecretKeyBytes(value: unknown): Uint8Array | null { + if (value === undefined || value === null) return null; + if (value instanceof Uint8Array) { + return value.length === 64 ? value : null; + } + if (Array.isArray(value) && value.length === 64) { + return new Uint8Array(value as number[]); + } + if (typeof value === "object") { + const record = value as Record; + const nestedSecretKey = record.secretKey; + if (nestedSecretKey instanceof Uint8Array && nestedSecretKey.length === 64) { + return nestedSecretKey; + } + if (Array.isArray(nestedSecretKey) && nestedSecretKey.length === 64) { + return new Uint8Array(nestedSecretKey as number[]); + } + const directIndexed = extractIndexedBytes(record, 64); + if (directIndexed) { + return directIndexed; + } + if (typeof nestedSecretKey === "object" && nestedSecretKey !== null) { + return extractIndexedBytes(nestedSecretKey as Record, 64); + } + } + return null; +} + +function extractAdapterWalletPubkeyBytes(value: unknown): Uint8Array | null { + if (!isRustWalletAdapterRecord(value)) return null; + return extractPubkeyBytes(value.public_key); +} + +function isRustWalletAdapterRecord( + value: unknown, +): value is { public_key: unknown; token: string | null } { + if (typeof value !== "object" || value === null) return false; + const record = value as Record; + return "public_key" in record && + "token" in record && + (record.token === null || typeof record.token === "string"); +} + +function extractIndexedBytes( + record: Record, + size: number, +): Uint8Array | null { + if (!(String(0) in record) || !(String(size - 1) in record)) { + return null; + } + const bytes = new Uint8Array(size); + for (let i = 0; i < size; i++) { + bytes[i] = Number(record[String(i)] ?? 0); + } + return bytes; +} + /** * Create an Umbra SDK client. * @@ -184,9 +354,10 @@ export async function createUmbraClient( const rpcSubscriptionsUrl = rpcUrl .replace(/^https:\/\//, "wss://") .replace(/^http:\/\//, "ws://"); - // Indexer is mainnet-only — devnet indexer not yet available const indexerApiEndpoint = network === "mainnet" - ? INDEXER_ENDPOINT + ? INDEXER_ENDPOINT_MAINNET + : network === "devnet" + ? INDEXER_ENDPOINT_DEVNET : undefined; const transactionForwarder = ctx ? createFrameworkForwarder(ctx) : undefined; @@ -265,6 +436,113 @@ function createFlowSigner(ctx: Context, pubkeyBytes: Uint8Array) { }; } +// ── Tests (only run under `bun test`, safe to import elsewhere) ─────── +import { test, expect, describe } from "bun:test"; +try { + describe("resolveUmbraSignerBytes", () => { + const probe = new BaseCommand({ + type: "bun", + node_id: "umbra_signer_probe", + config: {}, + outputs: [], + inputs: [ + { + id: "pubkey", + name: "pubkey", + type_bounds: ["pubkey", "string"], + required: false, + passthrough: false, + }, + { + id: "keypair", + name: "keypair", + type_bounds: ["keypair"], + required: false, + passthrough: false, + }, + ], + }); + + test("uses adapter wallet object from Flow wallet output", () => { + const pubkey = new PublicKey(new Uint8Array(32).fill(7)); + const result = resolveUmbraSignerBytes({ + keypair: { + public_key: pubkey.toBytes(), + token: null, + }, + }); + + expect(result.length).toBe(32); + expect(Array.from(result)).toEqual(Array.from(pubkey.toBytes())); + }); + + test("rejects non-Rust wallet-shaped adapter objects on the keypair port", () => { + const pubkey = new PublicKey(new Uint8Array(32).fill(11)); + expect(() => + resolveUmbraSignerBytes({ + keypair: { + publicKey: pubkey.toBytes(), + }, + }) + ).toThrow("unsupported `keypair` input shape"); + }); + + test("uses local keypair secret key when available", () => { + const secretKey = new Uint8Array(64).fill(9); + const result = resolveUmbraSignerBytes({ + keypair: { + secretKey, + }, + }); + + expect(result.length).toBe(64); + expect(Array.from(result)).toEqual(Array.from(secretKey)); + }); + + test("accepts Flow wallet pubkey output through Bun input deserialization", () => { + const pubkey = Keypair.generate().publicKey; + const inputs = probe.deserializeInputs({ + pubkey: Value.PublicKey(pubkey), + }); + + const result = resolveUmbraSignerBytes(inputs); + expect(result.length).toBe(32); + expect(new PublicKey(result).toBase58()).toBe(pubkey.toBase58()); + }); + + test("accepts Flow wallet keypair output for local wallets through Bun input deserialization", () => { + const keypair = Keypair.generate(); + const inputs = probe.deserializeInputs({ + keypair: Value.Keypair(keypair), + }); + + const result = resolveUmbraSignerBytes(inputs); + expect(result.length).toBe(64); + expect(new PublicKey(result.slice(32)).toBase58()).toBe( + keypair.publicKey.toBase58(), + ); + }); + + test("accepts Flow wallet keypair output for adapter wallets through Bun input deserialization", () => { + const pubkey = Keypair.generate().publicKey; + const inputs = probe.deserializeInputs({ + keypair: Value.fromJSON({ + M: { + public_key: { B3: pubkey.toBase58() }, + token: { N: 0 }, + }, + }), + }); + + const result = resolveUmbraSignerBytes(inputs); + expect(result.length).toBe(32); + expect(new PublicKey(result).toBase58()).toBe(pubkey.toBase58()); + }); + }); +} catch (_) { + // Not running under `bun test` +} + /** * Encode a @solana/kit v2 signed transaction into the Solana wire format. * @@ -315,6 +593,19 @@ function createFrameworkForwarder(ctx: Context) { return signature; }; + // Send a signed tx without waiting for confirmation. Used by the SDK + // for rent-reclaim after deposit/withdraw — we want the main result to + // return as soon as the primary tx confirms, and let the rent-reclaim + // follow-up land on its own. Without this method, the SDK logs + // "config.transactionForwarder.fireAndForget is not a function" and + // surfaces a non-fatal rentClaimError. + const fireAndForget = async (transaction: any): Promise => { + const wireBytes = encodeWireTransaction(transaction); + return await ctx.solana.sendRawTransaction(wireBytes, { + skipPreflight: true, + }); + }; + return { forwardSequentially: async (transactions: any[], _options: any = {}) => { const signatures: string[] = []; @@ -326,14 +617,20 @@ function createFrameworkForwarder(ctx: Context) { forwardInParallel: async (transactions: any[], _options: any = {}) => { return Promise.all(transactions.map(sendViaFramework)); }, + fireAndForget, }; } /** * Create the Umbra relayer client (needed for UTXO claims). + * Picks the mainnet or devnet relayer URL per the `network` argument; + * defaults to mainnet when unspecified for backward compatibility. */ -export function createRelayer() { - return getUmbraRelayer({ apiEndpoint: RELAYER_ENDPOINT }); +export function createRelayer(network?: string) { + const apiEndpoint = network === "devnet" + ? RELAYER_ENDPOINT_DEVNET + : RELAYER_ENDPOINT_MAINNET; + return getUmbraRelayer({ apiEndpoint }); } // ── Rust Native Prover ────────────────────────────────────────────────── diff --git a/crates/cmds-bun/src/umbra/umbra_create_utxo.ts b/crates/cmds-bun/src/umbra/umbra_create_utxo.ts index f2af18cd7..91ed19653 100644 --- a/crates/cmds-bun/src/umbra/umbra_create_utxo.ts +++ b/crates/cmds-bun/src/umbra/umbra_create_utxo.ts @@ -5,6 +5,7 @@ import { createRustProver, getPrimarySignature, logUmbraError, + resolveUmbraSignerBytes, safeJsonStringify, wrapZkProver, } from "./umbra_common.ts"; @@ -13,7 +14,7 @@ export default class UmbraCreateUtxo extends BaseCommand { override async run(ctx: Context, inputs: any): Promise { console.log("[create_utxo] phase: client_creation"); const client = await createUmbraClient( - new Uint8Array(inputs.keypair), + resolveUmbraSignerBytes(inputs), inputs.network, inputs.rpc_url, ctx, diff --git a/crates/cmds-bun/src/umbra/umbra_deposit.ts b/crates/cmds-bun/src/umbra/umbra_deposit.ts index a17877b3d..bf0467666 100644 --- a/crates/cmds-bun/src/umbra/umbra_deposit.ts +++ b/crates/cmds-bun/src/umbra/umbra_deposit.ts @@ -1,11 +1,11 @@ import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; import { getPublicBalanceToEncryptedBalanceDirectDepositorFunction } from "@umbra-privacy/sdk"; -import { createUmbraClient } from "./umbra_common.ts"; +import { createUmbraClient, resolveUmbraSignerBytes } from "./umbra_common.ts"; export default class UmbraDeposit extends BaseCommand { override async run(ctx: Context, inputs: any): Promise { const client = await createUmbraClient( - new Uint8Array(inputs.keypair), + resolveUmbraSignerBytes(inputs), inputs.network, inputs.rpc_url, ctx, diff --git a/crates/cmds-bun/src/umbra/umbra_fetch_utxos.ts b/crates/cmds-bun/src/umbra/umbra_fetch_utxos.ts index 4bacefcc5..8d329acd5 100644 --- a/crates/cmds-bun/src/umbra/umbra_fetch_utxos.ts +++ b/crates/cmds-bun/src/umbra/umbra_fetch_utxos.ts @@ -1,19 +1,15 @@ import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; import { getClaimableUtxoScannerFunction } from "@umbra-privacy/sdk"; -import { createUmbraClient } from "./umbra_common.ts"; +import { createUmbraClient, resolveUmbraSignerBytes } from "./umbra_common.ts"; export default class UmbraFetchUtxos extends BaseCommand { override async run(ctx: Context, inputs: any): Promise { - if (!inputs.keypair || !inputs.network || !inputs.rpc_url) { - throw new Error("Missing required inputs: keypair, network, rpc_url"); - } - if (inputs.network !== "mainnet") { - console.warn(`Umbra indexer is mainnet-only. Devnet indexer not yet available.`); - return { utxos: [], count: 0, error: "Umbra indexer is mainnet-only. Devnet indexer not yet available." }; + if (!inputs.network || !inputs.rpc_url) { + throw new Error("Missing required inputs: network, rpc_url"); } const client = await createUmbraClient( - new Uint8Array(inputs.keypair), + resolveUmbraSignerBytes(inputs), inputs.network, inputs.rpc_url, ctx, @@ -41,13 +37,60 @@ export default class UmbraFetchUtxos extends BaseCommand { throw err; } - const ephemeral = result?.ephemeral ?? []; - const receiver = result?.receiver ?? []; - const allUtxos = [...ephemeral, ...receiver]; + // SDK returns { selfBurnable, received, publicSelfBurnable, publicReceived, nextScanStartIndex } + const selfBurnable = result?.selfBurnable ?? []; + const received = result?.received ?? []; + const publicSelfBurnable = result?.publicSelfBurnable ?? []; + const publicReceived = result?.publicReceived ?? []; + + // Public UTXOs carry a plaintext destinationAddress. Filter public lists to + // only those addressed to our signer for safe downstream use. + const signerAddress = String(client.signer.address); + const mineOnly = (u: any) => + !u?.destinationAddress || String(u.destinationAddress) === signerAddress; + const myPublicSelfBurnable = publicSelfBurnable.filter(mineOnly); + const myPublicReceived = publicReceived.filter(mineOnly); - console.log(`Found ${allUtxos.length} claimable UTXO(s) (${ephemeral.length} ephemeral, ${receiver.length} receiver)`); + // `utxos` feeds umbra_claim_utxo, which is wired to the SDK's + // getReceiverClaimableUtxoToEncryptedBalanceClaimerFunction. That claimer + // consumes the scanner's `received` category (encrypted receiver-claimable + // UTXOs). Public-tagged UTXOs have a different on-chain shape and make + // the claimer throw byte-size errors, so we expose them via separate + // outputs instead and keep `utxos` restricted to what Claim can process. + // + // SDK 4.0 note: as of @umbra-privacy/sdk@4.0.0, both + // getPublicBalanceToReceiverClaimableUtxoCreatorFunction AND + // getEncryptedBalanceToReceiverClaimableUtxoCreatorFunction round-trip + // through the indexer as `public-received` (not `received`). Until that + // upstream behavior changes, end-to-end Create→Fetch→Claim of + // receiver-claimable UTXOs on devnet will see the UTXO land in + // `publicReceived` and `utxos` stay empty. See docs/issues.md. + const claimableByReceiver = [...received]; + const allUtxos = [ + ...selfBurnable, + ...received, + ...myPublicSelfBurnable, + ...myPublicReceived, + ]; + + console.log( + `Found ${allUtxos.length} UTXO(s) total — ` + + `claimable by Receiver claim: ${claimableByReceiver.length} ` + + `(selfBurnable=${selfBurnable.length}, received=${received.length}, ` + + `publicSelfBurnable=${myPublicSelfBurnable.length}, ` + + `publicReceived=${myPublicReceived.length})`, + ); - return { utxos: allUtxos, count: allUtxos.length }; + return { + utxos: claimableByReceiver, + count: claimableByReceiver.length, + allUtxos, + publicReceived: myPublicReceived, + publicSelfBurnable: myPublicSelfBurnable, + selfBurnable, + received, + nextScanStartIndex: result?.nextScanStartIndex, + }; } } diff --git a/crates/cmds-bun/src/umbra/umbra_integration.test.ts b/crates/cmds-bun/src/umbra/umbra_integration.test.ts index b9e5de762..c998ae35d 100644 --- a/crates/cmds-bun/src/umbra/umbra_integration.test.ts +++ b/crates/cmds-bun/src/umbra/umbra_integration.test.ts @@ -271,15 +271,16 @@ describe("Umbra Integration — error handling", () => { ).rejects.toThrow(); }); - test("fetch_utxos: non-mainnet returns empty with error message", async () => { + test("fetch_utxos: devnet hits the devnet indexer and returns zero UTXOs for a random key", async () => { const cmd = new UmbraFetchUtxos(dummyNd); const result = await cmd.run(dummyCtx, { keypair: Array.from(Keypair.generate().secretKey), network: "devnet", rpc_url: "https://api.devnet.solana.com", }); + // A random keypair has nothing addressed to it, so the decryption filter + // drops everything. Confirms the devnet indexer path is wired end-to-end. expect(result.count).toBe(0); expect(result.utxos).toEqual([]); - expect(result.error).toBeDefined(); }); }); diff --git a/crates/cmds-bun/src/umbra/umbra_query_account.ts b/crates/cmds-bun/src/umbra/umbra_query_account.ts index 80263eb78..55078b088 100644 --- a/crates/cmds-bun/src/umbra/umbra_query_account.ts +++ b/crates/cmds-bun/src/umbra/umbra_query_account.ts @@ -1,11 +1,11 @@ import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; import { getUserAccountQuerierFunction } from "@umbra-privacy/sdk"; -import { createUmbraClient } from "./umbra_common.ts"; +import { createUmbraClient, resolveUmbraSignerBytes } from "./umbra_common.ts"; export default class UmbraQueryAccount extends BaseCommand { override async run(ctx: Context, inputs: any): Promise { const client = await createUmbraClient( - new Uint8Array(inputs.keypair), + resolveUmbraSignerBytes(inputs), inputs.network, inputs.rpc_url, ctx, diff --git a/crates/cmds-bun/src/umbra/umbra_query_balance.ts b/crates/cmds-bun/src/umbra/umbra_query_balance.ts index e5424755c..b45d16bcf 100644 --- a/crates/cmds-bun/src/umbra/umbra_query_balance.ts +++ b/crates/cmds-bun/src/umbra/umbra_query_balance.ts @@ -1,11 +1,11 @@ import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; import { getEncryptedBalanceQuerierFunction } from "@umbra-privacy/sdk"; -import { createUmbraClient } from "./umbra_common.ts"; +import { createUmbraClient, resolveUmbraSignerBytes } from "./umbra_common.ts"; export default class UmbraQueryBalance extends BaseCommand { override async run(ctx: Context, inputs: any): Promise { const client = await createUmbraClient( - new Uint8Array(inputs.keypair), + resolveUmbraSignerBytes(inputs), inputs.network, inputs.rpc_url, ctx, diff --git a/crates/cmds-bun/src/umbra/umbra_register.ts b/crates/cmds-bun/src/umbra/umbra_register.ts index 43540bc65..39307c5aa 100644 --- a/crates/cmds-bun/src/umbra/umbra_register.ts +++ b/crates/cmds-bun/src/umbra/umbra_register.ts @@ -5,6 +5,7 @@ import { createRustProver, getPrimarySignature, logUmbraError, + resolveUmbraSignerBytes, safeJsonStringify, wrapZkProver, } from "./umbra_common.ts"; @@ -33,7 +34,7 @@ export default class UmbraRegister extends BaseCommand { override async run(ctx: Context, inputs: any): Promise { console.log("[register] phase: client_creation"); const client = await createUmbraClient( - new Uint8Array(inputs.keypair), + resolveUmbraSignerBytes(inputs), inputs.network, inputs.rpc_url, ctx, diff --git a/crates/cmds-bun/src/umbra/umbra_withdraw.ts b/crates/cmds-bun/src/umbra/umbra_withdraw.ts index fe4768197..084603e3e 100644 --- a/crates/cmds-bun/src/umbra/umbra_withdraw.ts +++ b/crates/cmds-bun/src/umbra/umbra_withdraw.ts @@ -1,11 +1,11 @@ import { BaseCommand, Context } from "@space-operator/flow-lib-bun"; import { getEncryptedBalanceToPublicBalanceDirectWithdrawerFunction } from "@umbra-privacy/sdk"; -import { createUmbraClient } from "./umbra_common.ts"; +import { createUmbraClient, resolveUmbraSignerBytes } from "./umbra_common.ts"; export default class UmbraWithdraw extends BaseCommand { override async run(ctx: Context, inputs: any): Promise { const client = await createUmbraClient( - new Uint8Array(inputs.keypair), + resolveUmbraSignerBytes(inputs), inputs.network, inputs.rpc_url, ctx, diff --git a/crates/cmds-solana/node-definitions/attestation_service/change_authorized_signers.jsonc b/crates/cmds-solana/node-definitions/attestation_service/change_authorized_signers.jsonc index bfd92fa4e..721210648 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/change_authorized_signers.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/change_authorized_signers.jsonc @@ -76,7 +76,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/change_schema_description.jsonc b/crates/cmds-solana/node-definitions/attestation_service/change_schema_description.jsonc index b5b4aa765..1d049939f 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/change_schema_description.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/change_schema_description.jsonc @@ -84,7 +84,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/change_schema_status.jsonc b/crates/cmds-solana/node-definitions/attestation_service/change_schema_status.jsonc index 43675cac2..8c10e9011 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/change_schema_status.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/change_schema_status.jsonc @@ -75,7 +75,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/change_schema_version.jsonc b/crates/cmds-solana/node-definitions/attestation_service/change_schema_version.jsonc index 1d504a32a..91b32662a 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/change_schema_version.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/change_schema_version.jsonc @@ -100,7 +100,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/close_attestation.jsonc b/crates/cmds-solana/node-definitions/attestation_service/close_attestation.jsonc index 3c228a479..994abb7ab 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/close_attestation.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/close_attestation.jsonc @@ -81,7 +81,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/close_tokenized_attestation.jsonc b/crates/cmds-solana/node-definitions/attestation_service/close_tokenized_attestation.jsonc index 591e576b5..8eeb25f25 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/close_tokenized_attestation.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/close_tokenized_attestation.jsonc @@ -97,7 +97,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/create_attestation.jsonc b/crates/cmds-solana/node-definitions/attestation_service/create_attestation.jsonc index d27d29e74..ac4fbc2a1 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/create_attestation.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/create_attestation.jsonc @@ -115,7 +115,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/create_credential.jsonc b/crates/cmds-solana/node-definitions/attestation_service/create_credential.jsonc index 7a641f02a..4e807c413 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/create_credential.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/create_credential.jsonc @@ -81,7 +81,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/create_schema.jsonc b/crates/cmds-solana/node-definitions/attestation_service/create_schema.jsonc index a995fe79e..b2e280d2d 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/create_schema.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/create_schema.jsonc @@ -115,7 +115,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/create_tokenized_attestation.jsonc b/crates/cmds-solana/node-definitions/attestation_service/create_tokenized_attestation.jsonc index 068357ebd..264ff0ead 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/create_tokenized_attestation.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/create_tokenized_attestation.jsonc @@ -173,7 +173,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/attestation_service/tokenize_schema.jsonc b/crates/cmds-solana/node-definitions/attestation_service/tokenize_schema.jsonc index 776b50af0..523f5a5d9 100644 --- a/crates/cmds-solana/node-definitions/attestation_service/tokenize_schema.jsonc +++ b/crates/cmds-solana/node-definitions/attestation_service/tokenize_schema.jsonc @@ -81,7 +81,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "attestation_service", "category": "identity", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/auction_house/buy.jsonc b/crates/cmds-solana/node-definitions/auction_house/buy.jsonc new file mode 100644 index 000000000..99bc7549d --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/buy.jsonc @@ -0,0 +1,54 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_buy", + "prefix": "auction_house", + "type": "native", + "description": "Place a bid (offer) on an NFT via the Auction House", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/buy.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true, "tooltip": "Buyer wallet" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true }, + { "name": "seller", "type_bounds": ["pubkey"], "required": true, "tooltip": "Seller wallet (used to derive the listing token account)" }, + { "name": "token_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "buyer_price", "type_bounds": ["u64"], "required": true }, + { "name": "token_size", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "buyer_trade_state", "type": "pubkey" }, + { "name": "escrow_payment_account", "type": "pubkey" }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "token_account", "type": "pubkey" }, + { "name": "payment_account", "type": "pubkey" }, + { "name": "metadata", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "buy", "bid"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/buy.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/cancel.jsonc b/crates/cmds-solana/node-definitions/auction_house/cancel.jsonc new file mode 100644 index 000000000..6b238720d --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/cancel.jsonc @@ -0,0 +1,50 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_cancel", + "prefix": "auction_house", + "type": "native", + "description": "Cancel an existing listing or bid on the Auction House", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/cancel.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "authority", "type_bounds": ["keypair"], "required": true }, + { "name": "wallet", "type_bounds": ["pubkey"], "required": true, "tooltip": "Owner of the trade state to cancel" }, + { "name": "token_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "buyer_price", "type_bounds": ["u64"], "required": true }, + { "name": "token_size", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "trade_state", "type": "pubkey" }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "token_account", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "cancel"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/cancel.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/create_auction_house.jsonc b/crates/cmds-solana/node-definitions/auction_house/create_auction_house.jsonc new file mode 100644 index 000000000..fa1416aef --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/create_auction_house.jsonc @@ -0,0 +1,53 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_create", + "prefix": "auction_house", + "type": "native", + "description": "Create a new Auction House with fee + treasury PDAs", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/create_auction_house.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true, "tooltip": "Transaction fee payer" }, + { "name": "payer", "type_bounds": ["keypair"], "required": true, "tooltip": "Rent payer for new accounts" }, + { "name": "authority", "type_bounds": ["pubkey"], "required": true, "tooltip": "Auction House authority" }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true, "tooltip": "Treasury mint (use wrapped SOL for native)" }, + { "name": "fee_withdrawal_destination", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_withdrawal_destination_owner", "type_bounds": ["pubkey"], "required": true, "tooltip": "Owner of the treasury withdrawal destination; the ATA (or wallet itself for native SOL) is derived from this" }, + { "name": "seller_fee_basis_points", "type_bounds": ["u16"], "required": true, "tooltip": "Seller fee in basis points (<= 10000)" }, + { "name": "requires_sign_off", "type_bounds": ["bool"], "required": true }, + { "name": "can_change_sale_price", "type_bounds": ["bool"], "required": true }, + { "name": "submit", "type_bounds": ["bool"], "tooltip": "Submit transaction" } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "auction_house_fee_account", "type": "pubkey" }, + { "name": "auction_house_treasury", "type": "pubkey" }, + { "name": "treasury_withdrawal_destination", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "nft", "marketplace"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/create_auction_house.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/delegate_auctioneer.jsonc b/crates/cmds-solana/node-definitions/auction_house/delegate_auctioneer.jsonc new file mode 100644 index 000000000..1240c0f0a --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/delegate_auctioneer.jsonc @@ -0,0 +1,48 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_delegate_auctioneer", + "prefix": "auction_house", + "type": "native", + "description": "Delegate an Auctioneer authority over an Auction House with a set of scopes. Prerequisite for using mpl-auctioneer instructions.", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/delegate_auctioneer.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "tooltip": "Auction House authority (signs)" }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "auctioneer_authority", "type_bounds": ["pubkey"], "tooltip": "Optional override. Omit to use the canonical mpl-auctioneer PDA for this AH." }, + { "name": "scopes", "type_bounds": ["array"], "tooltip": "Scope bytes 0..=6 (Deposit=0, Buy, PublicBuy, ExecuteSale, Sell, Cancel, Withdraw). Omit to grant all 7." }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "ah_auctioneer_pda", "type": "pubkey" }, + { "name": "auctioneer_authority", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "auctioneer", "delegate"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/delegate_auctioneer.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/deposit.jsonc b/crates/cmds-solana/node-definitions/auction_house/deposit.jsonc new file mode 100644 index 000000000..d12de6f8b --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/deposit.jsonc @@ -0,0 +1,48 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_deposit", + "prefix": "auction_house", + "type": "native", + "description": "Deposit funds into escrow for use in Auction House bids", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/deposit.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true, "tooltip": "Escrow owner (signs)" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true, "tooltip": "Auction House authority (signs)" }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "amount", "type_bounds": ["u64"], "required": true, "tooltip": "Amount in lamports / token base units" }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "escrow_payment_account", "type": "pubkey" }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "payment_account", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "deposit"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/deposit.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/execute_sale.jsonc b/crates/cmds-solana/node-definitions/auction_house/execute_sale.jsonc new file mode 100644 index 000000000..58c247954 --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/execute_sale.jsonc @@ -0,0 +1,59 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_execute_sale", + "prefix": "auction_house", + "type": "native", + "description": "Execute a matched buy/sell on the Auction House", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/execute_sale.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "authority", "type_bounds": ["keypair"], "required": true }, + { "name": "buyer", "type_bounds": ["pubkey"], "required": true }, + { "name": "seller", "type_bounds": ["pubkey"], "required": true }, + { "name": "token_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "buyer_price", "type_bounds": ["u64"], "required": true }, + { "name": "token_size", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "escrow_payment_account", "type": "pubkey" }, + { "name": "auction_house_treasury", "type": "pubkey" }, + { "name": "buyer_trade_state", "type": "pubkey" }, + { "name": "seller_trade_state", "type": "pubkey" }, + { "name": "free_trade_state", "type": "pubkey" }, + { "name": "program_as_signer", "type": "pubkey" }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "token_account", "type": "pubkey" }, + { "name": "metadata", "type": "pubkey" }, + { "name": "seller_payment_receipt_account", "type": "pubkey" }, + { "name": "buyer_receipt_token_account", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "execute_sale"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/execute_sale.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/sell.jsonc b/crates/cmds-solana/node-definitions/auction_house/sell.jsonc new file mode 100644 index 000000000..9efa2df8a --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/sell.jsonc @@ -0,0 +1,53 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_sell", + "prefix": "auction_house", + "type": "native", + "description": "List an NFT for sale on the Auction House", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/sell.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true, "tooltip": "Seller wallet" }, + { "name": "authority", "type_bounds": ["keypair"], "required": true }, + { "name": "token_mint", "type_bounds": ["pubkey"], "required": true, "tooltip": "Mint of the NFT being sold" }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "buyer_price", "type_bounds": ["u64"], "required": true }, + { "name": "token_size", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "seller_trade_state", "type": "pubkey" }, + { "name": "free_seller_trade_state", "type": "pubkey" }, + { "name": "program_as_signer", "type": "pubkey" }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "token_account", "type": "pubkey" }, + { "name": "metadata", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "sell", "listing"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/sell.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/update_auction_house.jsonc b/crates/cmds-solana/node-definitions/auction_house/update_auction_house.jsonc new file mode 100644 index 000000000..439b508a4 --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/update_auction_house.jsonc @@ -0,0 +1,52 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_update", + "prefix": "auction_house", + "type": "native", + "description": "Update Auction House settings (optional fields left empty are unchanged)", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/update_auction_house.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "payer", "type_bounds": ["keypair"], "required": true }, + { "name": "authority", "type_bounds": ["keypair"], "required": true }, + { "name": "new_authority", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "fee_withdrawal_destination", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_withdrawal_destination_owner", "type_bounds": ["pubkey"], "required": true, "tooltip": "Treasury destination ATA is derived from this owner; must match what was set at create time" }, + { "name": "seller_fee_basis_points", "type_bounds": ["u16"], "tooltip": "Leave empty to keep current" }, + { "name": "requires_sign_off", "type_bounds": ["bool"] }, + { "name": "can_change_sale_price", "type_bounds": ["bool"] }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "treasury_withdrawal_destination", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "update"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/update_auction_house.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/withdraw.jsonc b/crates/cmds-solana/node-definitions/auction_house/withdraw.jsonc new file mode 100644 index 000000000..7ac63776e --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/withdraw.jsonc @@ -0,0 +1,48 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_withdraw", + "prefix": "auction_house", + "type": "native", + "description": "Withdraw funds from Auction House escrow back to receipt account", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/withdraw.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true }, + { "name": "authority", "type_bounds": ["keypair"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "amount", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "escrow_payment_account", "type": "pubkey" }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "receipt_account", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "withdraw"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/withdraw.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/withdraw_from_fee.jsonc b/crates/cmds-solana/node-definitions/auction_house/withdraw_from_fee.jsonc new file mode 100644 index 000000000..ee99d9dbf --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/withdraw_from_fee.jsonc @@ -0,0 +1,46 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_withdraw_from_fee", + "prefix": "auction_house", + "type": "native", + "description": "Withdraw accumulated fees from Auction House fee account", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/withdraw_from_fee.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "authority", "type_bounds": ["keypair"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "fee_withdrawal_destination", "type_bounds": ["pubkey"], "required": true }, + { "name": "amount", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "withdraw", "fee"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/withdraw_from_fee.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auction_house/withdraw_from_treasury.jsonc b/crates/cmds-solana/node-definitions/auction_house/withdraw_from_treasury.jsonc new file mode 100644 index 000000000..13393ae60 --- /dev/null +++ b/crates/cmds-solana/node-definitions/auction_house/withdraw_from_treasury.jsonc @@ -0,0 +1,46 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auction_house_withdraw_from_treasury", + "prefix": "auction_house", + "type": "native", + "description": "Withdraw funds from the Auction House treasury", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auction_house/withdraw_from_treasury.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "authority", "type_bounds": ["keypair"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_withdrawal_destination", "type_bounds": ["pubkey"], "required": true }, + { "name": "amount", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auction_house", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auction_house", "metaplex", "withdraw", "treasury"] + }, + "external_version": { + "program_id": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/solana-foundation/anchor/tree/master/tests/auction-house" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auction_house/withdraw_from_treasury.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auctioneer/authorize.jsonc b/crates/cmds-solana/node-definitions/auctioneer/authorize.jsonc new file mode 100644 index 000000000..cb783a520 --- /dev/null +++ b/crates/cmds-solana/node-definitions/auctioneer/authorize.jsonc @@ -0,0 +1,45 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auctioneer_authorize", + "prefix": "auctioneer", + "type": "native", + "description": "Create the Auctioneer-side authority PDA for an Auction House. Call after auction_house_delegate_auctioneer.", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auctioneer/authorize.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true, "tooltip": "AH authority (signs, pays rent)" }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "auctioneer_authority", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auctioneer", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auctioneer", "english-auction", "authorize"] + }, + "external_version": { + "program_id": "neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auctioneer" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auctioneer/authorize.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auctioneer/buy.jsonc b/crates/cmds-solana/node-definitions/auctioneer/buy.jsonc new file mode 100644 index 000000000..a5ca420be --- /dev/null +++ b/crates/cmds-solana/node-definitions/auctioneer/buy.jsonc @@ -0,0 +1,54 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auctioneer_buy", + "prefix": "auctioneer", + "type": "native", + "description": "Place an ascending bid on an Auctioneer auction. Enforces reserve, min increment, active window, and updates highest_bid.", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auctioneer/buy.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true, "tooltip": "Buyer" }, + { "name": "authority", "type_bounds": ["pubkey"], "required": true }, + { "name": "seller", "type_bounds": ["pubkey"], "required": true, "tooltip": "Seller of the listing" }, + { "name": "token_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "buyer_price", "type_bounds": ["u64"], "required": true, "tooltip": "Must exceed current high bid by min_bid_increment" }, + { "name": "token_size", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "listing_config", "type": "pubkey" }, + { "name": "buyer_trade_state", "type": "pubkey" }, + { "name": "escrow_payment_account", "type": "pubkey" }, + { "name": "token_account", "type": "pubkey" }, + { "name": "metadata", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auctioneer", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auctioneer", "english-auction", "bid", "buy"] + }, + "external_version": { + "program_id": "neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auctioneer" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auctioneer/buy.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auctioneer/cancel.jsonc b/crates/cmds-solana/node-definitions/auctioneer/cancel.jsonc new file mode 100644 index 000000000..ceb96c7a7 --- /dev/null +++ b/crates/cmds-solana/node-definitions/auctioneer/cancel.jsonc @@ -0,0 +1,52 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auctioneer_cancel", + "prefix": "auctioneer", + "type": "native", + "description": "Cancel a listing (wallet=seller, buyer_price=u64::MAX) or a bid (wallet=bidder, buyer_price=bid_amount). High-bid cancel is blocked unless allow_high_bid_cancel was set.", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auctioneer/cancel.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true, "tooltip": "Trade state owner (bidder or seller)" }, + { "name": "authority", "type_bounds": ["pubkey"], "required": true }, + { "name": "seller", "type_bounds": ["pubkey"], "required": true, "tooltip": "Listing's seller pubkey" }, + { "name": "token_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "buyer_price", "type_bounds": ["u64"], "required": true, "tooltip": "u64::MAX (18446744073709551615) to cancel the listing, or the bid amount" }, + { "name": "token_size", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "trade_state", "type": "pubkey" }, + { "name": "token_account", "type": "pubkey" }, + { "name": "listing_config", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auctioneer", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auctioneer", "english-auction", "cancel"] + }, + "external_version": { + "program_id": "neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auctioneer" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auctioneer/cancel.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auctioneer/deposit.jsonc b/crates/cmds-solana/node-definitions/auctioneer/deposit.jsonc new file mode 100644 index 000000000..df929532e --- /dev/null +++ b/crates/cmds-solana/node-definitions/auctioneer/deposit.jsonc @@ -0,0 +1,47 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auctioneer_deposit", + "prefix": "auctioneer", + "type": "native", + "description": "Deposit funds into the Auction House escrow for bidding via Auctioneer", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auctioneer/deposit.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true }, + { "name": "authority", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "amount", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "escrow_payment_account", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auctioneer", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auctioneer", "english-auction", "deposit"] + }, + "external_version": { + "program_id": "neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auctioneer" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auctioneer/deposit.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auctioneer/execute_sale.jsonc b/crates/cmds-solana/node-definitions/auctioneer/execute_sale.jsonc new file mode 100644 index 000000000..529d400cb --- /dev/null +++ b/crates/cmds-solana/node-definitions/auctioneer/execute_sale.jsonc @@ -0,0 +1,58 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auctioneer_execute_sale", + "prefix": "auctioneer", + "type": "native", + "description": "Settle an English auction after end_time: transfers NFT to highest bidder and funds to seller. Fails if auction is still active or buyer is not the highest bidder.", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auctioneer/execute_sale.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "authority", "type_bounds": ["pubkey"], "required": true }, + { "name": "buyer", "type_bounds": ["pubkey"], "required": true, "tooltip": "Highest bidder" }, + { "name": "seller", "type_bounds": ["pubkey"], "required": true }, + { "name": "token_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "buyer_price", "type_bounds": ["u64"], "required": true, "tooltip": "Winning bid amount (from listing_config.highest_bid)" }, + { "name": "token_size", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "listing_config", "type": "pubkey" }, + { "name": "buyer_trade_state", "type": "pubkey" }, + { "name": "seller_trade_state", "type": "pubkey" }, + { "name": "free_trade_state", "type": "pubkey" }, + { "name": "escrow_payment_account", "type": "pubkey" }, + { "name": "token_account", "type": "pubkey" }, + { "name": "metadata", "type": "pubkey" }, + { "name": "seller_payment_receipt_account", "type": "pubkey" }, + { "name": "buyer_receipt_token_account", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auctioneer", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auctioneer", "english-auction", "execute_sale", "settle"] + }, + "external_version": { + "program_id": "neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auctioneer" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auctioneer/execute_sale.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auctioneer/sell.jsonc b/crates/cmds-solana/node-definitions/auctioneer/sell.jsonc new file mode 100644 index 000000000..8237b9dc3 --- /dev/null +++ b/crates/cmds-solana/node-definitions/auctioneer/sell.jsonc @@ -0,0 +1,58 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auctioneer_sell", + "prefix": "auctioneer", + "type": "native", + "description": "List an NFT for English auction: timed window, reserve, min bid increment, anti-sniping extension", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auctioneer/sell.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true, "tooltip": "Seller" }, + { "name": "authority", "type_bounds": ["pubkey"], "required": true, "tooltip": "AH authority (creator)" }, + { "name": "token_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "token_size", "type_bounds": ["u64"], "required": true }, + { "name": "start_time", "type_bounds": ["i64"], "required": true, "tooltip": "Auction start (unix seconds)" }, + { "name": "end_time", "type_bounds": ["i64"], "required": true, "tooltip": "Auction end (unix seconds)" }, + { "name": "reserve_price", "type_bounds": ["u64"], "tooltip": "Minimum winning bid" }, + { "name": "min_bid_increment", "type_bounds": ["u64"], "tooltip": "Required increment over current high bid" }, + { "name": "time_ext_period", "type_bounds": ["u32"], "tooltip": "Trailing seconds before end that triggers extension" }, + { "name": "time_ext_delta", "type_bounds": ["u32"], "tooltip": "Seconds to add on extension" }, + { "name": "allow_high_bid_cancel", "type_bounds": ["bool"] }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "listing_config", "type": "pubkey" }, + { "name": "token_account", "type": "pubkey" }, + { "name": "seller_trade_state", "type": "pubkey" }, + { "name": "free_seller_trade_state", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auctioneer", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auctioneer", "english-auction", "sell", "listing"] + }, + "external_version": { + "program_id": "neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auctioneer" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auctioneer/sell.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/auctioneer/withdraw.jsonc b/crates/cmds-solana/node-definitions/auctioneer/withdraw.jsonc new file mode 100644 index 000000000..9bbc65402 --- /dev/null +++ b/crates/cmds-solana/node-definitions/auctioneer/withdraw.jsonc @@ -0,0 +1,48 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "auctioneer_withdraw", + "prefix": "auctioneer", + "type": "native", + "description": "Withdraw escrowed funds (e.g. losing bid) back to wallet", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/auctioneer/withdraw.rs", + "ports": { + "inputs": [ + { "name": "fee_payer", "type_bounds": ["keypair"], "required": true, "passthrough": true }, + { "name": "wallet", "type_bounds": ["keypair"], "required": true }, + { "name": "authority", "type_bounds": ["pubkey"], "required": true }, + { "name": "treasury_mint", "type_bounds": ["pubkey"], "required": true }, + { "name": "amount", "type_bounds": ["u64"], "required": true }, + { "name": "submit", "type_bounds": ["bool"] } + ], + "outputs": [ + { "name": "signature", "type": "signature", "optional": true }, + { "name": "auction_house", "type": "pubkey" }, + { "name": "escrow_payment_account", "type": "pubkey" }, + { "name": "receipt_account", "type": "pubkey" } + ] + }, + "config_schema": {}, + "config": { "submit": { "B": true } }, + "classification": { + "vendor": "Solana", + "program": "auctioneer", + "category": "marketplace", + "icon_url": "https://www.metaplex.com/favicon.ico", + "tags": ["auctioneer", "english-auction", "withdraw"] + }, + "external_version": { + "program_id": "neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": "https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auctioneer" + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/auctioneer/withdraw.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/mpl_inscription/create_shard.jsonc b/crates/cmds-solana/node-definitions/mpl_inscription/create_shard.jsonc index 91cec77b5..86b0c4874 100644 --- a/crates/cmds-solana/node-definitions/mpl_inscription/create_shard.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_inscription/create_shard.jsonc @@ -2,7 +2,7 @@ "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", "version": "0.1", "name": "create_shard", - "prefix": "nft", + "prefix": "mpl_inscription", "description": "Create an inscription shard account", "type": "native", "author_handle": "spo", diff --git a/crates/cmds-solana/node-definitions/mpl_inscription/initialize_inscription.jsonc b/crates/cmds-solana/node-definitions/mpl_inscription/initialize_inscription.jsonc index 6f6776a75..d58c88c1b 100644 --- a/crates/cmds-solana/node-definitions/mpl_inscription/initialize_inscription.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_inscription/initialize_inscription.jsonc @@ -2,7 +2,7 @@ "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", "version": "0.1", "name": "initialize_inscription", - "prefix": "nft", + "prefix": "mpl_inscription", "description": "Initialize a new inscription account", "type": "native", "author_handle": "spo", diff --git a/crates/cmds-solana/node-definitions/mpl_token_metadata/burn_v1.jsonc b/crates/cmds-solana/node-definitions/mpl_token_metadata/burn_v1.jsonc index 423687159..793dc3637 100644 --- a/crates/cmds-solana/node-definitions/mpl_token_metadata/burn_v1.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_token_metadata/burn_v1.jsonc @@ -73,7 +73,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Metaplex", "program": "v1", "category": "core", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/mpl_token_metadata/create_metadata_account.jsonc b/crates/cmds-solana/node-definitions/mpl_token_metadata/create_metadata_account.jsonc index edea4dcb7..6fd4dfcab 100644 --- a/crates/cmds-solana/node-definitions/mpl_token_metadata/create_metadata_account.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_token_metadata/create_metadata_account.jsonc @@ -2,7 +2,7 @@ "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", "version": "0.1", "name": "create_metadata_account", - "prefix": "nft", + "prefix": "mpl_token_metadata", "description": "Create a metadata account for an NFT", "type": "native", "author_handle": "spo", diff --git a/crates/cmds-solana/node-definitions/mpl_token_metadata/create_v1.jsonc b/crates/cmds-solana/node-definitions/mpl_token_metadata/create_v1.jsonc index 49b8fc479..a623cf315 100644 --- a/crates/cmds-solana/node-definitions/mpl_token_metadata/create_v1.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_token_metadata/create_v1.jsonc @@ -175,7 +175,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Metaplex", "program": "v1", "category": "core", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/mpl_token_metadata/delegate_v1.jsonc b/crates/cmds-solana/node-definitions/mpl_token_metadata/delegate_v1.jsonc index c4f9e9c75..392f0ddce 100644 --- a/crates/cmds-solana/node-definitions/mpl_token_metadata/delegate_v1.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_token_metadata/delegate_v1.jsonc @@ -89,7 +89,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Metaplex", "program": "v1", "category": "core", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/mpl_token_metadata/mint_v1.jsonc b/crates/cmds-solana/node-definitions/mpl_token_metadata/mint_v1.jsonc index bc9a64f26..718d2028f 100644 --- a/crates/cmds-solana/node-definitions/mpl_token_metadata/mint_v1.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_token_metadata/mint_v1.jsonc @@ -120,7 +120,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Metaplex", "program": "v1", "category": "core", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/mpl_token_metadata/update_v1.jsonc b/crates/cmds-solana/node-definitions/mpl_token_metadata/update_v1.jsonc index 8a517230e..64c62ac4c 100644 --- a/crates/cmds-solana/node-definitions/mpl_token_metadata/update_v1.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_token_metadata/update_v1.jsonc @@ -93,7 +93,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Metaplex", "program": "v1", "category": "core", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/mpl_token_metadata/verify_collection_v1.jsonc b/crates/cmds-solana/node-definitions/mpl_token_metadata/verify_collection_v1.jsonc index 264c2e861..2c8f454b6 100644 --- a/crates/cmds-solana/node-definitions/mpl_token_metadata/verify_collection_v1.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_token_metadata/verify_collection_v1.jsonc @@ -75,7 +75,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Metaplex", "program": "v1", "category": "core", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/mpl_token_metadata/verify_creator_v1.jsonc b/crates/cmds-solana/node-definitions/mpl_token_metadata/verify_creator_v1.jsonc index b71bf577f..3d69bc10a 100644 --- a/crates/cmds-solana/node-definitions/mpl_token_metadata/verify_creator_v1.jsonc +++ b/crates/cmds-solana/node-definitions/mpl_token_metadata/verify_creator_v1.jsonc @@ -75,7 +75,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Metaplex", "program": "v1", "category": "core", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/claim.jsonc b/crates/cmds-solana/node-definitions/presale/claim.jsonc index ed052e80a..998e3f254 100644 --- a/crates/cmds-solana/node-definitions/presale/claim.jsonc +++ b/crates/cmds-solana/node-definitions/presale/claim.jsonc @@ -124,7 +124,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/close_escrow.jsonc b/crates/cmds-solana/node-definitions/presale/close_escrow.jsonc index 5b2898f7f..e056ac717 100644 --- a/crates/cmds-solana/node-definitions/presale/close_escrow.jsonc +++ b/crates/cmds-solana/node-definitions/presale/close_escrow.jsonc @@ -76,7 +76,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/close_fixed_price_presale_args.jsonc b/crates/cmds-solana/node-definitions/presale/close_fixed_price_presale_args.jsonc index cc9cb034a..f0e51b980 100644 --- a/crates/cmds-solana/node-definitions/presale/close_fixed_price_presale_args.jsonc +++ b/crates/cmds-solana/node-definitions/presale/close_fixed_price_presale_args.jsonc @@ -60,7 +60,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/close_merkle_root_config.jsonc b/crates/cmds-solana/node-definitions/presale/close_merkle_root_config.jsonc index 7a13ad3b2..dbe3ea0a6 100644 --- a/crates/cmds-solana/node-definitions/presale/close_merkle_root_config.jsonc +++ b/crates/cmds-solana/node-definitions/presale/close_merkle_root_config.jsonc @@ -76,7 +76,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/close_permissioned_server_metadata.jsonc b/crates/cmds-solana/node-definitions/presale/close_permissioned_server_metadata.jsonc index 11e603ee5..b55206d3c 100644 --- a/crates/cmds-solana/node-definitions/presale/close_permissioned_server_metadata.jsonc +++ b/crates/cmds-solana/node-definitions/presale/close_permissioned_server_metadata.jsonc @@ -76,7 +76,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/create_merkle_root_config.jsonc b/crates/cmds-solana/node-definitions/presale/create_merkle_root_config.jsonc index 27f9da21a..f376e24ac 100644 --- a/crates/cmds-solana/node-definitions/presale/create_merkle_root_config.jsonc +++ b/crates/cmds-solana/node-definitions/presale/create_merkle_root_config.jsonc @@ -84,7 +84,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/create_operator.jsonc b/crates/cmds-solana/node-definitions/presale/create_operator.jsonc index 63372f911..4866b9ffd 100644 --- a/crates/cmds-solana/node-definitions/presale/create_operator.jsonc +++ b/crates/cmds-solana/node-definitions/presale/create_operator.jsonc @@ -68,7 +68,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/create_permissioned_escrow_with_creator.jsonc b/crates/cmds-solana/node-definitions/presale/create_permissioned_escrow_with_creator.jsonc index f980ba1a8..6abf135ff 100644 --- a/crates/cmds-solana/node-definitions/presale/create_permissioned_escrow_with_creator.jsonc +++ b/crates/cmds-solana/node-definitions/presale/create_permissioned_escrow_with_creator.jsonc @@ -109,7 +109,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/create_permissioned_escrow_with_merkle_proof.jsonc b/crates/cmds-solana/node-definitions/presale/create_permissioned_escrow_with_merkle_proof.jsonc index a6a6d59fe..00251cb18 100644 --- a/crates/cmds-solana/node-definitions/presale/create_permissioned_escrow_with_merkle_proof.jsonc +++ b/crates/cmds-solana/node-definitions/presale/create_permissioned_escrow_with_merkle_proof.jsonc @@ -100,7 +100,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/create_permissioned_server_metadata.jsonc b/crates/cmds-solana/node-definitions/presale/create_permissioned_server_metadata.jsonc index c437245f9..f4e2b5901 100644 --- a/crates/cmds-solana/node-definitions/presale/create_permissioned_server_metadata.jsonc +++ b/crates/cmds-solana/node-definitions/presale/create_permissioned_server_metadata.jsonc @@ -73,7 +73,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/create_permissionless_escrow.jsonc b/crates/cmds-solana/node-definitions/presale/create_permissionless_escrow.jsonc index ac2429d80..32b67a1d8 100644 --- a/crates/cmds-solana/node-definitions/presale/create_permissionless_escrow.jsonc +++ b/crates/cmds-solana/node-definitions/presale/create_permissionless_escrow.jsonc @@ -84,7 +84,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/creator_collect_fee.jsonc b/crates/cmds-solana/node-definitions/presale/creator_collect_fee.jsonc index ff2ac2c5b..d742e2d86 100644 --- a/crates/cmds-solana/node-definitions/presale/creator_collect_fee.jsonc +++ b/crates/cmds-solana/node-definitions/presale/creator_collect_fee.jsonc @@ -99,7 +99,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/creator_withdraw.jsonc b/crates/cmds-solana/node-definitions/presale/creator_withdraw.jsonc index ee23f905f..e42f30b37 100644 --- a/crates/cmds-solana/node-definitions/presale/creator_withdraw.jsonc +++ b/crates/cmds-solana/node-definitions/presale/creator_withdraw.jsonc @@ -99,7 +99,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/deposit.jsonc b/crates/cmds-solana/node-definitions/presale/deposit.jsonc index 3afd37d82..37505a91c 100644 --- a/crates/cmds-solana/node-definitions/presale/deposit.jsonc +++ b/crates/cmds-solana/node-definitions/presale/deposit.jsonc @@ -100,7 +100,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/get_escrow.jsonc b/crates/cmds-solana/node-definitions/presale/get_escrow.jsonc index b005e95b3..519d7e6f9 100644 --- a/crates/cmds-solana/node-definitions/presale/get_escrow.jsonc +++ b/crates/cmds-solana/node-definitions/presale/get_escrow.jsonc @@ -79,7 +79,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/get_presale.jsonc b/crates/cmds-solana/node-definitions/presale/get_presale.jsonc index a14fb1083..89bfe5ac7 100644 --- a/crates/cmds-solana/node-definitions/presale/get_presale.jsonc +++ b/crates/cmds-solana/node-definitions/presale/get_presale.jsonc @@ -154,7 +154,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/initialize_fixed_price_presale_args.jsonc b/crates/cmds-solana/node-definitions/presale/initialize_fixed_price_presale_args.jsonc index ee860c9ae..46f906d27 100644 --- a/crates/cmds-solana/node-definitions/presale/initialize_fixed_price_presale_args.jsonc +++ b/crates/cmds-solana/node-definitions/presale/initialize_fixed_price_presale_args.jsonc @@ -107,7 +107,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/initialize_presale.jsonc b/crates/cmds-solana/node-definitions/presale/initialize_presale.jsonc index 74a4da7b9..501495573 100644 --- a/crates/cmds-solana/node-definitions/presale/initialize_presale.jsonc +++ b/crates/cmds-solana/node-definitions/presale/initialize_presale.jsonc @@ -152,7 +152,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/perform_unsold_base_token_action.jsonc b/crates/cmds-solana/node-definitions/presale/perform_unsold_base_token_action.jsonc index 94161ddf2..1cf54cedf 100644 --- a/crates/cmds-solana/node-definitions/presale/perform_unsold_base_token_action.jsonc +++ b/crates/cmds-solana/node-definitions/presale/perform_unsold_base_token_action.jsonc @@ -90,7 +90,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/refresh_escrow.jsonc b/crates/cmds-solana/node-definitions/presale/refresh_escrow.jsonc index cbf90eb9a..6da2d6e1d 100644 --- a/crates/cmds-solana/node-definitions/presale/refresh_escrow.jsonc +++ b/crates/cmds-solana/node-definitions/presale/refresh_escrow.jsonc @@ -59,7 +59,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/revoke_operator.jsonc b/crates/cmds-solana/node-definitions/presale/revoke_operator.jsonc index 30828ca54..2ee6be85f 100644 --- a/crates/cmds-solana/node-definitions/presale/revoke_operator.jsonc +++ b/crates/cmds-solana/node-definitions/presale/revoke_operator.jsonc @@ -60,7 +60,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/withdraw.jsonc b/crates/cmds-solana/node-definitions/presale/withdraw.jsonc index 79e7ec421..611f613c6 100644 --- a/crates/cmds-solana/node-definitions/presale/withdraw.jsonc +++ b/crates/cmds-solana/node-definitions/presale/withdraw.jsonc @@ -115,7 +115,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/presale/withdraw_remaining_quote.jsonc b/crates/cmds-solana/node-definitions/presale/withdraw_remaining_quote.jsonc index c1e761580..6f7ae0fce 100644 --- a/crates/cmds-solana/node-definitions/presale/withdraw_remaining_quote.jsonc +++ b/crates/cmds-solana/node-definitions/presale/withdraw_remaining_quote.jsonc @@ -107,7 +107,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Meteora", "program": "presale", "category": "defi", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/spl_record/close_record.jsonc b/crates/cmds-solana/node-definitions/spl_record/close_record.jsonc new file mode 100644 index 000000000..dfd329cee --- /dev/null +++ b/crates/cmds-solana/node-definitions/spl_record/close_record.jsonc @@ -0,0 +1,96 @@ +{ + "$schema": "https://schema.spaceoperator.com/node-v2.schema.json", + "version": "0.1", + "name": "close_record", + "prefix": "record", + "description": "Close an on-chain record account and drain its lamports to a receiver", + "type": "native", + "author_handle": "spo", + "source_code": "crates/cmds-solana/src/spl_record/close_record.rs", + "ports": { + "inputs": [ + { + "name": "fee_payer", + "type_bounds": [ + "keypair" + ], + "required": true, + "passthrough": true, + "tooltip": "Keypair of the account paying for the transaction fees" + }, + { + "name": "authority", + "type_bounds": [ + "keypair" + ], + "required": true, + "passthrough": false, + "tooltip": "Keypair of the current record authority" + }, + { + "name": "record_account", + "type_bounds": [ + "pubkey" + ], + "required": true, + "passthrough": true, + "tooltip": "Public key of the record account to close" + }, + { + "name": "lamport_receiver", + "type_bounds": [ + "pubkey" + ], + "required": false, + "passthrough": true, + "tooltip": "Public key of the account receiving lamports (defaults to authority)" + }, + { + "name": "submit", + "type_bounds": [ + "bool" + ], + "required": false, + "passthrough": false, + "tooltip": "Whether to submit the transaction to the network" + } + ], + "outputs": [ + { + "name": "signature", + "type": "signature", + "tooltip": "Transaction signature of the close" + } + ] + }, + "config_schema": {}, + "config": { + "submit": { + "B": true + } + }, + "classification": { + "vendor": "Solana", + "program": "record", + "category": "data", + "icon_url": "https://github.com/space-operator.png", + "tags": [ + "data", + "record", + "close" + ] + }, + "external_version": { + "program_id": "record_native", + "sdk_crate": null, + "sdk_version": null, + "api_base_url": null, + "api_version": null, + "source_repo": null + }, + "internal": { + "source": "crates", + "source_code": "crates/cmds-solana/node-definitions/spl_record/close_record.jsonc", + "repo": "flow-backend" + } +} diff --git a/crates/cmds-solana/node-definitions/spl_record/initialize_record_with_seed.jsonc b/crates/cmds-solana/node-definitions/spl_record/initialize_record_with_seed.jsonc index 138bf9f32..678640bf9 100644 --- a/crates/cmds-solana/node-definitions/spl_record/initialize_record_with_seed.jsonc +++ b/crates/cmds-solana/node-definitions/spl_record/initialize_record_with_seed.jsonc @@ -75,7 +75,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "record", "category": "data", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/spl_record/read_record.jsonc b/crates/cmds-solana/node-definitions/spl_record/read_record.jsonc index 3e48a3ebd..cb15aa1a9 100644 --- a/crates/cmds-solana/node-definitions/spl_record/read_record.jsonc +++ b/crates/cmds-solana/node-definitions/spl_record/read_record.jsonc @@ -53,7 +53,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "record", "category": "data", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/spl_record/reallocate.jsonc b/crates/cmds-solana/node-definitions/spl_record/reallocate.jsonc index 98d2c460b..ce72bc9bb 100644 --- a/crates/cmds-solana/node-definitions/spl_record/reallocate.jsonc +++ b/crates/cmds-solana/node-definitions/spl_record/reallocate.jsonc @@ -70,7 +70,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "record", "category": "data", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/spl_record/set_authority.jsonc b/crates/cmds-solana/node-definitions/spl_record/set_authority.jsonc index 2b70b8622..982e9b10a 100644 --- a/crates/cmds-solana/node-definitions/spl_record/set_authority.jsonc +++ b/crates/cmds-solana/node-definitions/spl_record/set_authority.jsonc @@ -70,7 +70,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "record", "category": "data", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/spl_record/write_to_record.jsonc b/crates/cmds-solana/node-definitions/spl_record/write_to_record.jsonc index 72a46b9d7..a2cfda3b0 100644 --- a/crates/cmds-solana/node-definitions/spl_record/write_to_record.jsonc +++ b/crates/cmds-solana/node-definitions/spl_record/write_to_record.jsonc @@ -79,7 +79,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Solana", "program": "record", "category": "data", "icon_url": "https://github.com/space-operator.png", diff --git a/crates/cmds-solana/node-definitions/spl_token/associated_token_account.jsonc b/crates/cmds-solana/node-definitions/spl_token/associated_token_account.jsonc index 6b0290aaf..3de47254c 100644 --- a/crates/cmds-solana/node-definitions/spl_token/associated_token_account.jsonc +++ b/crates/cmds-solana/node-definitions/spl_token/associated_token_account.jsonc @@ -3,7 +3,7 @@ "version": "0.1", "name": "associated_token_account", "prefix": "spl_token", - "description": "Create or get the associated token account for an owner and mint", + "description": "Create or get the associated token account for an owner and mint. Auto-detects the mint's owning token program on-chain, so works for both legacy SPL Token and Token-2022 (T22) mints — use this single node regardless of which program owns the mint.", "type": "native", "author_handle": "spo", "source_code": "crates/cmds-solana/src/associated_token_account.rs", @@ -73,8 +73,12 @@ "tags": [ "token", "spl token", + "spl_token_2022", + "token-2022", + "t22", "associated", - "account" + "account", + "ata" ] }, "external_version": { diff --git a/crates/cmds-solana/node-definitions/spl_token_2022/burn_checked.jsonc b/crates/cmds-solana/node-definitions/spl_token_2022/burn_checked.jsonc index 4ef6f9fdd..eacb6918c 100644 --- a/crates/cmds-solana/node-definitions/spl_token_2022/burn_checked.jsonc +++ b/crates/cmds-solana/node-definitions/spl_token_2022/burn_checked.jsonc @@ -4,7 +4,7 @@ "name": "burn_checked_t22", "prefix": "spl_token_2022", "type": "native", - "description": "Burn Token-2022 tokens from an account with decimal validation", + "description": "Burn Token-2022 tokens from an account with decimal validation. By default the account to burn from is derived from the authority (owner-initiated burn). Set the optional `account_owner` to burn from a different holder's ATA while the authority signs as a delegate — used for PermanentDelegate revocation (e.g. soulbound credential revocation) and for spl_token::approve-style delegated burns.", "author_handle": "spo", "source_code": "crates/cmds-solana/src/spl_token_2022/burn_checked.rs", "ports": { @@ -33,7 +33,15 @@ ], "required": true, "passthrough": true, - "tooltip": "The account owner or delegate" + "tooltip": "Signer authorizing the burn. When `account_owner` is unset, this MUST be the account owner (normal burn). When `account_owner` is set, this is a delegate (mint's PermanentDelegate, or an account approved via spl_token::approve)." + }, + { + "name": "account_owner", + "type_bounds": [ + "pubkey" + ], + "required": false, + "tooltip": "Optional. Wallet address of the holder whose ATA will be debited. If omitted, account is derived from `authority`. Set this for PermanentDelegate revocation or approved-delegate burns, where the signer is NOT the account owner." }, { "name": "amount", @@ -69,7 +77,7 @@ { "name": "account", "type": "pubkey", - "tooltip": "Derived token account (ATA of authority for mint)" + "tooltip": "Derived token account (ATA of account_owner if set, else authority, for mint)" } ] }, diff --git a/crates/cmds-solana/node-definitions/spl_token_2022/transfer_checked.jsonc b/crates/cmds-solana/node-definitions/spl_token_2022/transfer_checked.jsonc index 835834314..705f535e2 100644 --- a/crates/cmds-solana/node-definitions/spl_token_2022/transfer_checked.jsonc +++ b/crates/cmds-solana/node-definitions/spl_token_2022/transfer_checked.jsonc @@ -4,7 +4,7 @@ "name": "transfer_checked_t22", "prefix": "spl_token_2022", "type": "native", - "description": "Transfer Token-2022 tokens with decimal validation", + "description": "Transfer Token-2022 tokens with decimal validation. By default the source ATA is derived from the authority (owner-initiated transfer). Set the optional `source_owner` to transfer from a different holder's ATA while the authority signs as a delegate — used for PermanentDelegate clawback and for spl_token::approve-style delegated transfers.", "author_handle": "spo", "source_code": "crates/cmds-solana/src/spl_token_2022/transfer_checked.rs", "ports": { @@ -41,7 +41,15 @@ ], "required": true, "passthrough": true, - "tooltip": "Token account owner/delegate" + "tooltip": "Signer authorizing the transfer. When `source_owner` is unset, this MUST be the source-account owner (normal transfer). When `source_owner` is set, this is a delegate (mint's PermanentDelegate, or an account approved via spl_token::approve)." + }, + { + "name": "source_owner", + "type_bounds": [ + "pubkey" + ], + "required": false, + "tooltip": "Optional. Wallet address of the holder whose ATA will be debited. If omitted, source ATA is derived from `authority`. Set this for PermanentDelegate clawback or approved-delegate transfers, where the signer is NOT the source-account owner." }, { "name": "amount", @@ -59,6 +67,14 @@ "required": true, "tooltip": "Expected decimals of the mint" }, + { + "name": "resolve_transfer_hook", + "type_bounds": [ + "bool" + ], + "required": false, + "tooltip": "Set true for mints with the TransferHook extension. Fetches the mint's ExtraAccountMetaList PDA and appends the hook program + extra accounts to the instruction. Default false (one fewer RPC round-trip)." + }, { "name": "submit", "type_bounds": [ @@ -90,6 +106,9 @@ "config": { "submit": { "B": true + }, + "resolve_transfer_hook": { + "B": false } }, "classification": { diff --git a/crates/cmds-solana/src/auction_house/buy.rs b/crates/cmds-solana/src/auction_house/buy.rs new file mode 100644 index 000000000..129806e0b --- /dev/null +++ b/crates/cmds-solana/src/auction_house/buy.rs @@ -0,0 +1,167 @@ +use super::{ + DISC_BUY, TOKEN_PROGRAM_ID, build_auction_house_instruction, payment_account_for, pda, +}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; +use solana_program::sysvar; + +const NAME: &str = "auction_house_buy"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/buy.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub wallet: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub seller: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub buyer_price: u64, + pub token_size: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub buyer_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub escrow_payment_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub payment_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub metadata: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let (fee_acc, _) = pda::find_auction_house_fee_account(&auction_house); + let (token_account, _) = pda::find_ata(&input.seller, &input.token_mint, &TOKEN_PROGRAM_ID); + let (metadata, _) = pda::find_metadata(&input.token_mint); + let payment_account = payment_account_for(&wallet_pk, &input.treasury_mint, &TOKEN_PROGRAM_ID); + let transfer_authority = wallet_pk; + let (buyer_trade_state, _) = pda::find_trade_state( + &wallet_pk, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.buyer_price, + input.token_size, + ); + let (escrow_payment_account, _) = pda::find_escrow_payment_account(&auction_house, &wallet_pk); + + let accounts = vec![ + AccountMeta::new_readonly(wallet_pk, true), + AccountMeta::new(payment_account, false), + AccountMeta::new_readonly(transfer_authority, false), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(token_account, false), + AccountMeta::new_readonly(metadata, false), + AccountMeta::new_readonly(input.authority.pubkey(), true), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new(buyer_trade_state, false), + AccountMeta::new(escrow_payment_account, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let mut args_data = Vec::with_capacity(16); + args_data.extend_from_slice(&input.buyer_price.to_le_bytes()); + args_data.extend_from_slice(&input.token_size.to_le_bytes()); + + let ix = build_auction_house_instruction(DISC_BUY, accounts, args_data); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [ + input.fee_payer.clone(), + input.wallet.clone(), + input.authority.clone(), + ] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + buyer_trade_state, + escrow_payment_account, + auction_house, + token_account, + payment_account, + metadata, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "wallet" => kp, "authority" => kp, + "seller" => pk, "token_mint" => pk, "treasury_mint" => pk, + "buyer_price" => 1000u64, "token_size" => 1u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auction_house_instruction(DISC_BUY, vec![], { + let mut v = Vec::new(); + v.extend_from_slice(&1u64.to_le_bytes()); + v.extend_from_slice(&1u64.to_le_bytes()); + v + }); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_BUY); + assert_eq!(ix.data.len(), 24); + } +} diff --git a/crates/cmds-solana/src/auction_house/cancel.rs b/crates/cmds-solana/src/auction_house/cancel.rs new file mode 100644 index 000000000..4b611a287 --- /dev/null +++ b/crates/cmds-solana/src/auction_house/cancel.rs @@ -0,0 +1,139 @@ +use super::{DISC_CANCEL, TOKEN_PROGRAM_ID, build_auction_house_instruction, pda}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; + +const NAME: &str = "auction_house_cancel"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/cancel.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub wallet: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub buyer_price: u64, + pub token_size: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_account: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let (fee_acc, _) = pda::find_auction_house_fee_account(&auction_house); + let (token_account, _) = pda::find_ata(&input.wallet, &input.token_mint, &TOKEN_PROGRAM_ID); + let (trade_state, _) = pda::find_trade_state( + &input.wallet, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.buyer_price, + input.token_size, + ); + + let accounts = vec![ + AccountMeta::new(input.wallet, false), + AccountMeta::new(token_account, false), + AccountMeta::new_readonly(input.authority.pubkey(), true), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new(trade_state, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + ]; + + let mut args_data = Vec::with_capacity(16); + args_data.extend_from_slice(&input.buyer_price.to_le_bytes()); + args_data.extend_from_slice(&input.token_size.to_le_bytes()); + + let ix = build_auction_house_instruction(DISC_CANCEL, accounts, args_data); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.authority.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + trade_state, + auction_house, + token_account, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "authority" => kp, + "wallet" => pk, "token_mint" => pk, "treasury_mint" => pk, + "buyer_price" => 1000u64, "token_size" => 1u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auction_house_instruction(DISC_CANCEL, vec![], { + let mut v = Vec::new(); + v.extend_from_slice(&1u64.to_le_bytes()); + v.extend_from_slice(&1u64.to_le_bytes()); + v + }); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_CANCEL); + assert_eq!(ix.data.len(), 24); + } +} diff --git a/crates/cmds-solana/src/auction_house/create_auction_house.rs b/crates/cmds-solana/src/auction_house/create_auction_house.rs new file mode 100644 index 000000000..3f59947b9 --- /dev/null +++ b/crates/cmds-solana/src/auction_house/create_auction_house.rs @@ -0,0 +1,227 @@ +use super::{ + ATA_PROGRAM_ID, DISC_CREATE_AUCTION_HOUSE, TOKEN_PROGRAM_ID, build_auction_house_instruction, + payment_account_for, pda, +}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; +use solana_program::sysvar; + +const NAME: &str = "auction_house_create"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/create_auction_house.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub payer: Wallet, + #[serde_as(as = "AsPubkey")] + pub authority: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub fee_withdrawal_destination: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_withdrawal_destination_owner: Pubkey, + pub seller_fee_basis_points: u16, + pub requires_sign_off: bool, + pub can_change_sale_price: bool, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auction_house_fee_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auction_house_treasury: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_withdrawal_destination: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let (auction_house, auction_house_bump) = + pda::find_auction_house(&input.authority, &input.treasury_mint); + let (auction_house_fee_account, fee_payer_bump) = + pda::find_auction_house_fee_account(&auction_house); + let (auction_house_treasury, treasury_bump) = pda::find_auction_house_treasury(&auction_house); + let treasury_withdrawal_destination = payment_account_for( + &input.treasury_withdrawal_destination_owner, + &input.treasury_mint, + &TOKEN_PROGRAM_ID, + ); + + // Idempotent fast-path: if the AH PDA already exists on-chain, return its + // deterministic pubkeys without submitting a duplicate create_auction_house + // tx (which would fail with AccountAlreadyInUse). This lets downstream + // flows re-run the "create" step as a verification op against an existing AH. + if ctx + .solana_client() + .get_account(&auction_house) + .await + .is_ok() + { + return Ok(Output { + signature: None, + auction_house, + auction_house_fee_account, + auction_house_treasury, + treasury_withdrawal_destination, + }); + } + + // Metaplex AH CreateAuctionHouse IDL account order: + // 0 treasury_mint, 1 payer (signer), 2 authority, + // 3 fee_withdrawal_destination (writable), + // 4 treasury_withdrawal_destination (writable: ATA for SPL, owner wallet for WSOL), + // 5 treasury_withdrawal_destination_owner (readonly), + // 6 auction_house, 7 auction_house_fee_account, 8 auction_house_treasury, + // 9 token_program, 10 system_program, 11 ata_program, 12 rent. + let accounts = vec![ + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new(input.payer.pubkey(), true), + AccountMeta::new_readonly(input.authority, false), + AccountMeta::new(input.fee_withdrawal_destination, false), + AccountMeta::new(treasury_withdrawal_destination, false), + AccountMeta::new_readonly(input.treasury_withdrawal_destination_owner, false), + AccountMeta::new(auction_house, false), + AccountMeta::new(auction_house_fee_account, false), + AccountMeta::new(auction_house_treasury, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(ATA_PROGRAM_ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let mut args_data = Vec::with_capacity(7); + args_data.push(auction_house_bump); + args_data.push(fee_payer_bump); + args_data.push(treasury_bump); + args_data.extend_from_slice(&input.seller_fee_basis_points.to_le_bytes()); + args_data.push(input.requires_sign_off as u8); + args_data.push(input.can_change_sale_price as u8); + + let ix = build_auction_house_instruction(DISC_CREATE_AUCTION_HOUSE, accounts, args_data); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.payer.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + auction_house, + auction_house_fee_account, + auction_house_treasury, + treasury_withdrawal_destination, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, + "payer" => kp, + "authority" => pk, + "treasury_mint" => pk, + "fee_withdrawal_destination" => pk, + "treasury_withdrawal_destination_owner" => pk, + "seller_fee_basis_points" => 500u64, + "requires_sign_off" => false, + "can_change_sale_price" => false, + "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let auth = Pubkey::new_unique(); + let mint = Pubkey::new_unique(); + let (ah, ah_bump) = pda::find_auction_house(&auth, &mint); + let (fee, fee_bump) = pda::find_auction_house_fee_account(&ah); + let (tre, tre_bump) = pda::find_auction_house_treasury(&ah); + let payer = Pubkey::new_unique(); + let fee_dest = Pubkey::new_unique(); + let treasury_dest = Pubkey::new_unique(); + let treasury_owner = Pubkey::new_unique(); + + let accounts = vec![ + AccountMeta::new_readonly(mint, false), + AccountMeta::new(payer, true), + AccountMeta::new_readonly(auth, false), + AccountMeta::new(fee_dest, false), + AccountMeta::new(treasury_dest, false), + AccountMeta::new_readonly(treasury_owner, false), + AccountMeta::new(ah, false), + AccountMeta::new(fee, false), + AccountMeta::new(tre, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(ATA_PROGRAM_ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + // Mirror run()'s arg encoding exactly so any reordering of bumps, + // sale-price flag, or sign-off flag fails this test. + let mut args = Vec::with_capacity(7); + args.push(ah_bump); + args.push(fee_bump); + args.push(tre_bump); + args.extend_from_slice(&500u16.to_le_bytes()); + args.push(1); // requires_sign_off + args.push(0); // can_change_sale_price + + let ix = build_auction_house_instruction(DISC_CREATE_AUCTION_HOUSE, accounts, args); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.accounts.len(), 13); + // 8 disc + 3 bumps + 2 u16 + 2 bools = 15 + assert_eq!(ix.data.len(), 15); + assert_eq!(ix.data[..8], DISC_CREATE_AUCTION_HOUSE); + assert_eq!(ix.data[8], ah_bump); + assert_eq!(ix.data[9], fee_bump); + assert_eq!(ix.data[10], tre_bump); + assert_eq!(u16::from_le_bytes([ix.data[11], ix.data[12]]), 500); + assert_eq!(ix.data[13], 1); + assert_eq!(ix.data[14], 0); + } +} diff --git a/crates/cmds-solana/src/auction_house/delegate_auctioneer.rs b/crates/cmds-solana/src/auction_house/delegate_auctioneer.rs new file mode 100644 index 000000000..1505d23eb --- /dev/null +++ b/crates/cmds-solana/src/auction_house/delegate_auctioneer.rs @@ -0,0 +1,187 @@ +use super::{DISC_DELEGATE_AUCTIONEER, build_auction_house_instruction, pda}; +use crate::auctioneer::pda as auctioneer_pda; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; + +const NAME: &str = "auction_house_delegate_auctioneer"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/delegate_auctioneer.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +/// Metaplex AuthorityScope enum — index into the AuctionHouse.scopes bool array. +/// Order is fixed by the on-chain enum definition. +#[repr(u8)] +#[derive(Serialize, Deserialize, Debug, Copy, Clone)] +pub enum AuthorityScope { + Deposit = 0, + Buy = 1, + PublicBuy = 2, + ExecuteSale = 3, + Sell = 4, + Cancel = 5, + Withdraw = 6, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + /// Optional override. Omit to delegate to the canonical `mpl-auctioneer` PDA for this AH. + #[serde_as(as = "Option")] + #[serde(default)] + pub auctioneer_authority: Option, + /// List of scope bytes. Omit to delegate all 7 scopes. + #[serde(default)] + pub scopes: Option>, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub ah_auctioneer_pda: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auctioneer_authority: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let auctioneer_authority = input + .auctioneer_authority + .unwrap_or_else(|| auctioneer_pda::find_auctioneer_authority(&auction_house).0); + let (ah_auctioneer_pda, _) = pda::find_ah_auctioneer_pda(&auction_house, &auctioneer_authority); + + // Idempotent fast-path: if the auctioneer has already been delegated to + // this AH (ah_auctioneer_pda exists), skip the tx so this flow can re-run + // as a verification step without re-submitting a duplicate delegation. + if ctx + .solana_client() + .get_account(&ah_auctioneer_pda) + .await + .is_ok() + { + return Ok(Output { + signature: None, + auction_house, + ah_auctioneer_pda, + auctioneer_authority, + }); + } + + let accounts = vec![ + AccountMeta::new(auction_house, false), + AccountMeta::new(input.authority.pubkey(), true), + AccountMeta::new_readonly(auctioneer_authority, false), + AccountMeta::new(ah_auctioneer_pda, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + ]; + + let scopes = input.scopes.unwrap_or_else(|| vec![0, 1, 2, 3, 4, 5, 6]); + let mut args_data = Vec::with_capacity(4 + scopes.len()); + args_data.extend_from_slice(&(scopes.len() as u32).to_le_bytes()); + args_data.extend_from_slice(&scopes); + + let ix = build_auction_house_instruction(DISC_DELEGATE_AUCTIONEER, accounts, args_data); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.authority.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + auction_house, + ah_auctioneer_pda, + auctioneer_authority, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + // auctioneer_authority omitted → canonical mpl-auctioneer PDA + let input = value::map! { + "fee_payer" => kp, "authority" => kp, + "treasury_mint" => pk, + "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_scopes_encoding() { + // Default scopes: all 7 + let scopes: Vec = vec![0, 1, 2, 3, 4, 5, 6]; + let mut data = Vec::new(); + data.extend_from_slice(&(scopes.len() as u32).to_le_bytes()); + data.extend_from_slice(&scopes); + assert_eq!(&data[..4], &[7, 0, 0, 0]); + assert_eq!(&data[4..], &[0, 1, 2, 3, 4, 5, 6]); + } + + #[test] + fn test_instruction_construction() { + // Mirror run()'s default args: scopes = [0,1,2,3,4,5,6], len-prefix u32 LE + 7 scope bytes. + // run() at line 98-101: `input.scopes.unwrap_or_else(|| vec![0,1,2,3,4,5,6])` then + // `(scopes.len() as u32).to_le_bytes()` followed by scope bytes. Any reordering of the + // length prefix vs scope bytes would be caught by the per-byte assertions below. + let scopes: Vec = vec![0, 1, 2, 3, 4, 5, 6]; + let mut args = Vec::with_capacity(4 + scopes.len()); + args.extend_from_slice(&(scopes.len() as u32).to_le_bytes()); + args.extend_from_slice(&scopes); + + let ix = build_auction_house_instruction(DISC_DELEGATE_AUCTIONEER, vec![], args); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + // 8 disc + 4 len + 7 scopes = 19 + assert_eq!(ix.data.len(), 19); + assert_eq!(ix.data[..8], DISC_DELEGATE_AUCTIONEER); + // Length prefix at 8..12 must be 7 (little-endian u32) + assert_eq!( + u32::from_le_bytes([ix.data[8], ix.data[9], ix.data[10], ix.data[11]]), + 7 + ); + // Scope bytes at 12..19 must be the canonical order 0..6 + assert_eq!(&ix.data[12..19], &[0, 1, 2, 3, 4, 5, 6]); + } +} diff --git a/crates/cmds-solana/src/auction_house/deposit.rs b/crates/cmds-solana/src/auction_house/deposit.rs new file mode 100644 index 000000000..d2e29f155 --- /dev/null +++ b/crates/cmds-solana/src/auction_house/deposit.rs @@ -0,0 +1,156 @@ +use super::{ + DISC_DEPOSIT, TOKEN_PROGRAM_ID, build_auction_house_instruction, payment_account_for, pda, +}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; +use solana_program::sysvar; + +const NAME: &str = "auction_house_deposit"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/deposit.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub wallet: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub amount: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub escrow_payment_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub payment_account: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let (escrow_payment_account, _) = pda::find_escrow_payment_account(&auction_house, &wallet_pk); + let (auction_house_fee_account, _) = pda::find_auction_house_fee_account(&auction_house); + let payment_account = payment_account_for(&wallet_pk, &input.treasury_mint, &TOKEN_PROGRAM_ID); + // For SPL flows the wallet itself approves the transfer (no external delegate). + let transfer_authority = wallet_pk; + + let accounts = vec![ + AccountMeta::new_readonly(wallet_pk, true), + AccountMeta::new(payment_account, false), + AccountMeta::new_readonly(transfer_authority, false), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(escrow_payment_account, false), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(input.authority.pubkey(), true), + AccountMeta::new(auction_house_fee_account, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let args_data = input.amount.to_le_bytes().to_vec(); + let ix = build_auction_house_instruction(DISC_DEPOSIT, accounts, args_data); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [ + input.fee_payer.clone(), + input.wallet.clone(), + input.authority.clone(), + ] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + escrow_payment_account, + auction_house, + payment_account, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, + "wallet" => kp, + "authority" => kp, + "treasury_mint" => pk, + "amount" => 1000u64, + "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ah = Pubkey::new_unique(); + let wallet = Pubkey::new_unique(); + let (esc, _) = pda::find_escrow_payment_account(&ah, &wallet); + let (fee, _) = pda::find_auction_house_fee_account(&ah); + let p = Pubkey::new_unique(); + + let accounts = vec![ + AccountMeta::new_readonly(wallet, true), + AccountMeta::new(p, false), + AccountMeta::new_readonly(p, false), + AccountMeta::new_readonly(ah, false), + AccountMeta::new(esc, false), + AccountMeta::new_readonly(p, false), + AccountMeta::new_readonly(p, true), + AccountMeta::new(fee, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + let ix = + build_auction_house_instruction(DISC_DEPOSIT, accounts, 5u64.to_le_bytes().to_vec()); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.accounts.len(), 11); + assert_eq!(ix.data.len(), 16); + assert_eq!(ix.data[..8], DISC_DEPOSIT); + } +} diff --git a/crates/cmds-solana/src/auction_house/execute_sale.rs b/crates/cmds-solana/src/auction_house/execute_sale.rs new file mode 100644 index 000000000..16f05dbae --- /dev/null +++ b/crates/cmds-solana/src/auction_house/execute_sale.rs @@ -0,0 +1,207 @@ +use super::{ + ATA_PROGRAM_ID, DISC_EXECUTE_SALE, TOKEN_PROGRAM_ID, build_auction_house_instruction, + payment_account_for, pda, +}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; + +const NAME: &str = "auction_house_execute_sale"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/execute_sale.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub buyer: Pubkey, + #[serde_as(as = "AsPubkey")] + pub seller: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub buyer_price: u64, + pub token_size: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub escrow_payment_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auction_house_treasury: Pubkey, + #[serde_as(as = "AsPubkey")] + pub buyer_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub seller_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub free_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub program_as_signer: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub metadata: Pubkey, + #[serde_as(as = "AsPubkey")] + pub seller_payment_receipt_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub buyer_receipt_token_account: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let (fee_acc, _) = pda::find_auction_house_fee_account(&auction_house); + let (treasury, _) = pda::find_auction_house_treasury(&auction_house); + let (token_account, _) = pda::find_ata(&input.seller, &input.token_mint, &TOKEN_PROGRAM_ID); + let (metadata, _) = pda::find_metadata(&input.token_mint); + let seller_payment_receipt_account = + payment_account_for(&input.seller, &input.treasury_mint, &TOKEN_PROGRAM_ID); + let (buyer_receipt_token_account, _) = + pda::find_ata(&input.buyer, &input.token_mint, &TOKEN_PROGRAM_ID); + let (escrow_payment_account, _) = + pda::find_escrow_payment_account(&auction_house, &input.buyer); + let (buyer_trade_state, _) = pda::find_trade_state( + &input.buyer, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.buyer_price, + input.token_size, + ); + let (seller_trade_state, _) = pda::find_trade_state( + &input.seller, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.buyer_price, + input.token_size, + ); + let (free_trade_state, _) = pda::find_free_trade_state( + &input.seller, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.token_size, + ); + let (program_as_signer, _) = pda::find_program_as_signer(); + + let accounts = vec![ + AccountMeta::new(input.buyer, false), + AccountMeta::new(input.seller, false), + AccountMeta::new(token_account, false), + AccountMeta::new_readonly(input.token_mint, false), + AccountMeta::new_readonly(metadata, false), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new(seller_payment_receipt_account, false), + AccountMeta::new(buyer_receipt_token_account, false), + AccountMeta::new_readonly(input.authority.pubkey(), true), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new(treasury, false), + AccountMeta::new(escrow_payment_account, false), + AccountMeta::new(buyer_trade_state, false), + AccountMeta::new(seller_trade_state, false), + AccountMeta::new(free_trade_state, false), + AccountMeta::new_readonly(program_as_signer, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(ATA_PROGRAM_ID, false), + ]; + + let mut args_data = Vec::with_capacity(16); + args_data.extend_from_slice(&input.buyer_price.to_le_bytes()); + args_data.extend_from_slice(&input.token_size.to_le_bytes()); + + let ix = build_auction_house_instruction(DISC_EXECUTE_SALE, accounts, args_data); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.authority.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + escrow_payment_account, + auction_house_treasury: treasury, + buyer_trade_state, + seller_trade_state, + free_trade_state, + program_as_signer, + auction_house, + token_account, + metadata, + seller_payment_receipt_account, + buyer_receipt_token_account, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "authority" => kp, + "buyer" => pk, "seller" => pk, + "token_mint" => pk, "treasury_mint" => pk, + "buyer_price" => 1000u64, "token_size" => 1u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auction_house_instruction(DISC_EXECUTE_SALE, vec![], { + let mut v = Vec::new(); + v.extend_from_slice(&1u64.to_le_bytes()); + v.extend_from_slice(&1u64.to_le_bytes()); + v + }); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_EXECUTE_SALE); + assert_eq!(ix.data.len(), 24); + } +} diff --git a/crates/cmds-solana/src/auction_house/mod.rs b/crates/cmds-solana/src/auction_house/mod.rs new file mode 100644 index 000000000..e8c63d488 --- /dev/null +++ b/crates/cmds-solana/src/auction_house/mod.rs @@ -0,0 +1,142 @@ +//! Metaplex Auction House program Space Operator nodes +//! +//! Program ID: `hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk` +//! Source: https://github.com/solana-foundation/anchor/tree/master/tests/auction-house +//! +//! Direct instruction construction (no SDK crate dependency). +//! Anchor program: instructions use 8-byte sha256("global:")[..8] discriminators. + +use crate::prelude::*; +use solana_program::pubkey; + +pub mod buy; +pub mod cancel; +pub mod create_auction_house; +pub mod delegate_auctioneer; +pub mod deposit; +pub mod execute_sale; +pub mod pda; +pub mod sell; +pub mod update_auction_house; +pub mod withdraw; +pub mod withdraw_from_fee; +pub mod withdraw_from_treasury; + +/// Auction House program ID +pub const AUCTION_HOUSE_PROGRAM_ID: Pubkey = pubkey!("hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk"); + +/// SPL Token program ID (used as `token_program` in most instructions) +pub const TOKEN_PROGRAM_ID: Pubkey = pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); + +/// SPL Associated Token Account program ID +pub const ATA_PROGRAM_ID: Pubkey = pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"); + +/// Metaplex Token Metadata program ID +pub const TOKEN_METADATA_PROGRAM_ID: Pubkey = + pubkey!("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"); + +/// Wrapped-SOL (native) mint — used when treasury pays in SOL +pub const NATIVE_SOL_MINT: Pubkey = pubkey!("So11111111111111111111111111111111111111112"); + +/// True if the treasury mint is wrapped-SOL (native). Determines whether payment/receipt +/// accounts are plain SOL wallets (native) or associated token accounts (SPL). +pub fn is_native_mint(mint: &Pubkey) -> bool { + mint == &NATIVE_SOL_MINT +} + +/// Canonical payment/receipt account for a given wallet+mint: returns the wallet itself +/// when the mint is native SOL, otherwise the associated token account for (wallet, mint). +pub fn payment_account_for(wallet: &Pubkey, mint: &Pubkey, token_program: &Pubkey) -> Pubkey { + if is_native_mint(mint) { + *wallet + } else { + pda::find_ata(wallet, mint, token_program).0 + } +} + +/// Serde default: SPL Token program +pub fn default_token_program() -> Pubkey { + TOKEN_PROGRAM_ID +} + +/// Serde default: wrapped-SOL mint +pub fn default_native_mint() -> Pubkey { + NATIVE_SOL_MINT +} + +// Anchor 8-byte instruction discriminators: sha256("global:")[..8] +pub const DISC_CREATE_AUCTION_HOUSE: [u8; 8] = [0xdd, 0x42, 0xf2, 0x9f, 0xf9, 0xce, 0x86, 0xf1]; +pub const DISC_DEPOSIT: [u8; 8] = [0xf2, 0x23, 0xc6, 0x89, 0x52, 0xe1, 0xf2, 0xb6]; +pub const DISC_WITHDRAW: [u8; 8] = [0xb7, 0x12, 0x46, 0x9c, 0x94, 0x6d, 0xa1, 0x22]; +pub const DISC_SELL: [u8; 8] = [0x33, 0xe6, 0x85, 0xa4, 0x01, 0x7f, 0x83, 0xad]; +pub const DISC_BUY: [u8; 8] = [0x66, 0x06, 0x3d, 0x12, 0x01, 0xda, 0xeb, 0xea]; +pub const DISC_EXECUTE_SALE: [u8; 8] = [0x25, 0x4a, 0xd9, 0x9d, 0x4f, 0x31, 0x23, 0x06]; +pub const DISC_CANCEL: [u8; 8] = [0xe8, 0xdb, 0xdf, 0x29, 0xdb, 0xec, 0xdc, 0xbe]; +pub const DISC_WITHDRAW_FROM_FEE: [u8; 8] = [0xb3, 0xd0, 0xbe, 0x9a, 0x20, 0xb3, 0x13, 0x3b]; +pub const DISC_WITHDRAW_FROM_TREASURY: [u8; 8] = [0x00, 0xa4, 0x56, 0x4c, 0x38, 0x48, 0x0c, 0xaa]; +pub const DISC_UPDATE_AUCTION_HOUSE: [u8; 8] = [0x54, 0xd7, 0x02, 0xac, 0xf1, 0x00, 0xf5, 0xdb]; +pub const DISC_DELEGATE_AUCTIONEER: [u8; 8] = [0x6a, 0xb2, 0x0c, 0x7a, 0x4a, 0xad, 0xfb, 0xde]; + +/// Build an Auction House instruction: 8-byte discriminator + borsh args. +pub fn build_auction_house_instruction( + discriminator: [u8; 8], + accounts: Vec, + args_data: Vec, +) -> Instruction { + let mut data = Vec::with_capacity(8 + args_data.len()); + data.extend_from_slice(&discriminator); + data.extend_from_slice(&args_data); + Instruction { + program_id: AUCTION_HOUSE_PROGRAM_ID, + accounts, + data, + } +} + +#[cfg(test)] +mod tests { + use super::*; + use sha2::{Digest, Sha256}; + + fn anchor_disc(name: &str) -> [u8; 8] { + let mut h = Sha256::new(); + h.update(format!("global:{name}").as_bytes()); + let out = h.finalize(); + let mut b = [0u8; 8]; + b.copy_from_slice(&out[..8]); + b + } + + #[test] + fn test_discriminators() { + assert_eq!( + DISC_CREATE_AUCTION_HOUSE, + anchor_disc("create_auction_house") + ); + assert_eq!(DISC_DEPOSIT, anchor_disc("deposit")); + assert_eq!(DISC_WITHDRAW, anchor_disc("withdraw")); + assert_eq!(DISC_SELL, anchor_disc("sell")); + assert_eq!(DISC_BUY, anchor_disc("buy")); + assert_eq!(DISC_EXECUTE_SALE, anchor_disc("execute_sale")); + assert_eq!(DISC_CANCEL, anchor_disc("cancel")); + assert_eq!(DISC_WITHDRAW_FROM_FEE, anchor_disc("withdraw_from_fee")); + assert_eq!( + DISC_WITHDRAW_FROM_TREASURY, + anchor_disc("withdraw_from_treasury") + ); + assert_eq!( + DISC_UPDATE_AUCTION_HOUSE, + anchor_disc("update_auction_house") + ); + assert_eq!(DISC_DELEGATE_AUCTIONEER, anchor_disc("delegate_auctioneer")); + } + + #[test] + fn test_build_instruction() { + let ix = + build_auction_house_instruction(DISC_DEPOSIT, vec![], 42u64.to_le_bytes().to_vec()); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_DEPOSIT); + assert_eq!(ix.data.len(), 16); + } +} diff --git a/crates/cmds-solana/src/auction_house/pda.rs b/crates/cmds-solana/src/auction_house/pda.rs new file mode 100644 index 000000000..026dfa141 --- /dev/null +++ b/crates/cmds-solana/src/auction_house/pda.rs @@ -0,0 +1,183 @@ +//! Auction House program PDA derivations. + +use solana_program::pubkey::Pubkey; + +use super::{AUCTION_HOUSE_PROGRAM_ID, TOKEN_METADATA_PROGRAM_ID}; + +pub const PREFIX: &[u8] = b"auction_house"; +pub const FEE_PAYER: &[u8] = b"fee_payer"; +pub const TREASURY: &[u8] = b"treasury"; +pub const SIGNER: &[u8] = b"signer"; +/// Zero byte sequence used for "free" trade states (no buyer_price). +pub const ZERO: [u8; 8] = [0u8; 8]; + +/// `[PREFIX, authority, treasury_mint]` +pub fn find_auction_house(authority: &Pubkey, treasury_mint: &Pubkey) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[PREFIX, authority.as_ref(), treasury_mint.as_ref()], + &AUCTION_HOUSE_PROGRAM_ID, + ) +} + +/// `[PREFIX, auction_house, FEE_PAYER]` +pub fn find_auction_house_fee_account(auction_house: &Pubkey) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[PREFIX, auction_house.as_ref(), FEE_PAYER], + &AUCTION_HOUSE_PROGRAM_ID, + ) +} + +/// `[PREFIX, auction_house, TREASURY]` +pub fn find_auction_house_treasury(auction_house: &Pubkey) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[PREFIX, auction_house.as_ref(), TREASURY], + &AUCTION_HOUSE_PROGRAM_ID, + ) +} + +/// `[PREFIX, auction_house, wallet]` +pub fn find_escrow_payment_account(auction_house: &Pubkey, wallet: &Pubkey) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[PREFIX, auction_house.as_ref(), wallet.as_ref()], + &AUCTION_HOUSE_PROGRAM_ID, + ) +} + +/// `[PREFIX, wallet, auction_house, token_account, treasury_mint, token_mint, buyer_price_le, token_size_le]` +pub fn find_trade_state( + wallet: &Pubkey, + auction_house: &Pubkey, + token_account: &Pubkey, + treasury_mint: &Pubkey, + token_mint: &Pubkey, + buyer_price: u64, + token_size: u64, +) -> (Pubkey, u8) { + let buyer_price_le = buyer_price.to_le_bytes(); + let token_size_le = token_size.to_le_bytes(); + Pubkey::find_program_address( + &[ + PREFIX, + wallet.as_ref(), + auction_house.as_ref(), + token_account.as_ref(), + treasury_mint.as_ref(), + token_mint.as_ref(), + &buyer_price_le, + &token_size_le, + ], + &AUCTION_HOUSE_PROGRAM_ID, + ) +} + +/// Free trade state: same seeds as `find_trade_state` but with ZERO for buyer_price. +pub fn find_free_trade_state( + wallet: &Pubkey, + auction_house: &Pubkey, + token_account: &Pubkey, + treasury_mint: &Pubkey, + token_mint: &Pubkey, + token_size: u64, +) -> (Pubkey, u8) { + let token_size_le = token_size.to_le_bytes(); + Pubkey::find_program_address( + &[ + PREFIX, + wallet.as_ref(), + auction_house.as_ref(), + token_account.as_ref(), + treasury_mint.as_ref(), + token_mint.as_ref(), + &ZERO, + &token_size_le, + ], + &AUCTION_HOUSE_PROGRAM_ID, + ) +} + +/// AH-side Auctioneer PDA that stores delegated scopes. +/// Seeds: `[b"auctioneer", auction_house, auctioneer_authority]` under the AH program. +pub fn find_ah_auctioneer_pda( + auction_house: &Pubkey, + auctioneer_authority: &Pubkey, +) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[ + b"auctioneer", + auction_house.as_ref(), + auctioneer_authority.as_ref(), + ], + &AUCTION_HOUSE_PROGRAM_ID, + ) +} + +/// `[PREFIX, SIGNER]` +pub fn find_program_as_signer() -> (Pubkey, u8) { + Pubkey::find_program_address(&[PREFIX, SIGNER], &AUCTION_HOUSE_PROGRAM_ID) +} + +/// Metaplex Token Metadata PDA: `["metadata", token_metadata_program, mint]`. +pub fn find_metadata(mint: &Pubkey) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[ + b"metadata", + TOKEN_METADATA_PROGRAM_ID.as_ref(), + mint.as_ref(), + ], + &TOKEN_METADATA_PROGRAM_ID, + ) +} + +/// Associated Token Account: `[wallet, token_program, mint]` under the ATA program. +pub fn find_ata(wallet: &Pubkey, mint: &Pubkey, token_program: &Pubkey) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[wallet.as_ref(), token_program.as_ref(), mint.as_ref()], + &spl_associated_token_account_interface::program::ID, + ) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn deterministic() { + let a = Pubkey::new_unique(); + let m = Pubkey::new_unique(); + assert_eq!(find_auction_house(&a, &m), find_auction_house(&a, &m)); + let (ah, _) = find_auction_house(&a, &m); + assert_eq!( + find_auction_house_fee_account(&ah), + find_auction_house_fee_account(&ah) + ); + assert_eq!( + find_auction_house_treasury(&ah), + find_auction_house_treasury(&ah) + ); + assert_eq!( + find_escrow_payment_account(&ah, &a), + find_escrow_payment_account(&ah, &a) + ); + assert_eq!(find_program_as_signer(), find_program_as_signer()); + } + + #[test] + fn seed_sensitivity() { + let a1 = Pubkey::new_unique(); + let a2 = Pubkey::new_unique(); + let m = Pubkey::new_unique(); + assert_ne!(find_auction_house(&a1, &m).0, find_auction_house(&a2, &m).0); + } + + #[test] + fn trade_state_vs_free_differ() { + let w = Pubkey::new_unique(); + let ah = Pubkey::new_unique(); + let ta = Pubkey::new_unique(); + let tm = Pubkey::new_unique(); + let mint = Pubkey::new_unique(); + let a = find_trade_state(&w, &ah, &ta, &tm, &mint, 100, 1).0; + let b = find_free_trade_state(&w, &ah, &ta, &tm, &mint, 1).0; + assert_ne!(a, b); + } +} diff --git a/crates/cmds-solana/src/auction_house/sell.rs b/crates/cmds-solana/src/auction_house/sell.rs new file mode 100644 index 000000000..95e4b94be --- /dev/null +++ b/crates/cmds-solana/src/auction_house/sell.rs @@ -0,0 +1,168 @@ +use super::{DISC_SELL, TOKEN_PROGRAM_ID, build_auction_house_instruction, pda}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; +use solana_program::sysvar; + +const NAME: &str = "auction_house_sell"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/sell.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub wallet: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub token_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub buyer_price: u64, + pub token_size: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub seller_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub free_seller_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub program_as_signer: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub metadata: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let (fee_acc, _) = pda::find_auction_house_fee_account(&auction_house); + let (token_account, _) = pda::find_ata(&wallet_pk, &input.token_mint, &TOKEN_PROGRAM_ID); + let (metadata, _) = pda::find_metadata(&input.token_mint); + let (seller_trade_state, _) = pda::find_trade_state( + &wallet_pk, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.buyer_price, + input.token_size, + ); + let (free_seller_trade_state, _) = pda::find_free_trade_state( + &wallet_pk, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.token_size, + ); + let (program_as_signer, _) = pda::find_program_as_signer(); + + let accounts = vec![ + AccountMeta::new_readonly(wallet_pk, false), + AccountMeta::new(token_account, false), + AccountMeta::new_readonly(metadata, false), + AccountMeta::new_readonly(input.authority.pubkey(), true), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new(seller_trade_state, false), + AccountMeta::new(free_seller_trade_state, false), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(program_as_signer, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let mut args_data = Vec::with_capacity(16); + args_data.extend_from_slice(&input.buyer_price.to_le_bytes()); + args_data.extend_from_slice(&input.token_size.to_le_bytes()); + + let ix = build_auction_house_instruction(DISC_SELL, accounts, args_data); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [ + input.fee_payer.clone(), + input.wallet.clone(), + input.authority.clone(), + ] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + seller_trade_state, + free_seller_trade_state, + program_as_signer, + auction_house, + token_account, + metadata, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "wallet" => kp, "authority" => kp, + "token_mint" => pk, "treasury_mint" => pk, + "buyer_price" => 1000u64, "token_size" => 1u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auction_house_instruction(DISC_SELL, vec![], { + let mut v = Vec::new(); + v.extend_from_slice(&10u64.to_le_bytes()); + v.extend_from_slice(&1u64.to_le_bytes()); + v + }); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_SELL); + assert_eq!(ix.data.len(), 24); + } +} diff --git a/crates/cmds-solana/src/auction_house/update_auction_house.rs b/crates/cmds-solana/src/auction_house/update_auction_house.rs new file mode 100644 index 000000000..802297346 --- /dev/null +++ b/crates/cmds-solana/src/auction_house/update_auction_house.rs @@ -0,0 +1,180 @@ +use super::{ + ATA_PROGRAM_ID, DISC_UPDATE_AUCTION_HOUSE, TOKEN_PROGRAM_ID, build_auction_house_instruction, + payment_account_for, pda, +}; +use crate::prelude::*; +use solana_program::{instruction::AccountMeta, sysvar}; + +const NAME: &str = "auction_house_update"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/update_auction_house.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub payer: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub new_authority: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub fee_withdrawal_destination: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_withdrawal_destination_owner: Pubkey, + #[serde(default)] + pub seller_fee_basis_points: Option, + #[serde(default)] + pub requires_sign_off: Option, + #[serde(default)] + pub can_change_sale_price: Option, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_withdrawal_destination: Pubkey, +} + +/// Borsh encoding for `Option`: 1-byte tag (0 = None, 1 = Some) + payload. +fn encode_opt_u16(v: Option, out: &mut Vec) { + match v { + None => out.push(0), + Some(x) => { + out.push(1); + out.extend_from_slice(&x.to_le_bytes()); + } + } +} + +fn encode_opt_bool(v: Option, out: &mut Vec) { + match v { + None => out.push(0), + Some(x) => { + out.push(1); + out.push(x as u8); + } + } +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let treasury_withdrawal_destination = payment_account_for( + &input.treasury_withdrawal_destination_owner, + &input.treasury_mint, + &TOKEN_PROGRAM_ID, + ); + + let accounts = vec![ + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(input.payer.pubkey(), true), + AccountMeta::new_readonly(input.authority.pubkey(), true), + AccountMeta::new_readonly(input.new_authority, false), + AccountMeta::new(input.fee_withdrawal_destination, false), + AccountMeta::new(treasury_withdrawal_destination, false), + AccountMeta::new_readonly(input.treasury_withdrawal_destination_owner, false), + AccountMeta::new(auction_house, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(ATA_PROGRAM_ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let mut args_data = Vec::new(); + encode_opt_u16(input.seller_fee_basis_points, &mut args_data); + encode_opt_bool(input.requires_sign_off, &mut args_data); + encode_opt_bool(input.can_change_sale_price, &mut args_data); + + let ix = build_auction_house_instruction(DISC_UPDATE_AUCTION_HOUSE, accounts, args_data); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [ + input.fee_payer.clone(), + input.payer.clone(), + input.authority.clone(), + ] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + Ok(Output { + signature, + auction_house, + treasury_withdrawal_destination, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "payer" => kp, "authority" => kp, + "new_authority" => pk, "treasury_mint" => pk, + "fee_withdrawal_destination" => pk, + "treasury_withdrawal_destination_owner" => pk, + "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_opt_encoding() { + let mut v = Vec::new(); + encode_opt_u16(None, &mut v); + encode_opt_u16(Some(500), &mut v); + encode_opt_bool(None, &mut v); + encode_opt_bool(Some(true), &mut v); + // None(u16): [0] + // Some(500): [1, 0xf4, 0x01] + // None(bool): [0] + // Some(true): [1, 1] + assert_eq!(v, vec![0, 1, 0xf4, 0x01, 0, 1, 1]); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auction_house_instruction(DISC_UPDATE_AUCTION_HOUSE, vec![], vec![0, 0, 0]); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_UPDATE_AUCTION_HOUSE); + assert_eq!(ix.data.len(), 11); + } +} diff --git a/crates/cmds-solana/src/auction_house/withdraw.rs b/crates/cmds-solana/src/auction_house/withdraw.rs new file mode 100644 index 000000000..8226aac90 --- /dev/null +++ b/crates/cmds-solana/src/auction_house/withdraw.rs @@ -0,0 +1,134 @@ +use super::{ + ATA_PROGRAM_ID, DISC_WITHDRAW, TOKEN_PROGRAM_ID, build_auction_house_instruction, + payment_account_for, pda, +}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; + +const NAME: &str = "auction_house_withdraw"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/withdraw.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + /// Wallet owner of the escrow. One of `wallet` or `authority` must sign. + pub wallet: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub amount: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub escrow_payment_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub receipt_account: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let (escrow_payment_account, _) = pda::find_escrow_payment_account(&auction_house, &wallet_pk); + let (auction_house_fee_account, _) = pda::find_auction_house_fee_account(&auction_house); + let receipt_account = payment_account_for(&wallet_pk, &input.treasury_mint, &TOKEN_PROGRAM_ID); + + let accounts = vec![ + AccountMeta::new_readonly(wallet_pk, true), + AccountMeta::new(receipt_account, false), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(auction_house_fee_account, false), + AccountMeta::new(escrow_payment_account, false), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(input.authority.pubkey(), true), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(ATA_PROGRAM_ID, false), + ]; + + let args_data = input.amount.to_le_bytes().to_vec(); + let ix = build_auction_house_instruction(DISC_WITHDRAW, accounts, args_data); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [ + input.fee_payer.clone(), + input.wallet.clone(), + input.authority.clone(), + ] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + escrow_payment_account, + auction_house, + receipt_account, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, + "wallet" => kp, + "authority" => kp, + "treasury_mint" => pk, + "amount" => 1000u64, + "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = + build_auction_house_instruction(DISC_WITHDRAW, vec![], 5u64.to_le_bytes().to_vec()); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_WITHDRAW); + assert_eq!(ix.data.len(), 16); + } +} diff --git a/crates/cmds-solana/src/auction_house/withdraw_from_fee.rs b/crates/cmds-solana/src/auction_house/withdraw_from_fee.rs new file mode 100644 index 000000000..5e8a83a90 --- /dev/null +++ b/crates/cmds-solana/src/auction_house/withdraw_from_fee.rs @@ -0,0 +1,116 @@ +use super::{DISC_WITHDRAW_FROM_FEE, build_auction_house_instruction, pda}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; + +const NAME: &str = "auction_house_withdraw_from_fee"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/withdraw_from_fee.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub fee_withdrawal_destination: Pubkey, + pub amount: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let (fee_acc, _) = pda::find_auction_house_fee_account(&auction_house); + + let accounts = vec![ + AccountMeta::new_readonly(input.authority.pubkey(), true), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new(input.fee_withdrawal_destination, false), + AccountMeta::new(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + ]; + + let ix = build_auction_house_instruction( + DISC_WITHDRAW_FROM_FEE, + accounts, + input.amount.to_le_bytes().to_vec(), + ); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.authority.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + Ok(Output { + signature, + auction_house, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "authority" => kp, + "treasury_mint" => pk, "fee_withdrawal_destination" => pk, + "amount" => 5u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auction_house_instruction( + DISC_WITHDRAW_FROM_FEE, + vec![], + 5u64.to_le_bytes().to_vec(), + ); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_WITHDRAW_FROM_FEE); + assert_eq!(ix.data.len(), 16); + } +} diff --git a/crates/cmds-solana/src/auction_house/withdraw_from_treasury.rs b/crates/cmds-solana/src/auction_house/withdraw_from_treasury.rs new file mode 100644 index 000000000..1f0624812 --- /dev/null +++ b/crates/cmds-solana/src/auction_house/withdraw_from_treasury.rs @@ -0,0 +1,121 @@ +use super::{DISC_WITHDRAW_FROM_TREASURY, TOKEN_PROGRAM_ID, build_auction_house_instruction, pda}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; + +const NAME: &str = "auction_house_withdraw_from_treasury"; +const DEFINITION: &str = flow_lib::node_definition!("auction_house/withdraw_from_treasury.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub authority: Wallet, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_withdrawal_destination: Pubkey, + pub amount: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let (auction_house, _) = + pda::find_auction_house(&input.authority.pubkey(), &input.treasury_mint); + let (treasury, _) = pda::find_auction_house_treasury(&auction_house); + + // Account order per Metaplex AH WithdrawFromTreasury IDL: + // 0: treasury_mint, 1: authority (signer), 2: treasury_withdrawal_destination, + // 3: auction_house_treasury (bare PDA for WSOL / ATA for SPL treasury_mint), + // 4: auction_house (AH-owned account), 5: token_program, 6: system_program. + let accounts = vec![ + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(input.authority.pubkey(), true), + AccountMeta::new(input.treasury_withdrawal_destination, false), + AccountMeta::new(treasury, false), + AccountMeta::new(auction_house, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + ]; + + let ix = build_auction_house_instruction( + DISC_WITHDRAW_FROM_TREASURY, + accounts, + input.amount.to_le_bytes().to_vec(), + ); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.authority.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + Ok(Output { + signature, + auction_house, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTION_HOUSE_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "authority" => kp, + "treasury_mint" => pk, "treasury_withdrawal_destination" => pk, + "amount" => 5u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auction_house_instruction( + DISC_WITHDRAW_FROM_TREASURY, + vec![], + 5u64.to_le_bytes().to_vec(), + ); + assert_eq!(ix.program_id, AUCTION_HOUSE_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_WITHDRAW_FROM_TREASURY); + assert_eq!(ix.data.len(), 16); + } +} diff --git a/crates/cmds-solana/src/auctioneer/authorize.rs b/crates/cmds-solana/src/auctioneer/authorize.rs new file mode 100644 index 000000000..7aa18f98b --- /dev/null +++ b/crates/cmds-solana/src/auctioneer/authorize.rs @@ -0,0 +1,124 @@ +use super::{DISC_AUTHORIZE, build_auctioneer_instruction, pda}; +use crate::auction_house::pda as ah_pda; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; + +const NAME: &str = "auctioneer_authorize"; +const DEFINITION: &str = flow_lib::node_definition!("auctioneer/authorize.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + /// Must be the Auction House authority (signs, pays rent for the auctioneer_authority PDA). + pub wallet: Wallet, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub auctioneer_authority: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = ah_pda::find_auction_house(&wallet_pk, &input.treasury_mint); + let (auctioneer_authority, _) = pda::find_auctioneer_authority(&auction_house); + + // Idempotent fast-path: if the auctioneer_authority PDA is already + // initialized on-chain, authorize has already run. Return existing PDAs + // so this flow can re-run as verification against an existing setup. + if ctx + .solana_client() + .get_account(&auctioneer_authority) + .await + .is_ok() + { + return Ok(Output { + signature: None, + auction_house, + auctioneer_authority, + }); + } + + let accounts = vec![ + AccountMeta::new(wallet_pk, true), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(auctioneer_authority, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + ]; + + let ix = build_auctioneer_instruction(DISC_AUTHORIZE, accounts, vec![]); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.wallet.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + auction_house, + auctioneer_authority, + }) +} + +#[cfg(test)] +mod tests { + use super::super::AUCTIONEER_PROGRAM_ID; + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "wallet" => kp, + "treasury_mint" => pk, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auctioneer_instruction(DISC_AUTHORIZE, vec![], vec![]); + assert_eq!(ix.program_id, AUCTIONEER_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_AUTHORIZE); + assert_eq!(ix.data.len(), 8); + } +} diff --git a/crates/cmds-solana/src/auctioneer/buy.rs b/crates/cmds-solana/src/auctioneer/buy.rs new file mode 100644 index 000000000..273f01c77 --- /dev/null +++ b/crates/cmds-solana/src/auctioneer/buy.rs @@ -0,0 +1,185 @@ +use super::{AUCTIONEER_PROGRAM_ID, DISC_BUY, build_auctioneer_instruction, pda}; +use crate::auction_house::{ + AUCTION_HOUSE_PROGRAM_ID, TOKEN_PROGRAM_ID, payment_account_for, pda as ah_pda, +}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; +use solana_program::sysvar; + +const NAME: &str = "auctioneer_buy"; +const DEFINITION: &str = flow_lib::node_definition!("auctioneer/buy.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + /// Buyer (signs + pays). + pub wallet: Wallet, + #[serde_as(as = "AsPubkey")] + pub authority: Pubkey, + #[serde_as(as = "AsPubkey")] + pub seller: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub buyer_price: u64, + pub token_size: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub listing_config: Pubkey, + #[serde_as(as = "AsPubkey")] + pub buyer_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub escrow_payment_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub metadata: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = ah_pda::find_auction_house(&input.authority, &input.treasury_mint); + let (auctioneer_authority, aa_bump) = pda::find_auctioneer_authority(&auction_house); + let (ah_auctioneer_pda, _) = + ah_pda::find_ah_auctioneer_pda(&auction_house, &auctioneer_authority); + let (token_account, _) = ah_pda::find_ata(&input.seller, &input.token_mint, &TOKEN_PROGRAM_ID); + let (metadata, _) = ah_pda::find_metadata(&input.token_mint); + let (fee_acc, _) = ah_pda::find_auction_house_fee_account(&auction_house); + let payment_account = payment_account_for(&wallet_pk, &input.treasury_mint, &TOKEN_PROGRAM_ID); + let transfer_authority = wallet_pk; + let (buyer_trade_state, ts_bump) = ah_pda::find_trade_state( + &wallet_pk, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.buyer_price, + input.token_size, + ); + let (escrow_payment_account, esc_bump) = + ah_pda::find_escrow_payment_account(&auction_house, &wallet_pk); + let (listing_config, _) = pda::find_listing_config( + &input.seller, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.token_size, + ); + + // See auctioneer/deposit.rs for the AH sign-off rationale. + let authority_is_signer = input.authority == input.fee_payer.pubkey(); + + let accounts = vec![ + AccountMeta::new_readonly(AUCTION_HOUSE_PROGRAM_ID, false), + AccountMeta::new(listing_config, false), + AccountMeta::new_readonly(input.seller, false), + // See auctioneer/deposit.rs: wallet is left readonly because Metaplex + // Auctioneer's struct strips the writable flag on CPI. SPL-treasury + // Buy blocks on the same upstream limitation as Deposit. + AccountMeta::new_readonly(wallet_pk, true), + AccountMeta::new(payment_account, false), + AccountMeta::new_readonly(transfer_authority, false), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(token_account, false), + AccountMeta::new_readonly(metadata, false), + AccountMeta::new(escrow_payment_account, false), + AccountMeta::new_readonly(input.authority, authority_is_signer), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new(buyer_trade_state, false), + AccountMeta::new_readonly(auctioneer_authority, false), + AccountMeta::new_readonly(ah_auctioneer_pda, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let mut args = Vec::with_capacity(19); + args.push(ts_bump); + args.push(esc_bump); + args.push(aa_bump); + args.extend_from_slice(&input.buyer_price.to_le_bytes()); + args.extend_from_slice(&input.token_size.to_le_bytes()); + + let ix = build_auctioneer_instruction(DISC_BUY, accounts, args); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.wallet.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + auction_house, + listing_config, + buyer_trade_state, + escrow_payment_account, + token_account, + metadata, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "wallet" => kp, + "authority" => pk, "seller" => pk, "token_mint" => pk, "treasury_mint" => pk, + "buyer_price" => 1000u64, "token_size" => 1u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auctioneer_instruction(DISC_BUY, vec![], vec![0u8; 19]); + assert_eq!(ix.program_id, AUCTIONEER_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_BUY); + assert_eq!(ix.data.len(), 27); + } +} diff --git a/crates/cmds-solana/src/auctioneer/cancel.rs b/crates/cmds-solana/src/auctioneer/cancel.rs new file mode 100644 index 000000000..e30f0dbba --- /dev/null +++ b/crates/cmds-solana/src/auctioneer/cancel.rs @@ -0,0 +1,160 @@ +use super::{AUCTIONEER_PROGRAM_ID, DISC_CANCEL, build_auctioneer_instruction, pda}; +use crate::auction_house::{AUCTION_HOUSE_PROGRAM_ID, TOKEN_PROGRAM_ID, pda as ah_pda}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; + +const NAME: &str = "auctioneer_cancel"; +const DEFINITION: &str = flow_lib::node_definition!("auctioneer/cancel.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + /// The trade state owner (bidder cancelling a bid, or seller cancelling the listing). + pub wallet: Wallet, + #[serde_as(as = "AsPubkey")] + pub authority: Pubkey, + /// Seller of the NFT (used to locate listing_config; equals wallet when seller cancels). + #[serde_as(as = "AsPubkey")] + pub seller: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + /// Use `u64::MAX` to cancel the listing, or the bid price to cancel a bid. + pub buyer_price: u64, + pub token_size: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub listing_config: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = ah_pda::find_auction_house(&input.authority, &input.treasury_mint); + let (auctioneer_authority, aa_bump) = pda::find_auctioneer_authority(&auction_house); + let (ah_auctioneer_pda, _) = + ah_pda::find_ah_auctioneer_pda(&auction_house, &auctioneer_authority); + // token_account is always the seller's ATA (the listing's NFT holding account). + let (token_account, _) = ah_pda::find_ata(&input.seller, &input.token_mint, &TOKEN_PROGRAM_ID); + let (fee_acc, _) = ah_pda::find_auction_house_fee_account(&auction_house); + let (trade_state, _) = ah_pda::find_trade_state( + &wallet_pk, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.buyer_price, + input.token_size, + ); + let (listing_config, _) = pda::find_listing_config( + &input.seller, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.token_size, + ); + + let accounts = vec![ + AccountMeta::new_readonly(AUCTION_HOUSE_PROGRAM_ID, false), + AccountMeta::new(listing_config, false), + AccountMeta::new_readonly(input.seller, false), + AccountMeta::new(wallet_pk, true), + AccountMeta::new(token_account, false), + AccountMeta::new_readonly(input.token_mint, false), + AccountMeta::new_readonly(input.authority, false), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new(trade_state, false), + AccountMeta::new_readonly(auctioneer_authority, false), + AccountMeta::new_readonly(ah_auctioneer_pda, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + ]; + + let mut args = Vec::with_capacity(17); + args.push(aa_bump); + args.extend_from_slice(&input.buyer_price.to_le_bytes()); + args.extend_from_slice(&input.token_size.to_le_bytes()); + + let ix = build_auctioneer_instruction(DISC_CANCEL, accounts, args); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.wallet.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + auction_house, + trade_state, + token_account, + listing_config, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "wallet" => kp, + "authority" => pk, "seller" => pk, "token_mint" => pk, "treasury_mint" => pk, + "buyer_price" => 1000u64, "token_size" => 1u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auctioneer_instruction(DISC_CANCEL, vec![], vec![0u8; 17]); + assert_eq!(ix.program_id, AUCTIONEER_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_CANCEL); + assert_eq!(ix.data.len(), 25); + } +} diff --git a/crates/cmds-solana/src/auctioneer/deposit.rs b/crates/cmds-solana/src/auctioneer/deposit.rs new file mode 100644 index 000000000..244e82a1b --- /dev/null +++ b/crates/cmds-solana/src/auctioneer/deposit.rs @@ -0,0 +1,157 @@ +use super::{AUCTIONEER_PROGRAM_ID, DISC_DEPOSIT, build_auctioneer_instruction, pda}; +use crate::auction_house::{ + AUCTION_HOUSE_PROGRAM_ID, TOKEN_PROGRAM_ID, payment_account_for, pda as ah_pda, +}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; +use solana_program::sysvar; + +const NAME: &str = "auctioneer_deposit"; +const DEFINITION: &str = flow_lib::node_definition!("auctioneer/deposit.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub wallet: Wallet, + #[serde_as(as = "AsPubkey")] + pub authority: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub amount: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub escrow_payment_account: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = ah_pda::find_auction_house(&input.authority, &input.treasury_mint); + let (auctioneer_authority, aa_bump) = pda::find_auctioneer_authority(&auction_house); + let (ah_auctioneer_pda, _) = + ah_pda::find_ah_auctioneer_pda(&auction_house, &auctioneer_authority); + let (escrow_payment_account, esc_bump) = + ah_pda::find_escrow_payment_account(&auction_house, &wallet_pk); + let (fee_acc, _) = ah_pda::find_auction_house_fee_account(&auction_house); + let payment_account = payment_account_for(&wallet_pk, &input.treasury_mint, &TOKEN_PROGRAM_ID); + let transfer_authority = wallet_pk; + + // When the AH was created with requires_sign_off=true, mpl-auction-house's + // get_fee_payer demands either authority.is_signer OR !requires_sign_off. + // If authority == fee_payer, the fee_payer IS signing the tx — mark the + // authority slot is_signer=true so Anchor's AccountInfo check passes. + let authority_is_signer = input.authority == input.fee_payer.pubkey(); + + // NOTE for SPL treasury: Metaplex Auctioneer's Deposit struct declares + // `pub wallet: Signer<'info>` WITHOUT `#[account(mut)]` (verified verbatim in + // metaplex-program-library auctioneer/program/src/deposit/mod.rs), so Anchor + // strips wallet's writable flag when CPI'ing into AH. AH's inner Deposit + // handler needs wallet writable for SPL treasury to fund escrow_payment_account's + // ~2039280-lamport SPL-token-account rent; it fails with "writable privilege + // escalated" otherwise. Upstream's own tests only cover native SOL, so this + // path was never exercised. + // + // Workaround (no client change needed): pre-fund the escrow_payment_account + // PDA with >=2039280 lamports via a plain SystemTransfer before calling this + // node. AH's create_program_token_account_if_not_present early-returns the + // rent transfer when the PDA already has lamports, then Allocate+Assign+Init + // use the AH program's own signing seeds — no wallet writability required. + // Proven 2026-04-18 against USDC treasury AH 4RZUSD4...rQTv. See + // flow2/docs/issues.md gap #3 for the full proof + production considerations. + let accounts = vec![ + AccountMeta::new_readonly(AUCTION_HOUSE_PROGRAM_ID, false), + AccountMeta::new_readonly(wallet_pk, true), + AccountMeta::new(payment_account, false), + AccountMeta::new_readonly(transfer_authority, false), + AccountMeta::new(escrow_payment_account, false), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(input.authority, authority_is_signer), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new_readonly(auctioneer_authority, false), + AccountMeta::new_readonly(ah_auctioneer_pda, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let mut args = Vec::with_capacity(10); + args.push(esc_bump); + args.push(aa_bump); + args.extend_from_slice(&input.amount.to_le_bytes()); + + let ix = build_auctioneer_instruction(DISC_DEPOSIT, accounts, args); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.wallet.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + auction_house, + escrow_payment_account, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "wallet" => kp, + "authority" => pk, "treasury_mint" => pk, + "amount" => 1000u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auctioneer_instruction(DISC_DEPOSIT, vec![], vec![0u8; 10]); + assert_eq!(ix.program_id, AUCTIONEER_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_DEPOSIT); + assert_eq!(ix.data.len(), 18); + } +} diff --git a/crates/cmds-solana/src/auctioneer/execute_sale.rs b/crates/cmds-solana/src/auctioneer/execute_sale.rs new file mode 100644 index 000000000..beea0fa0c --- /dev/null +++ b/crates/cmds-solana/src/auctioneer/execute_sale.rs @@ -0,0 +1,224 @@ +use super::{ + AUCTIONEER_BUYER_PRICE, AUCTIONEER_PROGRAM_ID, DISC_EXECUTE_SALE, build_auctioneer_instruction, + pda, +}; +use crate::auction_house::{ + ATA_PROGRAM_ID, AUCTION_HOUSE_PROGRAM_ID, TOKEN_PROGRAM_ID, payment_account_for, pda as ah_pda, +}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; +use solana_program::sysvar; + +const NAME: &str = "auctioneer_execute_sale"; +const DEFINITION: &str = flow_lib::node_definition!("auctioneer/execute_sale.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + #[serde_as(as = "AsPubkey")] + pub authority: Pubkey, + #[serde_as(as = "AsPubkey")] + pub buyer: Pubkey, + #[serde_as(as = "AsPubkey")] + pub seller: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + /// The winning bid price — must match the `buyer_trade_state` seeds. + pub buyer_price: u64, + pub token_size: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub listing_config: Pubkey, + #[serde_as(as = "AsPubkey")] + pub buyer_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub seller_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub free_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub escrow_payment_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub metadata: Pubkey, + #[serde_as(as = "AsPubkey")] + pub seller_payment_receipt_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub buyer_receipt_token_account: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let (auction_house, _) = ah_pda::find_auction_house(&input.authority, &input.treasury_mint); + let (auctioneer_authority, aa_bump) = pda::find_auctioneer_authority(&auction_house); + let (ah_auctioneer_pda, _) = + ah_pda::find_ah_auctioneer_pda(&auction_house, &auctioneer_authority); + let (token_account, _) = ah_pda::find_ata(&input.seller, &input.token_mint, &TOKEN_PROGRAM_ID); + let (metadata, _) = ah_pda::find_metadata(&input.token_mint); + let (fee_acc, _) = ah_pda::find_auction_house_fee_account(&auction_house); + let (treasury, _) = ah_pda::find_auction_house_treasury(&auction_house); + let (escrow_payment_account, esc_bump) = + ah_pda::find_escrow_payment_account(&auction_house, &input.buyer); + let seller_payment_receipt_account = + payment_account_for(&input.seller, &input.treasury_mint, &TOKEN_PROGRAM_ID); + let (buyer_receipt_token_account, _) = + ah_pda::find_ata(&input.buyer, &input.token_mint, &TOKEN_PROGRAM_ID); + let (buyer_trade_state, _) = ah_pda::find_trade_state( + &input.buyer, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.buyer_price, + input.token_size, + ); + let (seller_trade_state, _) = ah_pda::find_trade_state( + &input.seller, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + AUCTIONEER_BUYER_PRICE, + input.token_size, + ); + let (free_trade_state, fts_bump) = ah_pda::find_free_trade_state( + &input.seller, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.token_size, + ); + let (program_as_signer, pas_bump) = ah_pda::find_program_as_signer(); + let (listing_config, _) = pda::find_listing_config( + &input.seller, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.token_size, + ); + + // See auctioneer/deposit.rs for the AH sign-off rationale. + let authority_is_signer = input.authority == input.fee_payer.pubkey(); + + let accounts = vec![ + AccountMeta::new_readonly(AUCTION_HOUSE_PROGRAM_ID, false), + AccountMeta::new(listing_config, false), + AccountMeta::new(input.buyer, false), + AccountMeta::new(input.seller, false), + AccountMeta::new(token_account, false), + AccountMeta::new_readonly(input.token_mint, false), + AccountMeta::new_readonly(metadata, false), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new(escrow_payment_account, false), + AccountMeta::new(seller_payment_receipt_account, false), + AccountMeta::new(buyer_receipt_token_account, false), + AccountMeta::new_readonly(input.authority, authority_is_signer), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new(treasury, false), + AccountMeta::new(buyer_trade_state, false), + AccountMeta::new(seller_trade_state, false), + AccountMeta::new(free_trade_state, false), + AccountMeta::new_readonly(auctioneer_authority, false), + AccountMeta::new_readonly(ah_auctioneer_pda, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(ATA_PROGRAM_ID, false), + AccountMeta::new_readonly(program_as_signer, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let mut args = Vec::with_capacity(20); + args.push(esc_bump); + args.push(fts_bump); + args.push(pas_bump); + args.push(aa_bump); + args.extend_from_slice(&input.buyer_price.to_le_bytes()); + args.extend_from_slice(&input.token_size.to_le_bytes()); + + let ix = build_auctioneer_instruction(DISC_EXECUTE_SALE, accounts, args); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone()].into_iter().collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + auction_house, + listing_config, + buyer_trade_state, + seller_trade_state, + free_trade_state, + escrow_payment_account, + token_account, + metadata, + seller_payment_receipt_account, + buyer_receipt_token_account, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, + "authority" => pk, "buyer" => pk, "seller" => pk, + "token_mint" => pk, "treasury_mint" => pk, + "buyer_price" => 1000u64, "token_size" => 1u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auctioneer_instruction(DISC_EXECUTE_SALE, vec![], vec![0u8; 20]); + assert_eq!(ix.program_id, AUCTIONEER_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_EXECUTE_SALE); + assert_eq!(ix.data.len(), 28); + } +} diff --git a/crates/cmds-solana/src/auctioneer/mod.rs b/crates/cmds-solana/src/auctioneer/mod.rs new file mode 100644 index 000000000..5e8789f84 --- /dev/null +++ b/crates/cmds-solana/src/auctioneer/mod.rs @@ -0,0 +1,85 @@ +//! Metaplex Auctioneer program Space Operator nodes +//! +//! Program ID: `neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh` +//! Source: https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auctioneer +//! +//! Auctioneer is a delegate program layered on top of `mpl-auction-house`: it wraps AH's +//! `auctioneer_*` instructions and enforces English-auction rules (timed window, +//! reserve price, min bid increment, anti-sniping time extension, optional high-bid cancel). +//! +//! Flow to use: +//! 1. `auction_house_create` (from the auction_house module) with `requires_sign_off: true`. +//! 2. Compute the auctioneer_authority PDA via `pda::find_auctioneer_authority`. +//! 3. Call `auction_house_delegate_auctioneer` to register the auctioneer on the AH side. +//! 4. Call `auctioneer_authorize` to create the auctioneer-side state. +//! 5. `auctioneer_sell` (with auction params) → bidders `auctioneer_deposit` + `auctioneer_buy` +//! → `auctioneer_execute_sale` (after end_time) → losing bidders `auctioneer_withdraw`. + +use crate::prelude::*; +use solana_program::pubkey; + +pub mod authorize; +pub mod buy; +pub mod cancel; +pub mod deposit; +pub mod execute_sale; +pub mod pda; +pub mod sell; +pub mod withdraw; + +/// Auctioneer program ID +pub const AUCTIONEER_PROGRAM_ID: Pubkey = pubkey!("neer8g6yJq2mQM6KbnViEDAD4gr3gRZyMMf4F2p3MEh"); + +/// Sentinel buyer_price used in the seller's AH trade_state seed when listing via Auctioneer. +/// Bids can land at any price, so the listing side doesn't commit to one. +pub const AUCTIONEER_BUYER_PRICE: u64 = u64::MAX; + +// Anchor 8-byte instruction discriminators: sha256("global:")[..8] +pub const DISC_AUTHORIZE: [u8; 8] = [0xad, 0xc1, 0x66, 0xd2, 0xdb, 0x89, 0x71, 0x78]; +pub const DISC_SELL: [u8; 8] = [0x33, 0xe6, 0x85, 0xa4, 0x01, 0x7f, 0x83, 0xad]; +pub const DISC_BUY: [u8; 8] = [0x66, 0x06, 0x3d, 0x12, 0x01, 0xda, 0xeb, 0xea]; +pub const DISC_DEPOSIT: [u8; 8] = [0xf2, 0x23, 0xc6, 0x89, 0x52, 0xe1, 0xf2, 0xb6]; +pub const DISC_WITHDRAW: [u8; 8] = [0xb7, 0x12, 0x46, 0x9c, 0x94, 0x6d, 0xa1, 0x22]; +pub const DISC_CANCEL: [u8; 8] = [0xe8, 0xdb, 0xdf, 0x29, 0xdb, 0xec, 0xdc, 0xbe]; +pub const DISC_EXECUTE_SALE: [u8; 8] = [0x25, 0x4a, 0xd9, 0x9d, 0x4f, 0x31, 0x23, 0x06]; + +pub fn build_auctioneer_instruction( + discriminator: [u8; 8], + accounts: Vec, + args_data: Vec, +) -> Instruction { + let mut data = Vec::with_capacity(8 + args_data.len()); + data.extend_from_slice(&discriminator); + data.extend_from_slice(&args_data); + Instruction { + program_id: AUCTIONEER_PROGRAM_ID, + accounts, + data, + } +} + +#[cfg(test)] +mod tests { + use super::*; + use sha2::{Digest, Sha256}; + + fn anchor_disc(name: &str) -> [u8; 8] { + let mut h = Sha256::new(); + h.update(format!("global:{name}").as_bytes()); + let out = h.finalize(); + let mut b = [0u8; 8]; + b.copy_from_slice(&out[..8]); + b + } + + #[test] + fn test_discriminators() { + assert_eq!(DISC_AUTHORIZE, anchor_disc("authorize")); + assert_eq!(DISC_SELL, anchor_disc("sell")); + assert_eq!(DISC_BUY, anchor_disc("buy")); + assert_eq!(DISC_DEPOSIT, anchor_disc("deposit")); + assert_eq!(DISC_WITHDRAW, anchor_disc("withdraw")); + assert_eq!(DISC_CANCEL, anchor_disc("cancel")); + assert_eq!(DISC_EXECUTE_SALE, anchor_disc("execute_sale")); + } +} diff --git a/crates/cmds-solana/src/auctioneer/pda.rs b/crates/cmds-solana/src/auctioneer/pda.rs new file mode 100644 index 000000000..06d0fbab6 --- /dev/null +++ b/crates/cmds-solana/src/auctioneer/pda.rs @@ -0,0 +1,64 @@ +//! Auctioneer program PDAs. + +use super::AUCTIONEER_PROGRAM_ID; +use solana_program::pubkey::Pubkey; + +/// The Auctioneer program's own authority PDA for a given AH. +/// Seeds: `[b"auctioneer", auction_house]` under the Auctioneer program. +pub fn find_auctioneer_authority(auction_house: &Pubkey) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[b"auctioneer", auction_house.as_ref()], + &AUCTIONEER_PROGRAM_ID, + ) +} + +/// ListingConfig PDA storing auction params (start_time, end_time, reserve, increment, etc). +/// Seeds: `[b"listing_config", seller_wallet, auction_house, token_account, treasury_mint, token_mint, token_size_le]` +/// under the Auctioneer program. Note: no buyer_price — one listing per (seller, token, size). +pub fn find_listing_config( + seller: &Pubkey, + auction_house: &Pubkey, + token_account: &Pubkey, + treasury_mint: &Pubkey, + token_mint: &Pubkey, + token_size: u64, +) -> (Pubkey, u8) { + Pubkey::find_program_address( + &[ + b"listing_config", + seller.as_ref(), + auction_house.as_ref(), + token_account.as_ref(), + treasury_mint.as_ref(), + token_mint.as_ref(), + &token_size.to_le_bytes(), + ], + &AUCTIONEER_PROGRAM_ID, + ) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn deterministic() { + let ah = Pubkey::new_unique(); + assert_eq!( + find_auctioneer_authority(&ah), + find_auctioneer_authority(&ah) + ); + } + + #[test] + fn listing_config_varies_with_size() { + let s = Pubkey::new_unique(); + let ah = Pubkey::new_unique(); + let ta = Pubkey::new_unique(); + let tm = Pubkey::new_unique(); + let mint = Pubkey::new_unique(); + let a = find_listing_config(&s, &ah, &ta, &tm, &mint, 1).0; + let b = find_listing_config(&s, &ah, &ta, &tm, &mint, 2).0; + assert_ne!(a, b); + } +} diff --git a/crates/cmds-solana/src/auctioneer/sell.rs b/crates/cmds-solana/src/auctioneer/sell.rs new file mode 100644 index 000000000..e49a07c97 --- /dev/null +++ b/crates/cmds-solana/src/auctioneer/sell.rs @@ -0,0 +1,237 @@ +use super::{AUCTIONEER_BUYER_PRICE, DISC_SELL, build_auctioneer_instruction, pda}; +use crate::auction_house::{AUCTION_HOUSE_PROGRAM_ID, TOKEN_PROGRAM_ID, pda as ah_pda}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; +use solana_program::sysvar; + +const NAME: &str = "auctioneer_sell"; +const DEFINITION: &str = flow_lib::node_definition!("auctioneer/sell.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + pub wallet: Wallet, + #[serde_as(as = "AsPubkey")] + pub authority: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_mint: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub token_size: u64, + /// Auction start (unix seconds). + pub start_time: i64, + /// Auction end (unix seconds). + pub end_time: i64, + #[serde(default)] + pub reserve_price: Option, + #[serde(default)] + pub min_bid_increment: Option, + /// Trailing window (seconds) before end_time in which a new high bid triggers an extension. + #[serde(default)] + pub time_ext_period: Option, + /// How many seconds to add to end_time when a late bid triggers an extension. + #[serde(default)] + pub time_ext_delta: Option, + #[serde(default)] + pub allow_high_bid_cancel: Option, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub listing_config: Pubkey, + #[serde_as(as = "AsPubkey")] + pub token_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub seller_trade_state: Pubkey, + #[serde_as(as = "AsPubkey")] + pub free_seller_trade_state: Pubkey, +} + +fn push_opt_u64(v: Option, out: &mut Vec) { + match v { + None => out.push(0), + Some(x) => { + out.push(1); + out.extend_from_slice(&x.to_le_bytes()); + } + } +} +fn push_opt_u32(v: Option, out: &mut Vec) { + match v { + None => out.push(0), + Some(x) => { + out.push(1); + out.extend_from_slice(&x.to_le_bytes()); + } + } +} +fn push_opt_bool(v: Option, out: &mut Vec) { + match v { + None => out.push(0), + Some(x) => { + out.push(1); + out.push(x as u8); + } + } +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = ah_pda::find_auction_house(&input.authority, &input.treasury_mint); + let (auctioneer_authority, aa_bump) = pda::find_auctioneer_authority(&auction_house); + let (ah_auctioneer_pda, _) = + ah_pda::find_ah_auctioneer_pda(&auction_house, &auctioneer_authority); + let (token_account, _) = ah_pda::find_ata(&wallet_pk, &input.token_mint, &TOKEN_PROGRAM_ID); + let (metadata, _) = ah_pda::find_metadata(&input.token_mint); + let (fee_acc, _) = ah_pda::find_auction_house_fee_account(&auction_house); + let (seller_trade_state, ts_bump) = ah_pda::find_trade_state( + &wallet_pk, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + AUCTIONEER_BUYER_PRICE, + input.token_size, + ); + let (free_seller_trade_state, fts_bump) = ah_pda::find_free_trade_state( + &wallet_pk, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.token_size, + ); + let (program_as_signer, pas_bump) = ah_pda::find_program_as_signer(); + let (listing_config, _) = pda::find_listing_config( + &wallet_pk, + &auction_house, + &token_account, + &input.treasury_mint, + &input.token_mint, + input.token_size, + ); + + let accounts = vec![ + AccountMeta::new_readonly(AUCTION_HOUSE_PROGRAM_ID, false), + AccountMeta::new(listing_config, false), + AccountMeta::new(wallet_pk, true), + AccountMeta::new(token_account, false), + AccountMeta::new_readonly(metadata, false), + AccountMeta::new_readonly(input.authority, false), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new(seller_trade_state, false), + AccountMeta::new(free_seller_trade_state, false), + AccountMeta::new_readonly(auctioneer_authority, false), + AccountMeta::new_readonly(ah_auctioneer_pda, false), + AccountMeta::new_readonly(program_as_signer, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let mut args = Vec::with_capacity(64); + args.push(ts_bump); + args.push(fts_bump); + args.push(pas_bump); + args.push(aa_bump); + args.extend_from_slice(&input.token_size.to_le_bytes()); + args.extend_from_slice(&input.start_time.to_le_bytes()); + args.extend_from_slice(&input.end_time.to_le_bytes()); + push_opt_u64(input.reserve_price, &mut args); + push_opt_u64(input.min_bid_increment, &mut args); + push_opt_u32(input.time_ext_period, &mut args); + push_opt_u32(input.time_ext_delta, &mut args); + push_opt_bool(input.allow_high_bid_cancel, &mut args); + + let ix = build_auctioneer_instruction(DISC_SELL, accounts, args); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.wallet.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + auction_house, + listing_config, + token_account, + seller_trade_state, + free_seller_trade_state, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "wallet" => kp, + "authority" => pk, "token_mint" => pk, "treasury_mint" => pk, + "token_size" => 1u64, + "start_time" => 1_000_000i64, + "end_time" => 1_000_060i64, + "reserve_price" => 100u64, + "min_bid_increment" => 10u64, + "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_opt_encoding() { + let mut v = Vec::new(); + push_opt_u64(None, &mut v); + push_opt_u64(Some(500), &mut v); + push_opt_u32(Some(30), &mut v); + push_opt_bool(Some(true), &mut v); + // None(u64)=[0]; Some(500)=[1,0xf4,0x01,0,0,0,0,0,0]; Some(30_u32)=[1,0x1e,0,0,0]; Some(true)=[1,1] + assert_eq!(v[0], 0); + assert_eq!(v[1], 1); + assert_eq!(&v[2..10], &500u64.to_le_bytes()); + assert_eq!(v[10], 1); + assert_eq!(&v[11..15], &30u32.to_le_bytes()); + assert_eq!(v[15], 1); + assert_eq!(v[16], 1); + } +} diff --git a/crates/cmds-solana/src/auctioneer/withdraw.rs b/crates/cmds-solana/src/auctioneer/withdraw.rs new file mode 100644 index 000000000..3097eb7a4 --- /dev/null +++ b/crates/cmds-solana/src/auctioneer/withdraw.rs @@ -0,0 +1,138 @@ +use super::{AUCTIONEER_PROGRAM_ID, DISC_WITHDRAW, build_auctioneer_instruction, pda}; +use crate::auction_house::{ + ATA_PROGRAM_ID, AUCTION_HOUSE_PROGRAM_ID, TOKEN_PROGRAM_ID, payment_account_for, pda as ah_pda, +}; +use crate::prelude::*; +use solana_program::instruction::AccountMeta; +use solana_program::sysvar; + +const NAME: &str = "auctioneer_withdraw"; +const DEFINITION: &str = flow_lib::node_definition!("auctioneer/withdraw.jsonc"); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +flow_lib::submit!(CommandDescription::new(NAME, |_| { build() })); + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + pub fee_payer: Wallet, + /// Escrow owner. Signs to authorize the withdraw. + pub wallet: Wallet, + #[serde_as(as = "AsPubkey")] + pub authority: Pubkey, + #[serde_as(as = "AsPubkey")] + pub treasury_mint: Pubkey, + pub amount: u64, + #[serde(default = "value::default::bool_true")] + pub submit: bool, +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + pub signature: Option, + #[serde_as(as = "AsPubkey")] + pub auction_house: Pubkey, + #[serde_as(as = "AsPubkey")] + pub escrow_payment_account: Pubkey, + #[serde_as(as = "AsPubkey")] + pub receipt_account: Pubkey, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let wallet_pk = input.wallet.pubkey(); + let (auction_house, _) = ah_pda::find_auction_house(&input.authority, &input.treasury_mint); + let (auctioneer_authority, aa_bump) = pda::find_auctioneer_authority(&auction_house); + let (ah_auctioneer_pda, _) = + ah_pda::find_ah_auctioneer_pda(&auction_house, &auctioneer_authority); + let (escrow_payment_account, esc_bump) = + ah_pda::find_escrow_payment_account(&auction_house, &wallet_pk); + let (fee_acc, _) = ah_pda::find_auction_house_fee_account(&auction_house); + let receipt_account = payment_account_for(&wallet_pk, &input.treasury_mint, &TOKEN_PROGRAM_ID); + + let accounts = vec![ + AccountMeta::new_readonly(AUCTION_HOUSE_PROGRAM_ID, false), + AccountMeta::new_readonly(wallet_pk, true), + AccountMeta::new(receipt_account, false), + AccountMeta::new(escrow_payment_account, false), + AccountMeta::new_readonly(input.treasury_mint, false), + AccountMeta::new_readonly(input.authority, false), + AccountMeta::new_readonly(auction_house, false), + AccountMeta::new(fee_acc, false), + AccountMeta::new_readonly(auctioneer_authority, false), + AccountMeta::new_readonly(ah_auctioneer_pda, false), + AccountMeta::new_readonly(TOKEN_PROGRAM_ID, false), + AccountMeta::new_readonly(solana_system_interface::program::ID, false), + AccountMeta::new_readonly(ATA_PROGRAM_ID, false), + AccountMeta::new_readonly(sysvar::rent::ID, false), + ]; + + let mut args = Vec::with_capacity(10); + args.push(esc_bump); + args.push(aa_bump); + args.extend_from_slice(&input.amount.to_le_bytes()); + + let ix = build_auctioneer_instruction(DISC_WITHDRAW, accounts, args); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer.clone(), input.wallet.clone()] + .into_iter() + .collect(), + instructions: vec![ix], + }; + + let ins = if input.submit { + ins + } else { + Default::default() + }; + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { + signature, + auction_house, + escrow_payment_account, + receipt_account, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_build() { + build().unwrap(); + } + + #[test] + fn test_input_parsing() { + let pk = "GQZRKDqVzM4DXGGMEUNdnBD3CC4TTywh3PwgjYPBm8W9"; + let kp = "4rQanLxTFvdgtLsGirizXejgYXACawB5ShoZgvz4wwXi4jnii7XHSyUFJbvAk4ojRiEAHvzK6Qnjq7UyJFNbydeQ"; + let input = value::map! { + "fee_payer" => kp, "wallet" => kp, + "authority" => pk, "treasury_mint" => pk, + "amount" => 500u64, "submit" => false, + }; + value::from_map::(input).unwrap(); + } + + #[test] + fn test_instruction_construction() { + let ix = build_auctioneer_instruction(DISC_WITHDRAW, vec![], vec![0u8; 10]); + assert_eq!(ix.program_id, AUCTIONEER_PROGRAM_ID); + assert_eq!(ix.data[..8], DISC_WITHDRAW); + assert_eq!(ix.data.len(), 18); + } +} diff --git a/crates/cmds-solana/src/lib.rs b/crates/cmds-solana/src/lib.rs index ef228668c..17c9616e1 100644 --- a/crates/cmds-solana/src/lib.rs +++ b/crates/cmds-solana/src/lib.rs @@ -11,6 +11,8 @@ pub mod error; pub mod ardrive; pub mod arweave; pub mod attestation_service; +pub mod auction_house; +pub mod auctioneer; pub mod bridge; pub mod damm_v2; pub mod das; diff --git a/crates/cmds-solana/src/spl_record/close_record.rs b/crates/cmds-solana/src/spl_record/close_record.rs new file mode 100644 index 000000000..645601a24 --- /dev/null +++ b/crates/cmds-solana/src/spl_record/close_record.rs @@ -0,0 +1,61 @@ +use crate::prelude::*; + +use spl_record::instruction as record_instruction; + +const NAME: &str = "close_record"; + +const DEFINITION: &str = flow_lib::node_definition!("spl_record/close_record.jsonc"); + +flow_lib::submit!(CommandDescription::new(NAME, |_| build())); + +fn build() -> BuildResult { + static CACHE: BuilderCache = BuilderCache::new(|| { + CmdBuilder::new(DEFINITION)? + .check_name(NAME)? + .simple_instruction_info("signature") + }); + Ok(CACHE.clone()?.build(run)) +} + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct Input { + fee_payer: Wallet, + #[serde_as(as = "AsPubkey")] + record_account: Pubkey, + authority: Wallet, + #[serde_as(as = "Option")] + #[serde(default)] + lamport_receiver: Option, + #[serde(default = "value::default::bool_true")] + submit: bool, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct Output { + #[serde(default, with = "value::signature::opt")] + signature: Option, +} + +async fn run(mut ctx: CommandContext, input: Input) -> Result { + let receiver = input + .lamport_receiver + .unwrap_or_else(|| input.authority.pubkey()); + + let instruction = record_instruction::close_account( + &input.record_account, + &input.authority.pubkey(), + &receiver, + ); + + let ins = Instructions { + lookup_tables: None, + fee_payer: input.fee_payer.pubkey(), + signers: [input.fee_payer, input.authority].into(), + instructions: [instruction].into(), + }; + + let signature = ctx.execute(ins, <_>::default()).await?.signature; + + Ok(Output { signature }) +} diff --git a/crates/cmds-solana/src/spl_record/mod.rs b/crates/cmds-solana/src/spl_record/mod.rs index da438d4c2..20c220479 100644 --- a/crates/cmds-solana/src/spl_record/mod.rs +++ b/crates/cmds-solana/src/spl_record/mod.rs @@ -6,6 +6,7 @@ use solana_program::pubkey::Pubkey; use solana_program::{program_pack::IsInitialized, pubkey}; use {bytemuck::Pod, solana_program::program_error::ProgramError}; +pub mod close_record; pub mod initialize_record_with_seed; pub mod read_record; pub mod reallocate; diff --git a/crates/cmds-solana/src/spl_token_2022/burn_checked.rs b/crates/cmds-solana/src/spl_token_2022/burn_checked.rs index c0a2feae5..a1ddf97e9 100644 --- a/crates/cmds-solana/src/spl_token_2022/burn_checked.rs +++ b/crates/cmds-solana/src/spl_token_2022/burn_checked.rs @@ -22,6 +22,14 @@ pub struct Input { #[serde_as(as = "AsPubkey")] pub mint: Pubkey, pub authority: Wallet, + /// Optional source-account owner for delegate / clawback burns. + /// When omitted, the account to burn from is derived from `authority.pubkey()` + /// (normal owner-initiated burn). When set, the account is derived from this + /// pubkey and `authority` acts as a signing delegate (PermanentDelegate + /// revocation, or an account previously approved via spl_token::approve). + #[serde(default)] + #[serde_as(as = "Option")] + pub account_owner: Option, pub amount: u64, pub decimals: u8, #[serde(default = "value::default::bool_true")] @@ -38,7 +46,10 @@ pub struct Output { } async fn run(mut ctx: CommandContext, input: Input) -> Result { - let account = derive_ata(&input.authority.pubkey(), &input.mint); + let account_owner = input + .account_owner + .unwrap_or_else(|| input.authority.pubkey()); + let account = derive_ata(&account_owner, &input.mint); let ix = spl_token_2022_interface::instruction::burn_checked( &spl_token_2022_interface::ID, @@ -95,4 +106,28 @@ mod tests { assert_eq!(ix.program_id, spl_token_2022_interface::ID); assert!(!ix.data.is_empty()); } + + #[test] + fn test_delegate_account_override() { + // When account_owner is set, the burn target must derive from it, not from authority. + let mint = Pubkey::new_unique(); + let delegate = Pubkey::new_unique(); + let account_owner = Pubkey::new_unique(); + let account = derive_ata(&account_owner, &mint); + + assert_ne!(account, derive_ata(&delegate, &mint)); + + let ix = spl_token_2022_interface::instruction::burn_checked( + &spl_token_2022_interface::ID, + &account, + &mint, + &delegate, + &[], + 1000, + 9, + ) + .unwrap(); + + assert_eq!(ix.program_id, spl_token_2022_interface::ID); + } } diff --git a/crates/cmds-solana/src/spl_token_2022/transfer_checked.rs b/crates/cmds-solana/src/spl_token_2022/transfer_checked.rs index f655de044..ef6ddfe10 100644 --- a/crates/cmds-solana/src/spl_token_2022/transfer_checked.rs +++ b/crates/cmds-solana/src/spl_token_2022/transfer_checked.rs @@ -24,8 +24,23 @@ pub struct Input { #[serde_as(as = "AsPubkey")] pub destination_owner: Pubkey, pub authority: Wallet, + /// Optional source-account owner for delegate / clawback transfers. + /// When omitted, the source ATA is derived from `authority.pubkey()` (normal + /// owner-initiated transfer). When set, the source ATA is derived from this + /// pubkey and `authority` acts as a signing delegate (PermanentDelegate + /// clawback, or an account previously approved via spl_token::approve). + #[serde(default)] + #[serde_as(as = "Option")] + pub source_owner: Option, pub amount: u64, pub decimals: u8, + /// Resolve the mint's TransferHook extension: fetch the ExtraAccountMetaList + /// PDA and splice the hook program + extra accounts into the instruction. + /// Required when transferring on a TransferHook-enabled mint — otherwise the + /// token program will reject the transfer with missing accounts. Default + /// false keeps behavior unchanged and skips the extra RPC round-trips. + #[serde(default)] + pub resolve_transfer_hook: bool, #[serde(default = "value::default::bool_true")] pub submit: bool, } @@ -42,19 +57,35 @@ pub struct Output { } async fn run(mut ctx: CommandContext, input: Input) -> Result { - let source = derive_ata(&input.authority.pubkey(), &input.mint); + let source_owner = input + .source_owner + .unwrap_or_else(|| input.authority.pubkey()); + let source = derive_ata(&source_owner, &input.mint); let destination = derive_ata(&input.destination_owner, &input.mint); - let ix = spl_token_2022_interface::instruction::transfer_checked( - &spl_token_2022_interface::ID, - &source, - &input.mint, - &destination, - &input.authority.pubkey(), - &[], - input.amount, - input.decimals, - )?; + let ix = if input.resolve_transfer_hook { + build_transfer_with_hook( + ctx.solana_client().clone(), + &source, + &input.mint, + &destination, + &input.authority.pubkey(), + input.amount, + input.decimals, + ) + .await? + } else { + spl_token_2022_interface::instruction::transfer_checked( + &spl_token_2022_interface::ID, + &source, + &input.mint, + &destination, + &input.authority.pubkey(), + &[], + input.amount, + input.decimals, + )? + }; let ins = Instructions { lookup_tables: None, @@ -76,6 +107,69 @@ async fn run(mut ctx: CommandContext, input: Input) -> Result, + source: &Pubkey, + mint: &Pubkey, + destination: &Pubkey, + authority: &Pubkey, + amount: u64, + decimals: u8, +) -> Result { + use spl_token_2022::solana_program::pubkey::Pubkey as LegacyPubkey; + + let to_legacy = |pk: &Pubkey| LegacyPubkey::new_from_array(pk.to_bytes()); + let source_l = to_legacy(source); + let mint_l = to_legacy(mint); + let dest_l = to_legacy(destination); + let auth_l = to_legacy(authority); + let program_l = spl_token_2022::id(); + + let legacy_ix = spl_token_2022::offchain::create_transfer_checked_instruction_with_extra_metas( + &program_l, + &source_l, + &mint_l, + &dest_l, + &auth_l, + &[], + amount, + decimals, + |addr: LegacyPubkey| { + let rpc = rpc.clone(); + async move { + let v3 = Pubkey::new_from_array(addr.to_bytes()); + let resp = rpc + .get_account_with_commitment(&v3, rpc.commitment()) + .await + .map_err(|e| -> Box { Box::new(e) })?; + Ok(resp.value.map(|acc| acc.data)) + } + }, + ) + .await + .map_err(|e| anyhow::anyhow!("transfer hook resolution failed: {e}"))?; + + Ok(Instruction { + program_id: Pubkey::new_from_array(legacy_ix.program_id.to_bytes()), + accounts: legacy_ix + .accounts + .into_iter() + .map(|m| solana_program::instruction::AccountMeta { + pubkey: Pubkey::new_from_array(m.pubkey.to_bytes()), + is_signer: m.is_signer, + is_writable: m.is_writable, + }) + .collect(), + data: legacy_ix.data, + }) +} + #[cfg(test)] mod tests { use super::*; @@ -108,4 +202,32 @@ mod tests { assert_eq!(ix.program_id, spl_token_2022_interface::ID); assert!(!ix.data.is_empty()); } + + #[test] + fn test_delegate_source_override() { + // When source_owner is set, the source ATA must derive from it, not from authority. + let mint = Pubkey::new_unique(); + let delegate = Pubkey::new_unique(); + let source_owner = Pubkey::new_unique(); + let destination_owner = Pubkey::new_unique(); + + let source = derive_ata(&source_owner, &mint); + let destination = derive_ata(&destination_owner, &mint); + + assert_ne!(source, derive_ata(&delegate, &mint)); + + let ix = spl_token_2022_interface::instruction::transfer_checked( + &spl_token_2022_interface::ID, + &source, + &mint, + &destination, + &delegate, + &[], + 1000, + 9, + ) + .unwrap(); + + assert_eq!(ix.program_id, spl_token_2022_interface::ID); + } } diff --git a/crates/cmds-std/node-definitions/polars/polars_anti_join.jsonc b/crates/cmds-std/node-definitions/polars/polars_anti_join.jsonc index b7d761b4f..e4608e08b 100644 --- a/crates/cmds-std/node-definitions/polars/polars_anti_join.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_anti_join.jsonc @@ -51,7 +51,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_cast.jsonc b/crates/cmds-std/node-definitions/polars/polars_cast.jsonc index 6de0ab558..7a90c2559 100644 --- a/crates/cmds-std/node-definitions/polars/polars_cast.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_cast.jsonc @@ -51,7 +51,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_count.jsonc b/crates/cmds-std/node-definitions/polars/polars_count.jsonc index 6c57a85a0..1274d2110 100644 --- a/crates/cmds-std/node-definitions/polars/polars_count.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_count.jsonc @@ -34,7 +34,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_create_dataframe.jsonc b/crates/cmds-std/node-definitions/polars/polars_create_dataframe.jsonc index 4d2085400..a50d409e8 100644 --- a/crates/cmds-std/node-definitions/polars/polars_create_dataframe.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_create_dataframe.jsonc @@ -35,7 +35,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_create_empty.jsonc b/crates/cmds-std/node-definitions/polars/polars_create_empty.jsonc index 4d83973ee..94afc9393 100644 --- a/crates/cmds-std/node-definitions/polars/polars_create_empty.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_create_empty.jsonc @@ -35,7 +35,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_create_series.jsonc b/crates/cmds-std/node-definitions/polars/polars_create_series.jsonc index cce0699e4..b9485c8a8 100644 --- a/crates/cmds-std/node-definitions/polars/polars_create_series.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_create_series.jsonc @@ -54,7 +54,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_cross_join.jsonc b/crates/cmds-std/node-definitions/polars/polars_cross_join.jsonc index fc8ddaec4..7726d30c2 100644 --- a/crates/cmds-std/node-definitions/polars/polars_cross_join.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_cross_join.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_cummax.jsonc b/crates/cmds-std/node-definitions/polars/polars_cummax.jsonc index 8471ae4b5..366cee728 100644 --- a/crates/cmds-std/node-definitions/polars/polars_cummax.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_cummax.jsonc @@ -54,7 +54,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_cummin.jsonc b/crates/cmds-std/node-definitions/polars/polars_cummin.jsonc index f06a81974..46f82315f 100644 --- a/crates/cmds-std/node-definitions/polars/polars_cummin.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_cummin.jsonc @@ -54,7 +54,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_cumprod.jsonc b/crates/cmds-std/node-definitions/polars/polars_cumprod.jsonc index 260d69e46..bcaf58cc4 100644 --- a/crates/cmds-std/node-definitions/polars/polars_cumprod.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_cumprod.jsonc @@ -54,7 +54,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_cumsum.jsonc b/crates/cmds-std/node-definitions/polars/polars_cumsum.jsonc index e08421658..7826dc751 100644 --- a/crates/cmds-std/node-definitions/polars/polars_cumsum.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_cumsum.jsonc @@ -54,7 +54,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_describe.jsonc b/crates/cmds-std/node-definitions/polars/polars_describe.jsonc index 95064f182..86ada0463 100644 --- a/crates/cmds-std/node-definitions/polars/polars_describe.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_describe.jsonc @@ -29,7 +29,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_drop.jsonc b/crates/cmds-std/node-definitions/polars/polars_drop.jsonc index 214c19597..9f4a8c16d 100644 --- a/crates/cmds-std/node-definitions/polars/polars_drop.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_drop.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_drop_nulls.jsonc b/crates/cmds-std/node-definitions/polars/polars_drop_nulls.jsonc index 62a7d9181..128f1e5eb 100644 --- a/crates/cmds-std/node-definitions/polars/polars_drop_nulls.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_drop_nulls.jsonc @@ -42,7 +42,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_explode.jsonc b/crates/cmds-std/node-definitions/polars/polars_explode.jsonc index f686d3938..907fbfa62 100644 --- a/crates/cmds-std/node-definitions/polars/polars_explode.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_explode.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_fill_nan.jsonc b/crates/cmds-std/node-definitions/polars/polars_fill_nan.jsonc index b4bddda54..bbc67bb64 100644 --- a/crates/cmds-std/node-definitions/polars/polars_fill_nan.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_fill_nan.jsonc @@ -55,7 +55,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_fill_null.jsonc b/crates/cmds-std/node-definitions/polars/polars_fill_null.jsonc index 1bf6f70b9..98423e11c 100644 --- a/crates/cmds-std/node-definitions/polars/polars_fill_null.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_fill_null.jsonc @@ -61,7 +61,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_filter.jsonc b/crates/cmds-std/node-definitions/polars/polars_filter.jsonc index fbb23dc18..d4594b28e 100644 --- a/crates/cmds-std/node-definitions/polars/polars_filter.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_filter.jsonc @@ -62,7 +62,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_filter_expr.jsonc b/crates/cmds-std/node-definitions/polars/polars_filter_expr.jsonc index 8ef1f2f30..1f9149a55 100644 --- a/crates/cmds-std/node-definitions/polars/polars_filter_expr.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_filter_expr.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_from_rows.jsonc b/crates/cmds-std/node-definitions/polars/polars_from_rows.jsonc index efd2cacc0..bd0796e09 100644 --- a/crates/cmds-std/node-definitions/polars/polars_from_rows.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_from_rows.jsonc @@ -35,7 +35,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_full_join.jsonc b/crates/cmds-std/node-definitions/polars/polars_full_join.jsonc index 63ef1f663..884075bf6 100644 --- a/crates/cmds-std/node-definitions/polars/polars_full_join.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_full_join.jsonc @@ -64,7 +64,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_get_column.jsonc b/crates/cmds-std/node-definitions/polars/polars_get_column.jsonc index ef4fd7276..2ea69edab 100644 --- a/crates/cmds-std/node-definitions/polars/polars_get_column.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_get_column.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_group_by.jsonc b/crates/cmds-std/node-definitions/polars/polars_group_by.jsonc index 75369d17e..dca82e58c 100644 --- a/crates/cmds-std/node-definitions/polars/polars_group_by.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_group_by.jsonc @@ -51,7 +51,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_head.jsonc b/crates/cmds-std/node-definitions/polars/polars_head.jsonc index 8dff25044..1f434317b 100644 --- a/crates/cmds-std/node-definitions/polars/polars_head.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_head.jsonc @@ -46,7 +46,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_hstack.jsonc b/crates/cmds-std/node-definitions/polars/polars_hstack.jsonc index bbcbac18f..615f1bc09 100644 --- a/crates/cmds-std/node-definitions/polars/polars_hstack.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_hstack.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_inner_join.jsonc b/crates/cmds-std/node-definitions/polars/polars_inner_join.jsonc index 267baf838..21f4cdc46 100644 --- a/crates/cmds-std/node-definitions/polars/polars_inner_join.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_inner_join.jsonc @@ -64,7 +64,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_kurtosis.jsonc b/crates/cmds-std/node-definitions/polars/polars_kurtosis.jsonc index 9322b9d17..eed4211eb 100644 --- a/crates/cmds-std/node-definitions/polars/polars_kurtosis.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_kurtosis.jsonc @@ -63,7 +63,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_left_join.jsonc b/crates/cmds-std/node-definitions/polars/polars_left_join.jsonc index 2483887d2..002b5733f 100644 --- a/crates/cmds-std/node-definitions/polars/polars_left_join.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_left_join.jsonc @@ -64,7 +64,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_max.jsonc b/crates/cmds-std/node-definitions/polars/polars_max.jsonc index c8a6f8c5f..5e6b38a17 100644 --- a/crates/cmds-std/node-definitions/polars/polars_max.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_max.jsonc @@ -42,7 +42,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_mean.jsonc b/crates/cmds-std/node-definitions/polars/polars_mean.jsonc index 52b1e2284..533be909e 100644 --- a/crates/cmds-std/node-definitions/polars/polars_mean.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_mean.jsonc @@ -42,7 +42,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_median.jsonc b/crates/cmds-std/node-definitions/polars/polars_median.jsonc index 396169e3a..2b7710fb9 100644 --- a/crates/cmds-std/node-definitions/polars/polars_median.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_median.jsonc @@ -42,7 +42,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_min.jsonc b/crates/cmds-std/node-definitions/polars/polars_min.jsonc index 740ed5c3a..4df001877 100644 --- a/crates/cmds-std/node-definitions/polars/polars_min.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_min.jsonc @@ -42,7 +42,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_pivot.jsonc b/crates/cmds-std/node-definitions/polars/polars_pivot.jsonc index d0e9f4685..3dae72fdf 100644 --- a/crates/cmds-std/node-definitions/polars/polars_pivot.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_pivot.jsonc @@ -70,7 +70,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_quantile.jsonc b/crates/cmds-std/node-definitions/polars/polars_quantile.jsonc index 945dd8da9..fe3f98240 100644 --- a/crates/cmds-std/node-definitions/polars/polars_quantile.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_quantile.jsonc @@ -54,7 +54,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_rank.jsonc b/crates/cmds-std/node-definitions/polars/polars_rank.jsonc index 4057b8475..ee252e583 100644 --- a/crates/cmds-std/node-definitions/polars/polars_rank.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_rank.jsonc @@ -64,7 +64,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_read_csv.jsonc b/crates/cmds-std/node-definitions/polars/polars_read_csv.jsonc index 1215e98e3..7555d64f6 100644 --- a/crates/cmds-std/node-definitions/polars/polars_read_csv.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_read_csv.jsonc @@ -66,7 +66,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_read_json.jsonc b/crates/cmds-std/node-definitions/polars/polars_read_json.jsonc index 0daf9410e..916b46fc0 100644 --- a/crates/cmds-std/node-definitions/polars/polars_read_json.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_read_json.jsonc @@ -35,7 +35,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_read_parquet.jsonc b/crates/cmds-std/node-definitions/polars/polars_read_parquet.jsonc index 06200bfc8..4965118f9 100644 --- a/crates/cmds-std/node-definitions/polars/polars_read_parquet.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_read_parquet.jsonc @@ -35,7 +35,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_rename.jsonc b/crates/cmds-std/node-definitions/polars/polars_rename.jsonc index 3afca5ee1..2c3346a43 100644 --- a/crates/cmds-std/node-definitions/polars/polars_rename.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_rename.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_replace.jsonc b/crates/cmds-std/node-definitions/polars/polars_replace.jsonc index e45126851..ff02c4141 100644 --- a/crates/cmds-std/node-definitions/polars/polars_replace.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_replace.jsonc @@ -59,7 +59,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_reverse.jsonc b/crates/cmds-std/node-definitions/polars/polars_reverse.jsonc index ca6206ec8..b78bd19e2 100644 --- a/crates/cmds-std/node-definitions/polars/polars_reverse.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_reverse.jsonc @@ -35,7 +35,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_rolling_mean.jsonc b/crates/cmds-std/node-definitions/polars/polars_rolling_mean.jsonc index 1b88a0a4d..eecbb46bc 100644 --- a/crates/cmds-std/node-definitions/polars/polars_rolling_mean.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_rolling_mean.jsonc @@ -65,7 +65,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_rolling_sum.jsonc b/crates/cmds-std/node-definitions/polars/polars_rolling_sum.jsonc index 007b7e422..5f7453724 100644 --- a/crates/cmds-std/node-definitions/polars/polars_rolling_sum.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_rolling_sum.jsonc @@ -65,7 +65,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_sample.jsonc b/crates/cmds-std/node-definitions/polars/polars_sample.jsonc index 6460e545f..b176a7f09 100644 --- a/crates/cmds-std/node-definitions/polars/polars_sample.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_sample.jsonc @@ -67,7 +67,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_schema.jsonc b/crates/cmds-std/node-definitions/polars/polars_schema.jsonc index 0ea5b7677..073cea790 100644 --- a/crates/cmds-std/node-definitions/polars/polars_schema.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_schema.jsonc @@ -39,7 +39,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_select.jsonc b/crates/cmds-std/node-definitions/polars/polars_select.jsonc index e2a198cdf..eae986a54 100644 --- a/crates/cmds-std/node-definitions/polars/polars_select.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_select.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_semi_join.jsonc b/crates/cmds-std/node-definitions/polars/polars_semi_join.jsonc index 641ab6df1..a89c26705 100644 --- a/crates/cmds-std/node-definitions/polars/polars_semi_join.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_semi_join.jsonc @@ -51,7 +51,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_add.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_add.jsonc index 026a18c2b..3f0196ba7 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_add.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_add.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_cast.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_cast.jsonc index ee27b3e34..8a97e6388 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_cast.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_cast.jsonc @@ -47,7 +47,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_compare.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_compare.jsonc index fe571061e..985376e4e 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_compare.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_compare.jsonc @@ -55,7 +55,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_div.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_div.jsonc index 216cffa1b..8145e26c1 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_div.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_div.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_len.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_len.jsonc index e90edba90..2b7260c0c 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_len.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_len.jsonc @@ -34,7 +34,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_mean.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_mean.jsonc index 277056900..0b05399a0 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_mean.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_mean.jsonc @@ -29,7 +29,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_min_max.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_min_max.jsonc index 296963220..c326b1746 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_min_max.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_min_max.jsonc @@ -34,7 +34,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_mul.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_mul.jsonc index 9c0144689..449a9034c 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_mul.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_mul.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_sort.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_sort.jsonc index af6c18b5a..20419a49a 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_sort.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_sort.jsonc @@ -46,7 +46,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_sub.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_sub.jsonc index 62035ef4d..a8e3cd1f7 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_sub.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_sub.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_sum.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_sum.jsonc index ed0c841b4..6d0b06271 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_sum.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_sum.jsonc @@ -29,7 +29,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_series_unique.jsonc b/crates/cmds-std/node-definitions/polars/polars_series_unique.jsonc index 897821ae1..011d2a5de 100644 --- a/crates/cmds-std/node-definitions/polars/polars_series_unique.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_series_unique.jsonc @@ -40,7 +40,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_shape.jsonc b/crates/cmds-std/node-definitions/polars/polars_shape.jsonc index 2531dfa77..7c71a49af 100644 --- a/crates/cmds-std/node-definitions/polars/polars_shape.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_shape.jsonc @@ -34,7 +34,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_shift.jsonc b/crates/cmds-std/node-definitions/polars/polars_shift.jsonc index 3bce4a237..cb4f3831a 100644 --- a/crates/cmds-std/node-definitions/polars/polars_shift.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_shift.jsonc @@ -62,7 +62,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_skew.jsonc b/crates/cmds-std/node-definitions/polars/polars_skew.jsonc index 541925a6a..33b735516 100644 --- a/crates/cmds-std/node-definitions/polars/polars_skew.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_skew.jsonc @@ -53,7 +53,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_slice.jsonc b/crates/cmds-std/node-definitions/polars/polars_slice.jsonc index 8efed1b77..308fa53aa 100644 --- a/crates/cmds-std/node-definitions/polars/polars_slice.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_slice.jsonc @@ -54,7 +54,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_sort.jsonc b/crates/cmds-std/node-definitions/polars/polars_sort.jsonc index 438c9c10c..1be25fba7 100644 --- a/crates/cmds-std/node-definitions/polars/polars_sort.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_sort.jsonc @@ -64,7 +64,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_std.jsonc b/crates/cmds-std/node-definitions/polars/polars_std.jsonc index e941e05ad..87426b28c 100644 --- a/crates/cmds-std/node-definitions/polars/polars_std.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_std.jsonc @@ -53,7 +53,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_str_operations.jsonc b/crates/cmds-std/node-definitions/polars/polars_str_operations.jsonc index 2ac2a0207..1cc270402 100644 --- a/crates/cmds-std/node-definitions/polars/polars_str_operations.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_str_operations.jsonc @@ -69,7 +69,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_sum.jsonc b/crates/cmds-std/node-definitions/polars/polars_sum.jsonc index 1540c0a27..bc2cd8eaf 100644 --- a/crates/cmds-std/node-definitions/polars/polars_sum.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_sum.jsonc @@ -42,7 +42,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_transpose.jsonc b/crates/cmds-std/node-definitions/polars/polars_transpose.jsonc index 282075e87..9de2f9f0c 100644 --- a/crates/cmds-std/node-definitions/polars/polars_transpose.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_transpose.jsonc @@ -56,7 +56,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_unique.jsonc b/crates/cmds-std/node-definitions/polars/polars_unique.jsonc index 94dd3bd07..bcc63c14f 100644 --- a/crates/cmds-std/node-definitions/polars/polars_unique.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_unique.jsonc @@ -53,7 +53,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_unpivot.jsonc b/crates/cmds-std/node-definitions/polars/polars_unpivot.jsonc index 34286a195..326ea21c1 100644 --- a/crates/cmds-std/node-definitions/polars/polars_unpivot.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_unpivot.jsonc @@ -72,7 +72,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_var.jsonc b/crates/cmds-std/node-definitions/polars/polars_var.jsonc index 16b0cf2a8..588f24773 100644 --- a/crates/cmds-std/node-definitions/polars/polars_var.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_var.jsonc @@ -53,7 +53,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_vstack.jsonc b/crates/cmds-std/node-definitions/polars/polars_vstack.jsonc index 804e8b2ee..63a5a9279 100644 --- a/crates/cmds-std/node-definitions/polars/polars_vstack.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_vstack.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_with_column.jsonc b/crates/cmds-std/node-definitions/polars/polars_with_column.jsonc index 63e88c508..f054861ff 100644 --- a/crates/cmds-std/node-definitions/polars/polars_with_column.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_with_column.jsonc @@ -43,7 +43,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_with_row_index.jsonc b/crates/cmds-std/node-definitions/polars/polars_with_row_index.jsonc index 520a6743f..996ded5c2 100644 --- a/crates/cmds-std/node-definitions/polars/polars_with_row_index.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_with_row_index.jsonc @@ -56,7 +56,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_write_csv.jsonc b/crates/cmds-std/node-definitions/polars/polars_write_csv.jsonc index 1055e30ac..fb5696399 100644 --- a/crates/cmds-std/node-definitions/polars/polars_write_csv.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_write_csv.jsonc @@ -50,7 +50,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_write_json.jsonc b/crates/cmds-std/node-definitions/polars/polars_write_json.jsonc index 3a3dda9b3..2e0a64e6d 100644 --- a/crates/cmds-std/node-definitions/polars/polars_write_json.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_write_json.jsonc @@ -40,7 +40,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/polars/polars_write_parquet.jsonc b/crates/cmds-std/node-definitions/polars/polars_write_parquet.jsonc index 2256ff1a9..a33447ec8 100644 --- a/crates/cmds-std/node-definitions/polars/polars_write_parquet.jsonc +++ b/crates/cmds-std/node-definitions/polars/polars_write_parquet.jsonc @@ -37,7 +37,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "Polars", "program": "polars", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_eq.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_eq.jsonc index c9f2a72d1..62c6f7dee 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_eq.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_eq.jsonc @@ -48,7 +48,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_insert.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_insert.jsonc index 36c0e9864..0c3c7a23d 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_insert.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_insert.jsonc @@ -40,7 +40,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_is.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_is.jsonc index bbc24f515..e3eb76a7c 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_is.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_is.jsonc @@ -48,7 +48,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_limit.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_limit.jsonc index 8d0d443f3..44d2b48fd 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_limit.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_limit.jsonc @@ -39,7 +39,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_match.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_match.jsonc index 0b38f713e..8d672f45c 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_match.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_match.jsonc @@ -39,7 +39,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_neq.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_neq.jsonc index 755b85719..fa0108fae 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_neq.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_neq.jsonc @@ -48,7 +48,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_not.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_not.jsonc index a61c35e81..1726a1880 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_not.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_not.jsonc @@ -57,7 +57,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_order.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_order.jsonc index 5305f9a62..112c91c34 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_order.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_order.jsonc @@ -39,7 +39,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_select.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_select.jsonc index dff6466af..0c2f3cf4e 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_select.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_select.jsonc @@ -39,7 +39,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_update.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_update.jsonc index a27d32259..f5705a14d 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_update.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_update.jsonc @@ -39,7 +39,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/builder_upsert.jsonc b/crates/cmds-std/node-definitions/postgrest/builder_upsert.jsonc index d5e2c4d3e..d78474c63 100644 --- a/crates/cmds-std/node-definitions/postgrest/builder_upsert.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/builder_upsert.jsonc @@ -40,7 +40,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/execute_query.jsonc b/crates/cmds-std/node-definitions/postgrest/execute_query.jsonc index 7ddd20f80..febcbb0cf 100644 --- a/crates/cmds-std/node-definitions/postgrest/execute_query.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/execute_query.jsonc @@ -44,7 +44,7 @@ "config_schema": {}, "config": {}, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/new_query.jsonc b/crates/cmds-std/node-definitions/postgrest/new_query.jsonc index e75e7e4b1..cc2701bbf 100644 --- a/crates/cmds-std/node-definitions/postgrest/new_query.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/new_query.jsonc @@ -55,7 +55,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/cmds-std/node-definitions/postgrest/new_rpc.jsonc b/crates/cmds-std/node-definitions/postgrest/new_rpc.jsonc index aec873d61..98781e383 100644 --- a/crates/cmds-std/node-definitions/postgrest/new_rpc.jsonc +++ b/crates/cmds-std/node-definitions/postgrest/new_rpc.jsonc @@ -64,7 +64,7 @@ } }, "classification": { - "vendor": "Native", + "vendor": "PostgREST", "program": "postgrest", "category": "data", "icon_url": null, diff --git a/crates/flow-server/Cargo.toml b/crates/flow-server/Cargo.toml index e860dc67f..ec62b3744 100644 --- a/crates/flow-server/Cargo.toml +++ b/crates/flow-server/Cargo.toml @@ -9,7 +9,7 @@ default = [ "commands", ] import = [] -commands = ["dep:cmds-pdg", "dep:cmds-std", "dep:cmds-solana", "dep:cmds-deno", "dep:cmds-bun"] +commands = ["dep:cmds-pdg", "dep:cmds-std", "dep:cmds-solana", "dep:cmds-deno", "dep:cmds-bun", "dep:cmds-image"] [dependencies] db = { workspace = true } @@ -22,6 +22,7 @@ cmds-std = { workspace = true, optional = true } cmds-solana = { workspace = true, optional = true } cmds-deno = { workspace = true, optional = true } cmds-bun = { workspace = true, optional = true } +cmds-image = { workspace = true, optional = true } rhai-script = { workspace = true } flow-rpc = { workspace = true } tower-rpc = { workspace = true } diff --git a/crates/flow-server/src/main.rs b/crates/flow-server/src/main.rs index dd65c26bb..9e2f0135d 100644 --- a/crates/flow-server/src/main.rs +++ b/crates/flow-server/src/main.rs @@ -34,6 +34,8 @@ use cmds_bun as _; #[cfg(feature = "commands")] use cmds_deno as _; #[cfg(feature = "commands")] +use cmds_image as _; +#[cfg(feature = "commands")] use cmds_pdg as _; #[cfg(feature = "commands")] use cmds_solana as _;