diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml deleted file mode 100644 index 9bf1f16..0000000 --- a/.github/workflows/e2e.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: End-to-end Tests -on: - pull_request: - workflow_dispatch: - push: - branches: - - main -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true -jobs: - # Run e2e test against localnet built on the testnet branch - localnet: - name: Localnet - runs-on: ubuntu-ghcloud - defaults: - run: - working-directory: sdk - steps: - - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # Pin v6.0.2 - - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # Pin 4.0.2 - name: Install pnpm - with: - version: 10.18.2 - run_install: false - - - name: Install Node.js - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # Pin v6.2.0 - with: - node-version: 20 - cache: 'pnpm' - cache-dependency-path: 'sdk/pnpm-lock.yaml' - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Run PAS SDK tests - run: pnpm --filter @mysten/pas test diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md new file mode 100644 index 0000000..d120d1e --- /dev/null +++ b/ARCHITECTURE.md @@ -0,0 +1,50 @@ +# Permissioned Assets Standard — Architecture + +The Permissioned Assets Standard is a framework for issuing and managing permissioned balances on Sui. It enables tokenization of real-world fungible assets with built-in compliance mechanisms, transfer restrictions, and regulatory controls. + +## TLDR + +1. Each address has a single account (derived address, with easy discoverability). Objects can own accounts as well. This enables with account abstractions / defi protocols implementations +2. Account uses address (object) balances, so RPCs work out of the box (wallet just treats the account address like a normal one). Wallets/explorers needs to query for the derived account address to get balances. +3. Balances can only move from account to account (either by safe account-to-account deposits, or deriving the recipient with `unsafe_` calls) +4. When a transfer is initiated, a `SendFunds` is issued, which can be resolved, on the PTB layer, calling the `Command` that is specified by the issuer. The issuer can "approve" it in their own package by presenting a witness. Any custom logic (KYC, checks) can be implemented there. +5. Clawback is available (accounts are shared and a clawback can be initiated using the issuer's witness). + +(To be added: Issuers can attach "metadata" to user's Accounts (such as `KYC` stamps or AML stamps they issue), which they can then check on their transfer functions to restrict movement. Since accounts are shared, issuers can revoke these stamps at any moment). + +## Key Features + +- **Permissioned Transfers**: All transfers must go through accounts and be approved by custom transfer rules +- **Account-Based Architecture**: Tokens can only be held in accounts, with automatic balance tracking +- **Flexible Policies System**: Each token type has associated rules that govern transfers with jurisdiction-specific compliance +- **Optional Clawback**: Regulatory compliance feature that allows token recovery when legally required + +## How It Works + +1. **Setup**: Registry is created as a shared object, token issuers register their tokens with rules +2. **Account Creation**: Accounts are derived for each address that needs to hold tokens +3. **Transfers**: Initiated from source account, creating a transfer request that must be resolved by the policy +4. **Resolution**: Token-specific smart contracts validate and approve transfers based on compliance rules + +## Wallet & SDK Integration + +### Simple Discovery +The standard uses derived objects for predictable addresses: +- **Single account per user** which holds the balances of the user +- **No indexing required** - account and policy addresses are deterministically computable +- **One query** to see all user balances via dynamic fields on their account + +### Easy Resolution + +Each policy contains `Command` instructions that tell SDKs exactly how to resolve transfers - no need to understand complex on-chain logic. SDKs simply read the command and construct the appropriate transaction. + +## Security Features + +- **Ownership Proofs**: Ensure only legitimate owners can initiate transfers +- **Transfer Restrictions**: All transfers generate hot potato requests that must be resolved by the issuer +- **Immutable Clawback**: Optional feature that can only be set at registration + +## Benefits + +- **Regulatory Compliance**: Built-in KYC/AML (or any arbitrary logic) support for issuers +- **Flexibility**: Custom rules per token type with extensible off-chain resolution mechanisms diff --git a/README.md b/README.md index 9a3979d..b69f600 100644 --- a/README.md +++ b/README.md @@ -2,53 +2,50 @@ # Permissioned Assets Standard -## Overview +## Repository Structure -The P-Assets Standard is a framework for issuing and managing permissioned balances on Sui. It enables tokenization of real-world fungible assets with built-in compliance mechanisms, transfer restrictions, and regulatory controls. +``` +packages/ + pas/ # Core PAS Move package (accounts, policies, requests) + ptb/ # PTB helper Move package + examples/ # Example Move packages (e.g. KYC-gated coin) +scripts/ + example-app/ # TypeScript example app using @mysten/pas +``` -## TLDR +## Contents -1. Each address has a single account (derived address, with easy discoverability). Objects can own accounts as well. This enables with account abstractions / defi protocols implementations -2. Account uses address (object) balances, so RPCs work out of the box (wallet just treats the account address like a normal one). Wallets/explorers needs to query for the derived account address to get balances. -3. Balances can only move from account to account (either by safe account-to-account deposits, or deriving the recipient with `unsafe_` calls) -4. When a transfer is initiated, a `SendFunds` is issued, which can be resolved, on the PTB layer, calling the `Command` that is specified by the issuer. The issuer can "approve" it in their own package by presenting a witness. Any custom logic (KYC, checks) can be implemented there. -5. Clawback is available (accounts are shared and a clawback can be initiated using the issuer's witness). +- **SDK**: [`@mysten/pas`](https://www.npmjs.com/package/@mysten/pas) on npm ([source](https://github.com/MystenLabs/ts-sdks)) +- **Move Packages**: Smart contracts live in [`packages/`](./packages/) +- **Example App**: SDK usage examples in [`scripts/example-app/`](./scripts/example-app/) -(To be added: Issuers can attach "metadata" to user's Accounts (such as `KYC` stamps or AML stamps they issue), which they can then check on their transfer functions to restrict movement. Since accounts are shared, issuers can revoke these stamps at any moment). +For a detailed design overview, see [`ARCHITECTURE.md`](./ARCHITECTURE.md). -## Key Features +## SDK -- **Permissioned Transfers**: All transfers must go through accounts and be approved by custom transfer rules -- **Account-Based Architecture**: Tokens can only be held in accounts, with automatic balance tracking -- **Flexible Policies System**: Each token type has associated rules that govern transfers with jurisdiction-specific compliance -- **Optional Clawback**: Regulatory compliance feature that allows token recovery when legally required +The TypeScript SDK is published as [`@mysten/pas`](https://www.npmjs.com/package/@mysten/pas) and lives in the [ts-sdks](https://github.com/MystenLabs/ts-sdks) repository. -## How It Works +```bash +npm install @mysten/pas +``` -1. **Setup**: Registry is created as a shared object, token issuers register their tokens with rules -2. **Account Creation**: Accounts are derived for each address that needs to hold tokens -3. **Transfers**: Initiated from source account, creating a transfer request that must be resolved by the policy -4. **Resolution**: Token-specific smart contracts validate and approve transfers based on compliance rules +It plugs into the Sui client via the `$extend` pattern: -## Wallet & SDK Integration +```typescript +import { SuiGrpcClient } from '@mysten/sui/grpc'; +import { Transaction } from '@mysten/sui/transactions'; +import { pas } from '@mysten/pas'; -### Simple Discovery -The standard uses derived objects for predictable addresses: -- **Single account per user** which holds the balances of the user -- **No indexing required** - account and policy addresses are deterministically computable -- **One query** to see all user balances via dynamic fields on their account +const client = new SuiGrpcClient({ network: 'testnet' }).$extend(pas()); -### Easy Resolution +// Send a permissioned balance +const tx = new Transaction(); +tx.add(client.pas.call.sendBalance({ + from: sender, // the sender's address + to: "0x2", // the recipient's address (NOT the account) + amount: 1_000_000, + assetType: "0xa::permissioned::ASSET", +})); +``` -Each policy contains `Command` instructions that tell SDKs exactly how to resolve transfers - no need to understand complex on-chain logic. SDKs simply read the command and construct the appropriate transaction. - -## Security Features - -- **Ownership Proofs**: Ensure only legitimate owners can initiate transfers -- **Transfer Restrictions**: All transfers generate hot potato requests that must be resolved by the issuer -- **Immutable Clawback**: Optional feature that can only be set at registration - -## Benefits - -- **Regulatory Compliance**: Built-in KYC/AML (or any arbitrary logic) support for issuers -- **Flexibility**: Custom rules per token type with extensible off-chain resolution mechanisms +See [`scripts/example-app/`](./scripts/example-app/) for a full working example. diff --git a/sdk/example-app/package.json b/scripts/example-app/package.json similarity index 80% rename from sdk/example-app/package.json rename to scripts/example-app/package.json index 3fcdbde..87816b6 100644 --- a/sdk/example-app/package.json +++ b/scripts/example-app/package.json @@ -7,13 +7,13 @@ "scripts": { "extension": "tsx src/extension-example.ts" }, - "peerDependencies": { - "@mysten/sui": "workspace:^" - }, "devDependencies": { - "@mysten/sui": "^2.4.0", "@types/node": "^25.0.8", "tsx": "^4.19.2", "typescript": "^5.9.3" + }, + "dependencies": { + "@mysten/pas": "^0.0.1", + "@mysten/sui": "^2.6.0" } } diff --git a/sdk/example-app/src/extension-example.ts b/scripts/example-app/src/extension-example.ts similarity index 98% rename from sdk/example-app/src/extension-example.ts rename to scripts/example-app/src/extension-example.ts index d9de91b..94eeab9 100644 --- a/sdk/example-app/src/extension-example.ts +++ b/scripts/example-app/src/extension-example.ts @@ -11,10 +11,10 @@ const demoAssetFaucet = '0x4c0fc221f8203f7887389e131b6ea3f77fdc7f54fafe31b1a3691 import { SuiGrpcClient } from '@mysten/sui/grpc'; import { decodeSuiPrivateKey, Signer } from '@mysten/sui/cryptography'; import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'; -import { pas, PASClient } from '../../pas/dist/index.mjs'; import { Transaction } from '@mysten/sui/transactions'; import { ClientWithExtensions } from '@mysten/sui/client'; import { normalizeSuiAddress } from '@mysten/sui/utils'; +import { pas, PASClient } from '@mysten/pas'; type PasClientType = ClientWithExtensions<{ pas: PASClient }, SuiGrpcClient>; diff --git a/sdk/package.json b/scripts/package.json similarity index 100% rename from sdk/package.json rename to scripts/package.json diff --git a/scripts/pnpm-lock.yaml b/scripts/pnpm-lock.yaml new file mode 100644 index 0000000..281aeeb --- /dev/null +++ b/scripts/pnpm-lock.yaml @@ -0,0 +1,750 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@mysten/bcs': + specifier: ^2.0.2 + version: 2.0.2 + '@mysten/codegen': + specifier: ^0.6.0 + version: 0.6.0 + '@mysten/sui': + specifier: ^2.6.0 + version: 2.6.0(typescript@5.9.3) + + example-app: + dependencies: + '@mysten/pas': + specifier: ^0.0.1 + version: 0.0.1(@mysten/sui@2.6.0(typescript@5.9.3)) + '@mysten/sui': + specifier: ^2.6.0 + version: 2.6.0(typescript@5.9.3) + devDependencies: + '@types/node': + specifier: ^25.0.8 + version: 25.0.9 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + +packages: + + '@0no-co/graphql.web@1.2.0': + resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + + '@0no-co/graphqlsp@1.15.2': + resolution: {integrity: sha512-Ys031WnS3sTQQBtRTkQsYnw372OlW72ais4sp0oh2UMPRNyxxnq85zRfU4PIdoy9kWriysPT5BYAkgIxhbonFA==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + + '@babel/code-frame@7.28.6': + resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@gql.tada/cli-utils@1.7.2': + resolution: {integrity: sha512-Qbc7hbLvCz6IliIJpJuKJa9p05b2Jona7ov7+qofCsMRxHRZE1kpAmZMvL8JCI4c0IagpIlWNaMizXEQUe8XjQ==} + peerDependencies: + '@0no-co/graphqlsp': ^1.12.13 + '@gql.tada/svelte-support': 1.0.1 + '@gql.tada/vue-support': 1.0.1 + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + peerDependenciesMeta: + '@gql.tada/svelte-support': + optional: true + '@gql.tada/vue-support': + optional: true + + '@gql.tada/internal@1.0.8': + resolution: {integrity: sha512-XYdxJhtHC5WtZfdDqtKjcQ4d7R1s0d1rnlSs3OcBEUbYiPoJJfZU7tWsVXuv047Z6msvmr4ompJ7eLSK5Km57g==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@mysten/bcs@2.0.2': + resolution: {integrity: sha512-c/nVRPJEV1fRZdKXhysVsy/yCPdiFt7jn6A4/7W2LH1ZPSVPzRkxtLY362D0zaLuBnyT5Y9d9nFLm3ixI8Goug==} + + '@mysten/codegen@0.6.0': + resolution: {integrity: sha512-35QCW9E6JRx17XHhh3GjQbPyVzvr7UsGPmnQxc9QDXZmgY4+P6AaksDke+pTi/hBi/L2nH6M09umJBBv3Q6XIw==} + hasBin: true + + '@mysten/pas@0.0.1': + resolution: {integrity: sha512-c76SgOZL99s7P5ZADbUqEsEYemE1f+mWRo9OVw+YIjLhIKr2uqsRqGo2QiYb0uvKix3vO714uOV5VK0nhwQyTg==} + engines: {node: '>=18'} + peerDependencies: + '@mysten/sui': workspace:^ + + '@mysten/sui@2.6.0': + resolution: {integrity: sha512-Dp3z7mDuUCXGgldQ3/AtC1iDiK48XTuAi//fPrHdxEaMl+f5VLjbYtB+mlKNC1SVYLKOUjTeF/RA9qfEBY++pA==} + engines: {node: '>=22'} + + '@mysten/utils@0.3.1': + resolution: {integrity: sha512-36KhxG284uhDdSnlkyNaS6fzKTX9FpP2WQWOwUKIRsqQFFIm2ooCf2TP1IuqrtMpkairwpiWkAS0eg7cpemVzg==} + + '@noble/curves@2.0.1': + resolution: {integrity: sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==} + engines: {node: '>= 20.19.0'} + + '@noble/hashes@2.0.1': + resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} + engines: {node: '>= 20.19.0'} + + '@protobuf-ts/grpcweb-transport@2.11.1': + resolution: {integrity: sha512-1W4utDdvOB+RHMFQ0soL4JdnxjXV+ddeGIUg08DvZrA8Ms6k5NN6GBFU2oHZdTOcJVpPrDJ02RJlqtaoCMNBtw==} + + '@protobuf-ts/runtime-rpc@2.11.1': + resolution: {integrity: sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==} + + '@protobuf-ts/runtime@2.11.1': + resolution: {integrity: sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==} + + '@scure/base@2.0.0': + resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==} + + '@scure/bip32@2.0.1': + resolution: {integrity: sha512-4Md1NI5BzoVP+bhyJaY3K6yMesEFzNS1sE/cP+9nuvE7p/b0kx9XbpDHHFl8dHtufcbdHRUUQdRqLIPHN/s7yA==} + + '@scure/bip39@2.0.1': + resolution: {integrity: sha512-PsxdFj/d2AcJcZDX1FXN3dDgitDDTmwf78rKZq1a6c1P1Nan1X/Sxc7667zU3U+AN60g7SxxP0YCVw2H/hBycg==} + + '@stricli/auto-complete@1.2.5': + resolution: {integrity: sha512-C6G88Hh4lUWBwiqsxbcA4I1ricSQwiLaOziTWW3NmBoX7WGTW7i7RvyooXMpZk1YMLf2olv5Odxmg127ik1DKQ==} + hasBin: true + + '@stricli/core@1.2.5': + resolution: {integrity: sha512-+afyztQW7fwWkqmU2WQZbdc3LjnZThWYdtE0l+hykZ1Rvy7YGxZSvsVCS/wZ/2BNv117pQ9TU1GZZRIcPnB4tw==} + + '@types/node@25.0.9': + resolution: {integrity: sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + + gql.tada@1.9.0: + resolution: {integrity: sha512-1LMiA46dRs5oF7Qev6vMU32gmiNvM3+3nHoQZA9K9j2xQzH8xOAWnnJrLSbZOFHTSdFxqn86TL6beo1/7ja/aA==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + + graphql@16.12.0: + resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + poseidon-lite@0.2.1: + resolution: {integrity: sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog==} + + prettier@3.8.0: + resolution: {integrity: sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==} + engines: {node: '>=14'} + hasBin: true + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + valibot@1.2.0: + resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + zod@4.3.5: + resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} + +snapshots: + + '@0no-co/graphql.web@1.2.0(graphql@16.12.0)': + optionalDependencies: + graphql: 16.12.0 + + '@0no-co/graphqlsp@1.15.2(graphql@16.12.0)(typescript@5.9.3)': + dependencies: + '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 + typescript: 5.9.3 + + '@babel/code-frame@7.28.6': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.28.5': {} + + '@esbuild/aix-ppc64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.27.2': + optional: true + + '@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.12.0)(typescript@5.9.3))(graphql@16.12.0)(typescript@5.9.3)': + dependencies: + '@0no-co/graphqlsp': 1.15.2(graphql@16.12.0)(typescript@5.9.3) + '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 + typescript: 5.9.3 + + '@gql.tada/internal@1.0.8(graphql@16.12.0)(typescript@5.9.3)': + dependencies: + '@0no-co/graphql.web': 1.2.0(graphql@16.12.0) + graphql: 16.12.0 + typescript: 5.9.3 + + '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': + dependencies: + graphql: 16.12.0 + + '@mysten/bcs@2.0.2': + dependencies: + '@mysten/utils': 0.3.1 + '@scure/base': 2.0.0 + + '@mysten/codegen@0.6.0': + dependencies: + '@mysten/bcs': 2.0.2 + '@mysten/sui': 2.6.0(typescript@5.9.3) + '@stricli/auto-complete': 1.2.5 + '@stricli/core': 1.2.5 + '@types/node': 25.0.9 + cosmiconfig: 9.0.0(typescript@5.9.3) + prettier: 3.8.0 + toml: 3.0.0 + typescript: 5.9.3 + zod: 4.3.5 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + + '@mysten/pas@0.0.1(@mysten/sui@2.6.0(typescript@5.9.3))': + dependencies: + '@mysten/sui': 2.6.0(typescript@5.9.3) + + '@mysten/sui@2.6.0(typescript@5.9.3)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@mysten/bcs': 2.0.2 + '@mysten/utils': 0.3.1 + '@noble/curves': 2.0.1 + '@noble/hashes': 2.0.1 + '@protobuf-ts/grpcweb-transport': 2.11.1 + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + '@scure/base': 2.0.0 + '@scure/bip32': 2.0.1 + '@scure/bip39': 2.0.1 + gql.tada: 1.9.0(graphql@16.12.0)(typescript@5.9.3) + graphql: 16.12.0 + poseidon-lite: 0.2.1 + valibot: 1.2.0(typescript@5.9.3) + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - typescript + + '@mysten/utils@0.3.1': + dependencies: + '@scure/base': 2.0.0 + + '@noble/curves@2.0.1': + dependencies: + '@noble/hashes': 2.0.1 + + '@noble/hashes@2.0.1': {} + + '@protobuf-ts/grpcweb-transport@2.11.1': + dependencies: + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + + '@protobuf-ts/runtime-rpc@2.11.1': + dependencies: + '@protobuf-ts/runtime': 2.11.1 + + '@protobuf-ts/runtime@2.11.1': {} + + '@scure/base@2.0.0': {} + + '@scure/bip32@2.0.1': + dependencies: + '@noble/curves': 2.0.1 + '@noble/hashes': 2.0.1 + '@scure/base': 2.0.0 + + '@scure/bip39@2.0.1': + dependencies: + '@noble/hashes': 2.0.1 + '@scure/base': 2.0.0 + + '@stricli/auto-complete@1.2.5': + dependencies: + '@stricli/core': 1.2.5 + + '@stricli/core@1.2.5': {} + + '@types/node@25.0.9': + dependencies: + undici-types: 7.16.0 + + argparse@2.0.1: {} + + callsites@3.1.0: {} + + cosmiconfig@9.0.0(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + + env-paths@2.2.1: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + esbuild@0.27.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + + fsevents@2.3.3: + optional: true + + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + gql.tada@1.9.0(graphql@16.12.0)(typescript@5.9.3): + dependencies: + '@0no-co/graphql.web': 1.2.0(graphql@16.12.0) + '@0no-co/graphqlsp': 1.15.2(graphql@16.12.0)(typescript@5.9.3) + '@gql.tada/cli-utils': 1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.12.0)(typescript@5.9.3))(graphql@16.12.0)(typescript@5.9.3) + '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - graphql + + graphql@16.12.0: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + is-arrayish@0.2.1: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + json-parse-even-better-errors@2.3.1: {} + + lines-and-columns@1.2.4: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.28.6 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + picocolors@1.1.1: {} + + poseidon-lite@0.2.1: {} + + prettier@3.8.0: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + toml@3.0.0: {} + + tsx@4.21.0: + dependencies: + esbuild: 0.27.2 + get-tsconfig: 4.13.0 + optionalDependencies: + fsevents: 2.3.3 + + typescript@5.9.3: {} + + undici-types@7.16.0: {} + + valibot@1.2.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + zod@4.3.5: {} diff --git a/sdk/pnpm-workspace.yaml b/scripts/pnpm-workspace.yaml similarity index 73% rename from sdk/pnpm-workspace.yaml rename to scripts/pnpm-workspace.yaml index 411aeeb..88d68cf 100644 --- a/sdk/pnpm-workspace.yaml +++ b/scripts/pnpm-workspace.yaml @@ -1,3 +1,2 @@ packages: - - 'pas' - 'example-app' diff --git a/sdk/.oxlintrc.json b/sdk/.oxlintrc.json deleted file mode 100644 index f1a92c0..0000000 --- a/sdk/.oxlintrc.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "plugins": [ - "eslint", - "typescript", - "unicorn", - "react", - "react-perf", - "oxc", - "import", - "jsdoc", - "node", - "promise" - ], - "ignorePatterns": [ - "node_modules", - "build", - "dist", - "coverage", - "generated", - "vite-env.d.ts", - "vitest.config.*", - ".git" - ], - "settings": { - "jsdoc": { - "tagNamePreference": { - "prop": "prop", - "cssprop": "cssprop", - "element": "element", - "slot": "slot", - "experimental": "experimental" - } - } - }, - "rules": { - "no-new-array": "off", - "typescript/no-non-null-asserted-optional-chain": "off", - "@typescript-eslint/no-redundant-type-constituents": "off", - "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/unbound-method": "off", - "import/extensions": [ - "error", - "always", - { - "ignorePackages": true, - "js": "always", - "ts": "always", - "jsx": "always", - "tsx": "always" - } - ] - } -} diff --git a/sdk/pas/.gitignore b/sdk/pas/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/sdk/pas/.prettierignore b/sdk/pas/.prettierignore deleted file mode 100644 index 4a3799a..0000000 --- a/sdk/pas/.prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -CHANGELOG.md -dist/ -src/node-api -build/ diff --git a/sdk/pas/README.md b/sdk/pas/README.md deleted file mode 100644 index 0944bfb..0000000 --- a/sdk/pas/README.md +++ /dev/null @@ -1 +0,0 @@ -# Permissioned Assets Standard SDK diff --git a/sdk/pas/package.json b/sdk/pas/package.json deleted file mode 100644 index 71ff774..0000000 --- a/sdk/pas/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "name": "@mysten/pas", - "version": "0.0.1", - "private": false, - "description": "Permissioned Assets Standard SDK", - "license": "Apache-2.0", - "author": "Mysten Labs ", - "type": "module", - "main": "./dist/index.mjs", - "types": "./dist/index.d.mts", - "exports": { - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "sideEffects": false, - "files": [ - "CHANGELOG.md", - "dist" - ], - "scripts": { - "clean": "rm -rf tsconfig.tsbuildinfo ./dist", - "build": "rm -rf dist && tsc --noEmit && tsdown", - "test": "NODE_OPTIONS='--expose-gc' vitest run", - "test:e2e": "vitest run e2e", - "codegen": "sui-ts-codegen generate && pnpm lint:fix", - "prettier:check": "prettier -c --ignore-unknown .", - "prettier:fix": "prettier -w --ignore-unknown .", - "oxlint:check": "oxlint .", - "oxlint:fix": "oxlint --fix", - "lint": "pnpm run oxlint:check && pnpm run prettier:check", - "lint:fix": "pnpm run oxlint:fix && pnpm run prettier:fix" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/MystenLabs/ts-sdks.git" - }, - "bugs": { - "url": "https://github.com/mystenlabs/ts-sdks/issues" - }, - "homepage": "TODO", - "devDependencies": { - "@ianvs/prettier-plugin-sort-imports": "^4.7.0", - "@mysten/codegen": "^0.6.0", - "@mysten/sui": "^2.4.0", - "@mysten/bcs": "^2.0.2", - "@testcontainers/postgresql": "^11.11.0", - "@types/node": "^25.0.8", - "@types/ws": "^8.18.1", - "oxlint": "^1.39.0", - "prettier": "^3.7.4", - "testcontainers": "^11.11.0", - "ts-retry-promise": "^0.8.1", - "tsdown": "0.20.0-beta.1", - "typescript": "^5.9.3", - "vitest": "^4.0.17", - "ws": "^8.19.0" - }, - "peerDependencies": { - "@mysten/sui": "workspace:^", - "@mysten/bcs": "workspace:^" - } -} diff --git a/sdk/pas/pnpm-lock.yaml b/sdk/pas/pnpm-lock.yaml deleted file mode 100644 index 7f7691a..0000000 --- a/sdk/pas/pnpm-lock.yaml +++ /dev/null @@ -1,1209 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - .: - dependencies: - '@mysten/sui': - specifier: git+https://github.com/MystenLabs/ts-sdks.git#sdk-v2 - version: '@mysten/ts-sdks@https://codeload.github.com/MystenLabs/ts-sdks/tar.gz/726cf206e10fe951901d8925fc880a9eef192876' - devDependencies: - '@types/node': - specifier: ^25.0.8 - version: 25.0.9 - typescript: - specifier: ^5.9.3 - version: 5.9.3 - vitest: - specifier: ^4.0.17 - version: 4.0.17(@types/node@25.0.9) - -packages: - '@esbuild/aix-ppc64@0.27.2': - resolution: - { - integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==, - } - engines: { node: '>=18' } - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.27.2': - resolution: - { - integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==, - } - engines: { node: '>=18' } - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.27.2': - resolution: - { - integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==, - } - engines: { node: '>=18' } - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.27.2': - resolution: - { - integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==, - } - engines: { node: '>=18' } - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.27.2': - resolution: - { - integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==, - } - engines: { node: '>=18' } - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.2': - resolution: - { - integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==, - } - engines: { node: '>=18' } - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.27.2': - resolution: - { - integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==, - } - engines: { node: '>=18' } - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.2': - resolution: - { - integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==, - } - engines: { node: '>=18' } - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.27.2': - resolution: - { - integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==, - } - engines: { node: '>=18' } - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.27.2': - resolution: - { - integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==, - } - engines: { node: '>=18' } - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.27.2': - resolution: - { - integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==, - } - engines: { node: '>=18' } - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.27.2': - resolution: - { - integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==, - } - engines: { node: '>=18' } - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.27.2': - resolution: - { - integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==, - } - engines: { node: '>=18' } - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.27.2': - resolution: - { - integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==, - } - engines: { node: '>=18' } - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.2': - resolution: - { - integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==, - } - engines: { node: '>=18' } - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.27.2': - resolution: - { - integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==, - } - engines: { node: '>=18' } - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.27.2': - resolution: - { - integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==, - } - engines: { node: '>=18' } - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.27.2': - resolution: - { - integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==, - } - engines: { node: '>=18' } - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.2': - resolution: - { - integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==, - } - engines: { node: '>=18' } - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.27.2': - resolution: - { - integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==, - } - engines: { node: '>=18' } - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.2': - resolution: - { - integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==, - } - engines: { node: '>=18' } - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.27.2': - resolution: - { - integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==, - } - engines: { node: '>=18' } - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.27.2': - resolution: - { - integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==, - } - engines: { node: '>=18' } - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.27.2': - resolution: - { - integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==, - } - engines: { node: '>=18' } - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.27.2': - resolution: - { - integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==, - } - engines: { node: '>=18' } - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.27.2': - resolution: - { - integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==, - } - engines: { node: '>=18' } - cpu: [x64] - os: [win32] - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: - { - integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, - } - - '@mysten/ts-sdks@https://codeload.github.com/MystenLabs/ts-sdks/tar.gz/726cf206e10fe951901d8925fc880a9eef192876': - resolution: - { - tarball: https://codeload.github.com/MystenLabs/ts-sdks/tar.gz/726cf206e10fe951901d8925fc880a9eef192876, - } - version: 0.0.0 - engines: { pnpm: '>=10.17.0' } - - '@rollup/rollup-android-arm-eabi@4.55.2': - resolution: - { - integrity: sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==, - } - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.55.2': - resolution: - { - integrity: sha512-eXBg7ibkNUZ+sTwbFiDKou0BAckeV6kIigK7y5Ko4mB/5A1KLhuzEKovsmfvsL8mQorkoincMFGnQuIT92SKqA==, - } - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.55.2': - resolution: - { - integrity: sha512-UCbaTklREjrc5U47ypLulAgg4njaqfOVLU18VrCrI+6E5MQjuG0lSWaqLlAJwsD7NpFV249XgB0Bi37Zh5Sz4g==, - } - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.55.2': - resolution: - { - integrity: sha512-dP67MA0cCMHFT2g5XyjtpVOtp7y4UyUxN3dhLdt11at5cPKnSm4lY+EhwNvDXIMzAMIo2KU+mc9wxaAQJTn7sQ==, - } - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.55.2': - resolution: - { - integrity: sha512-WDUPLUwfYV9G1yxNRJdXcvISW15mpvod1Wv3ok+Ws93w1HjIVmCIFxsG2DquO+3usMNCpJQ0wqO+3GhFdl6Fow==, - } - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.55.2': - resolution: - { - integrity: sha512-Ng95wtHVEulRwn7R0tMrlUuiLVL/HXA8Lt/MYVpy88+s5ikpntzZba1qEulTuPnPIZuOPcW9wNEiqvZxZmgmqQ==, - } - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.55.2': - resolution: - { - integrity: sha512-AEXMESUDWWGqD6LwO/HkqCZgUE1VCJ1OhbvYGsfqX2Y6w5quSXuyoy/Fg3nRqiwro+cJYFxiw5v4kB2ZDLhxrw==, - } - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.55.2': - resolution: - { - integrity: sha512-ZV7EljjBDwBBBSv570VWj0hiNTdHt9uGznDtznBB4Caj3ch5rgD4I2K1GQrtbvJ/QiB+663lLgOdcADMNVC29Q==, - } - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.55.2': - resolution: - { - integrity: sha512-uvjwc8NtQVPAJtq4Tt7Q49FOodjfbf6NpqXyW/rjXoV+iZ3EJAHLNAnKT5UJBc6ffQVgmXTUL2ifYiLABlGFqA==, - } - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.55.2': - resolution: - { - integrity: sha512-s3KoWVNnye9mm/2WpOZ3JeUiediUVw6AvY/H7jNA6qgKA2V2aM25lMkVarTDfiicn/DLq3O0a81jncXszoyCFA==, - } - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loong64-gnu@4.55.2': - resolution: - { - integrity: sha512-gi21faacK+J8aVSyAUptML9VQN26JRxe484IbF+h3hpG+sNVoMXPduhREz2CcYr5my0NE3MjVvQ5bMKX71pfVA==, - } - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-loong64-musl@4.55.2': - resolution: - { - integrity: sha512-qSlWiXnVaS/ceqXNfnoFZh4IiCA0EwvCivivTGbEu1qv2o+WTHpn1zNmCTAoOG5QaVr2/yhCoLScQtc/7RxshA==, - } - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.55.2': - resolution: - { - integrity: sha512-rPyuLFNoF1B0+wolH277E780NUKf+KoEDb3OyoLbAO18BbeKi++YN6gC/zuJoPPDlQRL3fIxHxCxVEWiem2yXw==, - } - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-ppc64-musl@4.55.2': - resolution: - { - integrity: sha512-g+0ZLMook31iWV4PvqKU0i9E78gaZgYpSrYPed/4Bu+nGTgfOPtfs1h11tSSRPXSjC5EzLTjV/1A7L2Vr8pJoQ==, - } - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.55.2': - resolution: - { - integrity: sha512-i+sGeRGsjKZcQRh3BRfpLsM3LX3bi4AoEVqmGDyc50L6KfYsN45wVCSz70iQMwPWr3E5opSiLOwsC9WB4/1pqg==, - } - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.55.2': - resolution: - { - integrity: sha512-C1vLcKc4MfFV6I0aWsC7B2Y9QcsiEcvKkfxprwkPfLaN8hQf0/fKHwSF2lcYzA9g4imqnhic729VB9Fo70HO3Q==, - } - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.55.2': - resolution: - { - integrity: sha512-68gHUK/howpQjh7g7hlD9DvTTt4sNLp1Bb+Yzw2Ki0xvscm2cOdCLZNJNhd2jW8lsTPrHAHuF751BygifW4bkQ==, - } - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.55.2': - resolution: - { - integrity: sha512-1e30XAuaBP1MAizaOBApsgeGZge2/Byd6wV4a8oa6jPdHELbRHBiw7wvo4dp7Ie2PE8TZT4pj9RLGZv9N4qwlw==, - } - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.55.2': - resolution: - { - integrity: sha512-4BJucJBGbuGnH6q7kpPqGJGzZnYrpAzRd60HQSt3OpX/6/YVgSsJnNzR8Ot74io50SeVT4CtCWe/RYIAymFPwA==, - } - cpu: [x64] - os: [linux] - - '@rollup/rollup-openbsd-x64@4.55.2': - resolution: - { - integrity: sha512-cT2MmXySMo58ENv8p6/O6wI/h/gLnD3D6JoajwXFZH6X9jz4hARqUhWpGuQhOgLNXscfZYRQMJvZDtWNzMAIDw==, - } - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.55.2': - resolution: - { - integrity: sha512-sZnyUgGkuzIXaK3jNMPmUIyJrxu/PjmATQrocpGA1WbCPX8H5tfGgRSuYtqBYAvLuIGp8SPRb1O4d1Fkb5fXaQ==, - } - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.55.2': - resolution: - { - integrity: sha512-sDpFbenhmWjNcEbBcoTV0PWvW5rPJFvu+P7XoTY0YLGRupgLbFY0XPfwIbJOObzO7QgkRDANh65RjhPmgSaAjQ==, - } - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.55.2': - resolution: - { - integrity: sha512-GvJ03TqqaweWCigtKQVBErw2bEhu1tyfNQbarwr94wCGnczA9HF8wqEe3U/Lfu6EdeNP0p6R+APeHVwEqVxpUQ==, - } - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.55.2': - resolution: - { - integrity: sha512-KvXsBvp13oZz9JGe5NYS7FNizLe99Ny+W8ETsuCyjXiKdiGrcz2/J/N8qxZ/RSwivqjQguug07NLHqrIHrqfYw==, - } - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.55.2': - resolution: - { - integrity: sha512-xNO+fksQhsAckRtDSPWaMeT1uIM+JrDRXlerpnWNXhn1TdB3YZ6uKBMBTKP0eX9XtYEP978hHk1f8332i2AW8Q==, - } - cpu: [x64] - os: [win32] - - '@standard-schema/spec@1.1.0': - resolution: - { - integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, - } - - '@types/chai@5.2.3': - resolution: - { - integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==, - } - - '@types/deep-eql@4.0.2': - resolution: - { - integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==, - } - - '@types/estree@1.0.8': - resolution: - { - integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, - } - - '@types/node@25.0.9': - resolution: - { - integrity: sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==, - } - - '@vitest/expect@4.0.17': - resolution: - { - integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==, - } - - '@vitest/mocker@4.0.17': - resolution: - { - integrity: sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==, - } - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@4.0.17': - resolution: - { - integrity: sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==, - } - - '@vitest/runner@4.0.17': - resolution: - { - integrity: sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==, - } - - '@vitest/snapshot@4.0.17': - resolution: - { - integrity: sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==, - } - - '@vitest/spy@4.0.17': - resolution: - { - integrity: sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==, - } - - '@vitest/utils@4.0.17': - resolution: - { - integrity: sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==, - } - - assertion-error@2.0.1: - resolution: - { - integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, - } - engines: { node: '>=12' } - - chai@6.2.2: - resolution: - { - integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==, - } - engines: { node: '>=18' } - - es-module-lexer@1.7.0: - resolution: - { - integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==, - } - - esbuild@0.27.2: - resolution: - { - integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==, - } - engines: { node: '>=18' } - hasBin: true - - estree-walker@3.0.3: - resolution: - { - integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, - } - - expect-type@1.3.0: - resolution: - { - integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==, - } - engines: { node: '>=12.0.0' } - - fdir@6.5.0: - resolution: - { - integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, - } - engines: { node: '>=12.0.0' } - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } - os: [darwin] - - magic-string@0.30.21: - resolution: - { - integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, - } - - nanoid@3.3.11: - resolution: - { - integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } - hasBin: true - - obug@2.1.1: - resolution: - { - integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==, - } - - pathe@2.0.3: - resolution: - { - integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, - } - - picocolors@1.1.1: - resolution: - { - integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, - } - - picomatch@4.0.3: - resolution: - { - integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, - } - engines: { node: '>=12' } - - postcss@8.5.6: - resolution: - { - integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==, - } - engines: { node: ^10 || ^12 || >=14 } - - rollup@4.55.2: - resolution: - { - integrity: sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==, - } - engines: { node: '>=18.0.0', npm: '>=8.0.0' } - hasBin: true - - siginfo@2.0.0: - resolution: - { - integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, - } - - source-map-js@1.2.1: - resolution: - { - integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, - } - engines: { node: '>=0.10.0' } - - stackback@0.0.2: - resolution: - { - integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, - } - - std-env@3.10.0: - resolution: - { - integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==, - } - - tinybench@2.9.0: - resolution: - { - integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, - } - - tinyexec@1.0.2: - resolution: - { - integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==, - } - engines: { node: '>=18' } - - tinyglobby@0.2.15: - resolution: - { - integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, - } - engines: { node: '>=12.0.0' } - - tinyrainbow@3.0.3: - resolution: - { - integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==, - } - engines: { node: '>=14.0.0' } - - typescript@5.9.3: - resolution: - { - integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, - } - engines: { node: '>=14.17' } - hasBin: true - - undici-types@7.16.0: - resolution: - { - integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==, - } - - vite@7.3.1: - resolution: - { - integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==, - } - engines: { node: ^20.19.0 || >=22.12.0 } - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vitest@4.0.17: - resolution: - { - integrity: sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==, - } - engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.17 - '@vitest/browser-preview': 4.0.17 - '@vitest/browser-webdriverio': 4.0.17 - '@vitest/ui': 4.0.17 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - why-is-node-running@2.3.0: - resolution: - { - integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, - } - engines: { node: '>=8' } - hasBin: true - -snapshots: - '@esbuild/aix-ppc64@0.27.2': - optional: true - - '@esbuild/android-arm64@0.27.2': - optional: true - - '@esbuild/android-arm@0.27.2': - optional: true - - '@esbuild/android-x64@0.27.2': - optional: true - - '@esbuild/darwin-arm64@0.27.2': - optional: true - - '@esbuild/darwin-x64@0.27.2': - optional: true - - '@esbuild/freebsd-arm64@0.27.2': - optional: true - - '@esbuild/freebsd-x64@0.27.2': - optional: true - - '@esbuild/linux-arm64@0.27.2': - optional: true - - '@esbuild/linux-arm@0.27.2': - optional: true - - '@esbuild/linux-ia32@0.27.2': - optional: true - - '@esbuild/linux-loong64@0.27.2': - optional: true - - '@esbuild/linux-mips64el@0.27.2': - optional: true - - '@esbuild/linux-ppc64@0.27.2': - optional: true - - '@esbuild/linux-riscv64@0.27.2': - optional: true - - '@esbuild/linux-s390x@0.27.2': - optional: true - - '@esbuild/linux-x64@0.27.2': - optional: true - - '@esbuild/netbsd-arm64@0.27.2': - optional: true - - '@esbuild/netbsd-x64@0.27.2': - optional: true - - '@esbuild/openbsd-arm64@0.27.2': - optional: true - - '@esbuild/openbsd-x64@0.27.2': - optional: true - - '@esbuild/openharmony-arm64@0.27.2': - optional: true - - '@esbuild/sunos-x64@0.27.2': - optional: true - - '@esbuild/win32-arm64@0.27.2': - optional: true - - '@esbuild/win32-ia32@0.27.2': - optional: true - - '@esbuild/win32-x64@0.27.2': - optional: true - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@mysten/ts-sdks@https://codeload.github.com/MystenLabs/ts-sdks/tar.gz/726cf206e10fe951901d8925fc880a9eef192876': - {} - - '@rollup/rollup-android-arm-eabi@4.55.2': - optional: true - - '@rollup/rollup-android-arm64@4.55.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.55.2': - optional: true - - '@rollup/rollup-darwin-x64@4.55.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.55.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.55.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.55.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.55.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.55.2': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.55.2': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.55.2': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.55.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.55.2': - optional: true - - '@rollup/rollup-openbsd-x64@4.55.2': - optional: true - - '@rollup/rollup-openharmony-arm64@4.55.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.55.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.55.2': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.55.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.55.2': - optional: true - - '@standard-schema/spec@1.1.0': {} - - '@types/chai@5.2.3': - dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 - - '@types/deep-eql@4.0.2': {} - - '@types/estree@1.0.8': {} - - '@types/node@25.0.9': - dependencies: - undici-types: 7.16.0 - - '@vitest/expect@4.0.17': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 - chai: 6.2.2 - tinyrainbow: 3.0.3 - - '@vitest/mocker@4.0.17(vite@7.3.1(@types/node@25.0.9))': - dependencies: - '@vitest/spy': 4.0.17 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.3.1(@types/node@25.0.9) - - '@vitest/pretty-format@4.0.17': - dependencies: - tinyrainbow: 3.0.3 - - '@vitest/runner@4.0.17': - dependencies: - '@vitest/utils': 4.0.17 - pathe: 2.0.3 - - '@vitest/snapshot@4.0.17': - dependencies: - '@vitest/pretty-format': 4.0.17 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@4.0.17': {} - - '@vitest/utils@4.0.17': - dependencies: - '@vitest/pretty-format': 4.0.17 - tinyrainbow: 3.0.3 - - assertion-error@2.0.1: {} - - chai@6.2.2: {} - - es-module-lexer@1.7.0: {} - - esbuild@0.27.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 - - expect-type@1.3.0: {} - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - fsevents@2.3.3: - optional: true - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - nanoid@3.3.11: {} - - obug@2.1.1: {} - - pathe@2.0.3: {} - - picocolors@1.1.1: {} - - picomatch@4.0.3: {} - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - rollup@4.55.2: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.2 - '@rollup/rollup-android-arm64': 4.55.2 - '@rollup/rollup-darwin-arm64': 4.55.2 - '@rollup/rollup-darwin-x64': 4.55.2 - '@rollup/rollup-freebsd-arm64': 4.55.2 - '@rollup/rollup-freebsd-x64': 4.55.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.2 - '@rollup/rollup-linux-arm-musleabihf': 4.55.2 - '@rollup/rollup-linux-arm64-gnu': 4.55.2 - '@rollup/rollup-linux-arm64-musl': 4.55.2 - '@rollup/rollup-linux-loong64-gnu': 4.55.2 - '@rollup/rollup-linux-loong64-musl': 4.55.2 - '@rollup/rollup-linux-ppc64-gnu': 4.55.2 - '@rollup/rollup-linux-ppc64-musl': 4.55.2 - '@rollup/rollup-linux-riscv64-gnu': 4.55.2 - '@rollup/rollup-linux-riscv64-musl': 4.55.2 - '@rollup/rollup-linux-s390x-gnu': 4.55.2 - '@rollup/rollup-linux-x64-gnu': 4.55.2 - '@rollup/rollup-linux-x64-musl': 4.55.2 - '@rollup/rollup-openbsd-x64': 4.55.2 - '@rollup/rollup-openharmony-arm64': 4.55.2 - '@rollup/rollup-win32-arm64-msvc': 4.55.2 - '@rollup/rollup-win32-ia32-msvc': 4.55.2 - '@rollup/rollup-win32-x64-gnu': 4.55.2 - '@rollup/rollup-win32-x64-msvc': 4.55.2 - fsevents: 2.3.3 - - siginfo@2.0.0: {} - - source-map-js@1.2.1: {} - - stackback@0.0.2: {} - - std-env@3.10.0: {} - - tinybench@2.9.0: {} - - tinyexec@1.0.2: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tinyrainbow@3.0.3: {} - - typescript@5.9.3: {} - - undici-types@7.16.0: {} - - vite@7.3.1(@types/node@25.0.9): - dependencies: - esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.55.2 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 25.0.9 - fsevents: 2.3.3 - - vitest@4.0.17(@types/node@25.0.9): - dependencies: - '@vitest/expect': 4.0.17 - '@vitest/mocker': 4.0.17(vite@7.3.1(@types/node@25.0.9)) - '@vitest/pretty-format': 4.0.17 - '@vitest/runner': 4.0.17 - '@vitest/snapshot': 4.0.17 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 - es-module-lexer: 1.7.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.0.9) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.0.9 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 diff --git a/sdk/pas/prettier.config.cjs b/sdk/pas/prettier.config.cjs deleted file mode 100644 index 8eff2c0..0000000 --- a/sdk/pas/prettier.config.cjs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -module.exports = { - printWidth: 100, - semi: true, - singleQuote: true, - tabWidth: 2, - trailingComma: 'all', - useTabs: true, - plugins: ['@ianvs/prettier-plugin-sort-imports'], - proseWrap: 'always', - importOrder: [ - '', - '', - '', - '^@/(.*)$', - '^~/(.*)$', - '', - '^[.]', - ], -}; diff --git a/sdk/pas/src/bcs.ts b/sdk/pas/src/bcs.ts deleted file mode 100644 index bae713c..0000000 --- a/sdk/pas/src/bcs.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { bcs, BcsType } from '@mysten/sui/bcs'; - -import { MoveStruct } from './contracts/utils/index.js'; - -/** dynamic Field representation */ -export function Field, Value extends BcsType>( - ...typeParameters: [Name, Value] -) { - return new MoveStruct({ - name: `0x2::dynamic_field::Field<${typeParameters[0].name as Name['name']}, ${typeParameters[1].name as Value['name']}>`, - fields: { - /** - * Determined by the hash of the object ID, the field name value and it's type, - * i.e. hash(parent.id || name || Name) - */ - id: bcs.Address, - /** The value for the name of this field */ - name: typeParameters[0], - /** The value bound to this field */ - value: typeParameters[1], - }, - }); -} diff --git a/sdk/pas/src/client.ts b/sdk/pas/src/client.ts deleted file mode 100644 index ac20e44..0000000 --- a/sdk/pas/src/client.ts +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import type { ClientWithCoreApi } from '@mysten/sui/client'; - -import { MAINNET_PAS_PACKAGE_CONFIG, TESTNET_PAS_PACKAGE_CONFIG } from './constants.js'; -import { - deriveAccountAddress, - derivePolicyAddress, - deriveTemplateAddress, - deriveTemplateRegistryAddress, -} from './derivation.js'; -import { PASClientError } from './error.js'; -import { - accountForAddressIntent, - sendBalanceIntent, - unlockBalanceIntent, - unlockUnrestrictedBalanceIntent, -} from './intents.js'; -import type { PASClientConfig, PASOptions, PASPackageConfig } from './types.js'; - -export function pas({ - packageConfig, - name = 'pas' as Name, - ...options -}: PASOptions = {}): { - name: Name; - register: (client: ClientWithCoreApi) => PASClient; -} { - return { - name, - register: (client: ClientWithCoreApi): PASClient => { - const network = client.network; - - // TODO: This should only be mainnet,testnet. We use devnet as there's no testnet addr balances temporarily. - if ( - network !== 'mainnet' && - network !== 'testnet' && - network !== 'devnet' && - !packageConfig - ) { - throw new PASClientError('PAS client only supports mainnet, testnet and devnet'); - } - - return new PASClient( - packageConfig - ? { - packageConfig, - suiClient: client, - ...options, - } - : { - suiClient: client, - ...options, - }, - ); - }, - }; -} - -export class PASClient { - #packageConfig: PASPackageConfig; - - constructor(config: PASClientConfig) { - const network = config.suiClient.network; - if (network && !config.packageConfig) { - switch (network) { - case 'testnet': - this.#packageConfig = TESTNET_PAS_PACKAGE_CONFIG; - break; - case 'mainnet': - this.#packageConfig = MAINNET_PAS_PACKAGE_CONFIG; - break; - default: - throw new PASClientError(`Unsupported network: ${network}`); - } - } else { - this.#packageConfig = config.packageConfig!; - } - } - - /** - * Get the package configuration - */ - getPackageConfig() { - return this.#packageConfig; - } - - /** - * Derives the account address for a given owner address. - * - * @param owner - The owner address (can be a user address or object address) - * @returns The derived account object ID - */ - deriveAccountAddress(owner: string): string { - return deriveAccountAddress(owner, this.#packageConfig); - } - - /** - * Derives the policy address for a given asset type T. - * By default wraps with `Balance` to match the on-chain convention. - * - * @param assetType - The full type of the asset (e.g., "0x2::sui::SUI") - * @returns The derived policy object ID - */ - derivePolicyAddress(assetType: string): string { - return derivePolicyAddress(assetType, this.#packageConfig); - } - - /** - * Derives the templates object address for a given package configuration. - * - * @returns The derived templates object ID - */ - deriveTemplateRegistryAddress(): string { - return deriveTemplateRegistryAddress(this.#packageConfig); - } - - /** - * Derives the template DF address for a given approval type name. - * - * @param approvalTypeName - The fully qualified approval type name - * @returns The derived dynamic field object ID - */ - deriveTemplateAddress(approvalTypeName: string): string { - return deriveTemplateAddress(this.deriveTemplateRegistryAddress(), approvalTypeName); - } - - /** - * Intent-based transaction builders. Each method returns a synchronous closure - * that registers a `$Intent` placeholder in the transaction. The actual PTB commands - * are resolved lazily at `tx.build()` time via the shared PAS resolver plugin. - */ - get call() { - return { - /** - * Creates a transfer funds intent. At build time, it auto-resolves the issuer's - * approval template commands by reading the Policy and Templates objects on-chain. - * If the recipient account does not exist, it will be created and shared automatically. - * - * @param options - Transfer options - * @param options.from - The sender's address (owner of the source account) - * @param options.to - The receiver's address (owner of the destination account) - * @param options.amount - The amount to transfer - * @param options.assetType - The full asset type (e.g., "0x2::sui::SUI") - * @returns A sync closure `(tx: Transaction) => TransactionResult` - */ - sendBalance: sendBalanceIntent(this.#packageConfig), - - /** - * Creates an unlock balance intent. At build time, it resolves the issuer's - * approval template commands. This will fail if the issuer has not configured - * unlock approvals for the asset type. - * - * @param options - Unlock options - * @param options.from - The sender's address (owner of the source account) - * @param options.amount - The amount to unlock - * @param options.assetType - The full asset type (e.g., "0x2::sui::SUI") - * @returns A sync closure `(tx: Transaction) => TransactionResult` - */ - unlockBalance: unlockBalanceIntent(this.#packageConfig), - - /** - * Creates an unlock balance intent for unrestricted (non-managed) assets. - * Use this when no Policy exists for the asset type (e.g., SUI). - * - * @param options - Unlock options - * @param options.from - The sender's address (owner of the source account) - * @param options.amount - The amount to unlock - * @param options.assetType - The full asset type (e.g., "0x2::sui::SUI") - * @returns A sync closure `(tx: Transaction) => TransactionResult` - */ - unlockUnrestrictedBalance: unlockUnrestrictedBalanceIntent(this.#packageConfig), - - /** - * Returns a account object for the given address. At build time, if the account - * already exists on-chain it resolves to an object reference; otherwise it - * creates the account and shares it. - * - * @param owner - The owner address - * @returns A sync closure `(tx: Transaction) => TransactionResult` (the account) - */ - accountForAddress: accountForAddressIntent(this.#packageConfig), - }; - } -} diff --git a/sdk/pas/src/constants.ts b/sdk/pas/src/constants.ts deleted file mode 100644 index 0dcb8a1..0000000 --- a/sdk/pas/src/constants.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import type { PASPackageConfig } from './types.js'; - -export const TESTNET_PAS_PACKAGE_CONFIG: PASPackageConfig = { - packageId: '0x7e77592474ea9759b46ca5c6515ed4840952cd80d60ee54a1614382811d46730', - namespaceId: '0xf7c77ac8bbbdf47f7b1cf8ac8aa489cfc4dff25847f3e2e1db53bde5c454be2b', -}; - -export const MAINNET_PAS_PACKAGE_CONFIG: PASPackageConfig = { - packageId: '0x0', // TODO: Replace with actual mainnet package ID - namespaceId: '0x0', // TODO: Replace with actual mainnet namespace ID -}; diff --git a/sdk/pas/src/contracts/pas/account.ts b/sdk/pas/src/contracts/pas/account.ts deleted file mode 100644 index 2e7cb12..0000000 --- a/sdk/pas/src/contracts/pas/account.ts +++ /dev/null @@ -1,345 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ - -/** Account logic */ - -import { bcs } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { - MoveStruct, - MoveTuple, - normalizeMoveArguments, - type RawTransactionArgument, -} from '../utils/index.js'; -import * as versioning from './versioning.js'; - -const $moduleName = '@mysten/pas::account'; -export const Account = new MoveStruct({ - name: `${$moduleName}::Account`, - fields: { - id: bcs.Address, - /** The owner of the account (address or object) */ - owner: bcs.Address, - /** - * The ID of the namespace that created this account. There's ONLY ONE namespace in - * the system, but this helps us avoid having `&Namespace` inputs in all functions - * that need to derive the IDs. - */ - namespace_id: bcs.Address, - /** - * Block versions to break backwards compatibility -- only used in case of - * emergency. - */ - versioning: versioning.Versioning, - }, -}); -export const Auth = new MoveTuple({ name: `${$moduleName}::Auth`, fields: [bcs.Address] }); -export interface CreateArguments { - namespace: RawTransactionArgument; - owner: RawTransactionArgument; -} -export interface CreateOptions { - package?: string; - arguments: - | CreateArguments - | [namespace: RawTransactionArgument, owner: RawTransactionArgument]; -} -/** Create a new account for `owner`. This is a permission-less action. */ -export function create(options: CreateOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, 'address'] satisfies (string | null)[]; - const parameterNames = ['namespace', 'owner']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'create', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface ShareArguments { - account: RawTransactionArgument; -} -export interface ShareOptions { - package?: string; - arguments: ShareArguments | [account: RawTransactionArgument]; -} -/** - * The only way to finalize the TX is by sharing the account. All accounts are - * shared by default. - */ -export function share(options: ShareOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['account']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'share', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface CreateAndShareArguments { - namespace: RawTransactionArgument; - owner: RawTransactionArgument; -} -export interface CreateAndShareOptions { - package?: string; - arguments: - | CreateAndShareArguments - | [namespace: RawTransactionArgument, owner: RawTransactionArgument]; -} -/** Create and share a account in a single step. */ -export function createAndShare(options: CreateAndShareOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, 'address'] satisfies (string | null)[]; - const parameterNames = ['namespace', 'owner']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'create_and_share', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface UnlockBalanceArguments { - account: RawTransactionArgument; - auth: RawTransactionArgument; - amount: RawTransactionArgument; -} -export interface UnlockBalanceOptions { - package?: string; - arguments: - | UnlockBalanceArguments - | [ - account: RawTransactionArgument, - auth: RawTransactionArgument, - amount: RawTransactionArgument, - ]; - typeArguments: [string]; -} -/** - * Enables a fund unlock flow. This is useful for assets that are not managed by a - * Policy within the system, or if there's a special case where an issuer allows - * balances to flow out of the system. - */ -export function unlockBalance(options: UnlockBalanceOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null, 'u64'] satisfies (string | null)[]; - const parameterNames = ['account', 'auth', 'amount']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'unlock_balance', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface SendBalanceArguments { - from: RawTransactionArgument; - auth: RawTransactionArgument; - to: RawTransactionArgument; - amount: RawTransactionArgument; -} -export interface SendBalanceOptions { - package?: string; - arguments: - | SendBalanceArguments - | [ - from: RawTransactionArgument, - auth: RawTransactionArgument, - to: RawTransactionArgument, - amount: RawTransactionArgument, - ]; - typeArguments: [string]; -} -/** Initiate a transfer from account A to account B. */ -export function sendBalance(options: SendBalanceOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null, null, 'u64'] satisfies (string | null)[]; - const parameterNames = ['from', 'auth', 'to', 'amount']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'send_balance', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface ClawbackBalanceArguments { - from: RawTransactionArgument; - amount: RawTransactionArgument; -} -export interface ClawbackBalanceOptions { - package?: string; - arguments: - | ClawbackBalanceArguments - | [from: RawTransactionArgument, amount: RawTransactionArgument]; - typeArguments: [string]; -} -/** - * Initiate a clawback request for an amount of funds. This takes no `Auth`, as - * it's an admin action. - * - * This can only ever finalize if clawback is enabled in the policy. - */ -export function clawbackBalance(options: ClawbackBalanceOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, 'u64'] satisfies (string | null)[]; - const parameterNames = ['from', 'amount']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'clawback_balance', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface UnsafeSendBalanceArguments { - from: RawTransactionArgument; - auth: RawTransactionArgument; - recipientAddress: RawTransactionArgument; - amount: RawTransactionArgument; -} -export interface UnsafeSendBalanceOptions { - package?: string; - arguments: - | UnsafeSendBalanceArguments - | [ - from: RawTransactionArgument, - auth: RawTransactionArgument, - recipientAddress: RawTransactionArgument, - amount: RawTransactionArgument, - ]; - typeArguments: [string]; -} -/** - * Transfer `amount` from account to an address. This unlocks transfers to a - * account before it has been created. - * - * It's marked as `unsafe_` as it's easy to accidentally pick the wrong recipient - * address. - */ -export function unsafeSendBalance(options: UnsafeSendBalanceOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null, 'address', 'u64'] satisfies (string | null)[]; - const parameterNames = ['from', 'auth', 'recipientAddress', 'amount']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'unsafe_send_balance', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface NewAuthOptions { - package?: string; - arguments?: []; -} -/** Generate an ownership proof from the sender of the transaction. */ -export function newAuth(options: NewAuthOptions = {}) { - const packageAddress = options.package ?? '@mysten/pas'; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'new_auth', - }); -} -export interface NewAuthAsObjectArguments { - uid: RawTransactionArgument; -} -export interface NewAuthAsObjectOptions { - package?: string; - arguments: NewAuthAsObjectArguments | [uid: RawTransactionArgument]; -} -/** - * Generate an ownership proof from a `UID` object, to allow objects to own - * accounts. `&mut UID` is intentional — it serves as proof of ownership over the - * object. - */ -export function newAuthAsObject(options: NewAuthAsObjectOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = ['0x2::object::ID'] satisfies (string | null)[]; - const parameterNames = ['uid']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'new_auth_as_object', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface OwnerArguments { - account: RawTransactionArgument; -} -export interface OwnerOptions { - package?: string; - arguments: OwnerArguments | [account: RawTransactionArgument]; -} -export function owner(options: OwnerOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['account']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'owner', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface DepositBalanceArguments { - account: RawTransactionArgument; - balance: RawTransactionArgument; -} -export interface DepositBalanceOptions { - package?: string; - arguments: - | DepositBalanceArguments - | [account: RawTransactionArgument, balance: RawTransactionArgument]; - typeArguments: [string]; -} -export function depositBalance(options: DepositBalanceOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['account', 'balance']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'deposit_balance', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface SyncVersioningArguments { - account: RawTransactionArgument; - namespace: RawTransactionArgument; -} -export interface SyncVersioningOptions { - package?: string; - arguments: - | SyncVersioningArguments - | [account: RawTransactionArgument, namespace: RawTransactionArgument]; -} -/** Permission-less operation to bring versioning up-to-date with the namespace. */ -export function syncVersioning(options: SyncVersioningOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['account', 'namespace']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'account', - function: 'sync_versioning', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} diff --git a/sdk/pas/src/contracts/pas/clawback_funds.ts b/sdk/pas/src/contracts/pas/clawback_funds.ts deleted file mode 100644 index 92bd4ca..0000000 --- a/sdk/pas/src/contracts/pas/clawback_funds.ts +++ /dev/null @@ -1,116 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ -import { bcs, type BcsType } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js'; - -const $moduleName = '@mysten/pas::clawback_funds'; -export function ClawbackFunds>(...typeParameters: [T]) { - return new MoveStruct({ - name: `${$moduleName}::ClawbackFunds<${typeParameters[0].name as T['name']}>`, - fields: { - /** `owner` is the wallet OR object address, NOT the account address */ - owner: bcs.Address, - /** The ID of the account the funds are coming from */ - account_id: bcs.Address, - /** The balance that is being clawed back. */ - funds: typeParameters[0], - }, - }); -} -export interface OwnerArguments { - request: RawTransactionArgument; -} -export interface OwnerOptions { - package?: string; - arguments: OwnerArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function owner(options: OwnerOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'clawback_funds', - function: 'owner', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface AccountIdArguments { - request: RawTransactionArgument; -} -export interface AccountIdOptions { - package?: string; - arguments: AccountIdArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function accountId(options: AccountIdOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'clawback_funds', - function: 'account_id', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface FundsArguments { - request: RawTransactionArgument; -} -export interface FundsOptions { - package?: string; - arguments: FundsArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function funds(options: FundsOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'clawback_funds', - function: 'funds', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface ResolveArguments { - request: RawTransactionArgument; - policy: RawTransactionArgument; -} -export interface ResolveOptions { - package?: string; - arguments: - | ResolveArguments - | [request: RawTransactionArgument, policy: RawTransactionArgument]; - typeArguments: [string]; -} -/** - * Resolve a clawback funds request by: - * - * 1. Verify policy is valid - * 2. Verify policy has clawback enabled - * 3. Make sure policy has enabled clawback resolution - */ -export function resolve(options: ResolveOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['request', 'policy']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'clawback_funds', - function: 'resolve', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} diff --git a/sdk/pas/src/contracts/pas/deps/std/type_name.ts b/sdk/pas/src/contracts/pas/deps/std/type_name.ts deleted file mode 100644 index d5acb2f..0000000 --- a/sdk/pas/src/contracts/pas/deps/std/type_name.ts +++ /dev/null @@ -1,26 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ - -/** Functionality for converting Move types into values. Use with care! */ - -import { bcs } from '@mysten/sui/bcs'; - -import { MoveStruct } from '../../../utils/index.js'; - -const $moduleName = 'std::type_name'; -export const TypeName = new MoveStruct({ - name: `${$moduleName}::TypeName`, - fields: { - /** - * String representation of the type. All types are represented using their source - * syntax: "u8", "u64", "bool", "address", "vector", and so on for primitive types. - * Struct types are represented as fully qualified type names; e.g. - * `00000000000000000000000000000001::string::String` or - * `0000000000000000000000000000000a::module_name1::type_name1<0000000000000000000000000000000a::module_name2::type_name2>` - * Addresses are hex-encoded lowercase values of length ADDRESS_LENGTH (16, 20, or - * 32 depending on the Move platform) - */ - name: bcs.string(), - }, -}); diff --git a/sdk/pas/src/contracts/pas/deps/sui/vec_map.ts b/sdk/pas/src/contracts/pas/deps/sui/vec_map.ts deleted file mode 100644 index aac8343..0000000 --- a/sdk/pas/src/contracts/pas/deps/sui/vec_map.ts +++ /dev/null @@ -1,35 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ -import { bcs, type BcsType } from '@mysten/sui/bcs'; - -import { MoveStruct } from '../../../utils/index.js'; - -const $moduleName = '0x2::vec_map'; -/** An entry in the map */ -export function Entry, V extends BcsType>(...typeParameters: [K, V]) { - return new MoveStruct({ - name: `${$moduleName}::Entry<${typeParameters[0].name as K['name']}, ${typeParameters[1].name as V['name']}>`, - fields: { - key: typeParameters[0], - value: typeParameters[1], - }, - }); -} -/** - * A map data structure backed by a vector. The map is guaranteed not to contain - * duplicate keys, but entries are _not_ sorted by key--entries are included in - * insertion order. All operations are O(N) in the size of the map--the intention - * of this data structure is only to provide the convenience of programming against - * a map API. Large maps should use handwritten parent/child relationships instead. - * Maps that need sorted iteration rather than insertion order iteration should - * also be handwritten. - */ -export function VecMap, V extends BcsType>(...typeParameters: [K, V]) { - return new MoveStruct({ - name: `${$moduleName}::VecMap<${typeParameters[0].name as K['name']}, ${typeParameters[1].name as V['name']}>`, - fields: { - contents: bcs.vector(Entry(typeParameters[0], typeParameters[1])), - }, - }); -} diff --git a/sdk/pas/src/contracts/pas/deps/sui/vec_set.ts b/sdk/pas/src/contracts/pas/deps/sui/vec_set.ts deleted file mode 100644 index 3ccd71d..0000000 --- a/sdk/pas/src/contracts/pas/deps/sui/vec_set.ts +++ /dev/null @@ -1,24 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ -import { bcs, type BcsType } from '@mysten/sui/bcs'; - -import { MoveStruct } from '../../../utils/index.js'; - -const $moduleName = '0x2::vec_set'; -/** - * A set data structure backed by a vector. The set is guaranteed not to contain - * duplicate keys. All operations are O(N) in the size of the set - * - * - the intention of this data structure is only to provide the convenience of - * programming against a set API. Sets that need sorted iteration rather than - * insertion order iteration should be handwritten. - */ -export function VecSet>(...typeParameters: [K]) { - return new MoveStruct({ - name: `${$moduleName}::VecSet<${typeParameters[0].name as K['name']}>`, - fields: { - contents: bcs.vector(typeParameters[0]), - }, - }); -} diff --git a/sdk/pas/src/contracts/pas/keys.ts b/sdk/pas/src/contracts/pas/keys.ts deleted file mode 100644 index e78d292..0000000 --- a/sdk/pas/src/contracts/pas/keys.ts +++ /dev/null @@ -1,89 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ -import { bcs } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { MoveTuple, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js'; - -const $moduleName = '@mysten/pas::keys'; -export const PolicyKey = new MoveTuple({ name: `${$moduleName}::PolicyKey`, fields: [bcs.bool()] }); -export const AccountKey = new MoveTuple({ - name: `${$moduleName}::AccountKey`, - fields: [bcs.Address], -}); -export const TemplateKey = new MoveTuple({ - name: `${$moduleName}::TemplateKey`, - fields: [bcs.bool()], -}); -export interface SendFundsActionOptions { - package?: string; - arguments?: []; -} -export function sendFundsAction(options: SendFundsActionOptions = {}) { - const packageAddress = options.package ?? '@mysten/pas'; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'keys', - function: 'send_funds_action', - }); -} -export interface UnlockFundsActionOptions { - package?: string; - arguments?: []; -} -export function unlockFundsAction(options: UnlockFundsActionOptions = {}) { - const packageAddress = options.package ?? '@mysten/pas'; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'keys', - function: 'unlock_funds_action', - }); -} -export interface ClawbackFundsActionOptions { - package?: string; - arguments?: []; -} -export function clawbackFundsAction(options: ClawbackFundsActionOptions = {}) { - const packageAddress = options.package ?? '@mysten/pas'; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'keys', - function: 'clawback_funds_action', - }); -} -export interface ActionsOptions { - package?: string; - arguments?: []; -} -export function actions(options: ActionsOptions = {}) { - const packageAddress = options.package ?? '@mysten/pas'; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'keys', - function: 'actions', - }); -} -export interface IsValidActionArguments { - action: RawTransactionArgument; -} -export interface IsValidActionOptions { - package?: string; - arguments: IsValidActionArguments | [action: RawTransactionArgument]; -} -export function isValidAction(options: IsValidActionOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = ['0x1::string::String'] satisfies (string | null)[]; - const parameterNames = ['action']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'keys', - function: 'is_valid_action', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} diff --git a/sdk/pas/src/contracts/pas/namespace.ts b/sdk/pas/src/contracts/pas/namespace.ts deleted file mode 100644 index a913089..0000000 --- a/sdk/pas/src/contracts/pas/namespace.ts +++ /dev/null @@ -1,209 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ - -/** - * The Namespace module. - * - * Namespace is responsible for creating objects that are easy to query & find: - * - * 1. Accounts - * 2. Policies ... any other module we might add in the future - */ - -import { bcs } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js'; -import * as versioning from './versioning.js'; - -const $moduleName = '@mysten/pas::namespace'; -export const Namespace = new MoveStruct({ - name: `${$moduleName}::Namespace`, - fields: { - id: bcs.Address, - /** - * The UpgradeCap of the package, used as the "ownership" capability, mainly to - * block versions of the package in case of emergency. - */ - upgrade_cap_id: bcs.option(bcs.Address), - /** Enables "blocking" versions of the package */ - versioning: versioning.Versioning, - }, -}); -export interface SetupArguments { - namespace: RawTransactionArgument; - cap: RawTransactionArgument; -} -export interface SetupOptions { - package?: string; - arguments: - | SetupArguments - | [namespace: RawTransactionArgument, cap: RawTransactionArgument]; -} -/** - * Setup the namespace (links the `UpgradeCap`) once after publishing. This makes - * the UpgradeCap the "admin" capability (which can set the blocked versions of a - * package). - */ -export function setup(options: SetupOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['namespace', 'cap']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'namespace', - function: 'setup', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface BlockVersionArguments { - namespace: RawTransactionArgument; - cap: RawTransactionArgument; - version: RawTransactionArgument; -} -export interface BlockVersionOptions { - package?: string; - arguments: - | BlockVersionArguments - | [ - namespace: RawTransactionArgument, - cap: RawTransactionArgument, - version: RawTransactionArgument, - ]; -} -/** - * Allows the package admin to block a version of the package. - * - * This is only used in case of emergency (e.g. security consideration), or if - * there is a breaking change - */ -export function blockVersion(options: BlockVersionOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null, 'u64'] satisfies (string | null)[]; - const parameterNames = ['namespace', 'cap', 'version']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'namespace', - function: 'block_version', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface UnblockVersionArguments { - namespace: RawTransactionArgument; - cap: RawTransactionArgument; - version: RawTransactionArgument; -} -export interface UnblockVersionOptions { - package?: string; - arguments: - | UnblockVersionArguments - | [ - namespace: RawTransactionArgument, - cap: RawTransactionArgument, - version: RawTransactionArgument, - ]; -} -/** Allows the package admin to unblock a version of the package. */ -export function unblockVersion(options: UnblockVersionOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null, 'u64'] satisfies (string | null)[]; - const parameterNames = ['namespace', 'cap', 'version']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'namespace', - function: 'unblock_version', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface PolicyExistsArguments { - namespace: RawTransactionArgument; -} -export interface PolicyExistsOptions { - package?: string; - arguments: PolicyExistsArguments | [namespace: RawTransactionArgument]; - typeArguments: [string]; -} -/** Check if `Policy` exists in the namespace */ -export function policyExists(options: PolicyExistsOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['namespace']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'namespace', - function: 'policy_exists', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface PolicyAddressArguments { - namespace: RawTransactionArgument; -} -export interface PolicyAddressOptions { - package?: string; - arguments: PolicyAddressArguments | [namespace: RawTransactionArgument]; - typeArguments: [string]; -} -/** The derived address for `Policy` */ -export function policyAddress(options: PolicyAddressOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['namespace']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'namespace', - function: 'policy_address', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface AccountExistsArguments { - namespace: RawTransactionArgument; - owner: RawTransactionArgument; -} -export interface AccountExistsOptions { - package?: string; - arguments: - | AccountExistsArguments - | [namespace: RawTransactionArgument, owner: RawTransactionArgument]; -} -export function accountExists(options: AccountExistsOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, 'address'] satisfies (string | null)[]; - const parameterNames = ['namespace', 'owner']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'namespace', - function: 'account_exists', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface AccountAddressArguments { - namespace: RawTransactionArgument; - owner: RawTransactionArgument; -} -export interface AccountAddressOptions { - package?: string; - arguments: - | AccountAddressArguments - | [namespace: RawTransactionArgument, owner: RawTransactionArgument]; -} -export function accountAddress(options: AccountAddressOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, 'address'] satisfies (string | null)[]; - const parameterNames = ['namespace', 'owner']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'namespace', - function: 'account_address', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} diff --git a/sdk/pas/src/contracts/pas/policy.ts b/sdk/pas/src/contracts/pas/policy.ts deleted file mode 100644 index 4458a07..0000000 --- a/sdk/pas/src/contracts/pas/policy.ts +++ /dev/null @@ -1,214 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ -import { bcs } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { - MoveStruct, - MoveTuple, - normalizeMoveArguments, - type RawTransactionArgument, -} from '../utils/index.js'; -import * as type_name from './deps/std/type_name.js'; -import * as vec_map from './deps/sui/vec_map.js'; -import * as vec_set from './deps/sui/vec_set.js'; -import * as versioning from './versioning.js'; - -const $moduleName = '@mysten/pas::policy'; -export const Policy = new MoveStruct({ - name: `${$moduleName}::Policy`, - fields: { - id: bcs.Address, - /** - * The required approvals per request type. The key must be one of the request - * types (e.g. `send_funds`, `unlock_funds` or `clawback_funds`). - * - * The value is a vector of approvals that need to be gather to resolve the - * request. - */ - required_approvals: vec_map.VecMap(bcs.string(), vec_set.VecSet(type_name.TypeName)), - /** - * Block versions to break backwards compatibility -- only used in case of - * emergency. - */ - versioning: versioning.Versioning, - /** Whether clawback is allowed for this policy. */ - clawback_allowed: bcs.bool(), - }, -}); -export const PolicyCap = new MoveStruct({ - name: `${$moduleName}::PolicyCap`, - fields: { - id: bcs.Address, - }, -}); -export const PolicyCapKey = new MoveTuple({ - name: `${$moduleName}::PolicyCapKey`, - fields: [bcs.bool()], -}); -export interface NewForCurrencyArguments { - namespace: RawTransactionArgument; - Cap: RawTransactionArgument; - clawbackAllowed: RawTransactionArgument; -} -export interface NewForCurrencyOptions { - package?: string; - arguments: - | NewForCurrencyArguments - | [ - namespace: RawTransactionArgument, - Cap: RawTransactionArgument, - clawbackAllowed: RawTransactionArgument, - ]; - typeArguments: [string]; -} -export function newForCurrency(options: NewForCurrencyOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null, 'bool'] satisfies (string | null)[]; - const parameterNames = ['namespace', 'Cap', 'clawbackAllowed']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'policy', - function: 'new_for_currency', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface ShareArguments { - policy: RawTransactionArgument; -} -export interface ShareOptions { - package?: string; - arguments: ShareArguments | [policy: RawTransactionArgument]; - typeArguments: [string]; -} -export function share(options: ShareOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['policy']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'policy', - function: 'share', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface RequiredApprovalsArguments { - policy: RawTransactionArgument; - actionType: RawTransactionArgument; -} -export interface RequiredApprovalsOptions { - package?: string; - arguments: - | RequiredApprovalsArguments - | [policy: RawTransactionArgument, actionType: RawTransactionArgument]; - typeArguments: [string]; -} -/** Get the set of required approvals for a given action. */ -export function requiredApprovals(options: RequiredApprovalsOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, '0x1::string::String'] satisfies (string | null)[]; - const parameterNames = ['policy', 'actionType']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'policy', - function: 'required_approvals', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface SetRequiredApprovalArguments { - policy: RawTransactionArgument; - cap: RawTransactionArgument; - action: RawTransactionArgument; -} -export interface SetRequiredApprovalOptions { - package?: string; - arguments: - | SetRequiredApprovalArguments - | [ - policy: RawTransactionArgument, - cap: RawTransactionArgument, - action: RawTransactionArgument, - ]; - typeArguments: [string, string]; -} -export function setRequiredApproval(options: SetRequiredApprovalOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null, '0x1::string::String'] satisfies (string | null)[]; - const parameterNames = ['policy', 'cap', 'action']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'policy', - function: 'set_required_approval', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface RemoveActionApprovalArguments { - policy: RawTransactionArgument; - _: RawTransactionArgument; - action: RawTransactionArgument; -} -export interface RemoveActionApprovalOptions { - package?: string; - arguments: - | RemoveActionApprovalArguments - | [ - policy: RawTransactionArgument, - _: RawTransactionArgument, - action: RawTransactionArgument, - ]; - typeArguments: [string]; -} -/** - * Remove the action approval for a given action (this will make all requests not - * resolve). - */ -export function removeActionApproval(options: RemoveActionApprovalOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null, '0x1::string::String'] satisfies (string | null)[]; - const parameterNames = ['policy', '_', 'action']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'policy', - function: 'remove_action_approval', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface SyncVersioningArguments { - policy: RawTransactionArgument; - namespace: RawTransactionArgument; -} -export interface SyncVersioningOptions { - package?: string; - arguments: - | SyncVersioningArguments - | [policy: RawTransactionArgument, namespace: RawTransactionArgument]; - typeArguments: [string]; -} -/** - * Allows syncing the versioning of a policy to the namespace's versioning. This is - * permission-less and can be done by anyone. - */ -export function syncVersioning(options: SyncVersioningOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['policy', 'namespace']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'policy', - function: 'sync_versioning', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} diff --git a/sdk/pas/src/contracts/pas/request.ts b/sdk/pas/src/contracts/pas/request.ts deleted file mode 100644 index f6a5c9c..0000000 --- a/sdk/pas/src/contracts/pas/request.ts +++ /dev/null @@ -1,89 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ -import { type BcsType } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js'; -import * as type_name from './deps/std/type_name.js'; -import * as vec_set from './deps/sui/vec_set.js'; - -const $moduleName = '@mysten/pas::request'; -/** A base request type. Examples: `Request>` `Request>` */ -export function Request>(...typeParameters: [K]) { - return new MoveStruct({ - name: `${$moduleName}::Request<${typeParameters[0].name as K['name']}>`, - fields: { - /** The collected approvals for this request */ - approvals: vec_set.VecSet(type_name.TypeName), - data: typeParameters[0], - }, - }); -} -export interface ApproveArguments> { - request: RawTransactionArgument; - Approval: RawTransactionArgument; -} -export interface ApproveOptions> { - package?: string; - arguments: - | ApproveArguments - | [request: RawTransactionArgument, Approval: RawTransactionArgument]; - typeArguments: [string, string]; -} -/** Adds an approval to a request. Can be called to resolve rules */ -export function approve>(options: ApproveOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, `${options.typeArguments[1]}`] satisfies (string | null)[]; - const parameterNames = ['request', 'Approval']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'request', - function: 'approve', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface DataArguments { - request: RawTransactionArgument; -} -export interface DataOptions { - package?: string; - arguments: DataArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function data(options: DataOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'request', - function: 'data', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface ApprovalsArguments { - request: RawTransactionArgument; -} -export interface ApprovalsOptions { - package?: string; - arguments: ApprovalsArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function approvals(options: ApprovalsOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'request', - function: 'approvals', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} diff --git a/sdk/pas/src/contracts/pas/send_funds.ts b/sdk/pas/src/contracts/pas/send_funds.ts deleted file mode 100644 index 97eee3a..0000000 --- a/sdk/pas/src/contracts/pas/send_funds.ts +++ /dev/null @@ -1,176 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ -import { bcs, type BcsType } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js'; - -const $moduleName = '@mysten/pas::send_funds'; -/** - * A transfer request that is generated once a send funds request is initialized. - * - * A hot potato that is issued when a transfer is initiated. It can only be - * resolved by presenting a witness `U` that is the witness of `Policy` - * - * This enables the `resolve` function of each smart contract to be flexible and - * implement its own mechanisms for validation. The individual resolution module - * can: - * - * - Check whitelists/blacklists - * - Enforce holding periods - * - Collect fees - * - Emit regulatory events - * - Handle dividends/distributions - * - Implement any jurisdiction-specific rules - */ -export function SendFunds>(...typeParameters: [T]) { - return new MoveStruct({ - name: `${$moduleName}::SendFunds<${typeParameters[0].name as T['name']}>`, - fields: { - /** `sender` is the wallet OR object address, NOT the account address */ - sender: bcs.Address, - /** `recipient` is the wallet OR object address, NOT the account address */ - recipient: bcs.Address, - /** The ID of the account the funds are coming from */ - sender_account_id: bcs.Address, - /** The ID of the account the funds are going to */ - recipient_account_id: bcs.Address, - /** The balance being transferred */ - funds: typeParameters[0], - }, - }); -} -export interface SenderArguments { - request: RawTransactionArgument; -} -export interface SenderOptions { - package?: string; - arguments: SenderArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function sender(options: SenderOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'send_funds', - function: 'sender', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface RecipientArguments { - request: RawTransactionArgument; -} -export interface RecipientOptions { - package?: string; - arguments: RecipientArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function recipient(options: RecipientOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'send_funds', - function: 'recipient', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface SenderAccountIdArguments { - request: RawTransactionArgument; -} -export interface SenderAccountIdOptions { - package?: string; - arguments: SenderAccountIdArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function senderAccountId(options: SenderAccountIdOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'send_funds', - function: 'sender_account_id', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface RecipientAccountIdArguments { - request: RawTransactionArgument; -} -export interface RecipientAccountIdOptions { - package?: string; - arguments: RecipientAccountIdArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function recipientAccountId(options: RecipientAccountIdOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'send_funds', - function: 'recipient_account_id', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface FundsArguments { - request: RawTransactionArgument; -} -export interface FundsOptions { - package?: string; - arguments: FundsArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function funds(options: FundsOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'send_funds', - function: 'funds', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface ResolveBalanceArguments { - request: RawTransactionArgument; - policy: RawTransactionArgument; -} -export interface ResolveBalanceOptions { - package?: string; - arguments: - | ResolveBalanceArguments - | [request: RawTransactionArgument, policy: RawTransactionArgument]; - typeArguments: [string]; -} -/** - * resolve a transfer request, if funds management is enabled & there are enough - * approvals. - */ -export function resolveBalance(options: ResolveBalanceOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['request', 'policy']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'send_funds', - function: 'resolve_balance', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} diff --git a/sdk/pas/src/contracts/pas/templates.ts b/sdk/pas/src/contracts/pas/templates.ts deleted file mode 100644 index 035c88e..0000000 --- a/sdk/pas/src/contracts/pas/templates.ts +++ /dev/null @@ -1,103 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ - -/** - * Template stores all the Command templates for PAS. - * - * This is the lookup point for PTB resolution on the client-side! There's no - * versioning enforcement here, as this is purely an off-chain used endpoint. - */ - -import { bcs } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js'; - -const $moduleName = '@mysten/pas::templates'; -export const PAS = new MoveStruct({ - name: `${$moduleName}::PAS`, - fields: { - dummy_field: bcs.bool(), - }, -}); -export const Templates = new MoveStruct({ - name: `${$moduleName}::Templates`, - fields: { - id: bcs.Address, - }, -}); -export interface SetupArguments { - namespace: RawTransactionArgument; -} -export interface SetupOptions { - package?: string; - arguments: SetupArguments | [namespace: RawTransactionArgument]; -} -/** Create the templates registry */ -export function setup(options: SetupOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['namespace']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'templates', - function: 'setup', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface SetTemplateCommandArguments { - templates: RawTransactionArgument; - _: RawTransactionArgument; - command: RawTransactionArgument; -} -export interface SetTemplateCommandOptions { - package?: string; - arguments: - | SetTemplateCommandArguments - | [ - templates: RawTransactionArgument, - _: RawTransactionArgument, - command: RawTransactionArgument, - ]; - typeArguments: [string]; -} -/** Sets the PTB template for a given Action. */ -export function setTemplateCommand(options: SetTemplateCommandOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null, null] satisfies (string | null)[]; - const parameterNames = ['templates', '_', 'command']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'templates', - function: 'set_template_command', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface UnsetTemplateCommandArguments { - templates: RawTransactionArgument; - _: RawTransactionArgument; -} -export interface UnsetTemplateCommandOptions { - package?: string; - arguments: - | UnsetTemplateCommandArguments - | [templates: RawTransactionArgument, _: RawTransactionArgument]; - typeArguments: [string]; -} -export function unsetTemplateCommand(options: UnsetTemplateCommandOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['templates', '_']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'templates', - function: 'unset_template_command', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} diff --git a/sdk/pas/src/contracts/pas/unlock_funds.ts b/sdk/pas/src/contracts/pas/unlock_funds.ts deleted file mode 100644 index 253a545..0000000 --- a/sdk/pas/src/contracts/pas/unlock_funds.ts +++ /dev/null @@ -1,157 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ -import { bcs, type BcsType } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js'; - -const $moduleName = '@mysten/pas::unlock_funds'; -/** - * An unlock funds request that is generated once a Permissioned Funds Transfer is - * initiated. - * - * This can be resolved in two ways: - * - * 1. If the asset is `permissioned` (there's a `Policy` for that asset), it - * can only be resolved by the creator by calling - * `policy::resolve_unlock_funds` - * 2. If the asset is not permissioned, it can be resolved by any address by - * calling `unlock_funds::resolve_unrestricted_balance` - */ -export function UnlockFunds>(...typeParameters: [T]) { - return new MoveStruct({ - name: `${$moduleName}::UnlockFunds<${typeParameters[0].name as T['name']}>`, - fields: { - /** `owner` is the wallet OR object address, NOT the account address */ - owner: bcs.Address, - /** The ID of the account the funds are coming from */ - account_id: bcs.Address, - /** The actual balance being transferred */ - funds: typeParameters[0], - }, - }); -} -export interface OwnerArguments { - request: RawTransactionArgument; -} -export interface OwnerOptions { - package?: string; - arguments: OwnerArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function owner(options: OwnerOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'unlock_funds', - function: 'owner', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface AccountIdArguments { - request: RawTransactionArgument; -} -export interface AccountIdOptions { - package?: string; - arguments: AccountIdArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function accountId(options: AccountIdOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'unlock_funds', - function: 'account_id', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface FundsArguments { - request: RawTransactionArgument; -} -export interface FundsOptions { - package?: string; - arguments: FundsArguments | [request: RawTransactionArgument]; - typeArguments: [string]; -} -export function funds(options: FundsOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['request']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'unlock_funds', - function: 'funds', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface ResolveUnrestrictedBalanceArguments { - request: RawTransactionArgument; - namespace: RawTransactionArgument; -} -export interface ResolveUnrestrictedBalanceOptions { - package?: string; - arguments: - | ResolveUnrestrictedBalanceArguments - | [request: RawTransactionArgument, namespace: RawTransactionArgument]; - typeArguments: [string]; -} -/** - * This enables unlocking assets that are not managed by a Policy within the - * system. If a `Policy` exists, they can only be resolved from within the - * system. - * - * For example, `SUI` will never be a managed asset, so the owner needs to be able - * to withdraw if anyone transfers some to their account. - */ -export function resolveUnrestrictedBalance(options: ResolveUnrestrictedBalanceOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['request', 'namespace']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'unlock_funds', - function: 'resolve_unrestricted_balance', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface ResolveArguments { - request: RawTransactionArgument; - policy: RawTransactionArgument; -} -export interface ResolveOptions { - package?: string; - arguments: - | ResolveArguments - | [request: RawTransactionArgument, policy: RawTransactionArgument]; - typeArguments: [string]; -} -/** - * Resolve an unlock funds request as long as funds management is enabled and there - * are enough valid approvals. - */ -export function resolve(options: ResolveOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['request', 'policy']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'unlock_funds', - function: 'resolve', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} diff --git a/sdk/pas/src/contracts/pas/versioning.ts b/sdk/pas/src/contracts/pas/versioning.ts deleted file mode 100644 index 2a848e5..0000000 --- a/sdk/pas/src/contracts/pas/versioning.ts +++ /dev/null @@ -1,71 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ - -/** - * Versioning module. - * - * This module is responsible for managing the versioning of the package. - * - * It allows for blocking specific versions of the package in case of emergency, or - * to slowly deprecate an earlier feature. - */ - -import { bcs } from '@mysten/sui/bcs'; -import { type Transaction } from '@mysten/sui/transactions'; - -import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js'; -import * as vec_set from './deps/sui/vec_set.js'; - -const $moduleName = '@mysten/pas::versioning'; -export const Versioning = new MoveStruct({ - name: `${$moduleName}::Versioning`, - fields: { - blocked_versions: vec_set.VecSet(bcs.u64()), - }, -}); -export interface IsValidVersionArguments { - versioning: RawTransactionArgument; - version: RawTransactionArgument; -} -export interface IsValidVersionOptions { - package?: string; - arguments: - | IsValidVersionArguments - | [ - versioning: RawTransactionArgument, - version: RawTransactionArgument, - ]; -} -/** Verify that a version is not part of the blocked version list. */ -export function isValidVersion(options: IsValidVersionOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null, 'u64'] satisfies (string | null)[]; - const parameterNames = ['versioning', 'version']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'versioning', - function: 'is_valid_version', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface AssertIsValidVersionArguments { - versioning: RawTransactionArgument; -} -export interface AssertIsValidVersionOptions { - package?: string; - arguments: AssertIsValidVersionArguments | [versioning: RawTransactionArgument]; -} -export function assertIsValidVersion(options: AssertIsValidVersionOptions) { - const packageAddress = options.package ?? '@mysten/pas'; - const argumentsTypes = [null] satisfies (string | null)[]; - const parameterNames = ['versioning']; - return (tx: Transaction) => - tx.moveCall({ - package: packageAddress, - module: 'versioning', - function: 'assert_is_valid_version', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} diff --git a/sdk/pas/src/contracts/ptb/ptb.ts b/sdk/pas/src/contracts/ptb/ptb.ts deleted file mode 100644 index b09f95d..0000000 --- a/sdk/pas/src/contracts/ptb/ptb.ts +++ /dev/null @@ -1,823 +0,0 @@ -/************************************************************** - * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED * - **************************************************************/ - -/** Module: ptb */ - -import { bcs, type BcsType } from '@mysten/sui/bcs'; -import { type Transaction as Transaction_1 } from '@mysten/sui/transactions'; - -import { - MoveEnum, - MoveStruct, - MoveTuple, - normalizeMoveArguments, - type RawTransactionArgument, -} from '../utils/index.js'; - -const $moduleName = '@mysten/ptb::ptb'; -export const Command = new MoveTuple({ - name: `${$moduleName}::Command`, - fields: [bcs.u8(), bcs.vector(bcs.u8())], -}); -export const Transaction = new MoveStruct({ - name: `${$moduleName}::Transaction`, - fields: { - commands: bcs.vector(Command), - }, -}); -/** - * Defines a simplified `ObjectArg` type for the `Transaction`. - * - * Differences with canonical Sui `ObjectArg` type: - * - * - Uses `address` type as a fixed-length sequence of bytes without length prefix. - * - Extends the number of variants to support off-chain resolution. - */ -export const ObjectArg = new MoveEnum({ - name: `${$moduleName}::ObjectArg`, - fields: { - ImmOrOwnedObject: new MoveStruct({ - name: `ObjectArg.ImmOrOwnedObject`, - fields: { - object_id: bcs.Address, - sequence_number: bcs.u64(), - digest: bcs.Address, - }, - }), - SharedObject: new MoveStruct({ - name: `ObjectArg.SharedObject`, - fields: { - object_id: bcs.Address, - initial_shared_version: bcs.u64(), - is_mutable: bcs.bool(), - }, - }), - Receiving: new MoveStruct({ - name: `ObjectArg.Receiving`, - fields: { - object_id: bcs.Address, - sequence_number: bcs.u64(), - digest: bcs.Address, - }, - }), - Ext: bcs.string(), - }, -}); -export const WithdrawFrom = new MoveEnum({ - name: `${$moduleName}::WithdrawFrom`, - fields: { - Sender: null, - Sponsor: null, - }, -}); -/** - * Defines a simplified `CallArg` type for `Transaction`. - * - * Differences with canonical Sui `CallArg` type: - * - * - ObjectArg is a simplified, unresolved representation of Object arguments; - * - Ext(...) is a custom extension for the `CallArg` which allows off-chain - * resolvers to convert them into the appropriate values for context. - */ -export const CallArg = new MoveEnum({ - name: `${$moduleName}::CallArg`, - fields: { - Pure: bcs.vector(bcs.u8()), - Object: ObjectArg, - FundsWithdrawal: new MoveStruct({ - name: `CallArg.FundsWithdrawal`, - fields: { - amount: bcs.u64(), - type_name: bcs.string(), - withdraw_from: WithdrawFrom, - }, - }), - /** - * Extended arguments for off-chain resolution. Can be created and registered in a - * transaction through `ext_input`. - * - * Extended arguments are namespaced by Type associated with them. In an - * application, this can be the root object, or a special type used for off chain - * resolution. - */ - Ext: new MoveTuple({ name: `CallArg.Ext`, fields: [bcs.string(), bcs.string()] }), - }, -}); -/** Defines a simplified `Argument` type for the `Transaction`. */ -export const Argument = new MoveEnum({ - name: `${$moduleName}::Argument`, - fields: { - GasCoin: null, - Input: CallArg, - Result: bcs.u16(), - NestedResult: new MoveTuple({ name: `Argument.NestedResult`, fields: [bcs.u16(), bcs.u16()] }), - /** - * Extended arguments for off-chain resolution. Cannot be constructed directly, - * only through future extensions. - */ - Ext: bcs.vector(bcs.u8()), - }, -}); -export const MoveCall = new MoveStruct({ - name: `${$moduleName}::MoveCall`, - fields: { - package_id: bcs.string(), - module_name: bcs.string(), - function: bcs.string(), - arguments: bcs.vector(Argument), - type_arguments: bcs.vector(bcs.string()), - }, -}); -export const TransferObjects = new MoveStruct({ - name: `${$moduleName}::TransferObjects`, - fields: { - objects: bcs.vector(Argument), - to: Argument, - }, -}); -export const SplitCoins = new MoveStruct({ - name: `${$moduleName}::SplitCoins`, - fields: { - coin: Argument, - amounts: bcs.vector(Argument), - }, -}); -export const MergeCoins = new MoveStruct({ - name: `${$moduleName}::MergeCoins`, - fields: { - coin: Argument, - coins: bcs.vector(Argument), - }, -}); -export const Publish = new MoveStruct({ - name: `${$moduleName}::Publish`, - fields: { - modules_bytes: bcs.vector(bcs.vector(bcs.u8())), - dependencies: bcs.vector(bcs.Address), - }, -}); -export const MakeMoveVec = new MoveStruct({ - name: `${$moduleName}::MakeMoveVec`, - fields: { - element_type: bcs.option(bcs.string()), - elements: bcs.vector(Argument), - }, -}); -export const Upgrade = new MoveStruct({ - name: `${$moduleName}::Upgrade`, - fields: { - modules_bytes: bcs.vector(bcs.vector(bcs.u8())), - dependencies: bcs.vector(bcs.Address), - object_id: bcs.Address, - upgrade_ticket: Argument, - }, -}); -export interface NewOptions { - package?: string; - arguments?: []; -} -/** Create a new Transaction builder. */ -export function _new(options: NewOptions = {}) { - const packageAddress = options.package ?? '@mysten/ptb'; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'new', - }); -} -export interface ClockOptions { - package?: string; - arguments?: []; -} -/** Shorthand for `object_by_id` with `0x6` (Clock). */ -export function clock(options: ClockOptions = {}) { - const packageAddress = options.package ?? '@mysten/ptb'; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'clock', - }); -} -export interface RandomOptions { - package?: string; - arguments?: []; -} -/** Shorthand for `object_by_id` with `0x8` (Random). */ -export function random(options: RandomOptions = {}) { - const packageAddress = options.package ?? '@mysten/ptb'; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'random', - }); -} -export interface DisplayOptions { - package?: string; - arguments?: []; -} -/** Shorthand for `object_by_id` with `0xD` (DisplayRegistry). */ -export function display(options: DisplayOptions = {}) { - const packageAddress = options.package ?? '@mysten/ptb'; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'display', - }); -} -export interface DenyListOptions { - package?: string; - arguments?: []; -} -/** Shorthand for `object_by_id` with `0x403` (DenyList). */ -export function denyList(options: DenyListOptions = {}) { - const packageAddress = options.package ?? '@mysten/ptb'; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'deny_list', - }); -} -export interface CoinRegistryOptions { - package?: string; - arguments?: []; -} -/** Shorthand for `object_by_id` with `0xC` (CoinRegistry). */ -export function coinRegistry(options: CoinRegistryOptions = {}) { - const packageAddress = options.package ?? '@mysten/ptb'; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'coin_registry', - }); -} -export interface AccumulatorRootOptions { - package?: string; - arguments?: []; -} -/** Shorthand for `object_by_id` with `0xACC` (AccumulatorRoot). */ -export function accumulatorRoot(options: AccumulatorRootOptions = {}) { - const packageAddress = options.package ?? '@mysten/ptb'; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'accumulator_root', - }); -} -export interface GasOptions { - package?: string; - arguments?: []; -} -/** Create a gas coin input. */ -export function gas(options: GasOptions = {}) { - const packageAddress = options.package ?? '@mysten/ptb'; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'gas', - }); -} -export interface PureArguments> { - value: RawTransactionArgument; -} -export interface PureOptions> { - package?: string; - arguments: PureArguments | [value: RawTransactionArgument]; - typeArguments: [string]; -} -/** Create a pure input. */ -export function pure>(options: PureOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = [`${options.typeArguments[0]}`] satisfies (string | null)[]; - const parameterNames = ['value']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'pure', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface ObjectRefArguments { - objectId: RawTransactionArgument; - sequenceNumber: RawTransactionArgument; - digest: RawTransactionArgument; -} -export interface ObjectRefOptions { - package?: string; - arguments: - | ObjectRefArguments - | [ - objectId: RawTransactionArgument, - sequenceNumber: RawTransactionArgument, - digest: RawTransactionArgument, - ]; -} -/** - * Create a fully-resolved immutable or owned object argument. Should be used with - * caution, yet for immutable or owned objects refs can be stored. For automatic - * version resolution, use `object_by_id`. - */ -export function objectRef(options: ObjectRefOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['0x2::object::ID', 'u64', 'address'] satisfies (string | null)[]; - const parameterNames = ['objectId', 'sequenceNumber', 'digest']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'object_ref', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface SharedObjectRefArguments { - objectId: RawTransactionArgument; - initialSharedVersion: RawTransactionArgument; - isMutable: RawTransactionArgument; -} -export interface SharedObjectRefOptions { - package?: string; - arguments: - | SharedObjectRefArguments - | [ - objectId: RawTransactionArgument, - initialSharedVersion: RawTransactionArgument, - isMutable: RawTransactionArgument, - ]; -} -/** - * Create a fully-resolved shared object argument. Should be used with caution, yet - * for shared objects refs can be stored. For automatic version resolution, use - * `shared_object_by_id`. - * - * TODO: should it be named `consensus_managed_object_ref`? NOTE: the naming is - * changing elsewhere - */ -export function sharedObjectRef(options: SharedObjectRefOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['0x2::object::ID', 'u64', 'bool'] satisfies (string | null)[]; - const parameterNames = ['objectId', 'initialSharedVersion', 'isMutable']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'shared_object_ref', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface ReceivingObjectRefArguments { - objectId: RawTransactionArgument; - sequenceNumber: RawTransactionArgument; - digest: RawTransactionArgument; -} -export interface ReceivingObjectRefOptions { - package?: string; - arguments: - | ReceivingObjectRefArguments - | [ - objectId: RawTransactionArgument, - sequenceNumber: RawTransactionArgument, - digest: RawTransactionArgument, - ]; -} -/** - * Create a fully-resolved receiving object argument. Should be used with caution, - * since the version of the object is dynamic. For automatic version resolution, - * use `object_by_id`. - */ -export function receivingObjectRef(options: ReceivingObjectRefOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['0x2::object::ID', 'u64', 'address'] satisfies (string | null)[]; - const parameterNames = ['objectId', 'sequenceNumber', 'digest']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'receiving_object_ref', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface ObjectByTypeOptions { - package?: string; - arguments?: []; - typeArguments: [string]; -} -/** Create an off-chain input handler for a given type T. */ -export function objectByType(options: ObjectByTypeOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'object_by_type', - typeArguments: options.typeArguments, - }); -} -export interface ObjectByTypeStringArguments { - typeName: RawTransactionArgument; -} -export interface ObjectByTypeStringOptions { - package?: string; - arguments: ObjectByTypeStringArguments | [typeName: RawTransactionArgument]; -} -/** Create an off-chain input handler for a given type as a String. */ -export function objectByTypeString(options: ObjectByTypeStringOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['0x1::string::String'] satisfies (string | null)[]; - const parameterNames = ['typeName']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'object_by_type_string', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface ObjectByIdArguments { - id: RawTransactionArgument; -} -export interface ObjectByIdOptions { - package?: string; - arguments: ObjectByIdArguments | [id: RawTransactionArgument]; -} -/** Create an off-chain input handler for an object with a specific ID. */ -export function objectById(options: ObjectByIdOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['0x2::object::ID'] satisfies (string | null)[]; - const parameterNames = ['id']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'object_by_id', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface ReceivingObjectByIdArguments { - id: RawTransactionArgument; -} -export interface ReceivingObjectByIdOptions { - package?: string; - arguments: ReceivingObjectByIdArguments | [id: RawTransactionArgument]; -} -/** Create an off-chain input handler for a receiving object with a specific ID. */ -export function receivingObjectById(options: ReceivingObjectByIdOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['0x2::object::ID'] satisfies (string | null)[]; - const parameterNames = ['id']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'receiving_object_by_id', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface ExtInputArguments { - name: RawTransactionArgument; -} -export interface ExtInputOptions { - package?: string; - arguments: ExtInputArguments | [name: RawTransactionArgument]; - typeArguments: [string]; -} -/** - * Create an external input handler. Expected to be understood by the off-chain - * tooling. - */ -export function extInput(options: ExtInputOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['0x1::string::String'] satisfies (string | null)[]; - const parameterNames = ['name']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'ext_input', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - typeArguments: options.typeArguments, - }); -} -export interface ExtInputRawArguments { - namespace: RawTransactionArgument; - name: RawTransactionArgument; -} -export interface ExtInputRawOptions { - package?: string; - arguments: - | ExtInputRawArguments - | [namespace: RawTransactionArgument, name: RawTransactionArgument]; -} -/** - * Create an external input handler for a given type T. This can be used to - * hardcode the namespace value without having access to `T`. - */ -export function extInputRaw(options: ExtInputRawOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['0x1::string::String', '0x1::string::String'] satisfies (string | null)[]; - const parameterNames = ['namespace', 'name']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'ext_input_raw', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface CommandArguments { - self: RawTransactionArgument; - command: RawTransactionArgument; -} -export interface CommandOptions { - package?: string; - arguments: - | CommandArguments - | [self: RawTransactionArgument, command: RawTransactionArgument]; -} -/** - * Register a command in the Transaction builder. Returns the Argument, which is - * treated as the `Result(idx)` of the command, and can be turned into a nested - * result `NestedResult(idx, idx)`. - */ -export function command(options: CommandOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = [null, null] satisfies (string | null)[]; - const parameterNames = ['self', 'command']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'command', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface NestedArguments { - self: RawTransactionArgument; - subIdx: RawTransactionArgument; -} -export interface NestedOptions { - package?: string; - arguments: - | NestedArguments - | [self: RawTransactionArgument, subIdx: RawTransactionArgument]; -} -/** - * Spawn a nested result out of a (just) `Result`. Simple result is a command - * output. - */ -export function nested(options: NestedOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = [null, 'u16'] satisfies (string | null)[]; - const parameterNames = ['self', 'subIdx']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'nested', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface MoveCallArguments { - packageId: RawTransactionArgument; - moduleName: RawTransactionArgument; - function: RawTransactionArgument; - arguments: RawTransactionArgument; - typeArguments: RawTransactionArgument; -} -export interface MoveCallOptions { - package?: string; - arguments: - | MoveCallArguments - | [ - packageId: RawTransactionArgument, - moduleName: RawTransactionArgument, - function: RawTransactionArgument, - arguments: RawTransactionArgument, - typeArguments: RawTransactionArgument, - ]; -} -/** Create a `MoveCall` command. */ -export function moveCall(options: MoveCallOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = [ - '0x1::string::String', - '0x1::string::String', - '0x1::string::String', - 'vector', - 'vector<0x1::string::String>', - ] satisfies (string | null)[]; - const parameterNames = ['packageId', 'moduleName', 'function', 'arguments', 'typeArguments']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'move_call', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface TransferObjectsArguments { - objects: RawTransactionArgument; - to: RawTransactionArgument; -} -export interface TransferObjectsOptions { - package?: string; - arguments: - | TransferObjectsArguments - | [objects: RawTransactionArgument, to: RawTransactionArgument]; -} -/** - * Create a `TransferObjects` command Expects a vector of arguments to transfer and - * an address value for destination. - */ -export function transferObjects(options: TransferObjectsOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['vector', null] satisfies (string | null)[]; - const parameterNames = ['objects', 'to']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'transfer_objects', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface SplitCoinsArguments { - coin: RawTransactionArgument; - amounts: RawTransactionArgument; -} -export interface SplitCoinsOptions { - package?: string; - arguments: - | SplitCoinsArguments - | [coin: RawTransactionArgument, amounts: RawTransactionArgument]; -} -/** Create a `SplitCoins` command. */ -export function splitCoins(options: SplitCoinsOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = [null, 'vector'] satisfies (string | null)[]; - const parameterNames = ['coin', 'amounts']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'split_coins', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface MergeCoinsArguments { - coin: RawTransactionArgument; - coins: RawTransactionArgument; -} -export interface MergeCoinsOptions { - package?: string; - arguments: - | MergeCoinsArguments - | [coin: RawTransactionArgument, coins: RawTransactionArgument]; -} -/** - * Create a `MergeCoins` command. Takes a Coin Argument and a vector of other coin - * arguments to merge into it. - */ -export function mergeCoins(options: MergeCoinsOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = [null, 'vector'] satisfies (string | null)[]; - const parameterNames = ['coin', 'coins']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'merge_coins', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface PublishArguments { - modulesBytes: RawTransactionArgument; - dependencies: RawTransactionArgument; -} -export interface PublishOptions { - package?: string; - arguments: - | PublishArguments - | [ - modulesBytes: RawTransactionArgument, - dependencies: RawTransactionArgument, - ]; -} -/** - * Create a `Publish` command. Takes a vector of modules' bytes and a vector of - * dependencies. - */ -export function publish(options: PublishOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['vector>', 'vector<0x2::object::ID>'] satisfies ( - | string - | null - )[]; - const parameterNames = ['modulesBytes', 'dependencies']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'publish', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface MakeMoveVecArguments { - elementType: RawTransactionArgument; - elements: RawTransactionArgument; -} -export interface MakeMoveVecOptions { - package?: string; - arguments: - | MakeMoveVecArguments - | [ - elementType: RawTransactionArgument, - elements: RawTransactionArgument, - ]; -} -/** - * Create a `MakeMoveVec` command. Takes an optional element type and a vector of - * elements to make into a vector. - */ -export function makeMoveVec(options: MakeMoveVecOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['0x1::option::Option<0x1::string::String>', 'vector'] satisfies ( - | string - | null - )[]; - const parameterNames = ['elementType', 'elements']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'make_move_vec', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface UpgradeArguments { - modulesBytes: RawTransactionArgument; - dependencies: RawTransactionArgument; - objectId: RawTransactionArgument; - upgradeTicket: RawTransactionArgument; -} -export interface UpgradeOptions { - package?: string; - arguments: - | UpgradeArguments - | [ - modulesBytes: RawTransactionArgument, - dependencies: RawTransactionArgument, - objectId: RawTransactionArgument, - upgradeTicket: RawTransactionArgument, - ]; -} -/** - * Create a `Upgrade` command. Takes a vector of modules' bytes, a vector of - * dependencies, an updated package ID, and an upgrade ticket. - */ -export function upgrade(options: UpgradeOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = [ - 'vector>', - 'vector<0x2::object::ID>', - '0x2::object::ID', - null, - ] satisfies (string | null)[]; - const parameterNames = ['modulesBytes', 'dependencies', 'objectId', 'upgradeTicket']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'upgrade', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} -export interface ExtArguments { - data: RawTransactionArgument; -} -export interface ExtOptions { - package?: string; - arguments: ExtArguments | [data: RawTransactionArgument]; -} -/** Create an `Ext` command. */ -export function ext(options: ExtOptions) { - const packageAddress = options.package ?? '@mysten/ptb'; - const argumentsTypes = ['vector'] satisfies (string | null)[]; - const parameterNames = ['data']; - return (tx: Transaction_1) => - tx.moveCall({ - package: packageAddress, - module: 'ptb', - function: 'ext', - arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames), - }); -} diff --git a/sdk/pas/src/contracts/utils/index.ts b/sdk/pas/src/contracts/utils/index.ts deleted file mode 100644 index 190a6a5..0000000 --- a/sdk/pas/src/contracts/utils/index.ts +++ /dev/null @@ -1,234 +0,0 @@ -import { - bcs, - BcsEnum, - BcsStruct, - BcsTuple, - BcsType, - TypeTag, - TypeTagSerializer, -} from '@mysten/sui/bcs'; -import { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client'; -import { isArgument, TransactionArgument } from '@mysten/sui/transactions'; -import { normalizeSuiAddress } from '@mysten/sui/utils'; - -const MOVE_STDLIB_ADDRESS = normalizeSuiAddress('0x1'); -const SUI_FRAMEWORK_ADDRESS = normalizeSuiAddress('0x2'); - -export type RawTransactionArgument = T | TransactionArgument; - -export interface GetOptions< - Include extends Omit = {}, -> extends SuiClientTypes.GetObjectOptions { - client: ClientWithCoreApi; -} - -export interface GetManyOptions< - Include extends Omit = {}, -> extends SuiClientTypes.GetObjectsOptions { - client: ClientWithCoreApi; -} - -export function getPureBcsSchema(typeTag: string | TypeTag): BcsType | null { - const parsedTag = typeof typeTag === 'string' ? TypeTagSerializer.parseFromStr(typeTag) : typeTag; - - if ('u8' in parsedTag) { - return bcs.U8; - } else if ('u16' in parsedTag) { - return bcs.U16; - } else if ('u32' in parsedTag) { - return bcs.U32; - } else if ('u64' in parsedTag) { - return bcs.U64; - } else if ('u128' in parsedTag) { - return bcs.U128; - } else if ('u256' in parsedTag) { - return bcs.U256; - } else if ('address' in parsedTag) { - return bcs.Address; - } else if ('bool' in parsedTag) { - return bcs.Bool; - } else if ('vector' in parsedTag) { - const type = getPureBcsSchema(parsedTag.vector); - return type ? bcs.vector(type) : null; - } else if ('struct' in parsedTag) { - const structTag = parsedTag.struct; - const pkg = normalizeSuiAddress(structTag.address); - - if (pkg === MOVE_STDLIB_ADDRESS) { - if ( - (structTag.module === 'ascii' || structTag.module === 'string') && - structTag.name === 'String' - ) { - return bcs.String; - } - - if (structTag.module === 'option' && structTag.name === 'Option') { - const type = getPureBcsSchema(structTag.typeParams[0]); - return type ? bcs.option(type) : null; - } - } - - if ( - pkg === SUI_FRAMEWORK_ADDRESS && - structTag.module === 'object' && - (structTag.name === 'ID' || structTag.name === 'UID') - ) { - return bcs.Address; - } - } - - return null; -} - -export function normalizeMoveArguments( - args: unknown[] | object, - argTypes: readonly (string | null)[], - parameterNames?: string[], -) { - const argLen = Array.isArray(args) ? args.length : Object.keys(args).length; - if (parameterNames && argLen !== parameterNames.length) { - throw new Error( - `Invalid number of arguments, expected ${parameterNames.length}, got ${argLen}`, - ); - } - - const normalizedArgs: TransactionArgument[] = []; - - let index = 0; - for (const [i, argType] of argTypes.entries()) { - if (argType === '0x2::clock::Clock') { - normalizedArgs.push((tx) => tx.object.clock()); - continue; - } - - if (argType === '0x2::random::Random') { - normalizedArgs.push((tx) => tx.object.random()); - continue; - } - - if (argType === '0x2::deny_list::DenyList') { - normalizedArgs.push((tx) => tx.object.denyList()); - continue; - } - - if (argType === '0x3::sui_system::SuiSystemState') { - normalizedArgs.push((tx) => tx.object.system()); - continue; - } - - let arg; - if (Array.isArray(args)) { - if (index >= args.length) { - throw new Error( - `Invalid number of arguments, expected at least ${index + 1}, got ${args.length}`, - ); - } - arg = args[index]; - } else { - if (!parameterNames) { - throw new Error(`Expected arguments to be passed as an array`); - } - const name = parameterNames[index]; - arg = args[name as keyof typeof args]; - - if (arg === undefined) { - throw new Error(`Parameter ${name} is required`); - } - } - - index += 1; - - if (typeof arg === 'function' || isArgument(arg)) { - normalizedArgs.push(arg as TransactionArgument); - continue; - } - - const type = argTypes[i]; - const bcsType = type === null ? null : getPureBcsSchema(type); - - if (bcsType) { - const bytes = bcsType.serialize(arg as never); - normalizedArgs.push((tx) => tx.pure(bytes)); - continue; - } else if (typeof arg === 'string') { - normalizedArgs.push((tx) => tx.object(arg)); - continue; - } - - throw new Error(`Invalid argument ${stringify(arg)} for type ${type}`); - } - - return normalizedArgs; -} - -export class MoveStruct< - T extends Record>, - const Name extends string = string, -> extends BcsStruct { - async get = {}>({ - objectId, - ...options - }: GetOptions): Promise< - SuiClientTypes.Object & { - json: BcsStruct['$inferType']; - } - > { - const [res] = await this.getMany({ - ...options, - objectIds: [objectId], - }); - - return res; - } - - async getMany = {}>({ - client, - ...options - }: GetManyOptions): Promise< - Array< - SuiClientTypes.Object & { - json: BcsStruct['$inferType']; - } - > - > { - const response = (await client.core.getObjects({ - ...options, - include: { - ...options.include, - content: true, - }, - })) as SuiClientTypes.GetObjectsResponse; - - return response.objects.map((obj) => { - if (obj instanceof Error) { - throw obj; - } - - return { - ...obj, - json: this.parse(obj.content), - }; - }); - } -} - -export class MoveEnum< - T extends Record | null>, - const Name extends string, -> extends BcsEnum {} - -export class MoveTuple< - T extends readonly BcsType[], - const Name extends string, -> extends BcsTuple {} - -function stringify(val: unknown) { - if (typeof val === 'object') { - return JSON.stringify(val, (val: unknown) => val); - } - if (typeof val === 'bigint') { - return val.toString(); - } - - return val; -} diff --git a/sdk/pas/src/derivation.ts b/sdk/pas/src/derivation.ts deleted file mode 100644 index 5cdf5f6..0000000 --- a/sdk/pas/src/derivation.ts +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import { bcs } from '@mysten/sui/bcs'; -import { deriveDynamicFieldID, deriveObjectID, normalizeSuiAddress } from '@mysten/sui/utils'; - -import type { PASPackageConfig } from './types.js'; - -/** - * Derives the account address for a given owner address. - * - * Accounts are derived using the namespace UID and a AccountKey(owner). - * The key structure in Move is: `AccountKey(address)` - * - * @param owner - The owner address (can be a user address or object address) - * @param packageConfig - PAS package configuration - * @returns The derived account object ID - */ -export function deriveAccountAddress(owner: string, packageConfig: PASPackageConfig): string { - const { packageId, namespaceId } = packageConfig; - - // Serialize the AccountKey(address) as the key - // AccountKey is a struct with a single field: address - const accountKeyBcs = bcs.struct('AccountKey', { - owner: bcs.Address, - }); - - const key = accountKeyBcs.serialize({ owner: normalizeSuiAddress(owner) }).toBytes(); - - // The type tag is the AccountKey type from the PAS package - const typeTag = `${packageId}::keys::AccountKey`; - - return deriveObjectID(namespaceId, typeTag, key); -} - -const DEFAULT_WRAP_TYPE = (t: string) => `0x2::balance::Balance<${t}>`; - -export interface DerivePolicyOptions { - /** Transform the asset type before using it in the PolicyKey type tag. - * Defaults to wrapping with `0x2::balance::Balance`. - * Pass `(t) => t` to use the raw type. */ - wrapType?: (assetType: string) => string; -} - -/** - * Derives the policy address for a given asset type T. - * - * Policies are derived using the namespace UID and a PolicyKey(). - * The key structure in Move is: `PolicyKey()` - * - * By default the asset type is wrapped as `Balance` to match the current - * on-chain convention. Pass `options.wrapType` to override. - * - * @param assetType - The full type of the asset (e.g., "0x2::sui::SUI") - * @param packageConfig - PAS package configuration - * @param options - Optional derivation options - * @returns The derived policy object ID - */ -export function derivePolicyAddress( - assetType: string, - packageConfig: PASPackageConfig, - options?: DerivePolicyOptions, -): string { - const { packageId, namespaceId } = packageConfig; - - const policyKeyBcs = new Uint8Array([0]); - - const wrap = options?.wrapType ?? DEFAULT_WRAP_TYPE; - const typeTag = `${packageId}::keys::PolicyKey<${wrap(assetType)}>`; - return deriveObjectID(namespaceId, typeTag, policyKeyBcs); -} - -/** - * Derives the templates object address for a given package configuration. - * - * Templates are derived using the namespace UID and a TemplateKey(). - * The key structure in Move is: `TemplateKey()` - * - * @param packageConfig - PAS package configuration - * @returns The derived templates object ID - */ -export function deriveTemplateRegistryAddress(packageConfig: PASPackageConfig): string { - const { packageId, namespaceId } = packageConfig; - - // The type tag is the TemplateKey type from the PAS package - const typeTag = `${packageId}::keys::TemplateKey`; - - return deriveObjectID(namespaceId, typeTag, new Uint8Array([0])); -} - -/** - * Derives the dynamic field address for a template command on the Templates object. - * - * Templates store Commands as dynamic fields keyed by `TypeName` (the approval type's - * `type_name::with_defining_ids` value). The DF key type is `std::type_name::TypeName` - * which is a struct with a single `name: String` field. - * - * @param templatesId - The Templates object ID - * @param approvalTypeName - The fully qualified approval type name (e.g., "0x123::demo_usd::TransferApproval") - * @returns The derived dynamic field object ID - */ -export function deriveTemplateAddress(templatesId: string, approvalTypeName: string): string { - // TypeName is a struct { name: String }, serialized as BCS string - const key = bcs.string().serialize(approvalTypeName).toBytes(); - - return deriveDynamicFieldID(templatesId, '0x1::type_name::TypeName', key); -} diff --git a/sdk/pas/src/error.ts b/sdk/pas/src/error.ts deleted file mode 100644 index e0b6ab0..0000000 --- a/sdk/pas/src/error.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -/** - * Base error class for PAS client errors - */ -export class PASClientError extends Error { - constructor(message: string) { - super(message); - this.name = 'PASClientError'; - } -} - -export class PolicyNotFoundError extends PASClientError { - constructor(assetType: string, message?: string) { - super(message ?? `Policy not found for asset type ${assetType}.`); - this.name = 'PolicyNotFoundError'; - } -} diff --git a/sdk/pas/src/index.ts b/sdk/pas/src/index.ts deleted file mode 100644 index 2c76672..0000000 --- a/sdk/pas/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -export { PASClient, pas } from './client.js'; -export type { PASClientConfig, PASPackageConfig, PASOptions } from './types.js'; -export { TESTNET_PAS_PACKAGE_CONFIG, MAINNET_PAS_PACKAGE_CONFIG } from './constants.js'; -export * from './error.js'; diff --git a/sdk/pas/src/intents.ts b/sdk/pas/src/intents.ts deleted file mode 100644 index a5eeb34..0000000 --- a/sdk/pas/src/intents.ts +++ /dev/null @@ -1,810 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import { bcs } from '@mysten/sui/bcs'; -import type { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client'; -import { Inputs, Transaction, TransactionCommands } from '@mysten/sui/transactions'; -import type { - Argument, - CallArg, - Command, - TransactionDataBuilder, - TransactionPlugin, - TransactionResult, -} from '@mysten/sui/transactions'; -import { normalizeStructTag } from '@mysten/sui/utils'; - -import { - deriveAccountAddress, - derivePolicyAddress, - deriveTemplateAddress, - deriveTemplateRegistryAddress, -} from './derivation.js'; -import { PASClientError, PolicyNotFoundError } from './error.js'; -import { - buildMoveCallCommandFromTemplate, - getCommandFromTemplate, - getRequiredApprovals, - PASActionType, -} from './resolution.js'; -import type { PASPackageConfig } from './types.js'; - -const PAS_INTENT_NAME = 'PAS'; - -// --------------------------------------------------------------------------- -// Intent data types -// --------------------------------------------------------------------------- - -type SendBalanceIntentData = { - action: 'sendBalance'; - from: string; - to: string; - amount: string; - assetType: string; - cfg: PASPackageConfig; -}; - -type UnlockBalanceIntentData = { - action: 'unlockBalance'; - from: string; - amount: string; - assetType: string; - cfg: PASPackageConfig; -}; - -type UnlockUnrestrictedBalanceIntentData = { - action: 'unlockUnrestrictedBalance'; - from: string; - amount: string; - assetType: string; - cfg: PASPackageConfig; -}; - -type AccountForAddressIntentData = { - action: 'accountForAddress'; - owner: string; - cfg: PASPackageConfig; -}; - -type PASIntentData = - | SendBalanceIntentData - | UnlockBalanceIntentData - | UnlockUnrestrictedBalanceIntentData - | AccountForAddressIntentData; - -/** - * Creates a memoized PAS intent closure. On first call it registers the - * shared resolver and adds the $Intent command; subsequent calls return - * the cached TransactionResult. - */ -function createPASIntent(data: PASIntentData): (tx: Transaction) => TransactionResult { - let result: TransactionResult | null = null; - return (tx: Transaction) => { - if (result) return result; - tx.addIntentResolver(PAS_INTENT_NAME, resolvePASIntents); - result = tx.add( - TransactionCommands.Intent({ - name: PAS_INTENT_NAME, - inputs: {}, - data: data as unknown as Record, - }), - ); - return result; - }; -} - -export function sendBalanceIntent( - packageConfig: PASPackageConfig, -): (options: { - from: string; - to: string; - amount: number | bigint; - assetType: string; -}) => (tx: Transaction) => TransactionResult { - return ({ from, to, amount, assetType }) => - createPASIntent({ - action: 'sendBalance', - from, - to, - amount: String(amount), - assetType, - cfg: packageConfig, - }); -} - -export function unlockBalanceIntent( - packageConfig: PASPackageConfig, -): (options: { - from: string; - amount: number | bigint; - assetType: string; -}) => (tx: Transaction) => TransactionResult { - return ({ from, amount, assetType }) => - createPASIntent({ - action: 'unlockBalance', - from, - amount: String(amount), - assetType, - cfg: packageConfig, - }); -} - -export function unlockUnrestrictedBalanceIntent( - packageConfig: PASPackageConfig, -): (options: { - from: string; - amount: number | bigint; - assetType: string; -}) => (tx: Transaction) => TransactionResult { - return ({ from, amount, assetType }) => - createPASIntent({ - action: 'unlockUnrestrictedBalance', - from, - amount: String(amount), - assetType, - cfg: packageConfig, - }); -} - -export function accountForAddressIntent( - packageConfig: PASPackageConfig, -): (owner: string) => (tx: Transaction) => TransactionResult { - return (owner: string) => - createPASIntent({ action: 'accountForAddress', owner, cfg: packageConfig }); -} - -// --------------------------------------------------------------------------- -// Resolver -- holds mutable state shared across all intent builders -// --------------------------------------------------------------------------- -// -// ## How intent resolution works -// -// Each PAS intent occupies a single $Intent slot in the transaction's command -// list. At build time, the resolver replaces each $Intent with a sequence of -// concrete MoveCall commands via `replaceCommand`. -// -// The tricky part is **indexing**. Commands within a PTB reference each -// other's outputs by absolute command index (e.g. `{ Result: 5 }` means -// "the output of command #5"). When we build the replacement commands for -// an intent, we need to know what absolute index each new command will land -// at in the final PTB. That's what `baseIdx` is for: -// -// baseIdx = the position of the $Intent slot being replaced -// -// So if baseIdx is 3 and we push 2 account-creation commands before the -// new_auth call, new_auth lands at absolute index 5 (= 3 + 2). -// -// The SDK's `replaceCommand` handles index shifting automatically: after -// splicing N commands in place of 1, it adjusts all Result/NestedResult -// references in subsequent commands by (N - 1). So we iterate the live -// command list directly -- no manual offset tracking needed. -// -// Each builder returns a `BuildResult` containing: -// - `commands`: the replacement commands (local array, 0-indexed) -// - `resultOffset`: which command in that array produces the intent's -// output value (so external references to the intent can be remapped) -// - -type SuiObject = SuiClientTypes.Object<{ content: true }>; - -type AccountState = { kind: 'existing' } | { kind: 'created'; resultIndex: number }; - -/** Return value from each per-action builder. */ -interface BuildResult { - commands: Command[]; - /** Offset within `commands` of the command whose Result is the intent's output. */ - resultOffset: number; -} - -class Resolver { - /** Pre-fetched on-chain objects (accounts, rules). null = does not exist. */ - readonly objects: Map; - /** Pre-fetched template dynamic field objects. */ - readonly templates: Map; - /** Pre-parsed template lookup: policyId:actionType -> approval type names. */ - readonly templateApprovals: Map; - /** Account existence / creation tracking. */ - readonly accounts: Map; - - readonly #tx: TransactionDataBuilder; - readonly #inputCache = new Map(); - readonly #templateCommandsCache = new Map[]>(); - readonly #config: PASPackageConfig; - - constructor({ - transactionData, - objects, - templates, - templateApprovals, - accounts, - config, - }: { - transactionData: TransactionDataBuilder; - objects: Map; - templates: Map; - templateApprovals: Map; - accounts: Map; - config: PASPackageConfig; - }) { - this.#tx = transactionData; - this.objects = objects; - this.templates = templates; - this.templateApprovals = templateApprovals; - this.accounts = accounts; - this.#config = config; - } - - // -- Input helpers (deduplicated) ---------------------------------------- - - addObjectInput(objectId: string): Argument { - let arg = this.#inputCache.get(objectId); - if (!arg) { - arg = this.#tx.addInput('object', { - $kind: 'UnresolvedObject', - UnresolvedObject: { objectId }, - }); - this.#inputCache.set(objectId, arg); - } - return arg; - } - - addPureInput(key: string, value: ReturnType): Argument { - let arg = this.#inputCache.get(key); - if (!arg) { - arg = this.#tx.addInput('pure', value); - this.#inputCache.set(key, arg); - } - return arg; - } - - addTemplateInput(type: 'object' | 'pure', arg: CallArg): Argument { - if (type === 'object' && arg.$kind === 'UnresolvedObject') { - return this.addObjectInput(arg.UnresolvedObject.objectId); - } - return this.#tx.addInput(type, arg); - } - - // -- Object lookup ------------------------------------------------------- - - getObjectOrThrow(objectId: string, errorFactory: () => Error): SuiObject { - const obj = this.objects.get(objectId); - if (!obj) throw errorFactory(); - return obj; - } - - // -- Account resolution ---------------------------------------------------- - - /** - * Returns an Argument referencing the account for `accountId`. - * - * - Existing on-chain account: returns an object Input. - * - Already created earlier in this PTB: returns the stored Result ref. - * - Does not exist yet: **pushes** a `account::create` MoveCall into the - * caller's `commands` array (mutating it) and records the creation so - * subsequent calls for the same account reuse the same Result. The account - * will be shared at the end of the PTB via `shareNewAccounts()`. - * - * @param commands - The caller's local command array (may be mutated). - * @param baseIdx - Absolute PTB index where `commands[0]` will land. - */ - resolveAccountArg(accountId: string, owner: string, baseIdx: number): [Argument, Command[]] { - const state = this.accounts.get(accountId); - const commands: Command[] = []; - - if (state?.kind === 'existing') return [this.addObjectInput(accountId), commands]; - - if (state?.kind === 'created') - return [{ $kind: 'Result', Result: state.resultIndex }, commands]; - - const absoluteIndex = baseIdx + commands.length; - commands.push( - TransactionCommands.MoveCall({ - package: this.#config.packageId, - module: 'account', - function: 'create', - arguments: [ - this.addObjectInput(this.#config.namespaceId), - this.addPureInput(`address:${owner}`, Inputs.Pure(bcs.Address.serialize(owner))), - ], - }), - ); - - this.accounts.set(accountId, { kind: 'created', resultIndex: absoluteIndex }); - return [{ $kind: 'Result', Result: absoluteIndex }, commands]; - } - - // -- Template resolution (synchronous, all data pre-fetched) ------------- - - resolveTemplateCommands(policyObjectId: string, actionType: PASActionType) { - const cacheKey = `${policyObjectId}:${actionType}`; - const cached = this.#templateCommandsCache.get(cacheKey); - if (cached) return cached; - - const approvalTypeNames = this.templateApprovals.get(cacheKey); - if (!approvalTypeNames) { - throw new PASClientError( - `No required approvals found for action "${actionType}". The issuer has not configured this action.`, - ); - } - - const templatesId = deriveTemplateRegistryAddress(this.#config); - const commands = approvalTypeNames.map((tn) => { - const templateId = deriveTemplateAddress(templatesId, tn); - const template = this.templates.get(templateId); - if (!template) { - throw new PASClientError( - `Template not found for approval type "${tn}". The issuer has not set up the template command.`, - ); - } - return getCommandFromTemplate(template); - }); - - this.#templateCommandsCache.set(cacheKey, commands); - return commands; - } - - /** - * Replaces a standard action intent (transfer/unlock) with its built - * commands. The resolve call at `actualIdx + resultOffset` produces the - * intent's output value. - */ - replaceIntent(actualIdx: number, commands: Command[], resultOffset: number) { - this.#tx.replaceCommand(actualIdx, commands, { Result: actualIdx + resultOffset }); - } - - /** - * Replaces a accountForAddress intent when the account already exists. - * The intent is removed (0 replacement commands) and external references - * are remapped to the existing account's Input argument. - * - * Note: SDK's replaceCommand signature doesn't accept Input args as - * resultIndex, but the runtime handles it correctly via ArgumentSchema.parse(). - */ - replaceIntentWithExistingAccount(actualIdx: number, accountArg: Argument) { - this.#tx.replaceCommand(actualIdx, [], accountArg as any); - } - - /** - * Replaces a accountForAddress intent when the account needs to be created. - * The intent is replaced with the account::create command(s), and external - * references are remapped to the first command's Result (the new account). - */ - replaceIntentWithCreatedAccount(actualIdx: number, commands: Command[]) { - this.#tx.replaceCommand(actualIdx, commands, { Result: actualIdx }); - } - - // -- Per-action builders -------------------------------------------------- - // - // Each builder constructs a local `commands` array representing the - // sequence of MoveCall commands that replace the intent. Commands - // reference each other using absolute indices (baseIdx + local offset). - // - // The general pattern for a transfer is: - // [account::create (0..N)] -- only if accounts don't exist yet - // account::new_auth -- create ownership proof - // account::send_funds -- initiate the request - // [approval commands] -- issuer-defined template commands - // send_funds::resolve -- finalize and produce the output - // - // `resultOffset` points at the last command (resolve), whose Result - // becomes the intent's output value. - - buildSendBalance(data: SendBalanceIntentData, baseIdx: number): BuildResult { - const { from, to, assetType, amount } = data; - const fromAccountId = deriveAccountAddress(from, this.#config); - const toAccountId = deriveAccountAddress(to, this.#config); - - const policyId = derivePolicyAddress(assetType, this.#config); - const policyObject = this.getObjectOrThrow(policyId, () => new PolicyNotFoundError(assetType)); - const templateCmds = this.resolveTemplateCommands( - policyObject.objectId, - PASActionType.SendFunds, - ); - - const [toAccountArg, commands] = this.resolveAccountArg(toAccountId, to, baseIdx); - const [fromAccountArg, fromAccountCommands] = this.resolveAccountArg( - fromAccountId, - from, - baseIdx + commands.length, - ); - commands.push(...fromAccountCommands); - - const policyArg = this.addObjectInput(policyId); - - // account::new_auth - const authIdx = baseIdx + commands.length; - commands.push( - TransactionCommands.MoveCall({ - package: this.#config.packageId, - module: 'account', - function: 'new_auth', - }), - ); - - // account::send_funds - const requestIdx = baseIdx + commands.length; - commands.push( - TransactionCommands.MoveCall({ - package: this.#config.packageId, - module: 'account', - function: 'send_balance', - arguments: [ - fromAccountArg, - { $kind: 'Result', Result: authIdx }, - toAccountArg, - this.addTemplateInput('pure', Inputs.Pure(bcs.u64().serialize(BigInt(amount)))), - ], - typeArguments: [normalizeStructTag(assetType)], - }), - ); - const requestArg: Argument = { $kind: 'Result', Result: requestIdx }; - - // Issuer-defined approval commands from templates - for (const templateCmd of templateCmds) { - commands.push( - buildMoveCallCommandFromTemplate(templateCmd, { - addInput: (type, arg) => this.addTemplateInput(type, arg), - senderAccount: fromAccountArg, - receiverAccount: toAccountArg, - policy: policyArg, - request: requestArg, - systemType: assetType, - }), - ); - } - - // send_funds::resolve - const resultOffset = commands.length; - commands.push( - TransactionCommands.MoveCall({ - package: this.#config.packageId, - module: 'send_funds', - function: 'resolve_balance', - arguments: [requestArg, policyArg], - typeArguments: [normalizeStructTag(assetType)], - }), - ); - - return { commands, resultOffset }; - } - - /** - * Builds commands for both restricted and unrestricted unlock flows. - * Restricted: requires a Policy, runs issuer approval templates, then resolve. - * Unrestricted: no Policy needed, calls resolve_unrestricted_balance directly. - */ - buildUnlockBalance( - data: UnlockBalanceIntentData | UnlockUnrestrictedBalanceIntentData, - baseIdx: number, - ): BuildResult { - const { from, assetType, amount } = data; - const fromAccountId = deriveAccountAddress(from, this.#config); - const policyId = derivePolicyAddress(assetType, this.#config); - - const isRestricted = data.action === 'unlockBalance'; - - if (isRestricted) { - this.getObjectOrThrow( - policyId, - () => - new PASClientError( - `Policy does not exist for asset type ${assetType}. ` + - `That means that the issuer has not yet enabled funds management for this asset. ` + - `If this is a non-managed asset, you can use the unrestricted unlock flow by calling unlockUnrestrictedBalance() instead.`, - ), - ); - } else { - if (this.objects.get(policyId) !== null) { - throw new PASClientError( - `A policy exists for asset type ${assetType}. That means that the issuer has enabled funds management for this asset and you can no longer use the unrestricted unlock flow.`, - ); - } - } - - const [fromAccountArg, commands] = this.resolveAccountArg(fromAccountId, from, baseIdx); - const policyArg = isRestricted ? this.addObjectInput(policyId) : undefined; - - // account::new_auth - const authIdx = baseIdx + commands.length; - commands.push( - TransactionCommands.MoveCall({ - package: this.#config.packageId, - module: 'account', - function: 'new_auth', - }), - ); - - // account::unlock_funds - const requestIdx = baseIdx + commands.length; - commands.push( - TransactionCommands.MoveCall({ - package: this.#config.packageId, - module: 'account', - function: 'unlock_balance', - arguments: [ - fromAccountArg, - { $kind: 'Result', Result: authIdx }, - this.addTemplateInput('pure', Inputs.Pure(bcs.u64().serialize(BigInt(amount)))), - ], - typeArguments: [normalizeStructTag(assetType)], - }), - ); - const requestArg: Argument = { $kind: 'Result', Result: requestIdx }; - - if (isRestricted) { - // Issuer-defined approval commands from templates - const templateCmds = this.resolveTemplateCommands(policyId, PASActionType.UnlockFunds); - for (const templateCmd of templateCmds) { - commands.push( - buildMoveCallCommandFromTemplate(templateCmd, { - addInput: (type, arg) => this.addTemplateInput(type, arg), - senderAccount: fromAccountArg, - policy: policyArg, - request: requestArg, - systemType: assetType, - }), - ); - } - - // unlock_funds::resolve - const resultOffset = commands.length; - commands.push( - TransactionCommands.MoveCall({ - package: this.#config.packageId, - module: 'unlock_funds', - function: 'resolve', - arguments: [requestArg, policyArg!], - typeArguments: [normalizeStructTag(assetType)], - }), - ); - return { commands, resultOffset }; - } - - // unlock_funds::resolve_unrestricted_balance - const resultOffset = commands.length; - commands.push( - TransactionCommands.MoveCall({ - package: this.#config.packageId, - module: 'unlock_funds', - function: 'resolve_unrestricted_balance', - arguments: [requestArg, this.addObjectInput(this.#config.namespaceId)], - typeArguments: [normalizeStructTag(assetType)], - }), - ); - return { commands, resultOffset }; - } - - // -- Finalization --------------------------------------------------------- - - /** - * Appends `account::share` commands for every account that was created during - * resolution. Called once at the end, after all intents have been resolved, - * so that each account is shared exactly once regardless of how many intents - * referenced it. - */ - shareNewAccounts() { - for (const state of this.accounts.values()) { - if (state.kind !== 'created') continue; - this.#tx.commands.push( - TransactionCommands.MoveCall({ - package: this.#config.packageId, - module: 'account', - function: 'share', - arguments: [{ $kind: 'Result', Result: state.resultIndex }], - }), - ); - } - } -} - -// --------------------------------------------------------------------------- -// Data collection + fetching (pre-resolution) -// --------------------------------------------------------------------------- - -type AccountOwner = { owner: string }; - -interface IntentDataCollection { - objectIds: Set; - accountRequests: Map; - intentDataList: PASIntentData[]; - cfg: PASPackageConfig; -} - -/** Scans commands for PAS intents and collects the object IDs we need to fetch. */ -function collectIntentData(commands: readonly Command[]): IntentDataCollection | null { - const objectIds = new Set(); - const accountRequests = new Map(); - const intentDataList: PASIntentData[] = []; - let cfg: PASPackageConfig | null = null; - - for (const command of commands) { - if (command.$kind !== '$Intent' || command.$Intent.name !== PAS_INTENT_NAME) continue; - const data = command.$Intent.data as unknown as PASIntentData; - - if (!cfg) cfg = data.cfg; - intentDataList.push(data); - - switch (data.action) { - case 'sendBalance': { - const fromId = deriveAccountAddress(data.from, cfg); - const toId = deriveAccountAddress(data.to, cfg); - objectIds.add(fromId); - objectIds.add(toId); - objectIds.add(derivePolicyAddress(data.assetType, cfg)); - accountRequests.set(fromId, { owner: data.from }); - accountRequests.set(toId, { owner: data.to }); - break; - } - case 'unlockBalance': - case 'unlockUnrestrictedBalance': { - const fromId = deriveAccountAddress(data.from, cfg); - objectIds.add(fromId); - objectIds.add(derivePolicyAddress(data.assetType, cfg)); - accountRequests.set(fromId, { owner: data.from }); - break; - } - case 'accountForAddress': { - const id = deriveAccountAddress(data.owner, cfg); - objectIds.add(id); - accountRequests.set(id, { owner: data.owner }); - break; - } - } - } - - if (!cfg) - throw new PASClientError('No package configuration found in intents. This is an internal bug.'); - - return intentDataList.length > 0 ? { objectIds, accountRequests, intentDataList, cfg } : null; -} - -async function initializeContext( - transactionData: TransactionDataBuilder, - client: ClientWithCoreApi, - objectIds: Set, - accountRequests: Map, - intentDataList: PASIntentData[], - config: PASPackageConfig, -): Promise { - // 1. Batch-fetch all accounts + rules - const allIds = [...objectIds]; - const { objects: fetched } = await client.core.getObjects({ - objectIds: allIds, - include: { content: true }, - }); - - const objects = new Map(); - - for (const id of allIds) { - const obj = fetched.filter((o) => 'content' in o).find((o) => o.objectId === id); - objects.set(id, obj ?? null); - } - - // 2. Build initial account map (existing vs needs-creation) - const accounts = new Map(); - for (const [accountId] of accountRequests) { - if (objects.get(accountId) !== null) { - accounts.set(accountId, { kind: 'existing' }); - } - } - - // 3. Collect template DF IDs by parsing rules - const templateApprovals = new Map(); - const templateIds: string[] = []; - const seen = new Set(); - - for (const data of intentDataList) { - let actionType: PASActionType | null = null; - let assetType: string | null = null; - - if (data.action === 'sendBalance') { - actionType = PASActionType.SendFunds; - assetType = data.assetType; - } else if (data.action === 'unlockBalance') { - actionType = PASActionType.UnlockFunds; - assetType = data.assetType; - } - - if (!actionType || !assetType) continue; - - const policyId = derivePolicyAddress(assetType, config); - const key = `${policyId}:${actionType}`; - if (seen.has(key)) continue; - seen.add(key); - - const policyObject = objects.get(policyId); - if (!policyObject) continue; - - const approvalTypeNames = getRequiredApprovals(policyObject, actionType); - if (!approvalTypeNames?.length) continue; - - const templatesId = deriveTemplateRegistryAddress(config); - templateApprovals.set(key, approvalTypeNames); - templateIds.push(...approvalTypeNames.map((tn) => deriveTemplateAddress(templatesId, tn))); - } - - // 4. Batch-fetch all template data - const templates = new Map(); - if (templateIds.length > 0) { - const { objects: templateObjects } = await client.core.getObjects({ - objectIds: templateIds, - include: { content: true }, - }); - - for (const obj of templateObjects.filter((o) => 'content' in o)) { - templates.set(obj.objectId, obj); - } - } - - return new Resolver({ - transactionData, - objects, - templates, - templateApprovals, - accounts, - config, - }); -} - -const resolvePASIntents: TransactionPlugin = async (transactionData, buildOptions, next) => { - const client = buildOptions.client; - if (!client) - throw new PASClientError( - 'A SuiClient must be provided to build transactions with PAS intents.', - ); - - const requirements = collectIntentData(transactionData.commands); - if (!requirements) return next(); - - const { objectIds, accountRequests, intentDataList, cfg } = requirements; - - const ctx = await initializeContext( - transactionData, - client, - objectIds, - accountRequests, - intentDataList, - cfg, - ); - - // Iterate the live command list. replaceCommand mutates the array in place - // and shifts all subsequent indices automatically, so we don't need to - // track index offsets ourselves -- the iterator sees correct positions. - for (const [index, command] of transactionData.commands.entries()) { - if (command.$kind !== '$Intent' || command.$Intent.name !== PAS_INTENT_NAME) continue; - - const data = command.$Intent.data as unknown as PASIntentData; - - // -- accountForAddress is handled separately (may produce 0 commands) -- - if (data.action === 'accountForAddress') { - const accountId = deriveAccountAddress(data.owner, cfg); - const [accountArg, commands] = ctx.resolveAccountArg(accountId, data.owner, index); - - if (commands.length === 0) { - ctx.replaceIntentWithExistingAccount(index, accountArg); - } else { - ctx.replaceIntentWithCreatedAccount(index, commands); - } - continue; - } - - // -- Standard action intents -- - let result: BuildResult; - switch (data.action) { - case 'sendBalance': - result = ctx.buildSendBalance(data, index); - break; - case 'unlockBalance': - case 'unlockUnrestrictedBalance': - result = ctx.buildUnlockBalance(data, index); - break; - default: - continue; - } - - ctx.replaceIntent(index, result.commands, result.resultOffset); - } - - ctx.shareNewAccounts(); - return next(); -}; diff --git a/sdk/pas/src/resolution.ts b/sdk/pas/src/resolution.ts deleted file mode 100644 index ffc4824..0000000 --- a/sdk/pas/src/resolution.ts +++ /dev/null @@ -1,254 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import { SuiClientTypes } from '@mysten/sui/client'; -import { Inputs, TransactionCommands } from '@mysten/sui/transactions'; -import type { Argument, CallArg, Command as SdkCommand } from '@mysten/sui/transactions'; -import { normalizeStructTag } from '@mysten/sui/utils'; - -import { Field } from './bcs.js'; -import { TypeName } from './contracts/pas/deps/std/type_name.js'; -import { Policy } from './contracts/pas/policy.js'; -import { Command, MoveCall } from './contracts/ptb/ptb.js'; -import { PASClientError } from './error.js'; - -const OBJECT_BY_ID_EXT = 'object_by_id'; -const OBJECT_BY_TYPE_EXT = 'object_by_type'; -const RECEIVING_BY_ID_EXT = 'receiving_by_id'; - -/** - * Supported PAS action types that can be resolved via Policies. - */ -export enum PASActionType { - /** Transfer funds between accounts */ - SendFunds = 'send_funds', - /** Unlock funds from a account */ - UnlockFunds = 'unlock_funds', - /** Clawback funds from a account */ - ClawbackFunds = 'clawback_funds', -} - -/** - * Parses the Policy object to extract the required approval type names for a given action. - * - * The Policy's `required_approvals` is a `VecMap>` where: - * - Key is the action name (e.g., "send_funds") - * - Value is a set of approval TypeNames that must be satisfied - * - * @param policyObject - The Policy object fetched with content - * @returns The list of approval TypeName strings for the given action, or undefined if not found - */ -export function getRequiredApprovals( - policyObject: SuiClientTypes.Object<{ content: true }>, - actionType: PASActionType, -): string[] | undefined { - const policy = Policy.parse(policyObject.content); - - const entry = policy.required_approvals.contents.find((e) => e.key === actionType); - - if (!entry) return undefined; - - return entry.value.contents.map((tn) => tn.name); -} - -/** - * Parses a Command from a Template dynamic field object. - * - * Each Template DF is a `Field` where: - * - TypeName is the approval type (e.g., the `with_defining_ids` of `TransferApproval`) - * - Command is the move call instruction to execute for that approval - * - * @param templateDF - The Template DF object fetched with content - * @returns The parsed Command, or undefined if parsing fails - */ -export function getCommandFromTemplate( - template: SuiClientTypes.Object<{ content: true }>, -): ReturnType { - const df = Field(TypeName, Command).parse(template.content); - return parseCommand(df.value); -} - -// TODO: Discuss why this is interpreted as `(number | number[])[])` instead of `[number, number[]]` -// and if there's a way to solve that. -function parseCommand([key, cmd]: ReturnType) { - // Support only `Command` for now. - if (key !== 0) throw new Error(`Unknown command type: ${key}`); - - // TODO: switch to support more commands like `TransferObjects` etc. - return MoveCall.parse(new Uint8Array(cmd as number[])); -} - -// --------------------------------------------------------------------------- -// Command builder (for use with TransactionDataBuilder / replaceCommand) -// --------------------------------------------------------------------------- - -/** - * Arguments for building a MoveCall Command from a template. - * Used by the intent resolver which works directly with TransactionDataBuilder. - */ -interface RawCommandBuildArgs { - /** Adds an input to the parent transaction and returns the Argument ref. */ - addInput: (type: 'object' | 'pure', arg: CallArg) => Argument; - /** The sender account argument (already resolved) */ - senderAccount?: Argument; - /** The receiver account argument (already resolved) */ - receiverAccount?: Argument; - /** The policy argument (already resolved) */ - policy?: Argument; - /** The request argument (already resolved) */ - request?: Argument; - /** The system type T (e.g., "0x2::sui::SUI") */ - systemType?: string; -} - -/** - * Builds a `Command` (TransactionCommands.MoveCall) from a parsed template command, - * suitable for use with `transactionData.replaceCommand()`. - * - * Resolves template argument placeholders (pas:request, pas:policy, etc.) into - * concrete Argument references, and converts object/pure inputs via the provided - * `addInput` callback. - * - * @param command - The parsed MoveCall from a template object - * @param args - The resolved arguments and addInput helper - * @returns A Command object ready for `replaceCommand` - */ -export function buildMoveCallCommandFromTemplate( - command: ReturnType, - args: RawCommandBuildArgs, -): SdkCommand { - const resolvedArgs: Argument[] = []; - - for (const arg of command.arguments) { - if (arg.Ext) throw new PASClientError(`There are no supported ext arguments in this client.`); - else if (arg.GasCoin) resolvedArgs.push({ $kind: 'GasCoin', GasCoin: true }); - else if (arg.NestedResult) - resolvedArgs.push({ - $kind: 'NestedResult', - NestedResult: [arg.NestedResult[0], arg.NestedResult[1]], - }); - else if (arg.Result) resolvedArgs.push({ $kind: 'Result', Result: arg.Result }); - else if (arg.Input) { - if (arg.Input.Pure) - resolvedArgs.push(args.addInput('pure', Inputs.Pure(new Uint8Array(arg.Input.Pure)))); - else if (arg.Input.Object) { - switch (arg.Input.Object.$kind) { - case 'ImmOrOwnedObject': - resolvedArgs.push( - args.addInput( - 'object', - Inputs.ObjectRef({ - objectId: arg.Input.Object.ImmOrOwnedObject.object_id, - version: arg.Input.Object.ImmOrOwnedObject.sequence_number, - digest: arg.Input.Object.ImmOrOwnedObject.digest, - }), - ), - ); - break; - case 'SharedObject': - resolvedArgs.push( - args.addInput( - 'object', - Inputs.SharedObjectRef({ - objectId: arg.Input.Object.SharedObject.object_id, - initialSharedVersion: arg.Input.Object.SharedObject.initial_shared_version, - mutable: arg.Input.Object.SharedObject.is_mutable, - }), - ), - ); - break; - case 'Receiving': - resolvedArgs.push( - args.addInput( - 'object', - Inputs.ReceivingRef({ - objectId: arg.Input.Object.Receiving.object_id, - version: arg.Input.Object.Receiving.sequence_number, - digest: arg.Input.Object.Receiving.digest, - }), - ), - ); - break; - case 'Ext': - const [kind, value] = arg.Input.Object.Ext.split(':'); - - switch (kind) { - case OBJECT_BY_ID_EXT: - case RECEIVING_BY_ID_EXT: - resolvedArgs.push( - args.addInput('object', { - $kind: 'UnresolvedObject', - UnresolvedObject: { objectId: value }, - } as CallArg), - ); - break; - case OBJECT_BY_TYPE_EXT: - throw new PASClientError( - `There are no supported object by type arguments in this client.`, - ); - default: - throw new PASClientError(`Unknown external object argument: ${kind}`); - } - break; - default: - throw new PASClientError( - `Not supported object argument: ${JSON.stringify(arg.Input.Object)}`, - ); - } - } else if (arg.Input.Ext) { - resolvedArgs.push( - resolveRawPasRequest(args, { - _namespace: arg.Input.Ext[0], - value: arg.Input.Ext[1], - }), - ); - } else { - throw new PASClientError(`Unsupported input kind: ${arg.Input.$kind}`); - } - } - } - - const typeArgs: string[] = []; - for (const typeArg of command.type_arguments) - typeArgs.push(normalizeStructTag(typeArg).toString()); - - if (!command.module_name || !command.function) - throw new PASClientError( - 'Module name or function name is missing from the on-chain policy. This means that the issuer has not set up the policy correctly.', - ); - - return TransactionCommands.MoveCall({ - package: command.package_id, - module: command.module_name, - function: command.function, - arguments: resolvedArgs, - typeArguments: typeArgs.length > 0 ? typeArgs : [], - }); -} - -function resolveRawPasRequest( - args: RawCommandBuildArgs, - extInput: { _namespace: string; value: string }, -): Argument { - // do the logic on `namespace` here - // return error if it's not PAS - - switch (extInput.value) { - case 'request': - if (!args.request) throw new PASClientError(`Request is not set in the context.`); - return args.request; - case 'policy': - if (!args.policy) throw new PASClientError(`Policy is not set in the context.`); - return args.policy; - case 'sender_account': - if (!args.senderAccount) - throw new PASClientError(`Sender account is not set in the context.`); - return args.senderAccount; - case 'receiver_account': - if (!args.receiverAccount) - throw new PASClientError(`Receiver account is not set in the context.`); - return args.receiverAccount; - default: - throw new PASClientError(`Unknown pas request: ${extInput.value}`); - } -} diff --git a/sdk/pas/src/types.ts b/sdk/pas/src/types.ts deleted file mode 100644 index 46c7b46..0000000 --- a/sdk/pas/src/types.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import type { ClientWithCoreApi } from '@mysten/sui/client'; - -/** - * Configuration for the PAS package on a specific network - */ -export interface PASPackageConfig { - /** The package ID of the PAS package */ - packageId: string; - /** The namespace ID of the PAS package */ - namespaceId: string; -} - -/** - * Configuration for the PAS client - */ -export interface PASClientConfig { - /** The Sui client to use */ - suiClient: ClientWithCoreApi; - /** The package configuration (if network is not provided or supported) */ - packageConfig?: PASPackageConfig; -} - -/** - * Options for creating a PAS client plugin - */ -export interface PASOptions { - /** The name of the plugin */ - name?: Name; - /** The package configuration */ - packageConfig?: PASPackageConfig; - /** The network to use */ - network?: 'mainnet' | 'testnet'; -} diff --git a/sdk/pas/sui-codegen.config.ts b/sdk/pas/sui-codegen.config.ts deleted file mode 100644 index 5b4ef7d..0000000 --- a/sdk/pas/sui-codegen.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import type { SuiCodegenConfig } from '@mysten/codegen'; - -const config: SuiCodegenConfig = { - output: './src/contracts', - packages: [ - { - package: '@mysten/pas', - path: '../../packages/pas', - }, - { - package: '@mysten/ptb', - path: '../../packages/ptb', - }, - ], -}; - -export default config; diff --git a/sdk/pas/test/e2e/data/demo_usd/Move.lock b/sdk/pas/test/e2e/data/demo_usd/Move.lock deleted file mode 100644 index ebf9a3b..0000000 --- a/sdk/pas/test/e2e/data/demo_usd/Move.lock +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by move; do not edit -# This file should be checked in. - -[move] -version = 4 - -[pinned.testnet.MoveStdlib] -source = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/move-stdlib", rev = "b38bca86f0323b3fe8b6b7f4ca0cd7ae7faebe4b" } -use_environment = "testnet" -manifest_digest = "C4FE4C91DE74CBF223B2E380AE40F592177D21870DC2D7EB6227D2D694E05363" -deps = {} - -[pinned.testnet.Sui] -source = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "b38bca86f0323b3fe8b6b7f4ca0cd7ae7faebe4b" } -use_environment = "testnet" -manifest_digest = "7AFB66695545775FBFBB2D3078ADFD084244D5002392E837FDE21D9EA1C6D01C" -deps = { MoveStdlib = "MoveStdlib" } - -[pinned.testnet.demo_usd] -source = { root = true } -use_environment = "testnet" -manifest_digest = "31F68DEA541AB27E322EFF2DDC82ABB0893418A6E8B029F2FD0E0F80D7FE263B" -deps = { pas = "pas", ptb = "ptb", std = "MoveStdlib", sui = "Sui" } - -[pinned.testnet.pas] -source = { git = "https://github.com/mystenlabs/pas.git", subdir = "packages/pas", rev = "b710e43a555bb66ec6d5288441a25b41c2d339f2" } -use_environment = "testnet" -manifest_digest = "38AA62656ABE7551C444DA427ADBAA7751CB67250663D39FCDE36E938138EA7D" -deps = { ptb = "ptb", std = "MoveStdlib", sui = "Sui" } - -[pinned.testnet.ptb] -source = { git = "https://github.com/mystenlabs/pas.git", subdir = "packages/ptb", rev = "b710e43a555bb66ec6d5288441a25b41c2d339f2" } -use_environment = "testnet" -manifest_digest = "5745706258F61D6CE210904B3E6AE87A73CE9D31A6F93BE4718C442529332A87" -deps = { std = "MoveStdlib", sui = "Sui" } diff --git a/sdk/pas/test/e2e/data/demo_usd/Move.toml b/sdk/pas/test/e2e/data/demo_usd/Move.toml deleted file mode 100644 index dfc951b..0000000 --- a/sdk/pas/test/e2e/data/demo_usd/Move.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "demo_usd" -edition = "2024.beta" - -[dependencies] -# testnet v1 -pas = { git = "https://github.com/mystenlabs/pas.git", subdir = "packages/pas", rev = "b710e43a555bb66ec6d5288441a25b41c2d339f2" } -ptb = { git = "https://github.com/mystenlabs/pas.git", subdir = "packages/ptb", rev = "b710e43a555bb66ec6d5288441a25b41c2d339f2" } diff --git a/sdk/pas/test/e2e/data/demo_usd/sources/demo_usd.move b/sdk/pas/test/e2e/data/demo_usd/sources/demo_usd.move deleted file mode 100644 index 6fdef81..0000000 --- a/sdk/pas/test/e2e/data/demo_usd/sources/demo_usd.move +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -/// Demo USD asset for testing the PAS SDK. -/// -/// This module defines a DEMO_USD witness type that gets registered in the PAS system -/// during package initialization. It sets up a Policy with resolution commands for -/// SendFunds and UnlockFunds actions. -module demo_usd::demo_usd; - -use pas::namespace::Namespace; -use pas::policy::{Self, Policy, PolicyCap}; -use pas::request::Request; -use pas::send_funds::SendFunds; -use pas::templates::{PAS, Templates}; -use ptb::ptb; -use std::type_name; -use sui::balance::Balance; -use sui::clock::Clock; -use sui::coin::TreasuryCap; -use sui::coin_registry::{Self, MetadataCap}; - -#[error(code = 0)] -const EInvalidAmount: vector = b"Any amount over 10K is not allowed in this demo."; -#[error(code = 1)] -const ECannotSelfTransfer: vector = - b"Transfers cannot be made to the same address as the sender."; -#[error(code = 2)] -const ENotAllowedRecipient: vector = - b"Transfers to the address 0x2 are not allowed in this demo."; - -/// One-time witness for the demo_usd package -public struct DEMO_USD has drop {} - -/// Create a 'faucet' to allow free mints for testing -public struct Faucet has key { - id: UID, - cap: TreasuryCap, - metadata: MetadataCap, - policy_cap: Option>>, -} - -/// Stamp used in PAS for authorizing any admin action. -public struct ActionStamp() has drop; - -public struct TransferApproval() has drop; -public struct TransferApprovalV2() has drop; - -public struct UnlockApproval() has drop; - -public fun faucet_mint_balance(faucet: &mut Faucet, amount: u64): Balance { - faucet.cap.mint_balance(amount) -} - -/// Package initialization - creates DEMO_USD currency -fun init(otw: DEMO_USD, ctx: &mut TxContext) { - let (initializer, cap) = coin_registry::new_currency_with_otw( - otw, - 6, - b"DEMO_USD".to_string(), - b"Demo USD".to_string(), - b"Demo USD for testing".to_string(), - b"https://demo.usd".to_string(), - ctx, - ); - - let metadata = initializer.finalize(ctx); - - transfer::share_object(Faucet { - id: object::new(ctx), - cap, - metadata, - policy_cap: option::none(), - }); -} - -/// Resolver function for transfer requests - simply approves all transfers -public fun approve_transfer(request: &mut Request>>, _clock: &Clock) { - // We only allow transfers with value less than 10K. - // NOTE: This is only for testing, this is not really enforceable like this as you could batch multiple in a PTB. - assert!(request.data().funds().value() < 10_000 * 1_000_000, EInvalidAmount); - assert!(request.data().sender() != request.data().recipient(), ECannotSelfTransfer); - - request.approve(TransferApproval()); -} - -entry fun setup(namespace: &mut Namespace, templates: &mut Templates, faucet: &mut Faucet) { - let (mut policy, cap) = policy::new_for_currency(namespace, &mut faucet.cap, true); - - policy.set_required_approval<_, TransferApproval>(&cap, "send_funds"); - - faucet.policy_cap.fill(cap); - - let type_name = type_name::with_defining_ids(); - - let cmd = ptb::move_call( - type_name.address_string().to_string(), - "demo_usd", - "approve_transfer", - vector[ptb::ext_input("request"), ptb::object_by_id(@0x6.to_id())], - vector[(*type_name.as_string()).to_string()], - ); - - templates.set_template_command(internal::permit(), cmd); - policy.share(); -} - -/// starts using v2 approve transfer to test upgradeability. -public fun use_v2( - policy: &mut Policy>, - templates: &mut Templates, - faucet: &mut Faucet, -) { - let cmd = ptb::move_call( - type_name::with_defining_ids().address_string().to_string(), - "demo_usd", - "approve_transfer_v2", - vector[ptb::ext_input("request"), ptb::object_by_id(object::id(faucet))], - vector[], - ); - - templates.set_template_command(internal::permit(), cmd); - - policy.set_required_approval<_, TransferApprovalV2>( - faucet.policy_cap.borrow(), - "send_funds", - ); -} - -/// V2 function allows all transfers, besides transferring to 0x2. -public fun approve_transfer_v2( - request: &mut Request>>, - _faucet: &Faucet, -) { - assert!(request.data().recipient() != @0x2, ENotAllowedRecipient); - request.approve(TransferApprovalV2()); -} diff --git a/sdk/pas/test/e2e/demoUsd.ts b/sdk/pas/test/e2e/demoUsd.ts deleted file mode 100644 index 97052b6..0000000 --- a/sdk/pas/test/e2e/demoUsd.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { Transaction } from '@mysten/sui/transactions'; - -import { execSuiTools, type PublishedPackage, type TestToolbox } from './setup.ts'; - -export class DemoUsdTestHelpers { - toolbox: TestToolbox; - #publicationData: PublishedPackage; - #cacheKey: string; - - constructor(toolbox: TestToolbox, cacheKey?: string) { - this.toolbox = toolbox; - this.#cacheKey = cacheKey ?? 'demo_usd'; - } - - get pub() { - if (!this.#publicationData) { - throw new Error('Publication data not found. Call `createPolicy` first.'); - } - return this.#publicationData; - } - - // setup the policy - async createPolicy() { - if (this.#publicationData) { - return this.#publicationData; - } - - // When using a custom cache key, copy the source to a unique container - // directory so test-publish treats it as a separate package instance. - let packagePath = 'demo_usd'; - if (this.#cacheKey !== 'demo_usd') { - await execSuiTools(['cp', '-r', '/test-data/demo_usd', `/test-data/${this.#cacheKey}`]); - packagePath = this.#cacheKey; - } - - const result = await this.toolbox.publishPackage(packagePath, this.#cacheKey); - this.#publicationData = result; - - const faucetId = result.createdObjects.find((o) => o.type.endsWith('demo_usd::Faucet'))!.id; - const templateRegistryId = this.toolbox.client.pas.deriveTemplateRegistryAddress(); - - const transaction = new Transaction(); - transaction.moveCall({ - target: `${result.originalId}::demo_usd::setup`, - arguments: [ - transaction.object(this.toolbox.client.pas.getPackageConfig().namespaceId), - transaction.object(templateRegistryId), - transaction.object(faucetId), - ], - }); - - await this.toolbox.executeTransaction(transaction); - - return this.#publicationData; - } - - async mintFromFaucetInto(amount: number, to: string) { - const transaction = new Transaction(); - const balance = transaction.moveCall({ - target: `${this.pub.originalId}::demo_usd::faucet_mint_balance`, - arguments: [ - transaction.object( - this.pub.createdObjects.find((o) => o.type.endsWith('demo_usd::Faucet'))!.id, - ), - transaction.pure.u64(amount * 1_000_000), - ], - }); - - transaction.moveCall({ - target: `0x2::balance::send_funds`, - arguments: [balance, transaction.pure.address(to)], - typeArguments: [this.demoUsdAssetType], - }); - - await this.toolbox.executeTransaction(transaction); - } - - async upgradeToV2() { - const policyId = this.toolbox.client.pas.derivePolicyAddress(this.demoUsdAssetType); - const templateRegistryId = this.toolbox.client.pas.deriveTemplateRegistryAddress(); - const faucetId = this.pub.createdObjects.find((o) => o.type.endsWith('demo_usd::Faucet'))!.id; - - const tx = new Transaction(); - tx.moveCall({ - target: `${this.pub.originalId}::demo_usd::use_v2`, - arguments: [tx.object(policyId), tx.object(templateRegistryId), tx.object(faucetId)], - }); - await this.toolbox.executeTransaction(tx); - } - - get demoUsdAssetType() { - return `${this.pub.originalId}::demo_usd::DEMO_USD`; - } -} diff --git a/sdk/pas/test/e2e/e2e.isolated.test.ts b/sdk/pas/test/e2e/e2e.isolated.test.ts deleted file mode 100644 index 03a0261..0000000 --- a/sdk/pas/test/e2e/e2e.isolated.test.ts +++ /dev/null @@ -1,496 +0,0 @@ -import { Transaction } from '@mysten/sui/transactions'; -import { normalizeStructTag, normalizeSuiAddress } from '@mysten/sui/utils'; -import { describe, expect, it } from 'vitest'; - -import { DemoUsdTestHelpers } from './demoUsd.ts'; -import { - executeTransaction, - setupToolbox, - simulateFailingTransaction, - type TestToolbox, -} from './setup.ts'; - -async function expectBalances( - toolbox: TestToolbox, - expected: { account: string; asset: string; amount: number }[], -) { - const balances = await Promise.all( - expected.map(({ account, asset }) => toolbox.getBalance(account, asset)), - ); - for (const [idx, { amount }] of expected.entries()) { - expect(Number(balances[idx].balance.balance)).toBe(amount * 1_000_000); - } -} - -describe.concurrent( - 'e2e tests with isolated PAS Package (each test runs in its own PAS package)', - () => { - it('unlocks non-managed funds (e.g. SUI), but only through the unrestricted unlock flow', async () => { - const toolbox = await setupToolbox(); - const accountId = toolbox.client.pas.deriveAccountAddress(toolbox.address()); - - const suiTypeName = normalizeStructTag('0x2::sui::SUI').toString(); - - const { balance } = await toolbox.getBalance(accountId, suiTypeName); - expect(Number(balance.balance)).toBe(0); - - // Transfer 1 SUI to the account. - const fundTransferTx = new Transaction(); - const sui = fundTransferTx.splitCoins(fundTransferTx.gas, [ - fundTransferTx.pure.u64(1_000_000_000), - ]); - - const into_balance = fundTransferTx.moveCall({ - target: '0x2::coin::into_balance', - arguments: [sui], - typeArguments: [suiTypeName], - }); - fundTransferTx.moveCall({ - target: '0x2::balance::send_funds', - arguments: [into_balance, fundTransferTx.pure.address(accountId)], - typeArguments: [suiTypeName], - }); - await toolbox.executeTransaction(fundTransferTx); - - // Create the account for the address. - await toolbox.createAccountForAddress(toolbox.address()); - - const { balance: accountBalanceAfterTransfer } = await toolbox.getBalance( - accountId, - suiTypeName, - ); - expect(Number(accountBalanceAfterTransfer.balance)).toBe(1_000_000_000); - - // try to do an unlock but it should fail because `policy` for Sui does not exist. - const tx = new Transaction(); - tx.add( - toolbox.client.pas.call.unlockBalance({ - from: toolbox.address(), - amount: 1_000_000_000, - assetType: suiTypeName, - }), - ); - // Should fail because SUI is not a managed asset - await expect(toolbox.executeTransaction(tx)).rejects.toThrowError( - 'Policy does not exist for asset type ', - ); - - // Now let's unlock funds properly. - const unlockTx = new Transaction(); - const withdrawal = unlockTx.add( - toolbox.client.pas.call.unlockUnrestrictedBalance({ - from: toolbox.address(), - amount: 1_000_000_000, - assetType: suiTypeName, - }), - ); - unlockTx.moveCall({ - target: '0x2::balance::send_funds', - arguments: [withdrawal, unlockTx.pure.address(toolbox.address())], - typeArguments: [suiTypeName], - }); - - await toolbox.executeTransaction(unlockTx); - - const { balance: accountBalanceAfterUnlock } = await toolbox.getBalance( - accountId, - suiTypeName, - ); - expect(Number(accountBalanceAfterUnlock.balance)).toBe(0); - }); - - it('Should be able to transfer between accounts, going through the policy of the issuer;', async () => { - const toolbox = await setupToolbox(); - const demoUsd = new DemoUsdTestHelpers(toolbox); - await demoUsd.createPolicy(); - - const from = toolbox.address(); - const to = normalizeSuiAddress('0x2'); - - const fromAccountId = toolbox.client.pas.deriveAccountAddress(from); - const toAccountId = toolbox.client.pas.deriveAccountAddress(to); - - await toolbox.createAccountForAddress(from); - await toolbox.createAccountForAddress(to); - - await demoUsd.mintFromFaucetInto(100, fromAccountId); - - const [{ balance: fromBalanceBefore }, { balance: toBalanceBefore }] = await Promise.all([ - toolbox.getBalance(fromAccountId, demoUsd.demoUsdAssetType), - toolbox.getBalance(toAccountId, demoUsd.demoUsdAssetType), - ]); - - expect(Number(fromBalanceBefore.balance)).toBe(100 * 1_000_000); - expect(Number(toBalanceBefore.balance)).toBe(0); - - const tx = new Transaction(); - tx.add( - toolbox.client.pas.call.sendBalance({ - from, - to, - amount: 100 * 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - - await toolbox.executeTransaction(tx); - - const [{ balance: fromBalanceAfter }, { balance: toBalanceAfter }] = await Promise.all([ - toolbox.getBalance(fromAccountId, demoUsd.demoUsdAssetType), - toolbox.getBalance(toAccountId, demoUsd.demoUsdAssetType), - ]); - - expect(Number(fromBalanceAfter.balance)).toBe(0); - expect(Number(toBalanceAfter.balance)).toBe(100 * 1_000_000); - }); - - it('Should be able to create the recipient account if it does not exist ahead of time', async () => { - const toolbox = await setupToolbox(); - const demoUsd = new DemoUsdTestHelpers(toolbox); - await demoUsd.createPolicy(); - - const from = toolbox.address(); - const to = normalizeSuiAddress('0x2'); - - const fromAccountId = toolbox.client.pas.deriveAccountAddress(from); - const toAccountId = toolbox.client.pas.deriveAccountAddress(to); - - await demoUsd.mintFromFaucetInto(100, fromAccountId); - await toolbox.createAccountForAddress(from); - - await expect( - toolbox.client.core.getObject({ - objectId: toAccountId, - }), - ).rejects.toThrowError('not found'); - - const transaction = new Transaction(); - transaction.add( - toolbox.client.pas.call.sendBalance({ - from, - to, - amount: 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - - await toolbox.executeTransaction(transaction); - - // Object should now exist after the first transfer. - const responseAfter = await toolbox.client.core.getObject({ - objectId: toAccountId, - }); - - expect(responseAfter.object).toBeDefined(); - }); - - it('Should deduplicate account creation when multiple intents reference the same non-existent accounts', async () => { - const toolbox = await setupToolbox(); - const demoUsd = new DemoUsdTestHelpers(toolbox); - await demoUsd.createPolicy(); - - // Sender is the test keypair (required for Auth), receiver is fresh. - const sender = toolbox.address(); - const receiver = normalizeSuiAddress('0xB2'); - - const senderAccountId = toolbox.client.pas.deriveAccountAddress(sender); - const receiverAccountId = toolbox.client.pas.deriveAccountAddress(receiver); - - // Verify neither account exists. - await expect( - toolbox.client.core.getObject({ objectId: senderAccountId }), - ).rejects.toThrowError('not found'); - await expect( - toolbox.client.core.getObject({ objectId: receiverAccountId }), - ).rejects.toThrowError('not found'); - - // Mint funds directly into the sender account's address (balance::send_funds - // works even before the account object exists). - await demoUsd.mintFromFaucetInto(200, senderAccountId); - - // Build a single PTB that: - // 1. Implicitly creates the sender account (via accountForAddress) - // 2. Has an intermediate non-PAS moveCall (a no-op) - // 3. Transfers 50 DEMO_USD from sender -> receiver (receiver account created implicitly) - // 4. Has another intermediate non-PAS moveCall - // 5. Transfers another 50 DEMO_USD from sender -> receiver (same accounts, no re-creation) - const tx = new Transaction(); - - // (1) accountForAddress for sender -- forces implicit creation - tx.add(toolbox.client.pas.call.accountForAddress(sender)); - - // (2) Intermediate command: a harmless moveCall (merge empty split back into gas) - const split1 = tx.splitCoins(tx.gas, [tx.pure.u64(0)]); - tx.mergeCoins(tx.gas, [split1]); - - // (3) First transfer: sender -> receiver (receiver account does not exist) - tx.add( - toolbox.client.pas.call.sendBalance({ - from: sender, - to: receiver, - amount: 50 * 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - - // (4) Another intermediate command - const split2 = tx.splitCoins(tx.gas, [tx.pure.u64(0)]); - tx.mergeCoins(tx.gas, [split2]); - - // (5) Second transfer: sender -> receiver (both accounts already created in this PTB) - tx.add( - toolbox.client.pas.call.sendBalance({ - from: sender, - to: receiver, - amount: 50 * 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - - await toolbox.executeTransaction(tx); - - // Verify both accounts now exist. - const [senderObj, receiverObj] = await Promise.all([ - toolbox.client.core.getObject({ objectId: senderAccountId }), - toolbox.client.core.getObject({ objectId: receiverAccountId }), - ]); - expect(senderObj.object).toBeDefined(); - expect(receiverObj.object).toBeDefined(); - - // Verify balances: sender started with 200, transferred 50+50 = 100. - const [{ balance: senderBalance }, { balance: receiverBalance }] = await Promise.all([ - toolbox.getBalance(senderAccountId, demoUsd.demoUsdAssetType), - toolbox.getBalance(receiverAccountId, demoUsd.demoUsdAssetType), - ]); - - expect(Number(senderBalance.balance)).toBe(100 * 1_000_000); - expect(Number(receiverBalance.balance)).toBe(100 * 1_000_000); - }); - - it('v1 approval rejects transfers over 10K', async () => { - const toolbox = await setupToolbox(); - const demoUsd = new DemoUsdTestHelpers(toolbox); - await demoUsd.createPolicy(); - - const from = toolbox.address(); - const to = normalizeSuiAddress('0x3'); - const fromAccountId = toolbox.client.pas.deriveAccountAddress(from); - - await toolbox.createAccountForAddress(from); - await toolbox.createAccountForAddress(to); - await demoUsd.mintFromFaucetInto(15_000, fromAccountId); - - const tx = new Transaction(); - tx.add( - toolbox.client.pas.call.sendBalance({ - from, - to, - amount: 15_000 * 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - - const resp = await simulateFailingTransaction(toolbox, tx); - expect(resp.FailedTransaction).toBeDefined(); - expect(resp.FailedTransaction!.effects.status.error!.message).toContain( - 'Any amount over 10K is not allowed in this demo.', - ); - }); - - it('self-transfer is rejected (same account cannot be borrowed mutably twice)', async () => { - const toolbox = await setupToolbox(); - const demoUsd = new DemoUsdTestHelpers(toolbox); - await demoUsd.createPolicy(); - - const addr = toolbox.address(); - const accountId = toolbox.client.pas.deriveAccountAddress(addr); - - await toolbox.createAccountForAddress(addr); - await demoUsd.mintFromFaucetInto(10, accountId); - - const tx = new Transaction(); - tx.add( - toolbox.client.pas.call.sendBalance({ - from: addr, - to: addr, - amount: 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - - const resp = await simulateFailingTransaction(toolbox, tx); - expect(resp.FailedTransaction).toBeDefined(); - // Same account passed as both &mut sender and &mut receiver -- Move rejects - // this before the approval function even runs. - expect(resp.FailedTransaction!.effects.status.error!.message).toContain( - 'InvalidReferenceArgument', - ); - }); - - it('Should fail to transfer between accounts, if there are not enough funds in the source account', async () => { - const toolbox = await setupToolbox(); - const demoUsd = new DemoUsdTestHelpers(toolbox); - await demoUsd.createPolicy(); - - const from = toolbox.address(); - const to = normalizeSuiAddress('0x2'); - - await toolbox.createAccountForAddress(from); - await toolbox.createAccountForAddress(to); - - const transaction = new Transaction(); - transaction.add( - toolbox.client.pas.call.sendBalance({ - from, - to, - amount: 100 * 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - - expect(executeTransaction(toolbox, transaction)).rejects.toThrowError( - 'InsufficientFundsForWithdraw', - ); - }); - - it('use_v2 upgrades approval logic and the resolver picks up the new template', async () => { - const toolbox = await setupToolbox(); - const demoUsd = new DemoUsdTestHelpers(toolbox); - await demoUsd.createPolicy(); - - const from = toolbox.address(); - const to = normalizeSuiAddress('0x3'); - const fromAccountId = toolbox.client.pas.deriveAccountAddress(from); - - await toolbox.createAccountForAddress(from); - await toolbox.createAccountForAddress(to); - await demoUsd.mintFromFaucetInto(15_000, fromAccountId); - - await demoUsd.upgradeToV2(); - - const tx = new Transaction(); - tx.add( - toolbox.client.pas.call.sendBalance({ - from, - to, - amount: 15_000 * 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - await toolbox.executeTransaction(tx); - - const { balance } = await toolbox.getBalance( - toolbox.client.pas.deriveAccountAddress(to), - demoUsd.demoUsdAssetType, - ); - expect(Number(balance.balance)).toBe(15_000 * 1_000_000); - }); - - it('transfers two different asset types (v1 and v2 approval) in a single PTB', async () => { - const toolbox = await setupToolbox(); - const asset1 = new DemoUsdTestHelpers(toolbox, 'demo_usd_1'); - const asset2 = new DemoUsdTestHelpers(toolbox, 'demo_usd_2'); - await asset1.createPolicy(); - await asset2.createPolicy(); - - // Upgrade asset2 to v2 so the two assets use completely different approval code paths. - await asset2.upgradeToV2(); - - const sender = toolbox.address(); - const receiver = normalizeSuiAddress('0xB3'); - const senderAccountId = toolbox.client.pas.deriveAccountAddress(sender); - const receiverAccountId = toolbox.client.pas.deriveAccountAddress(receiver); - - await asset1.mintFromFaucetInto(500, senderAccountId); - await asset2.mintFromFaucetInto(800, senderAccountId); - - // --- First PTB: transfers both asset types, implicitly creates receiver account --- - const tx1 = new Transaction(); - tx1.add( - toolbox.client.pas.call.sendBalance({ - from: sender, - to: receiver, - amount: 120 * 1_000_000, - assetType: asset1.demoUsdAssetType, - }), - ); - tx1.add( - toolbox.client.pas.call.sendBalance({ - from: sender, - to: receiver, - amount: 350 * 1_000_000, - assetType: asset2.demoUsdAssetType, - }), - ); - await toolbox.executeTransaction(tx1); - - const receiverObj = await toolbox.client.core.getObject({ objectId: receiverAccountId }); - expect(receiverObj.object).toBeDefined(); - await expectBalances(toolbox, [ - { account: senderAccountId, asset: asset1.demoUsdAssetType, amount: 380 }, - { account: senderAccountId, asset: asset2.demoUsdAssetType, amount: 450 }, - { account: receiverAccountId, asset: asset1.demoUsdAssetType, amount: 120 }, - { account: receiverAccountId, asset: asset2.demoUsdAssetType, amount: 350 }, - ]); - - // --- Second PTB: both accounts already exist, different amounts --- - const tx2 = new Transaction(); - tx2.add( - toolbox.client.pas.call.sendBalance({ - from: sender, - to: receiver, - amount: 80 * 1_000_000, - assetType: asset1.demoUsdAssetType, - }), - ); - tx2.add( - toolbox.client.pas.call.sendBalance({ - from: sender, - to: receiver, - amount: 150 * 1_000_000, - assetType: asset2.demoUsdAssetType, - }), - ); - await toolbox.executeTransaction(tx2); - - await expectBalances(toolbox, [ - { account: senderAccountId, asset: asset1.demoUsdAssetType, amount: 300 }, - { account: senderAccountId, asset: asset2.demoUsdAssetType, amount: 300 }, - { account: receiverAccountId, asset: asset1.demoUsdAssetType, amount: 200 }, - { account: receiverAccountId, asset: asset2.demoUsdAssetType, amount: 500 }, - ]); - }); - - it('v2 approval rejects transfers to 0x2', async () => { - const toolbox = await setupToolbox(); - const demoUsd = new DemoUsdTestHelpers(toolbox); - await demoUsd.createPolicy(); - - const from = toolbox.address(); - const to = normalizeSuiAddress('0x2'); - const fromAccountId = toolbox.client.pas.deriveAccountAddress(from); - - await toolbox.createAccountForAddress(from); - await toolbox.createAccountForAddress(to); - await demoUsd.mintFromFaucetInto(10, fromAccountId); - - await demoUsd.upgradeToV2(); - - const tx = new Transaction(); - tx.add( - toolbox.client.pas.call.sendBalance({ - from, - to, - amount: 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - - const resp = await simulateFailingTransaction(toolbox, tx); - expect(resp.FailedTransaction).toBeDefined(); - expect(resp.FailedTransaction!.effects.status.error!.message).toContain( - 'Transfers to the address 0x2 are not allowed in this demo.', - ); - }); - }, -); diff --git a/sdk/pas/test/e2e/e2e.shared.test.ts b/sdk/pas/test/e2e/e2e.shared.test.ts deleted file mode 100644 index ebf9fc7..0000000 --- a/sdk/pas/test/e2e/e2e.shared.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'; -import { Transaction } from '@mysten/sui/transactions'; -import { normalizeSuiAddress } from '@mysten/sui/utils'; -import { beforeAll, describe, expect, it } from 'vitest'; - -import { Account } from '../../src/contracts/pas/account.js'; -import { DemoUsdTestHelpers } from './demoUsd.ts'; -import { setupToolbox, TestToolbox } from './setup.ts'; - -describe('e2e tests with shared PAS package (all tests run in the same PAS package)', () => { - let toolbox: TestToolbox; - let demoUsd: DemoUsdTestHelpers; - - // Each execution should use its own runner to avoid shared state of PAS package. - beforeAll(async () => { - toolbox = await setupToolbox(); - demoUsd = new DemoUsdTestHelpers(toolbox); - await demoUsd.createPolicy(); - }); - - it('Should not be able to unlock restricted funds (e.g. DEMO_USD).', async () => { - const keypair = Ed25519Keypair.generate(); - const address = keypair.getPublicKey().toSuiAddress(); - - await toolbox.createAccountForAddress(address); - const accountId = toolbox.client.pas.deriveAccountAddress(address); - await demoUsd.mintFromFaucetInto(100, accountId); - - const tx = new Transaction(); - tx.add( - toolbox.client.pas.call.unlockBalance({ - from: address, - amount: 100 * 1_000_000, - assetType: demoUsd.demoUsdAssetType, - }), - ); - - await expect( - toolbox.client.core.signAndExecuteTransaction({ - signer: keypair, - transaction: tx, - include: { - effects: true, - }, - }), - ).rejects.toThrowError('No required approvals found for action'); - }); - - it('derivations work as expected for accounts', async () => { - const accountObjectId = toolbox.client.pas.deriveAccountAddress(toolbox.address()); - await toolbox.createAccountForAddress(toolbox.address()); - - const { object: accountObject } = await toolbox.client.core.getObject({ - objectId: accountObjectId, - include: { content: true }, - }); - - expect(accountObject).toBeDefined(); - - const parsed = Account.parse(accountObject.content!); - expect(normalizeSuiAddress(parsed.owner)).toBe(normalizeSuiAddress(toolbox.address())); - expect(accountObject.type).toBe( - `${toolbox.client.pas.getPackageConfig().packageId}::account::Account`, - ); - }); - - it('derivations work as expected for policies', async () => { - const policyObjectId = toolbox.client.pas.derivePolicyAddress(demoUsd.demoUsdAssetType); - - const { object: policyObject } = await toolbox.client.core.getObject({ - objectId: policyObjectId, - include: { content: true }, - }); - - expect(policyObject).toBeDefined(); - expect(policyObject.type).toBe( - `${toolbox.client.pas.getPackageConfig().packageId}::policy::Policy<0x0000000000000000000000000000000000000000000000000000000000000002::balance::Balance<${demoUsd.pub.originalId}::demo_usd::DEMO_USD>>`, - ); - }); -}); diff --git a/sdk/pas/test/e2e/globalSetup.ts b/sdk/pas/test/e2e/globalSetup.ts deleted file mode 100644 index 785f92d..0000000 --- a/sdk/pas/test/e2e/globalSetup.ts +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import { resolve } from 'path'; -import { GenericContainer, Network, PullPolicy } from 'testcontainers'; -import type { TestProject } from 'vitest/node'; - -declare module 'vitest' { - export interface ProvidedContext { - localnetPort: number; - graphqlPort: number; - faucetPort: number; - suiToolsContainerId: string; - } -} - -const SUI_TOOLS_TAG = - process.env.SUI_TOOLS_TAG || - (process.arch === 'arm64' - ? '951cae315d8b252131836a331bcc16b89eb340d6-arm64' - : '951cae315d8b252131836a331bcc16b89eb340d6'); - -export default async function setup(project: TestProject) { - console.log('Starting test containers'); - const network = await new Network().start(); - - const pg = await new GenericContainer('postgres') - .withEnvironment({ - POSTGRES_USER: 'postgres', - POSTGRES_PASSWORD: 'postgrespw', - POSTGRES_DB: 'sui_indexer_v2', - }) - .withCommand(['-c', 'max_connections=500']) - .withExposedPorts(5432) - .withNetwork(network) - .withPullPolicy(PullPolicy.alwaysPull()) - .start(); - - const localnet = await new GenericContainer(`mysten/sui-tools:${SUI_TOOLS_TAG}`) - .withCommand([ - 'sui', - 'start', - '--with-faucet', - '--force-regenesis', - '--with-graphql', - `--with-indexer=postgres://postgres:postgrespw@${pg.getIpAddress(network.getName())}:5432/sui_indexer_v2`, - ]) - .withCopyDirectoriesToContainer([{ source: resolve(__dirname, 'data'), target: '/test-data' }]) - .withNetwork(network) - .withExposedPorts(9000, 9123, 9124, 9125) - .withLogConsumer((stream) => { - stream.on('data', (data) => { - console.log(data.toString()); - }); - }) - .start(); - - project.provide('faucetPort', localnet.getMappedPort(9123)); - project.provide('localnetPort', localnet.getMappedPort(9000)); - project.provide('graphqlPort', localnet.getMappedPort(9125)); - project.provide('suiToolsContainerId', localnet.getId()); -} diff --git a/sdk/pas/test/e2e/setup.ts b/sdk/pas/test/e2e/setup.ts deleted file mode 100644 index fc8e091..0000000 --- a/sdk/pas/test/e2e/setup.ts +++ /dev/null @@ -1,483 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import path from 'path'; -import type { ClientWithExtensions } from '@mysten/sui/client'; -import { FaucetRateLimitError, getFaucetHost, requestSuiFromFaucetV2 } from '@mysten/sui/faucet'; -import { SuiGraphQLClient } from '@mysten/sui/graphql'; -import { SuiGrpcClient } from '@mysten/sui/grpc'; -import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'; -import { Transaction } from '@mysten/sui/transactions'; -import { normalizeSuiAddress } from '@mysten/sui/utils'; -import type { ContainerRuntimeClient } from 'testcontainers'; -import { getContainerRuntimeClient } from 'testcontainers'; -import { retry } from 'ts-retry-promise'; -import { expect, inject } from 'vitest'; - -import { pas, type PASClient } from '../../src/index.js'; - -const DEFAULT_FAUCET_URL = process.env.FAUCET_URL ?? getFaucetHost('localnet'); -const DEFAULT_FULLNODE_URL = process.env.FULLNODE_URL ?? 'http://127.0.0.1:9000'; -const DEFAULT_GRAPHQL_URL = process.env.GRAPHQL_URL ?? 'http://127.0.0.1:9125/graphql'; - -export type PASClientType = ClientWithExtensions<{ pas: PASClient }, SuiGrpcClient>; - -export type PublishedPackage = { - digest: string; - createdObjects: { - id: string; - type: string; - }[]; - originalId: string; - publishedAt: string; -}; -export class TestToolbox { - keypair: Ed25519Keypair; - client: PASClientType; - configPath: string; - pubFilePath: string; - publishedPackages: Record; - private publishLock: Promise = Promise.resolve(); - - constructor( - keypair: Ed25519Keypair, - client: PASClientType, - configPath: string, - pubFilePath: string, - publishedPackages: Record, - ) { - this.keypair = keypair; - this.client = client; - this.configPath = configPath; - this.pubFilePath = pubFilePath; - this.publishedPackages = publishedPackages; - } - - address() { - return this.keypair.getPublicKey().toSuiAddress(); - } - - /// Publishes a package at a given path. - /// IF the package is already published under the same key, we return its data. - /// It only does sequential writes to avoid equivocation (we use a mutex). - /// An optional `cacheKey` allows publishing the same package path multiple - /// times under different keys (e.g. two independent demo_usd instances). - async publishPackage(packagePath: string, cacheKey?: string) { - const key = cacheKey ?? packagePath; - - // Ensure only one publish happens at a time using the mutex - const currentLock = this.publishLock; - let releaseLock: () => void; - this.publishLock = new Promise((resolve) => { - releaseLock = resolve; - }); - - await currentLock; - - // If the package has already been published, return the published data. - if (this.publishedPackages[key]) { - releaseLock!(); - return this.publishedPackages[key]; - } - - try { - const publicationData = await publishPackage(packagePath, { - configPath: this.configPath, - pubFilePath: this.pubFilePath, - baseClient: this.client, - }); - - this.publishedPackages[key] = { - digest: publicationData.digest, - createdObjects: publicationData.createdObjects, - originalId: publicationData.packageId, - publishedAt: publicationData.packageId, - }; - - return this.publishedPackages[key]; - } finally { - // Release the lock so the next publish can proceed - releaseLock!(); - } - } - - async simulateTransaction(tx: Transaction) { - return simulateTransaction(this, tx); - } - - async executeTransaction(tx: Transaction) { - return executeTransaction(this, tx); - } - - // Creates a account for a given address. - async createAccountForAddress(address: string) { - const tx = new Transaction(); - tx.add(this.client.pas.call.accountForAddress(address)); - return this.executeTransaction(tx); - } - - async getBalance(address: string, assetType: string) { - return this.client.core.getBalance({ - owner: normalizeSuiAddress(address), - coinType: assetType, - }); - } -} - -export function getClient(): SuiGrpcClient { - return new SuiGrpcClient({ - network: 'localnet', - baseUrl: DEFAULT_FULLNODE_URL, - }); -} - -export async function setupToolbox() { - const keypair = Ed25519Keypair.generate(); - const address = keypair.getPublicKey().toSuiAddress(); - const baseClient = getClient(); - - await retry(() => requestSuiFromFaucetV2({ host: DEFAULT_FAUCET_URL, recipient: address }), { - backoff: 'EXPONENTIAL', - // overall timeout in 60 seconds - timeout: 1000 * 60, - // skip retry if we hit the rate-limit error - retryIf: (error: any) => !(error instanceof FaucetRateLimitError), - logger: (msg) => console.warn('Retrying requesting from faucet: ' + msg), - }); - - const configDir = path.join('/test-data', `${Math.random().toString(36).substring(2, 15)}`); - await execSuiTools(['mkdir', '-p', configDir]); - const configPath = path.join(configDir, 'client.yaml'); - await execSuiTools(['sui', 'client', '--yes', '--client.config', configPath]); - - const pubFilePath = path.join(configDir, 'publications.toml'); - - await execSuiTools(['sui', 'client', '--client.config', configPath, 'switch', '--env', 'local']); - await execSuiTools(['sui', 'client', '--client.config', configPath, 'faucet']); - - const publishedPackages: Record = {}; - - // Publish demo_usd with --publish-unpublished-deps so that pas and ptb - // are transitively published without needing local copies of those packages. - const demoUsdData = await publishPackage('demo_usd', { - configPath, - pubFilePath, - baseClient, - }); - - publishedPackages.demo_usd = { - digest: demoUsdData.digest, - createdObjects: demoUsdData.createdObjects, - originalId: demoUsdData.packageId, - publishedAt: demoUsdData.packageId, - }; - - // Discover the transitively-published pas package by querying the CLI - // sender's recent transactions via GraphQL. - const cliAddress = await getCliAddress(configPath); - const pasPublish = await discoverPasPackage(cliAddress, demoUsdData.digest); - - publishedPackages.pas = { - digest: pasPublish.digest, - createdObjects: pasPublish.createdObjects, - originalId: pasPublish.packageId, - publishedAt: pasPublish.packageId, - }; - - const pasPackageId = pasPublish.packageId; - const namespaceId = pasPublish.createdObjects.find((obj) => - obj.type.endsWith('namespace::Namespace'), - )?.id!; - const upgradeCapId = pasPublish.createdObjects.find((obj) => - obj.type.endsWith('UpgradeCap'), - )?.id!; - - const client = baseClient.$extend( - pas({ - packageConfig: { - packageId: pasPackageId, - namespaceId, - }, - }), - ); - - // Link the UpgradeCap to the Namespace (required before any derived object operations). - // This must be done via CLI since the UpgradeCap is owned by the CLI address, not the test keypair. - await execSuiTools([ - 'sui', - 'client', - '--client.config', - configPath, - 'ptb', - '--move-call', - `${pasPackageId}::namespace::setup`, - `@${namespaceId} @${upgradeCapId}`, - '--move-call', - `${pasPackageId}::templates::setup`, - `@${namespaceId}`, - '--json', - ]); - - return new TestToolbox(keypair, client, configPath, pubFilePath, publishedPackages); -} - -async function getCliAddress(configPath: string): Promise { - const result = await execSuiTools([ - 'sui', - 'client', - '--client.config', - configPath, - 'active-address', - ]); - return normalizeSuiAddress(result.stdout.trim()); -} - -const DISCOVER_PAS_QUERY = ` -query ($sender: String!) { - address(address: $sender) { - transactions(relation: SENT, last: 10) { - nodes { - digest - effects { - objectChanges(first: 50) { - nodes { - address - idCreated - outputState { - asMovePackage { - address - } - asMoveObject { - contents { - type { repr } - } - } - } - } - } - } - } - } - } -} -`; - -type GqlObjectChangeNode = { - address: string; - idCreated: boolean | null; - outputState: { - asMovePackage: { address: string } | null; - asMoveObject: { contents: { type: { repr: string } } | null } | null; - } | null; -}; - -type GqlTransactionNode = { - digest: string; - effects: { - objectChanges: { - nodes: GqlObjectChangeNode[]; - }; - }; -}; - -/** - * After publishing demo_usd with --publish-unpublished-deps, the CLI sender - * will have executed separate transactions for each transitive dependency. - * This function queries those transactions via GraphQL and identifies the one - * that published the `pas` package (by looking for a created Namespace object). - */ -async function discoverPasPackage( - senderAddress: string, - excludeDigest: string, -): Promise<{ digest: string; packageId: string; createdObjects: { id: string; type: string }[] }> { - const graphqlClient = new SuiGraphQLClient({ - url: DEFAULT_GRAPHQL_URL, - network: 'localnet', - }); - - // The indexer may lag behind the fullnode, so retry until the transactions appear. - const result = await retry( - async () => { - const { data, errors } = await graphqlClient.query({ - query: DISCOVER_PAS_QUERY, - variables: { sender: senderAddress }, - }); - - if (errors?.length) throw new Error(`GraphQL errors: ${JSON.stringify(errors)}`); - const txNodes = (data as any)?.address?.transactions?.nodes as - | GqlTransactionNode[] - | undefined; - if (!txNodes?.length) throw new Error('No transactions found for CLI sender'); - - // Find the transaction that created a Namespace object (that's the pas publish). - for (const tx of txNodes) { - if (tx.digest === excludeDigest) continue; - - const changes = tx.effects.objectChanges.nodes; - const hasNamespace = changes.some( - (c) => - c.idCreated && - c.outputState?.asMoveObject?.contents?.type?.repr?.includes('namespace::Namespace'), - ); - if (!hasNamespace) continue; - - const packageId = changes.find((c) => c.idCreated && c.outputState?.asMovePackage) - ?.outputState?.asMovePackage?.address; - if (!packageId) continue; - - const createdObjects = changes - .filter((c) => c.idCreated && c.outputState?.asMoveObject) - .map((c) => ({ - id: c.address, - type: c.outputState!.asMoveObject!.contents!.type.repr, - })); - - return { digest: tx.digest, packageId, createdObjects }; - } - - throw new Error('Could not find pas publish transaction among sender transactions'); - }, - { - backoff: 'EXPONENTIAL', - timeout: 1000 * 60, - logger: (msg) => console.warn('Retrying pas package discovery: ' + msg), - }, - ); - - return result; -} - -async function publishPackage( - packageName: string, - { - configPath, - pubFilePath, - baseClient, - }: { - configPath: string; - pubFilePath: string; - baseClient: SuiGrpcClient; - }, -) { - const result = await execSuiTools([ - 'sui', - 'client', - '--client.config', - configPath, - 'test-publish', - '--build-env', - 'testnet', - '--publish-unpublished-deps', - '--pubfile-path', - pubFilePath, - `/test-data/${packageName}`, - '--json', - ]); - - // trim everything before `{` - const resultJson = result.stdout.substring(result.stdout.indexOf('{')); - const publicationDigest = JSON.parse(resultJson).digest; - - // Get the TX to extract the package ID. - const transaction = await baseClient.getTransaction({ - digest: publicationDigest, - include: { - content: true, - effects: true, - events: true, - objectChanges: true, - objectTypes: true, - }, - }); - - const createdObjects = transaction - .Transaction!.effects.changedObjects.filter( - (obj) => obj.idOperation === 'Created' && obj.outputState === 'ObjectWrite', - ) - .map((x) => { - return { - id: x.objectId, - type: transaction.Transaction!.objectTypes![x.objectId], - }; - }); - - const packageId = transaction.Transaction!.effects.changedObjects.find( - (obj) => obj.idOperation === 'Created' && obj.outputState === 'PackageWrite', - )?.objectId; - if (!packageId) throw new Error('Package ID not found'); - - return { - digest: publicationDigest, - createdObjects, - packageId, - }; -} - -export async function executeTransaction(toolbox: TestToolbox, tx: Transaction) { - const resp = await toolbox.client.signAndExecuteTransaction({ - signer: toolbox.keypair, - transaction: tx, - include: { - effects: true, - events: true, - objectChanges: true, - }, - }); - - if (!resp.Transaction?.digest) { - console.dir(resp, { depth: null }); - throw new Error('Transaction digest is missing'); - } - - await toolbox.client.core.waitForTransaction({ - digest: resp.Transaction.digest, - }); - - expect(resp.Transaction?.status.success).toEqual(true); - - return resp; -} - -/** - * Simulate a transaction that is expected to fail, returning the structured - * error with smart-error messages. Uses `simulateTransaction` (not dry-run - * budget estimation) so Move aborts surface as `FailedTransaction` responses - * rather than thrown RPC errors. - */ -export async function simulateFailingTransaction(toolbox: TestToolbox, tx: Transaction) { - tx.setSenderIfNotSet(toolbox.address()); - await tx.prepareForSerialization({ client: toolbox.client }); - - const resp = await toolbox.client.core.simulateTransaction({ - transaction: tx, - include: { effects: true }, - }); - - return resp; -} - -export async function simulateTransaction(toolbox: TestToolbox, tx: Transaction) { - tx.setSender(toolbox.address()); - await tx.prepareForSerialization({ client: toolbox.client }); - return await toolbox.client.core.simulateTransaction({ - transaction: tx, - }); -} - -// @ts-ignore-next-line -const SUI_TOOLS_CONTAINER_ID = inject('suiToolsContainerId'); - -export async function execSuiTools( - command: string[], - options?: Parameters[2], -) { - const client = await getContainerRuntimeClient(); - const container = client.container.getById(SUI_TOOLS_CONTAINER_ID); - - const result = await client.container.exec(container, command, options); - - if (result.stderr) console.error(result.stderr); - // if (result.stdout) console.log(result.stdout); - - return result; -} diff --git a/sdk/pas/test/e2e/setupEnv.ts b/sdk/pas/test/e2e/setupEnv.ts deleted file mode 100644 index eed666c..0000000 --- a/sdk/pas/test/e2e/setupEnv.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -// @ts-ignore - -import { inject } from 'vitest'; - -Object.entries({ - FAUCET_URL: `http://localhost:${inject('faucetPort')}`, - FULLNODE_URL: `http://localhost:${inject('localnetPort')}`, - GRAPHQL_URL: `http://localhost:${inject('graphqlPort')}/graphql`, -}).forEach(([key, value]) => { - // @ts-ignore-next-line - process.env[key] = value; -}); diff --git a/sdk/pas/test/unit/derivation.test.ts b/sdk/pas/test/unit/derivation.test.ts deleted file mode 100644 index 6dbc4aa..0000000 --- a/sdk/pas/test/unit/derivation.test.ts +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import { describe, expect, it } from 'vitest'; - -import { deriveAccountAddress, derivePolicyAddress } from '../../src/derivation.js'; -import type { PASPackageConfig } from '../../src/types.js'; - -describe('PAS Object Derivation', () => { - const packageConfig: PASPackageConfig = { - packageId: '0x123', - namespaceId: '0xabc', - }; - - describe('deriveAccountAddress', () => { - it('should derive account address for owner 0x456', () => { - const accountId = deriveAccountAddress('0x456', packageConfig); - expect(accountId).toMatchInlineSnapshot( - `"0x9605073416559b859b4dd1da95bf2dabf4fa950fd5e25b577cc8b7ff8e02d064"`, - ); - }); - - it('should derive account address for owner 0x789', () => { - const accountId = deriveAccountAddress('0x789', packageConfig); - expect(accountId).toMatchInlineSnapshot( - `"0xa4f66e119756ac7f2b17c8b578f09269eaac2c7116abc6ffa5eadd080cacbfb5"`, - ); - }); - - it('should derive account address for different namespace', () => { - const config = { ...packageConfig, namespaceId: '0xdef' }; - const accountId = deriveAccountAddress('0x456', config); - expect(accountId).toMatchInlineSnapshot( - `"0xdc173ff5543875bbb241fa9056aae7fbad0d77f14496d32b2a9d3e4bfaaa6ac8"`, - ); - }); - - it('should normalize addresses correctly', () => { - const accountId1 = deriveAccountAddress('0x1', packageConfig); - const accountId2 = deriveAccountAddress( - '0x0000000000000000000000000000000000000000000000000000000000000001', - packageConfig, - ); - - expect(accountId1).toBe(accountId2); - expect(accountId1).toMatchInlineSnapshot( - `"0xe078596559d864cf753670c3114ad6b0e61a56c563f41648cf2832bd78bdfa5d"`, - ); - }); - - it('should derive account for object owner', () => { - const accountId = deriveAccountAddress( - '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', - packageConfig, - ); - expect(accountId).toMatchInlineSnapshot( - `"0x3df40ec902430b690b682ecdf489bf8884bdc963c79f677db17f21b7a0e7a0b9"`, - ); - }); - }); - - describe('derivePolicyAddress', () => { - it('should derive policy address for SUI (Balance-wrapped)', () => { - const policyId = derivePolicyAddress('0x2::sui::SUI', packageConfig); - expect(policyId).toMatchInlineSnapshot( - `"0xafc3922318beb884092ce0349fae45b00cc46913dfd72247c48ad1ca890734ab"`, - ); - }); - - it('should derive policy address for custom token (Balance-wrapped)', () => { - const policyId = derivePolicyAddress('0x123::custom::TOKEN', packageConfig); - expect(policyId).toMatchInlineSnapshot( - `"0x0c363b471efa71550b30f4a634fc6f35e0ac357a4a107c7e8f9a0f179334912b"`, - ); - }); - - it('should derive policy address for USDC (Balance-wrapped)', () => { - const policyId = derivePolicyAddress( - '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC', - packageConfig, - ); - expect(policyId).toMatchInlineSnapshot( - `"0xe87bda7a9b045040fe9a6882e6d69f9fb1c79abb804472b273d2ce4b1430bb34"`, - ); - }); - - it('should derive policy address for different namespace', () => { - const config = { ...packageConfig, namespaceId: '0xdef' }; - const policyId = derivePolicyAddress('0x2::sui::SUI', config); - expect(policyId).toMatchInlineSnapshot( - `"0x182cd5446391f7a5be59e6f79beb0c0ed1e3532543f82d37d8a41f13c6dae130"`, - ); - }); - - it('should handle complex generic types (Balance-wrapped)', () => { - const policyId = derivePolicyAddress( - '0x2::coin::Coin<0x123::my_token::MY_TOKEN>', - packageConfig, - ); - expect(policyId).toMatchInlineSnapshot( - `"0xb347105016824245f2bc3611bd7d2f9761b68edf4105837e3372710abcff0912"`, - ); - }); - - it('should handle nested generics (Balance-wrapped)', () => { - const policyId = derivePolicyAddress( - '0x1::option::Option<0x2::coin::Coin<0x2::sui::SUI>>', - packageConfig, - ); - expect(policyId).toMatchInlineSnapshot( - `"0x3851acd50e6a5c86fd8ae0e8acd8aee738849c10f399ac78e4c46ea0a4e8a880"`, - ); - }); - - it('should allow raw derivation via wrapType identity', () => { - const policyId = derivePolicyAddress('0x2::sui::SUI', packageConfig, { - wrapType: (t) => t, - }); - expect(policyId).toMatchInlineSnapshot( - `"0x85ae367dd0501a222f2ef6038f08cafc0c10ba2e85746e4ee15b8d1426ce1954"`, - ); - }); - }); -}); diff --git a/sdk/pas/tsconfig.json b/sdk/pas/tsconfig.json deleted file mode 100644 index 676a8ab..0000000 --- a/sdk/pas/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.shared.json", - "include": ["src"], - "compilerOptions": { - "noEmit": true - } -} diff --git a/sdk/pas/tsdown.config.ts b/sdk/pas/tsdown.config.ts deleted file mode 100644 index e669540..0000000 --- a/sdk/pas/tsdown.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import { defineConfig } from 'tsdown'; - -export default defineConfig({ - entry: ['src/index.ts'], - format: 'esm', - dts: true, - outDir: 'dist', - unbundle: true, -}); diff --git a/sdk/pas/typedoc.json b/sdk/pas/typedoc.json deleted file mode 100644 index ccb323f..0000000 --- a/sdk/pas/typedoc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "entryPoints": ["src"], - "excludeInternal": true, - "excludePrivate": true, - "intentionallyNotExported": [] -} diff --git a/sdk/pas/vite.config.ts b/sdk/pas/vite.config.ts deleted file mode 100644 index b86f276..0000000 --- a/sdk/pas/vite.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import react from '@vitejs/plugin-react'; -import { defineConfig } from 'vite'; - -export default defineConfig({ - plugins: [react()], -}); diff --git a/sdk/pas/vitest.config.mts b/sdk/pas/vitest.config.mts deleted file mode 100644 index c1aee9c..0000000 --- a/sdk/pas/vitest.config.mts +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 - -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - test: { - maxWorkers: 4, - hookTimeout: 1000000, - testTimeout: 1000000, - env: { - NODE_ENV: 'test', - }, - setupFiles: ['test/e2e/setupEnv.ts'], - globalSetup: ['test/e2e/globalSetup.ts'], - }, - resolve: { - alias: {}, - }, -}); diff --git a/sdk/pnpm-lock.yaml b/sdk/pnpm-lock.yaml deleted file mode 100644 index 3e518c5..0000000 --- a/sdk/pnpm-lock.yaml +++ /dev/null @@ -1,3737 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - '@mysten/bcs': - specifier: ^2.0.2 - version: 2.0.2 - '@mysten/codegen': - specifier: ^0.6.0 - version: 0.6.0 - '@mysten/sui': - specifier: ^2.6.0 - version: 2.6.0(typescript@5.9.3) - - example-app: - devDependencies: - '@mysten/sui': - specifier: ^2.4.0 - version: 2.4.0(typescript@5.9.3) - '@types/node': - specifier: ^25.0.8 - version: 25.0.9 - tsx: - specifier: ^4.19.2 - version: 4.21.0 - typescript: - specifier: ^5.9.3 - version: 5.9.3 - - pas: - devDependencies: - '@ianvs/prettier-plugin-sort-imports': - specifier: ^4.7.0 - version: 4.7.0(prettier@3.8.0) - '@mysten/bcs': - specifier: ^2.0.2 - version: 2.0.2 - '@mysten/codegen': - specifier: ^0.6.0 - version: 0.6.0 - '@mysten/sui': - specifier: ^2.4.0 - version: 2.4.0(typescript@5.9.3) - '@testcontainers/postgresql': - specifier: ^11.11.0 - version: 11.11.0 - '@types/node': - specifier: ^25.0.8 - version: 25.0.9 - '@types/ws': - specifier: ^8.18.1 - version: 8.18.1 - oxlint: - specifier: ^1.39.0 - version: 1.41.0 - prettier: - specifier: ^3.7.4 - version: 3.8.0 - testcontainers: - specifier: ^11.11.0 - version: 11.11.0 - ts-retry-promise: - specifier: ^0.8.1 - version: 0.8.1 - tsdown: - specifier: 0.20.0-beta.1 - version: 0.20.0-beta.1(typescript@5.9.3) - typescript: - specifier: ^5.9.3 - version: 5.9.3 - vitest: - specifier: ^4.0.17 - version: 4.0.17(@types/node@25.0.9)(jiti@2.6.1)(msw@2.12.7(@types/node@25.0.9)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) - ws: - specifier: ^8.19.0 - version: 8.19.0 - -packages: - - '@0no-co/graphql.web@1.2.0': - resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - graphql: - optional: true - - '@0no-co/graphqlsp@1.15.2': - resolution: {integrity: sha512-Ys031WnS3sTQQBtRTkQsYnw372OlW72ais4sp0oh2UMPRNyxxnq85zRfU4PIdoy9kWriysPT5BYAkgIxhbonFA==} - peerDependencies: - graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 - typescript: ^5.0.0 - - '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@8.0.0-beta.4': - resolution: {integrity: sha512-5xRfRZk6wx1BRu2XnTE8cTh2mx1ixrZ3/vpn7p/RCJpgctL6pexVVHE3eqtwlYvHhPAuOYCAlnsAyXpBdmfh5Q==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@8.0.0-beta.4': - resolution: {integrity: sha512-FGwbdQ/I2nJXXfyxa7dT0Fr/zPWwgX7m+hNVj0HrIHYJtyLxSQeQY1Kd8QkAYviQJV3OWFlRLuGd5epF03bdQg==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@8.0.0-beta.4': - resolution: {integrity: sha512-6t0IaUEzlinbLmsGIvBZIHEJGjuchx+cMj+FbS78zL17tucYervgbwO07V5/CgBenVraontpmyMCTVyqCfxhFQ==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@8.0.0-beta.4': - resolution: {integrity: sha512-fBcUqUN3eenLyg25QFkOwY1lmV6L0RdG92g6gxyS2CVCY8kHdibkQz1+zV3bLzxcvNnfHoi3i9n5Dci+g93acg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.6': - resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.6': - resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} - engines: {node: '>=6.9.0'} - - '@babel/types@8.0.0-beta.4': - resolution: {integrity: sha512-xjk2xqYp25ePzAs0I08hN2lrbUDDQFfCjwq6MIEa8HwHa0WK8NfNtdvtXod8Ku2CbE1iui7qwWojGvjQiyrQeA==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@balena/dockerignore@1.0.2': - resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} - - '@emnapi/core@1.8.1': - resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - - '@emnapi/runtime@1.8.1': - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@gql.tada/cli-utils@1.7.2': - resolution: {integrity: sha512-Qbc7hbLvCz6IliIJpJuKJa9p05b2Jona7ov7+qofCsMRxHRZE1kpAmZMvL8JCI4c0IagpIlWNaMizXEQUe8XjQ==} - peerDependencies: - '@0no-co/graphqlsp': ^1.12.13 - '@gql.tada/svelte-support': 1.0.1 - '@gql.tada/vue-support': 1.0.1 - graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 - typescript: ^5.0.0 - peerDependenciesMeta: - '@gql.tada/svelte-support': - optional: true - '@gql.tada/vue-support': - optional: true - - '@gql.tada/internal@1.0.8': - resolution: {integrity: sha512-XYdxJhtHC5WtZfdDqtKjcQ4d7R1s0d1rnlSs3OcBEUbYiPoJJfZU7tWsVXuv047Z6msvmr4ompJ7eLSK5Km57g==} - peerDependencies: - graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 - typescript: ^5.0.0 - - '@graphql-typed-document-node/core@3.2.0': - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@grpc/grpc-js@1.14.3': - resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==} - engines: {node: '>=12.10.0'} - - '@grpc/proto-loader@0.7.15': - resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} - engines: {node: '>=6'} - hasBin: true - - '@grpc/proto-loader@0.8.0': - resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} - engines: {node: '>=6'} - hasBin: true - - '@ianvs/prettier-plugin-sort-imports@4.7.0': - resolution: {integrity: sha512-soa2bPUJAFruLL4z/CnMfSEKGznm5ebz29fIa9PxYtu8HHyLKNE1NXAs6dylfw1jn/ilEIfO2oLLN6uAafb7DA==} - peerDependencies: - '@prettier/plugin-oxc': ^0.0.4 - '@vue/compiler-sfc': 2.7.x || 3.x - content-tag: ^4.0.0 - prettier: 2 || 3 || ^4.0.0-0 - prettier-plugin-ember-template-tag: ^2.1.0 - peerDependenciesMeta: - '@prettier/plugin-oxc': - optional: true - '@vue/compiler-sfc': - optional: true - content-tag: - optional: true - prettier-plugin-ember-template-tag: - optional: true - - '@inquirer/ansi@1.0.2': - resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} - engines: {node: '>=18'} - - '@inquirer/confirm@5.1.21': - resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@10.3.2': - resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} - engines: {node: '>=18'} - - '@inquirer/type@3.0.10': - resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@js-sdsl/ordered-map@4.4.2': - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - - '@mswjs/interceptors@0.40.0': - resolution: {integrity: sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==} - engines: {node: '>=18'} - - '@mysten/bcs@2.0.2': - resolution: {integrity: sha512-c/nVRPJEV1fRZdKXhysVsy/yCPdiFt7jn6A4/7W2LH1ZPSVPzRkxtLY362D0zaLuBnyT5Y9d9nFLm3ixI8Goug==} - - '@mysten/codegen@0.6.0': - resolution: {integrity: sha512-35QCW9E6JRx17XHhh3GjQbPyVzvr7UsGPmnQxc9QDXZmgY4+P6AaksDke+pTi/hBi/L2nH6M09umJBBv3Q6XIw==} - hasBin: true - - '@mysten/sui@2.4.0': - resolution: {integrity: sha512-2EG5+lTypWMgU3lWyKlcjopQ++Ae9BkoROOBVcJ6mYwM5o1IcKnoc7rFqr94KQClYmBFV2aFz5+aKm5okatoBw==} - engines: {node: '>=22'} - - '@mysten/sui@2.6.0': - resolution: {integrity: sha512-Dp3z7mDuUCXGgldQ3/AtC1iDiK48XTuAi//fPrHdxEaMl+f5VLjbYtB+mlKNC1SVYLKOUjTeF/RA9qfEBY++pA==} - engines: {node: '>=22'} - - '@mysten/utils@0.3.1': - resolution: {integrity: sha512-36KhxG284uhDdSnlkyNaS6fzKTX9FpP2WQWOwUKIRsqQFFIm2ooCf2TP1IuqrtMpkairwpiWkAS0eg7cpemVzg==} - - '@napi-rs/wasm-runtime@1.1.1': - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} - - '@noble/curves@2.0.1': - resolution: {integrity: sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==} - engines: {node: '>= 20.19.0'} - - '@noble/hashes@2.0.1': - resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} - engines: {node: '>= 20.19.0'} - - '@open-draft/deferred-promise@2.2.0': - resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - - '@open-draft/logger@0.3.0': - resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} - - '@open-draft/until@2.1.0': - resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - - '@oxc-project/types@0.107.0': - resolution: {integrity: sha512-QFDRbYfV2LVx8tyqtyiah3jQPUj1mK2+RYwxyFWyGoys6XJnwTdlzO6rdNNHOPorHAu5Uo34oWRKcvNpbJarmQ==} - - '@oxc-project/types@0.108.0': - resolution: {integrity: sha512-7lf13b2IA/kZO6xgnIZA88sq3vwrxWk+2vxf6cc+omwYCRTiA5e63Beqf3fz/v8jEviChWWmFYBwzfSeyrsj7Q==} - - '@oxlint/darwin-arm64@1.41.0': - resolution: {integrity: sha512-K0Bs0cNW11oWdSrKmrollKF44HMM2HKr4QidZQHMlhJcSX8pozxv0V5FLdqB4sddzCY0J9Wuuw+oRAfR8sdRwA==} - cpu: [arm64] - os: [darwin] - - '@oxlint/darwin-x64@1.41.0': - resolution: {integrity: sha512-1LCCXCe9nN8LbrJ1QOGari2HqnxrZrveYKysWDIg8gFsQglIg00XF/8lRbA0kWHMdLgt4X0wfNYhhFz+c3XXLQ==} - cpu: [x64] - os: [darwin] - - '@oxlint/linux-arm64-gnu@1.41.0': - resolution: {integrity: sha512-Fow7H84Bs8XxuaK1yfSEWBC8HI7rfEQB9eR2A0J61un1WgCas7jNrt1HbT6+p6KmUH2bhR+r/RDu/6JFAvvj4g==} - cpu: [arm64] - os: [linux] - - '@oxlint/linux-arm64-musl@1.41.0': - resolution: {integrity: sha512-WoRRDNwgP5W3rjRh42Zdx8ferYnqpKoYCv2QQLenmdrLjRGYwAd52uywfkcS45mKEWHeY1RPwPkYCSROXiGb2w==} - cpu: [arm64] - os: [linux] - - '@oxlint/linux-x64-gnu@1.41.0': - resolution: {integrity: sha512-75k3CKj3fOc/a/2aSgO81s3HsTZOFROthPJ+UI2Oatic1LhvH6eKjKfx3jDDyVpzeDS2qekPlc/y3N33iZz5Og==} - cpu: [x64] - os: [linux] - - '@oxlint/linux-x64-musl@1.41.0': - resolution: {integrity: sha512-8r82eBwGPoAPn67ZvdxTlX/Z3gVb+ZtN6nbkyFzwwHWAh8yGutX+VBcVkyrePSl6XgBP4QAaddPnHmkvJjqY0g==} - cpu: [x64] - os: [linux] - - '@oxlint/win32-arm64@1.41.0': - resolution: {integrity: sha512-aK+DAcckQsNCOXKruatyYuY/ROjNiRejQB1PeJtkZwM21+8rV9ODYbvKNvt0pW+YCws7svftBSFMCpl3ke2unw==} - cpu: [arm64] - os: [win32] - - '@oxlint/win32-x64@1.41.0': - resolution: {integrity: sha512-dVBXkZ6MGLd3owV7jvuqJsZwiF3qw7kEkDVsYVpS/O96eEvlHcxVbaPjJjrTBgikXqyC22vg3dxBU7MW0utGfw==} - cpu: [x64] - os: [win32] - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@protobuf-ts/grpcweb-transport@2.11.1': - resolution: {integrity: sha512-1W4utDdvOB+RHMFQ0soL4JdnxjXV+ddeGIUg08DvZrA8Ms6k5NN6GBFU2oHZdTOcJVpPrDJ02RJlqtaoCMNBtw==} - - '@protobuf-ts/runtime-rpc@2.11.1': - resolution: {integrity: sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==} - - '@protobuf-ts/runtime@2.11.1': - resolution: {integrity: sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==} - - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - - '@quansync/fs@1.0.0': - resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - - '@rolldown/binding-android-arm64@1.0.0-beta.59': - resolution: {integrity: sha512-6yLLgyswYwiCfls9+hoNFY9F8TQdwo15hpXDHzlAR0X/GojeKF+AuNcXjYNbOJ4zjl/5D6lliE8CbpB5t1OWIQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@rolldown/binding-android-arm64@1.0.0-beta.60': - resolution: {integrity: sha512-hOW6iQXtpG4uCW1zGK56+KhEXGttSkTp2ykncW/nkOIF/jOKTqbM944Q73HVeMXP1mPRvE2cZwNp3xeLIeyIGQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.0.0-beta.59': - resolution: {integrity: sha512-hqGXRc162qCCIOAcHN2Cw4eXiVTwYsMFLOhAy1IG2CxY+dwc/l4Ga+dLPkLor3Ikqy5WDn+7kxHbbh6EmshEpQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-arm64@1.0.0-beta.60': - resolution: {integrity: sha512-vyDA4HXY2mP8PPtl5UE17uGPxUNG4m1wkfa3kAkR8JWrFbarV97UmLq22IWrNhtBPa89xqerzLK8KoVmz5JqCQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.0-beta.59': - resolution: {integrity: sha512-ezvvGuhteE15JmMhJW0wS7BaXmhwLy1YHeEwievYaPC1PgGD86wgBKfOpHr9tSKllAXbCe0BeeMvasscWLhKdA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.0-beta.60': - resolution: {integrity: sha512-WnxyqxAKP2BsxouwGY/RCF5UFw/LA4QOHhJ7VEl+UCelHokiwqNHRbryLAyRy3TE1FZ5eae+vAFcaetAu/kWLw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-freebsd-x64@1.0.0-beta.59': - resolution: {integrity: sha512-4fhKVJiEYVd5n6no/mrL3LZ9kByfCGwmONOrdtvx8DJGDQhehH/q3RfhG3V/4jGKhpXgbDjpIjkkFdybCTcgew==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-freebsd-x64@1.0.0-beta.60': - resolution: {integrity: sha512-JtyWJ+zXOHof5gOUYwdTWI2kL6b8q9eNwqB/oD4mfUFaC/COEB2+47JMhcq78dey9Ahmec3DZKRDZPRh9hNAMQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.59': - resolution: {integrity: sha512-T3Y52sW6JAhvIqArBw+wtjNU1Ieaz4g0NBxyjSJoW971nZJBZygNlSYx78G4cwkCmo1dYTciTPDOnQygLV23pA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.60': - resolution: {integrity: sha512-LrMoKqpHx+kCaNSk84iSBd4yVOymLIbxJQtvFjDN2CjQraownR+IXcwYDblFcj9ivmS54T3vCboXBbm3s1zbPQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.59': - resolution: {integrity: sha512-NIW40jQDSQap2KDdmm9z3B/4OzWJ6trf8dwx3FD74kcQb3v34ThsBFTtzE5KjDuxnxgUlV+DkAu+XgSMKrgufw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.60': - resolution: {integrity: sha512-sqI+Vdx1gmXJMsXN3Fsewm3wlt7RHvRs1uysSp//NLsCoh9ZFEUr4ZzGhWKOg6Rvf+njNu/vCsz96x7wssLejQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.59': - resolution: {integrity: sha512-CCKEk+H+8c0WGe/8n1E20n85Tq4Pv+HNAbjP1KfUXW+01aCWSMjU56ChNrM2tvHnXicfm7QRNoZyfY8cWh7jLQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.60': - resolution: {integrity: sha512-8xlqGLDtTP8sBfYwneTDu8+PRm5reNEHAuI/+6WPy9y350ls0KTFd3EJCOWEXWGW0F35ko9Fn9azmurBTjqOrQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.59': - resolution: {integrity: sha512-VlfwJ/HCskPmQi8R0JuAFndySKVFX7yPhE658o27cjSDWWbXVtGkSbwaxstii7Q+3Rz87ZXN+HLnb1kd4R9Img==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.60': - resolution: {integrity: sha512-iR4nhVouVZK1CiGGGyz+prF5Lw9Lmz30Rl36Hajex+dFVFiegka604zBwzTp5Tl0BZnr50ztnVJ30tGrBhDr8Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.59': - resolution: {integrity: sha512-kuO92hTRyGy0Ts3Nsqll0rfO8eFsEJe9dGQGktkQnZ2hrJrDVN0y419dMgKy/gB2S2o7F2dpWhpfQOBehZPwVA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.60': - resolution: {integrity: sha512-HbfNcqNeqxFjSMf1Kpe8itr2e2lr0Bm6HltD2qXtfU91bSSikVs9EWsa1ThshQ1v2ZvxXckGjlVLtah6IoslPg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-openharmony-arm64@1.0.0-beta.59': - resolution: {integrity: sha512-PXAebvNL4sYfCqi8LdY4qyFRacrRoiPZLo3NoUmiTxm7MPtYYR8CNtBGNokqDmMuZIQIecRaD/jbmFAIDz7DxQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-openharmony-arm64@1.0.0-beta.60': - resolution: {integrity: sha512-BiiamFcgTJ+ZFOUIMO9AHXUo9WXvHVwGfSrJ+Sv0AsTd2w3VN7dJGiH3WRcxKFetljJHWvGbM4fdpY5lf6RIvw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.59': - resolution: {integrity: sha512-yJoklQg7XIZq8nAg0bbkEXcDK6sfpjxQGxpg2Nd6ERNtvg+eOaEBRgPww0BVTrYFQzje1pB5qPwC2VnJHT3koQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.60': - resolution: {integrity: sha512-6roXGbHMdR2ucnxXuwbmQvk8tuYl3VGu0yv13KxspyKBxxBd4RS6iykzLD6mX2gMUHhfX8SVWz7n/62gfyKHow==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.59': - resolution: {integrity: sha512-ljZ4+McmCbIuZwEBaoGtiG8Rq2nJjaXEnLEIx+usWetXn1ECjXY0LAhkELxOV6ytv4ensEmoJJ8nXg47hRMjlw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.60': - resolution: {integrity: sha512-JBOm8/DC/CKnHyMHoJFdvzVHxUixid4dGkiTqGflxOxO43uSJMpl77pSPXvzwZ/VXwqblU2V0/PanyCBcRLowQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.59': - resolution: {integrity: sha512-bMY4tTIwbdZljW+xe/ln1hvs0SRitahQSXfWtvgAtIzgSX9Ar7KqJzU7lRm33YTRFIHLULRi53yNjw9nJGd6uQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.60': - resolution: {integrity: sha512-MKF0B823Efp+Ot8KsbwIuGhKH58pf+2rSM6VcqyNMlNBHheOM0Gf7JmEu+toc1jgN6fqjH7Et+8hAzsLVkIGfA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/pluginutils@1.0.0-beta.59': - resolution: {integrity: sha512-aoh6LAJRyhtazs98ydgpNOYstxUlsOV1KJXcpf/0c0vFcUA8uyd/hwKRhqE/AAPNqAho9RliGsvitCoOzREoVA==} - - '@rolldown/pluginutils@1.0.0-beta.60': - resolution: {integrity: sha512-Jz4aqXRPVtqkH1E3jRDzLO5cgN5JwW+WG0wXGE4NiJd25nougv/AHzxmKCzmVQUYnxLmTM0M4wrZp+LlC2FKLg==} - - '@rollup/rollup-android-arm-eabi@4.55.2': - resolution: {integrity: sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.55.2': - resolution: {integrity: sha512-eXBg7ibkNUZ+sTwbFiDKou0BAckeV6kIigK7y5Ko4mB/5A1KLhuzEKovsmfvsL8mQorkoincMFGnQuIT92SKqA==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.55.2': - resolution: {integrity: sha512-UCbaTklREjrc5U47ypLulAgg4njaqfOVLU18VrCrI+6E5MQjuG0lSWaqLlAJwsD7NpFV249XgB0Bi37Zh5Sz4g==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.55.2': - resolution: {integrity: sha512-dP67MA0cCMHFT2g5XyjtpVOtp7y4UyUxN3dhLdt11at5cPKnSm4lY+EhwNvDXIMzAMIo2KU+mc9wxaAQJTn7sQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.55.2': - resolution: {integrity: sha512-WDUPLUwfYV9G1yxNRJdXcvISW15mpvod1Wv3ok+Ws93w1HjIVmCIFxsG2DquO+3usMNCpJQ0wqO+3GhFdl6Fow==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.55.2': - resolution: {integrity: sha512-Ng95wtHVEulRwn7R0tMrlUuiLVL/HXA8Lt/MYVpy88+s5ikpntzZba1qEulTuPnPIZuOPcW9wNEiqvZxZmgmqQ==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.55.2': - resolution: {integrity: sha512-AEXMESUDWWGqD6LwO/HkqCZgUE1VCJ1OhbvYGsfqX2Y6w5quSXuyoy/Fg3nRqiwro+cJYFxiw5v4kB2ZDLhxrw==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.55.2': - resolution: {integrity: sha512-ZV7EljjBDwBBBSv570VWj0hiNTdHt9uGznDtznBB4Caj3ch5rgD4I2K1GQrtbvJ/QiB+663lLgOdcADMNVC29Q==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.55.2': - resolution: {integrity: sha512-uvjwc8NtQVPAJtq4Tt7Q49FOodjfbf6NpqXyW/rjXoV+iZ3EJAHLNAnKT5UJBc6ffQVgmXTUL2ifYiLABlGFqA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.55.2': - resolution: {integrity: sha512-s3KoWVNnye9mm/2WpOZ3JeUiediUVw6AvY/H7jNA6qgKA2V2aM25lMkVarTDfiicn/DLq3O0a81jncXszoyCFA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loong64-gnu@4.55.2': - resolution: {integrity: sha512-gi21faacK+J8aVSyAUptML9VQN26JRxe484IbF+h3hpG+sNVoMXPduhREz2CcYr5my0NE3MjVvQ5bMKX71pfVA==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-loong64-musl@4.55.2': - resolution: {integrity: sha512-qSlWiXnVaS/ceqXNfnoFZh4IiCA0EwvCivivTGbEu1qv2o+WTHpn1zNmCTAoOG5QaVr2/yhCoLScQtc/7RxshA==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.55.2': - resolution: {integrity: sha512-rPyuLFNoF1B0+wolH277E780NUKf+KoEDb3OyoLbAO18BbeKi++YN6gC/zuJoPPDlQRL3fIxHxCxVEWiem2yXw==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-ppc64-musl@4.55.2': - resolution: {integrity: sha512-g+0ZLMook31iWV4PvqKU0i9E78gaZgYpSrYPed/4Bu+nGTgfOPtfs1h11tSSRPXSjC5EzLTjV/1A7L2Vr8pJoQ==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.55.2': - resolution: {integrity: sha512-i+sGeRGsjKZcQRh3BRfpLsM3LX3bi4AoEVqmGDyc50L6KfYsN45wVCSz70iQMwPWr3E5opSiLOwsC9WB4/1pqg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.55.2': - resolution: {integrity: sha512-C1vLcKc4MfFV6I0aWsC7B2Y9QcsiEcvKkfxprwkPfLaN8hQf0/fKHwSF2lcYzA9g4imqnhic729VB9Fo70HO3Q==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.55.2': - resolution: {integrity: sha512-68gHUK/howpQjh7g7hlD9DvTTt4sNLp1Bb+Yzw2Ki0xvscm2cOdCLZNJNhd2jW8lsTPrHAHuF751BygifW4bkQ==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.55.2': - resolution: {integrity: sha512-1e30XAuaBP1MAizaOBApsgeGZge2/Byd6wV4a8oa6jPdHELbRHBiw7wvo4dp7Ie2PE8TZT4pj9RLGZv9N4qwlw==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.55.2': - resolution: {integrity: sha512-4BJucJBGbuGnH6q7kpPqGJGzZnYrpAzRd60HQSt3OpX/6/YVgSsJnNzR8Ot74io50SeVT4CtCWe/RYIAymFPwA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-openbsd-x64@4.55.2': - resolution: {integrity: sha512-cT2MmXySMo58ENv8p6/O6wI/h/gLnD3D6JoajwXFZH6X9jz4hARqUhWpGuQhOgLNXscfZYRQMJvZDtWNzMAIDw==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.55.2': - resolution: {integrity: sha512-sZnyUgGkuzIXaK3jNMPmUIyJrxu/PjmATQrocpGA1WbCPX8H5tfGgRSuYtqBYAvLuIGp8SPRb1O4d1Fkb5fXaQ==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.55.2': - resolution: {integrity: sha512-sDpFbenhmWjNcEbBcoTV0PWvW5rPJFvu+P7XoTY0YLGRupgLbFY0XPfwIbJOObzO7QgkRDANh65RjhPmgSaAjQ==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.55.2': - resolution: {integrity: sha512-GvJ03TqqaweWCigtKQVBErw2bEhu1tyfNQbarwr94wCGnczA9HF8wqEe3U/Lfu6EdeNP0p6R+APeHVwEqVxpUQ==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.55.2': - resolution: {integrity: sha512-KvXsBvp13oZz9JGe5NYS7FNizLe99Ny+W8ETsuCyjXiKdiGrcz2/J/N8qxZ/RSwivqjQguug07NLHqrIHrqfYw==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.55.2': - resolution: {integrity: sha512-xNO+fksQhsAckRtDSPWaMeT1uIM+JrDRXlerpnWNXhn1TdB3YZ6uKBMBTKP0eX9XtYEP978hHk1f8332i2AW8Q==} - cpu: [x64] - os: [win32] - - '@scure/base@2.0.0': - resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==} - - '@scure/bip32@2.0.1': - resolution: {integrity: sha512-4Md1NI5BzoVP+bhyJaY3K6yMesEFzNS1sE/cP+9nuvE7p/b0kx9XbpDHHFl8dHtufcbdHRUUQdRqLIPHN/s7yA==} - - '@scure/bip39@2.0.1': - resolution: {integrity: sha512-PsxdFj/d2AcJcZDX1FXN3dDgitDDTmwf78rKZq1a6c1P1Nan1X/Sxc7667zU3U+AN60g7SxxP0YCVw2H/hBycg==} - - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - - '@stricli/auto-complete@1.2.5': - resolution: {integrity: sha512-C6G88Hh4lUWBwiqsxbcA4I1ricSQwiLaOziTWW3NmBoX7WGTW7i7RvyooXMpZk1YMLf2olv5Odxmg127ik1DKQ==} - hasBin: true - - '@stricli/core@1.2.5': - resolution: {integrity: sha512-+afyztQW7fwWkqmU2WQZbdc3LjnZThWYdtE0l+hykZ1Rvy7YGxZSvsVCS/wZ/2BNv117pQ9TU1GZZRIcPnB4tw==} - - '@testcontainers/postgresql@11.11.0': - resolution: {integrity: sha512-Og64I/h5LKLVvUTkAcLeTXfFcMhh3dCHCypN3Uzd+tQMd70SpCfQ0LCP9v/U+MS7JBRzU9EmqhUFkTOm4hyZWw==} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - - '@types/chai@5.2.3': - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - - '@types/docker-modem@3.0.6': - resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} - - '@types/dockerode@3.3.47': - resolution: {integrity: sha512-ShM1mz7rCjdssXt7Xz0u1/R2BJC7piWa3SJpUBiVjCf2A3XNn4cP6pUVaD8bLanpPVVn4IKzJuw3dOvkJ8IbYw==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/jsesc@2.5.1': - resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} - - '@types/node@18.19.130': - resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} - - '@types/node@25.0.9': - resolution: {integrity: sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==} - - '@types/ssh2-streams@0.1.13': - resolution: {integrity: sha512-faHyY3brO9oLEA0QlcO8N2wT7R0+1sHWZvQ+y3rMLwdY1ZyS1z0W3t65j9PqT4HmQ6ALzNe7RZlNuCNE0wBSWA==} - - '@types/ssh2@0.5.52': - resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} - - '@types/ssh2@1.15.5': - resolution: {integrity: sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==} - - '@types/statuses@2.0.6': - resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} - - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - - '@vitest/expect@4.0.17': - resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==} - - '@vitest/mocker@4.0.17': - resolution: {integrity: sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@4.0.17': - resolution: {integrity: sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==} - - '@vitest/runner@4.0.17': - resolution: {integrity: sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==} - - '@vitest/snapshot@4.0.17': - resolution: {integrity: sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==} - - '@vitest/spy@4.0.17': - resolution: {integrity: sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==} - - '@vitest/utils@4.0.17': - resolution: {integrity: sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} - engines: {node: '>=14'} - - archiver-utils@5.0.2: - resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} - engines: {node: '>= 14'} - - archiver@7.0.1: - resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} - engines: {node: '>= 14'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - ast-kit@3.0.0-beta.1: - resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==} - engines: {node: '>=20.19.0'} - - async-lock@1.4.1: - resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - b4a@1.7.3: - resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} - peerDependencies: - react-native-b4a: '*' - peerDependenciesMeta: - react-native-b4a: - optional: true - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - bare-events@2.8.2: - resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} - peerDependencies: - bare-abort-controller: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - - bare-fs@4.5.2: - resolution: {integrity: sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.7.0: - resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.3.2: - resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - - birpc@4.0.0: - resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - buffer-crc32@1.0.0: - resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} - engines: {node: '>=8.0.0'} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - - buildcheck@0.0.7: - resolution: {integrity: sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==} - engines: {node: '>=10.0.0'} - - byline@5.0.0: - resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} - engines: {node: '>=0.10.0'} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - chai@6.2.2: - resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} - engines: {node: '>=18'} - - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - compress-commons@6.0.2: - resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} - engines: {node: '>= 14'} - - cookie@1.1.1: - resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} - engines: {node: '>=18'} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - cpu-features@0.0.10: - resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} - engines: {node: '>=10.0.0'} - - crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - - crc32-stream@6.0.0: - resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} - engines: {node: '>= 14'} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - docker-compose@1.3.0: - resolution: {integrity: sha512-7Gevk/5eGD50+eMD+XDnFnOrruFkL0kSd7jEG4cjmqweDSUhB7i0g8is/nBdVpl+Bx338SqIB2GLKm32M+Vs6g==} - engines: {node: '>= 6.0.0'} - - docker-modem@5.0.6: - resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==} - engines: {node: '>= 8.0'} - - dockerode@4.0.9: - resolution: {integrity: sha512-iND4mcOWhPaCNh54WmK/KoSb35AFqPAUWFMffTQcp52uQt36b5uNwEJTSXntJZBbeGad72Crbi/hvDIv6us/6Q==} - engines: {node: '>= 8.0'} - - dts-resolver@2.1.3: - resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} - engines: {node: '>=20.19.0'} - peerDependencies: - oxc-resolver: '>=11.0.0' - peerDependenciesMeta: - oxc-resolver: - optional: true - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} - engines: {node: '>=14'} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - events-universal@1.0.1: - resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} - engines: {node: '>=12.0.0'} - - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-port@7.1.0: - resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} - engines: {node: '>=16'} - - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} - - glob@10.5.0: - resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - hasBin: true - - gql.tada@1.9.0: - resolution: {integrity: sha512-1LMiA46dRs5oF7Qev6vMU32gmiNvM3+3nHoQZA9K9j2xQzH8xOAWnnJrLSbZOFHTSdFxqn86TL6beo1/7ja/aA==} - hasBin: true - peerDependencies: - typescript: ^5.0.0 - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphql@16.12.0: - resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - - headers-polyfill@4.0.3: - resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} - - hookable@6.0.1: - resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - import-without-cache@0.2.5: - resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} - engines: {node: '>=20.19.0'} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - lazystream@1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - msw@2.12.7: - resolution: {integrity: sha512-retd5i3xCZDVWMYjHEVuKTmhqY8lSsxujjVrZiGbbdoxxIBg5S7rCuYy/YQpfrTYIxpd/o0Kyb/3H+1udBMoYg==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - typescript: '>= 4.8.x' - peerDependenciesMeta: - typescript: - optional: true - - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - - nan@2.24.0: - resolution: {integrity: sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - outvariant@1.4.3: - resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - - oxlint@1.41.0: - resolution: {integrity: sha512-Dyaoup82uhgAgp5xLNt4dPdvl5eSJTIzqzL7DcKbkooUE4PDViWURIPlSUF8hu5a+sCnNIp/LlQMDsKoyaLTBA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - oxlint-tsgolint: '>=0.11.1' - peerDependenciesMeta: - oxlint-tsgolint: - optional: true - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - poseidon-lite@0.2.1: - resolution: {integrity: sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog==} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - prettier@3.8.0: - resolution: {integrity: sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==} - engines: {node: '>=14'} - hasBin: true - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - - proper-lockfile@4.1.2: - resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - - properties-reader@2.3.0: - resolution: {integrity: sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==} - engines: {node: '>=14'} - - protobufjs@7.5.4: - resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} - engines: {node: '>=12.0.0'} - - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - - quansync@1.0.0: - resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} - - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - readdir-glob@1.1.3: - resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - rettime@0.7.0: - resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} - - rolldown-plugin-dts@0.21.3: - resolution: {integrity: sha512-i/olGjFFFCLa1atzqZsajO7GYjjCIDKMqN4mUfbHfGe6EibULy3SUGDu9ZXL3y855rXNf6oa8xdgMNzVI5wNOg==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@ts-macro/tsc': ^0.3.6 - '@typescript/native-preview': '>=7.0.0-dev.20250601.1' - rolldown: ^1.0.0-beta.57 - typescript: ^5.0.0 - vue-tsc: ~3.2.0 - peerDependenciesMeta: - '@ts-macro/tsc': - optional: true - '@typescript/native-preview': - optional: true - typescript: - optional: true - vue-tsc: - optional: true - - rolldown@1.0.0-beta.59: - resolution: {integrity: sha512-Slm000Gd8/AO9z4Kxl4r8mp/iakrbAuJ1L+7ddpkNxgQ+Vf37WPvY63l3oeyZcfuPD1DRrUYBsRPIXSOhvOsmw==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - rolldown@1.0.0-beta.60: - resolution: {integrity: sha512-YYgpv7MiTp9LdLj1fzGzCtij8Yi2OKEc3HQtfbIxW4yuSgpQz9518I69U72T5ErPA/ATOXqlcisiLrWy+5V9YA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - rollup@4.55.2: - resolution: {integrity: sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - split-ca@1.0.1: - resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} - - ssh-remote-port-forward@1.0.4: - resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} - - ssh2@1.17.0: - resolution: {integrity: sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==} - engines: {node: '>=10.16.0'} - - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - - streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} - - strict-event-emitter@0.5.1: - resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - tagged-tag@1.0.0: - resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} - engines: {node: '>=20'} - - tar-fs@2.1.4: - resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - - testcontainers@11.11.0: - resolution: {integrity: sha512-nKTJn3n/gkyGg/3SVkOwX+isPOGSHlfI+CWMobSmvQrsj7YW01aWvl2pYIfV4LMd+C8or783yYrzKSK2JlP+Qw==} - - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} - engines: {node: '>=18'} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} - engines: {node: '>=14.0.0'} - - tldts-core@7.0.19: - resolution: {integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==} - - tldts@7.0.19: - resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==} - hasBin: true - - tmp@0.2.5: - resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} - engines: {node: '>=14.14'} - - toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - - tough-cookie@6.0.0: - resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} - engines: {node: '>=16'} - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - ts-retry-promise@0.8.1: - resolution: {integrity: sha512-+AHPUmAhr5bSRRK5CurE9kNH8gZlEHnCgusZ0zy2bjfatUBDX0h6vGQjiT0YrGwSDwRZmU+bapeX6mj55FOPvg==} - engines: {node: '>=6'} - - tsdown@0.20.0-beta.1: - resolution: {integrity: sha512-F/A0vGKG8/8XSKMxQtHCeRHpI2jlpKQLQ8sEDKh3XXWZjAXyz5pjHosJvsL5NEv+9ZtcQZEw0xEzPgfJSAWgdg==} - engines: {node: '>=20.19.0'} - hasBin: true - peerDependencies: - '@arethetypeswrong/core': ^0.18.1 - '@vitejs/devtools': '*' - publint: ^0.3.0 - typescript: ^5.0.0 - unplugin-lightningcss: ^0.4.0 - unplugin-unused: ^0.5.0 - peerDependenciesMeta: - '@arethetypeswrong/core': - optional: true - '@vitejs/devtools': - optional: true - publint: - optional: true - typescript: - optional: true - unplugin-lightningcss: - optional: true - unplugin-unused: - optional: true - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} - engines: {node: '>=18.0.0'} - hasBin: true - - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - - type-fest@5.4.1: - resolution: {integrity: sha512-xygQcmneDyzsEuKZrFbRMne5HDqMs++aFzefrJTgEIKjQ3rekM+RPfFCVq2Gp1VIDqddoYeppCj4Pcb+RZW0GQ==} - engines: {node: '>=20'} - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - unconfig-core@7.4.2: - resolution: {integrity: sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - - undici@7.18.2: - resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} - engines: {node: '>=20.18.1'} - - unrun@0.2.25: - resolution: {integrity: sha512-ZOr5uQL+JlcUT8hZsQbtuUgb1zzcFx3juhXyLSsciaWa3DW1ldMY9r4KSF3+k/LR1Evj2ggAZo1usK4/knBjMQ==} - engines: {node: '>=20.19.0'} - hasBin: true - peerDependencies: - synckit: ^0.11.11 - peerDependenciesMeta: - synckit: - optional: true - - until-async@3.0.2: - resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true - - valibot@1.2.0: - resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true - - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vitest@4.0.17: - resolution: {integrity: sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.17 - '@vitest/browser-preview': 4.0.17 - '@vitest/browser-webdriverio': 4.0.17 - '@vitest/ui': 4.0.17 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} - engines: {node: '>= 14.6'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} - - zip-stream@6.0.1: - resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} - engines: {node: '>= 14'} - - zod@4.3.5: - resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} - -snapshots: - - '@0no-co/graphql.web@1.2.0(graphql@16.12.0)': - optionalDependencies: - graphql: 16.12.0 - - '@0no-co/graphqlsp@1.15.2(graphql@16.12.0)(typescript@5.9.3)': - dependencies: - '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) - graphql: 16.12.0 - typescript: 5.9.3 - - '@babel/code-frame@7.28.6': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/generator@7.28.6': - dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/generator@8.0.0-beta.4': - dependencies: - '@babel/parser': 8.0.0-beta.4 - '@babel/types': 8.0.0-beta.4 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - '@types/jsesc': 2.5.1 - jsesc: 3.1.0 - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-string-parser@8.0.0-beta.4': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-identifier@8.0.0-beta.4': {} - - '@babel/parser@7.28.6': - dependencies: - '@babel/types': 7.28.6 - - '@babel/parser@8.0.0-beta.4': - dependencies: - '@babel/types': 8.0.0-beta.4 - - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 - - '@babel/traverse@7.28.6': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.6 - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.28.6': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@babel/types@8.0.0-beta.4': - dependencies: - '@babel/helper-string-parser': 8.0.0-beta.4 - '@babel/helper-validator-identifier': 8.0.0-beta.4 - - '@balena/dockerignore@1.0.2': {} - - '@emnapi/core@1.8.1': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.8.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.1.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@esbuild/aix-ppc64@0.27.2': - optional: true - - '@esbuild/android-arm64@0.27.2': - optional: true - - '@esbuild/android-arm@0.27.2': - optional: true - - '@esbuild/android-x64@0.27.2': - optional: true - - '@esbuild/darwin-arm64@0.27.2': - optional: true - - '@esbuild/darwin-x64@0.27.2': - optional: true - - '@esbuild/freebsd-arm64@0.27.2': - optional: true - - '@esbuild/freebsd-x64@0.27.2': - optional: true - - '@esbuild/linux-arm64@0.27.2': - optional: true - - '@esbuild/linux-arm@0.27.2': - optional: true - - '@esbuild/linux-ia32@0.27.2': - optional: true - - '@esbuild/linux-loong64@0.27.2': - optional: true - - '@esbuild/linux-mips64el@0.27.2': - optional: true - - '@esbuild/linux-ppc64@0.27.2': - optional: true - - '@esbuild/linux-riscv64@0.27.2': - optional: true - - '@esbuild/linux-s390x@0.27.2': - optional: true - - '@esbuild/linux-x64@0.27.2': - optional: true - - '@esbuild/netbsd-arm64@0.27.2': - optional: true - - '@esbuild/netbsd-x64@0.27.2': - optional: true - - '@esbuild/openbsd-arm64@0.27.2': - optional: true - - '@esbuild/openbsd-x64@0.27.2': - optional: true - - '@esbuild/openharmony-arm64@0.27.2': - optional: true - - '@esbuild/sunos-x64@0.27.2': - optional: true - - '@esbuild/win32-arm64@0.27.2': - optional: true - - '@esbuild/win32-ia32@0.27.2': - optional: true - - '@esbuild/win32-x64@0.27.2': - optional: true - - '@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.12.0)(typescript@5.9.3))(graphql@16.12.0)(typescript@5.9.3)': - dependencies: - '@0no-co/graphqlsp': 1.15.2(graphql@16.12.0)(typescript@5.9.3) - '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) - graphql: 16.12.0 - typescript: 5.9.3 - - '@gql.tada/internal@1.0.8(graphql@16.12.0)(typescript@5.9.3)': - dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.12.0) - graphql: 16.12.0 - typescript: 5.9.3 - - '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - - '@grpc/grpc-js@1.14.3': - dependencies: - '@grpc/proto-loader': 0.8.0 - '@js-sdsl/ordered-map': 4.4.2 - - '@grpc/proto-loader@0.7.15': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.2 - protobufjs: 7.5.4 - yargs: 17.7.2 - - '@grpc/proto-loader@0.8.0': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.2 - protobufjs: 7.5.4 - yargs: 17.7.2 - - '@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.8.0)': - dependencies: - '@babel/generator': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 - prettier: 3.8.0 - semver: 7.7.3 - transitivePeerDependencies: - - supports-color - - '@inquirer/ansi@1.0.2': - optional: true - - '@inquirer/confirm@5.1.21(@types/node@25.0.9)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.0.9) - '@inquirer/type': 3.0.10(@types/node@25.0.9) - optionalDependencies: - '@types/node': 25.0.9 - optional: true - - '@inquirer/core@10.3.2(@types/node@25.0.9)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.0.9) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 25.0.9 - optional: true - - '@inquirer/figures@1.0.15': - optional: true - - '@inquirer/type@3.0.10(@types/node@25.0.9)': - optionalDependencies: - '@types/node': 25.0.9 - optional: true - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@js-sdsl/ordered-map@4.4.2': {} - - '@mswjs/interceptors@0.40.0': - dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 - is-node-process: 1.2.0 - outvariant: 1.4.3 - strict-event-emitter: 0.5.1 - optional: true - - '@mysten/bcs@2.0.2': - dependencies: - '@mysten/utils': 0.3.1 - '@scure/base': 2.0.0 - - '@mysten/codegen@0.6.0': - dependencies: - '@mysten/bcs': 2.0.2 - '@mysten/sui': 2.6.0(typescript@5.9.3) - '@stricli/auto-complete': 1.2.5 - '@stricli/core': 1.2.5 - '@types/node': 25.0.9 - cosmiconfig: 9.0.0(typescript@5.9.3) - prettier: 3.8.0 - toml: 3.0.0 - typescript: 5.9.3 - zod: 4.3.5 - transitivePeerDependencies: - - '@gql.tada/svelte-support' - - '@gql.tada/vue-support' - - '@mysten/sui@2.4.0(typescript@5.9.3)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@mysten/bcs': 2.0.2 - '@mysten/utils': 0.3.1 - '@noble/curves': 2.0.1 - '@noble/hashes': 2.0.1 - '@protobuf-ts/grpcweb-transport': 2.11.1 - '@protobuf-ts/runtime': 2.11.1 - '@protobuf-ts/runtime-rpc': 2.11.1 - '@scure/base': 2.0.0 - '@scure/bip32': 2.0.1 - '@scure/bip39': 2.0.1 - gql.tada: 1.9.0(graphql@16.12.0)(typescript@5.9.3) - graphql: 16.12.0 - poseidon-lite: 0.2.1 - valibot: 1.2.0(typescript@5.9.3) - transitivePeerDependencies: - - '@gql.tada/svelte-support' - - '@gql.tada/vue-support' - - typescript - - '@mysten/sui@2.6.0(typescript@5.9.3)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@mysten/bcs': 2.0.2 - '@mysten/utils': 0.3.1 - '@noble/curves': 2.0.1 - '@noble/hashes': 2.0.1 - '@protobuf-ts/grpcweb-transport': 2.11.1 - '@protobuf-ts/runtime': 2.11.1 - '@protobuf-ts/runtime-rpc': 2.11.1 - '@scure/base': 2.0.0 - '@scure/bip32': 2.0.1 - '@scure/bip39': 2.0.1 - gql.tada: 1.9.0(graphql@16.12.0)(typescript@5.9.3) - graphql: 16.12.0 - poseidon-lite: 0.2.1 - valibot: 1.2.0(typescript@5.9.3) - transitivePeerDependencies: - - '@gql.tada/svelte-support' - - '@gql.tada/vue-support' - - typescript - - '@mysten/utils@0.3.1': - dependencies: - '@scure/base': 2.0.0 - - '@napi-rs/wasm-runtime@1.1.1': - dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@noble/curves@2.0.1': - dependencies: - '@noble/hashes': 2.0.1 - - '@noble/hashes@2.0.1': {} - - '@open-draft/deferred-promise@2.2.0': - optional: true - - '@open-draft/logger@0.3.0': - dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.3 - optional: true - - '@open-draft/until@2.1.0': - optional: true - - '@oxc-project/types@0.107.0': {} - - '@oxc-project/types@0.108.0': {} - - '@oxlint/darwin-arm64@1.41.0': - optional: true - - '@oxlint/darwin-x64@1.41.0': - optional: true - - '@oxlint/linux-arm64-gnu@1.41.0': - optional: true - - '@oxlint/linux-arm64-musl@1.41.0': - optional: true - - '@oxlint/linux-x64-gnu@1.41.0': - optional: true - - '@oxlint/linux-x64-musl@1.41.0': - optional: true - - '@oxlint/win32-arm64@1.41.0': - optional: true - - '@oxlint/win32-x64@1.41.0': - optional: true - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@protobuf-ts/grpcweb-transport@2.11.1': - dependencies: - '@protobuf-ts/runtime': 2.11.1 - '@protobuf-ts/runtime-rpc': 2.11.1 - - '@protobuf-ts/runtime-rpc@2.11.1': - dependencies: - '@protobuf-ts/runtime': 2.11.1 - - '@protobuf-ts/runtime@2.11.1': {} - - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.4': {} - - '@protobufjs/eventemitter@1.1.0': {} - - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/inquire@1.1.0': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.0': {} - - '@quansync/fs@1.0.0': - dependencies: - quansync: 1.0.0 - - '@rolldown/binding-android-arm64@1.0.0-beta.59': - optional: true - - '@rolldown/binding-android-arm64@1.0.0-beta.60': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0-beta.59': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0-beta.60': - optional: true - - '@rolldown/binding-darwin-x64@1.0.0-beta.59': - optional: true - - '@rolldown/binding-darwin-x64@1.0.0-beta.60': - optional: true - - '@rolldown/binding-freebsd-x64@1.0.0-beta.59': - optional: true - - '@rolldown/binding-freebsd-x64@1.0.0-beta.60': - optional: true - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.59': - optional: true - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.60': - optional: true - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.59': - optional: true - - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.60': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.59': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.60': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.59': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.60': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.59': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-beta.60': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0-beta.59': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0-beta.60': - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.59': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0-beta.60': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.59': - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.60': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.59': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.60': - optional: true - - '@rolldown/pluginutils@1.0.0-beta.59': {} - - '@rolldown/pluginutils@1.0.0-beta.60': {} - - '@rollup/rollup-android-arm-eabi@4.55.2': - optional: true - - '@rollup/rollup-android-arm64@4.55.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.55.2': - optional: true - - '@rollup/rollup-darwin-x64@4.55.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.55.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.55.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.55.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.55.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.55.2': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.55.2': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.55.2': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.55.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.55.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.55.2': - optional: true - - '@rollup/rollup-openbsd-x64@4.55.2': - optional: true - - '@rollup/rollup-openharmony-arm64@4.55.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.55.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.55.2': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.55.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.55.2': - optional: true - - '@scure/base@2.0.0': {} - - '@scure/bip32@2.0.1': - dependencies: - '@noble/curves': 2.0.1 - '@noble/hashes': 2.0.1 - '@scure/base': 2.0.0 - - '@scure/bip39@2.0.1': - dependencies: - '@noble/hashes': 2.0.1 - '@scure/base': 2.0.0 - - '@standard-schema/spec@1.1.0': {} - - '@stricli/auto-complete@1.2.5': - dependencies: - '@stricli/core': 1.2.5 - - '@stricli/core@1.2.5': {} - - '@testcontainers/postgresql@11.11.0': - dependencies: - testcontainers: 11.11.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color - - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/chai@5.2.3': - dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 - - '@types/deep-eql@4.0.2': {} - - '@types/docker-modem@3.0.6': - dependencies: - '@types/node': 25.0.9 - '@types/ssh2': 1.15.5 - - '@types/dockerode@3.3.47': - dependencies: - '@types/docker-modem': 3.0.6 - '@types/node': 25.0.9 - '@types/ssh2': 1.15.5 - - '@types/estree@1.0.8': {} - - '@types/jsesc@2.5.1': {} - - '@types/node@18.19.130': - dependencies: - undici-types: 5.26.5 - - '@types/node@25.0.9': - dependencies: - undici-types: 7.16.0 - - '@types/ssh2-streams@0.1.13': - dependencies: - '@types/node': 25.0.9 - - '@types/ssh2@0.5.52': - dependencies: - '@types/node': 25.0.9 - '@types/ssh2-streams': 0.1.13 - - '@types/ssh2@1.15.5': - dependencies: - '@types/node': 18.19.130 - - '@types/statuses@2.0.6': - optional: true - - '@types/ws@8.18.1': - dependencies: - '@types/node': 25.0.9 - - '@vitest/expect@4.0.17': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 - chai: 6.2.2 - tinyrainbow: 3.0.3 - - '@vitest/mocker@4.0.17(msw@2.12.7(@types/node@25.0.9)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.9)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@vitest/spy': 4.0.17 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - msw: 2.12.7(@types/node@25.0.9)(typescript@5.9.3) - vite: 7.3.1(@types/node@25.0.9)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - - '@vitest/pretty-format@4.0.17': - dependencies: - tinyrainbow: 3.0.3 - - '@vitest/runner@4.0.17': - dependencies: - '@vitest/utils': 4.0.17 - pathe: 2.0.3 - - '@vitest/snapshot@4.0.17': - dependencies: - '@vitest/pretty-format': 4.0.17 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@4.0.17': {} - - '@vitest/utils@4.0.17': - dependencies: - '@vitest/pretty-format': 4.0.17 - tinyrainbow: 3.0.3 - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.3: {} - - ansis@4.2.0: {} - - archiver-utils@5.0.2: - dependencies: - glob: 10.5.0 - graceful-fs: 4.2.11 - is-stream: 2.0.1 - lazystream: 1.0.1 - lodash: 4.17.21 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - - archiver@7.0.1: - dependencies: - archiver-utils: 5.0.2 - async: 3.2.6 - buffer-crc32: 1.0.0 - readable-stream: 4.7.0 - readdir-glob: 1.1.3 - tar-stream: 3.1.7 - zip-stream: 6.0.1 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - argparse@2.0.1: {} - - asn1@0.2.6: - dependencies: - safer-buffer: 2.1.2 - - assertion-error@2.0.1: {} - - ast-kit@3.0.0-beta.1: - dependencies: - '@babel/parser': 8.0.0-beta.4 - estree-walker: 3.0.3 - pathe: 2.0.3 - - async-lock@1.4.1: {} - - async@3.2.6: {} - - b4a@1.7.3: {} - - balanced-match@1.0.2: {} - - bare-events@2.8.2: {} - - bare-fs@4.5.2: - dependencies: - bare-events: 2.8.2 - bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.8.2) - bare-url: 2.3.2 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-os@3.6.2: - optional: true - - bare-path@3.0.0: - dependencies: - bare-os: 3.6.2 - optional: true - - bare-stream@2.7.0(bare-events@2.8.2): - dependencies: - streamx: 2.23.0 - optionalDependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-url@2.3.2: - dependencies: - bare-path: 3.0.0 - optional: true - - base64-js@1.5.1: {} - - bcrypt-pbkdf@1.0.2: - dependencies: - tweetnacl: 0.14.5 - - birpc@4.0.0: {} - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - buffer-crc32@1.0.0: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - buildcheck@0.0.7: - optional: true - - byline@5.0.0: {} - - cac@6.7.14: {} - - callsites@3.1.0: {} - - chai@6.2.2: {} - - chownr@1.1.4: {} - - cli-width@4.1.0: - optional: true - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - compress-commons@6.0.2: - dependencies: - crc-32: 1.2.2 - crc32-stream: 6.0.0 - is-stream: 2.0.1 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - - cookie@1.1.1: - optional: true - - core-util-is@1.0.3: {} - - cosmiconfig@9.0.0(typescript@5.9.3): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.9.3 - - cpu-features@0.0.10: - dependencies: - buildcheck: 0.0.7 - nan: 2.24.0 - optional: true - - crc-32@1.2.2: {} - - crc32-stream@6.0.0: - dependencies: - crc-32: 1.2.2 - readable-stream: 4.7.0 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - defu@6.1.4: {} - - docker-compose@1.3.0: - dependencies: - yaml: 2.8.2 - - docker-modem@5.0.6: - dependencies: - debug: 4.4.3 - readable-stream: 3.6.2 - split-ca: 1.0.1 - ssh2: 1.17.0 - transitivePeerDependencies: - - supports-color - - dockerode@4.0.9: - dependencies: - '@balena/dockerignore': 1.0.2 - '@grpc/grpc-js': 1.14.3 - '@grpc/proto-loader': 0.7.15 - docker-modem: 5.0.6 - protobufjs: 7.5.4 - tar-fs: 2.1.4 - uuid: 10.0.0 - transitivePeerDependencies: - - supports-color - - dts-resolver@2.1.3: {} - - eastasianwidth@0.2.0: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - empathic@2.0.0: {} - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - - env-paths@2.2.1: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - es-module-lexer@1.7.0: {} - - esbuild@0.27.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 - - escalade@3.2.0: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 - - event-target-shim@5.0.1: {} - - events-universal@1.0.1: - dependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - bare-abort-controller - - events@3.3.0: {} - - expect-type@1.3.0: {} - - fast-fifo@1.3.2: {} - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - fs-constants@1.0.0: {} - - fsevents@2.3.3: - optional: true - - get-caller-file@2.0.5: {} - - get-port@7.1.0: {} - - get-tsconfig@4.13.0: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob@10.5.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - gql.tada@1.9.0(graphql@16.12.0)(typescript@5.9.3): - dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.12.0) - '@0no-co/graphqlsp': 1.15.2(graphql@16.12.0)(typescript@5.9.3) - '@gql.tada/cli-utils': 1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.12.0)(typescript@5.9.3))(graphql@16.12.0)(typescript@5.9.3) - '@gql.tada/internal': 1.0.8(graphql@16.12.0)(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - '@gql.tada/svelte-support' - - '@gql.tada/vue-support' - - graphql - - graceful-fs@4.2.11: {} - - graphql@16.12.0: {} - - headers-polyfill@4.0.3: - optional: true - - hookable@6.0.1: {} - - ieee754@1.2.1: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-without-cache@0.2.5: {} - - inherits@2.0.4: {} - - is-arrayish@0.2.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-node-process@1.2.0: - optional: true - - is-stream@2.0.1: {} - - isarray@1.0.0: {} - - isexe@2.0.0: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jiti@2.6.1: - optional: true - - js-tokens@4.0.0: {} - - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - - jsesc@3.1.0: {} - - json-parse-even-better-errors@2.3.1: {} - - lazystream@1.0.1: - dependencies: - readable-stream: 2.3.8 - - lines-and-columns@1.2.4: {} - - lodash.camelcase@4.3.0: {} - - lodash@4.17.21: {} - - long@5.3.2: {} - - lru-cache@10.4.3: {} - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.2 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minipass@7.1.2: {} - - mkdirp-classic@0.5.3: {} - - mkdirp@1.0.4: {} - - ms@2.1.3: {} - - msw@2.12.7(@types/node@25.0.9)(typescript@5.9.3): - dependencies: - '@inquirer/confirm': 5.1.21(@types/node@25.0.9) - '@mswjs/interceptors': 0.40.0 - '@open-draft/deferred-promise': 2.2.0 - '@types/statuses': 2.0.6 - cookie: 1.1.1 - graphql: 16.12.0 - headers-polyfill: 4.0.3 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - picocolors: 1.1.1 - rettime: 0.7.0 - statuses: 2.0.2 - strict-event-emitter: 0.5.1 - tough-cookie: 6.0.0 - type-fest: 5.4.1 - until-async: 3.0.2 - yargs: 17.7.2 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' - optional: true - - mute-stream@2.0.0: - optional: true - - nan@2.24.0: - optional: true - - nanoid@3.3.11: {} - - normalize-path@3.0.0: {} - - obug@2.1.1: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - outvariant@1.4.3: - optional: true - - oxlint@1.41.0: - optionalDependencies: - '@oxlint/darwin-arm64': 1.41.0 - '@oxlint/darwin-x64': 1.41.0 - '@oxlint/linux-arm64-gnu': 1.41.0 - '@oxlint/linux-arm64-musl': 1.41.0 - '@oxlint/linux-x64-gnu': 1.41.0 - '@oxlint/linux-x64-musl': 1.41.0 - '@oxlint/win32-arm64': 1.41.0 - '@oxlint/win32-x64': 1.41.0 - - package-json-from-dist@1.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.28.6 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - path-key@3.1.1: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-to-regexp@6.3.0: - optional: true - - pathe@2.0.3: {} - - picocolors@1.1.1: {} - - picomatch@4.0.3: {} - - poseidon-lite@0.2.1: {} - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prettier@3.8.0: {} - - process-nextick-args@2.0.1: {} - - process@0.11.10: {} - - proper-lockfile@4.1.2: - dependencies: - graceful-fs: 4.2.11 - retry: 0.12.0 - signal-exit: 3.0.7 - - properties-reader@2.3.0: - dependencies: - mkdirp: 1.0.4 - - protobufjs@7.5.4: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 25.0.9 - long: 5.3.2 - - pump@3.0.3: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - - quansync@1.0.0: {} - - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readable-stream@4.7.0: - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - - readdir-glob@1.1.3: - dependencies: - minimatch: 5.1.6 - - require-directory@2.1.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - retry@0.12.0: {} - - rettime@0.7.0: - optional: true - - rolldown-plugin-dts@0.21.3(rolldown@1.0.0-beta.59)(typescript@5.9.3): - dependencies: - '@babel/generator': 8.0.0-beta.4 - '@babel/parser': 8.0.0-beta.4 - '@babel/types': 8.0.0-beta.4 - ast-kit: 3.0.0-beta.1 - birpc: 4.0.0 - dts-resolver: 2.1.3 - get-tsconfig: 4.13.0 - obug: 2.1.1 - rolldown: 1.0.0-beta.59 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - oxc-resolver - - rolldown@1.0.0-beta.59: - dependencies: - '@oxc-project/types': 0.107.0 - '@rolldown/pluginutils': 1.0.0-beta.59 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.59 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.59 - '@rolldown/binding-darwin-x64': 1.0.0-beta.59 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.59 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.59 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.59 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.59 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.59 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.59 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.59 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.59 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.59 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.59 - - rolldown@1.0.0-beta.60: - dependencies: - '@oxc-project/types': 0.108.0 - '@rolldown/pluginutils': 1.0.0-beta.60 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.60 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.60 - '@rolldown/binding-darwin-x64': 1.0.0-beta.60 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.60 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.60 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.60 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.60 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.60 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.60 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.60 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.60 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.60 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.60 - - rollup@4.55.2: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.2 - '@rollup/rollup-android-arm64': 4.55.2 - '@rollup/rollup-darwin-arm64': 4.55.2 - '@rollup/rollup-darwin-x64': 4.55.2 - '@rollup/rollup-freebsd-arm64': 4.55.2 - '@rollup/rollup-freebsd-x64': 4.55.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.2 - '@rollup/rollup-linux-arm-musleabihf': 4.55.2 - '@rollup/rollup-linux-arm64-gnu': 4.55.2 - '@rollup/rollup-linux-arm64-musl': 4.55.2 - '@rollup/rollup-linux-loong64-gnu': 4.55.2 - '@rollup/rollup-linux-loong64-musl': 4.55.2 - '@rollup/rollup-linux-ppc64-gnu': 4.55.2 - '@rollup/rollup-linux-ppc64-musl': 4.55.2 - '@rollup/rollup-linux-riscv64-gnu': 4.55.2 - '@rollup/rollup-linux-riscv64-musl': 4.55.2 - '@rollup/rollup-linux-s390x-gnu': 4.55.2 - '@rollup/rollup-linux-x64-gnu': 4.55.2 - '@rollup/rollup-linux-x64-musl': 4.55.2 - '@rollup/rollup-openbsd-x64': 4.55.2 - '@rollup/rollup-openharmony-arm64': 4.55.2 - '@rollup/rollup-win32-arm64-msvc': 4.55.2 - '@rollup/rollup-win32-ia32-msvc': 4.55.2 - '@rollup/rollup-win32-x64-gnu': 4.55.2 - '@rollup/rollup-win32-x64-msvc': 4.55.2 - fsevents: 2.3.3 - - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - semver@7.7.3: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - siginfo@2.0.0: {} - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - source-map-js@1.2.1: {} - - split-ca@1.0.1: {} - - ssh-remote-port-forward@1.0.4: - dependencies: - '@types/ssh2': 0.5.52 - ssh2: 1.17.0 - - ssh2@1.17.0: - dependencies: - asn1: 0.2.6 - bcrypt-pbkdf: 1.0.2 - optionalDependencies: - cpu-features: 0.0.10 - nan: 2.24.0 - - stackback@0.0.2: {} - - statuses@2.0.2: - optional: true - - std-env@3.10.0: {} - - streamx@2.23.0: - dependencies: - events-universal: 1.0.1 - fast-fifo: 1.3.2 - text-decoder: 1.2.3 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - strict-event-emitter@0.5.1: - optional: true - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - tagged-tag@1.0.0: - optional: true - - tar-fs@2.1.4: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.3 - tar-stream: 2.2.0 - - tar-fs@3.1.1: - dependencies: - pump: 3.0.3 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 4.5.2 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - - tar-stream@3.1.7: - dependencies: - b4a: 1.7.3 - fast-fifo: 1.3.2 - streamx: 2.23.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - testcontainers@11.11.0: - dependencies: - '@balena/dockerignore': 1.0.2 - '@types/dockerode': 3.3.47 - archiver: 7.0.1 - async-lock: 1.4.1 - byline: 5.0.0 - debug: 4.4.3 - docker-compose: 1.3.0 - dockerode: 4.0.9 - get-port: 7.1.0 - proper-lockfile: 4.1.2 - properties-reader: 2.3.0 - ssh-remote-port-forward: 1.0.4 - tar-fs: 3.1.1 - tmp: 0.2.5 - undici: 7.18.2 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color - - text-decoder@1.2.3: - dependencies: - b4a: 1.7.3 - transitivePeerDependencies: - - react-native-b4a - - tinybench@2.9.0: {} - - tinyexec@1.0.2: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tinyrainbow@3.0.3: {} - - tldts-core@7.0.19: - optional: true - - tldts@7.0.19: - dependencies: - tldts-core: 7.0.19 - optional: true - - tmp@0.2.5: {} - - toml@3.0.0: {} - - tough-cookie@6.0.0: - dependencies: - tldts: 7.0.19 - optional: true - - tree-kill@1.2.2: {} - - ts-retry-promise@0.8.1: {} - - tsdown@0.20.0-beta.1(typescript@5.9.3): - dependencies: - ansis: 4.2.0 - cac: 6.7.14 - defu: 6.1.4 - empathic: 2.0.0 - hookable: 6.0.1 - import-without-cache: 0.2.5 - obug: 2.1.1 - picomatch: 4.0.3 - rolldown: 1.0.0-beta.59 - rolldown-plugin-dts: 0.21.3(rolldown@1.0.0-beta.59)(typescript@5.9.3) - semver: 7.7.3 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - unconfig-core: 7.4.2 - unrun: 0.2.25 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@ts-macro/tsc' - - '@typescript/native-preview' - - oxc-resolver - - synckit - - vue-tsc - - tslib@2.8.1: - optional: true - - tsx@4.21.0: - dependencies: - esbuild: 0.27.2 - get-tsconfig: 4.13.0 - optionalDependencies: - fsevents: 2.3.3 - - tweetnacl@0.14.5: {} - - type-fest@5.4.1: - dependencies: - tagged-tag: 1.0.0 - optional: true - - typescript@5.9.3: {} - - unconfig-core@7.4.2: - dependencies: - '@quansync/fs': 1.0.0 - quansync: 1.0.0 - - undici-types@5.26.5: {} - - undici-types@7.16.0: {} - - undici@7.18.2: {} - - unrun@0.2.25: - dependencies: - rolldown: 1.0.0-beta.60 - - until-async@3.0.2: - optional: true - - util-deprecate@1.0.2: {} - - uuid@10.0.0: {} - - valibot@1.2.0(typescript@5.9.3): - optionalDependencies: - typescript: 5.9.3 - - vite@7.3.1(@types/node@25.0.9)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): - dependencies: - esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.55.2 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 25.0.9 - fsevents: 2.3.3 - jiti: 2.6.1 - tsx: 4.21.0 - yaml: 2.8.2 - - vitest@4.0.17(@types/node@25.0.9)(jiti@2.6.1)(msw@2.12.7(@types/node@25.0.9)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2): - dependencies: - '@vitest/expect': 4.0.17 - '@vitest/mocker': 4.0.17(msw@2.12.7(@types/node@25.0.9)(typescript@5.9.3))(vite@7.3.1(@types/node@25.0.9)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.17 - '@vitest/runner': 4.0.17 - '@vitest/snapshot': 4.0.17 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 - es-module-lexer: 1.7.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.0.9)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.0.9 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - optional: true - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - ws@8.19.0: {} - - y18n@5.0.8: {} - - yaml@2.8.2: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yoctocolors-cjs@2.1.3: - optional: true - - zip-stream@6.0.1: - dependencies: - archiver-utils: 5.0.2 - compress-commons: 6.0.2 - readable-stream: 4.7.0 - - zod@4.3.5: {}