diff --git a/e2e/README.md b/e2e/README.md index 4006aa0..394f01b 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -9,12 +9,12 @@ atLeast, time locks, or combinations) without modifying the application logic. The example consists of the following packages: -- **CLI**: CLI-based application to interact with the contract +- **CLI**: Interactive menu to drive the contract end-to-end - **Contract**: Smart contract source code and utilities, comprised itself of two modules: - - **Warden** (`generated/Warden.compact`) — access-control library generated + - **Warden** (`packages/contract/src/Warden.compact`) — access-control library generated from a native-script JSON input. Manages commitments and verifies that the current set of committed users satisfies the configured policy. - - **TokenSupply** (`e2e/TokenSupply.compact`) — a token supply contract that imports Warden and + - **TokenSupply** (`packages/contract/src/TokenSupply.compact`) — a token supply contract that imports Warden and calls `Warden_verify()` before allowing `mint` or `burn`. - **API**: Classes and methods that interface the CLI and the compact contract. - **Wallet**: Wallet setup and utilities. @@ -47,22 +47,80 @@ In the `e2e` directory, the following command compiles the contract and builds t pnpm build ``` -and before running the example, start the services that Midnight requires: a node and an indexer, -to run the undeployed network, and the proof-server necessary for proof generation. +Before running the example, start the local devnet services — a node, an indexer, +and the proof server needed for proof generation: ```bash docker compose up -d ``` +To start only the proof server (e.g. when connecting to a public network): + +```bash +docker compose up proof-server +``` + After finishing, make sure to shut down the services. ```bash docker compose down --volumes ``` +## Environment configuration + +Before running the app, you need to set up an `.env` file at `packages/cli/.env` +with your wallet and contract details, and the network configuration. + +Complete it with your wallet's mnemonic phrase, and the secret and randomness used +to create the commitment that was provided to initialize the Warden contract. + +```env +WALLET_MNEMONIC= +WARDEN_SECRET= +WARDEN_RANDOMNESS= +``` + +When running on the local devnet, you can skip these values — the CLI offers +preset wallet options (1 through 4) with built-in credentials. + +### Network + +Below are the templates to connect with different networks. For the latest testnet endpoints, see +[Environments and endpoints](https://docs.midnight.network/relnotes/network). + +### Local devnet + +```env +NETWORK_TYPE=undeployed +NODE_URL=ws://127.0.0.1:9944 +INDEXER_URL=http://127.0.0.1:8088/api/v3/graphql +INDEXER_WS_URL=ws://127.0.0.1:8088/api/v3/graphql/ws +PROOF_SERVER_URL=http://127.0.0.1:6300 +``` + +### Preview + +```env +NETWORK_TYPE=preview +NODE_URL=wss://rpc.preview.midnight.network/ +INDEXER_URL=https://indexer.preview.midnight.network/api/v4/graphql +INDEXER_WS_URL=wss://indexer.preview.midnight.network/api/v4/graphql/ws +PROOF_SERVER_URL=http://127.0.0.1:6300 +``` + +### Preprod + +```env +NETWORK_TYPE=preprod +NODE_URL=wss://rpc.preprod.midnight.network/ +INDEXER_URL=https://indexer.preprod.midnight.network/api/v4/graphql +INDEXER_WS_URL=wss://indexer.preprod.midnight.network/api/v4/graphql/ws +PROOF_SERVER_URL=http://127.0.0.1:6300 +``` + ## Running the example -In the [`e2e/packages/cli`](/e2e/packages/cli/) directory: +In the [`packages/cli`](packages/cli/) directory: ```bash pnpm tsx src/index.ts diff --git a/e2e/packages/cli/package.json b/e2e/packages/cli/package.json index 4356d9f..a268551 100644 --- a/e2e/packages/cli/package.json +++ b/e2e/packages/cli/package.json @@ -24,9 +24,10 @@ "@e2e/wallet": "workspace:*", "@midnight-ntwrk/ledger-v8": "8.1.0", "@midnight-ntwrk/midnight-js": "4.1.1", - "@midnight-ntwrk/wallet-sdk-indexer-client": "1.2.2", + "@midnight-ntwrk/wallet-sdk": "1.2.0", "@scure/bip39": "^2.2.0", "commander": "^14.0.3", + "dotenv": "^16.5.0", "rxjs": "^7.8.2" } } diff --git a/e2e/packages/cli/src/config.ts b/e2e/packages/cli/src/config.ts index 0ee21ad..9a45273 100644 --- a/e2e/packages/cli/src/config.ts +++ b/e2e/packages/cli/src/config.ts @@ -1,4 +1,6 @@ +import 'dotenv/config'; import { TokenSupplyContractPrivateStateKey } from '@e2e/contract'; +import { SecretPair } from '@e2e/api'; import path from 'node:path'; export interface Config { @@ -9,10 +11,20 @@ export interface Config { readonly indexerWS: string; readonly node: string; readonly proofServer: string; + readonly networkId: string; } export const currentDir = path.resolve(new URL(import.meta.url).pathname, '..'); +export const getWalletMnemonic = (): string | undefined => process.env.WALLET_MNEMONIC; + +export const getWardenSecretPair = (): SecretPair | undefined => { + const secret = process.env.WARDEN_SECRET; + const randomness = process.env.WARDEN_RANDOMNESS; + if (!secret || !randomness) return undefined; + return { secret, randomness }; +}; + export class StandaloneConfig implements Config { privateStateStoreName = TokenSupplyContractPrivateStateKey; logDir = path.resolve(currentDir, '..', 'logs', 'standalone', `${new Date().toISOString()}.log`); @@ -26,8 +38,10 @@ export class StandaloneConfig implements Config { 'managed', 'sentinel' ); - indexer = 'http://127.0.0.1:8088/api/v3/graphql'; - indexerWS = 'ws://127.0.0.1:8088/api/v3/graphql/ws'; - node = 'http://127.0.0.1:9944'; - proofServer = 'http://127.0.0.1:6300'; + networkId = process.env.NETWORK_TYPE ?? 'undeployed'; + indexer = process.env.INDEXER_URL ?? 'http://127.0.0.1:8088/api/v3/graphql'; + indexerWS = process.env.INDEXER_WS_URL ?? 'ws://127.0.0.1:8088/api/v3/graphql/ws'; + node = process.env.NODE_URL ?? 'ws://127.0.0.1:9944'; + proofServer = process.env.PROOF_SERVER_URL ?? 'http://127.0.0.1:6300'; + syncTimeoutMs = Number(process.env.SYNC_TIMEOUT_MS) || 300_000; } diff --git a/e2e/packages/cli/src/index.ts b/e2e/packages/cli/src/index.ts index 41c518f..f79a1b6 100644 --- a/e2e/packages/cli/src/index.ts +++ b/e2e/packages/cli/src/index.ts @@ -2,12 +2,14 @@ import { Command } from 'commander'; import { stdin as input, stdout as output } from 'node:process'; import { buildWalletAndWaitForFunds } from '@e2e/wallet'; -import { StandaloneConfig } from './config.js'; -import { seeds } from './utils/constants.js'; +import { StandaloneConfig, getWalletMnemonic, getWardenSecretPair } from './config.js'; +import { seeds, SeedAndSecretPair } from './utils/constants.js'; import { runCli } from './cli.js'; import { createInterface } from 'readline/promises'; +import { mnemonicToSeedSync } from '@scure/bip39'; const config = new StandaloneConfig(); +const networkId = config.networkId; const program = new Command() .name('compact-e2e') @@ -15,19 +17,47 @@ const program = new Command() .version('0.0.1'); program - .argument('[id]', 'Wallet ID (1-4)', '1') + .argument('[id]', 'Wallet ID (1-4, undeployed only)') .option('--max-supply ', 'Maximum token supply', '1000000000000') .action(async (id, options) => { - const n = Number(id); - if (!Number.isInteger(n) || n < 1 || n > 4) { - console.error('Error: wallet id must be 1, 2, 3, or 4'); - process.exit(1); + const isTestnet = networkId !== 'undeployed'; + let walletDetails: SeedAndSecretPair; + + if (id !== undefined) { + if (isTestnet) { + console.error('Error: wallet id argument is not supported on testnet'); + process.exit(1); + } + const n = Number(id); + if (!Number.isInteger(n) || n < 1 || n > 4) { + console.error('Error: wallet id must be 1, 2, 3, or 4'); + process.exit(1); + } + walletDetails = seeds[n - 1]; + console.info('Building wallet %d...', n); + } else { + const mnemonic = getWalletMnemonic(); + const pair = getWardenSecretPair(); + + if (mnemonic && pair) { + const seed = Buffer.from(mnemonicToSeedSync(mnemonic)).toString('hex'); + walletDetails = { seed, pair }; + console.info('Building wallet from .env configuration...'); + } else if (!isTestnet) { + walletDetails = seeds[0]; + console.info('Building wallet 1 (no .env mnemonic found, using default)...'); + } else { + console.error( + 'Error: WALLET_MNEMONIC, WARDEN_SECRET, and WARDEN_RANDOMNESS are required on testnet' + ); + process.exit(1); + } } + const maxSupply = BigInt(options.maxSupply); - console.info('Building wallet %d...', n); - const ctx = await buildWalletAndWaitForFunds(config, seeds[n - 1].seed); + const ctx = await buildWalletAndWaitForFunds(config, walletDetails.seed); const rli = createInterface({ input, output, terminal: true }); - await runCli(config, ctx, seeds[n - 1], n - 1, maxSupply, rli).finally( + await runCli(config, ctx, walletDetails, 0, maxSupply, rli).finally( ctx.wallet.stop.bind(ctx.wallet) ); rli.close(); diff --git a/e2e/packages/cli/src/mint-after.ts b/e2e/packages/cli/src/mint-after.ts index 0622c11..721075e 100644 --- a/e2e/packages/cli/src/mint-after.ts +++ b/e2e/packages/cli/src/mint-after.ts @@ -5,8 +5,8 @@ import { buildWalletAndWaitForFunds } from '@e2e/wallet'; import { StandaloneConfig } from './config.js'; import { seeds } from './utils/constants.js'; import { showBalances, sleep } from './utils/index.js'; -import { BlockHash } from '@midnight-ntwrk/wallet-sdk-indexer-client'; -import { QueryRunner } from '@midnight-ntwrk/wallet-sdk-indexer-client/effect'; +import { BlockHash } from '@midnight-ntwrk/wallet-sdk/indexer-client'; +import { QueryRunner } from '@midnight-ntwrk/wallet-sdk/indexer-client/effect'; const config = new StandaloneConfig(); diff --git a/e2e/packages/wallet/package.json b/e2e/packages/wallet/package.json index 582cbde..2797114 100644 --- a/e2e/packages/wallet/package.json +++ b/e2e/packages/wallet/package.json @@ -19,12 +19,7 @@ "dependencies": { "@midnight-ntwrk/ledger-v8": "8.1.0", "@midnight-ntwrk/midnight-js": "4.1.1", - "@midnight-ntwrk/wallet-sdk-address-format": "3.1.2", - "@midnight-ntwrk/wallet-sdk-dust-wallet": "^3.0.0", - "@midnight-ntwrk/wallet-sdk-facade": "^3.0.0", - "@midnight-ntwrk/wallet-sdk-hd": "^3.0.2", - "@midnight-ntwrk/wallet-sdk-shielded": "2.1.0", - "@midnight-ntwrk/wallet-sdk-unshielded-wallet": "2.1.0", + "@midnight-ntwrk/wallet-sdk": "1.2.0", "rxjs": "^7.8.2" } } diff --git a/e2e/packages/wallet/src/index.ts b/e2e/packages/wallet/src/index.ts index 6c83050..c628819 100644 --- a/e2e/packages/wallet/src/index.ts +++ b/e2e/packages/wallet/src/index.ts @@ -1,23 +1,20 @@ import * as ledger from '@midnight-ntwrk/ledger-v8'; import { getNetworkId, setNetworkId } from '@midnight-ntwrk/midnight-js/network-id'; import { type MidnightProvider, type WalletProvider } from '@midnight-ntwrk/midnight-js/types'; -import { DustWallet } from '@midnight-ntwrk/wallet-sdk-dust-wallet'; -import { WalletFacade } from '@midnight-ntwrk/wallet-sdk-facade'; -import { Roles } from '@midnight-ntwrk/wallet-sdk-hd'; -import { ShieldedWallet } from '@midnight-ntwrk/wallet-sdk-shielded'; -import { - createKeystore, - PublicKey, - UnshieldedWallet, -} from '@midnight-ntwrk/wallet-sdk-unshielded-wallet'; +import { DustWallet } from '@midnight-ntwrk/wallet-sdk/dust'; +import { WalletFacade } from '@midnight-ntwrk/wallet-sdk/facade'; +import { Roles } from '@midnight-ntwrk/wallet-sdk/hd'; +import { ShieldedWallet } from '@midnight-ntwrk/wallet-sdk/shielded'; +import { createKeystore, PublicKey, UnshieldedWallet } from '@midnight-ntwrk/wallet-sdk/unshielded'; import * as Rx from 'rxjs'; import { deriveKeysFromSeed, formatBalance, + isWalletSynced, registerForDustGeneration, signTransactionIntents, + syncWallet, waitForFunds, - waitForSync, withStatus, } from './utils/index.js'; import { Config, WalletContext } from './utils/types.js'; @@ -28,7 +25,7 @@ export const buildWalletAndWaitForFunds = async ( seed: string, wait: boolean = true ): Promise => { - setNetworkId('undeployed'); + setNetworkId(config.networkId); // Derive HD keys and initialize the three sub-wallets const { wallet, shieldedSecretKeys, dustSecretKey, unshieldedKeystore } = await withStatus( @@ -40,7 +37,7 @@ export const buildWalletAndWaitForFunds = async ( const unshieldedKeystore = createKeystore(keys[Roles.NightExternal], getNetworkId()); const wallet = await WalletFacade.init({ - configuration: createConfiguration(), + configuration: createConfiguration(config), shielded: (cfg) => ShieldedWallet(cfg).startWithSecretKeys(shieldedSecretKeys), unshielded: (cfg) => UnshieldedWallet(cfg).startWithPublicKey(PublicKey.fromKeyStore(unshieldedKeystore)), @@ -57,7 +54,9 @@ export const buildWalletAndWaitForFunds = async ( ); // Wait for the wallet to sync with the network - const syncedState = await withStatus('Syncing with network', () => waitForSync(wallet)); + const syncedState = await withStatus('Syncing with network', () => + syncWallet(wallet, config.syncTimeoutMs) + ); // Check if wallet has funds; if not, wait for incoming tokens const balance = syncedState.unshielded.balances[ledger.unshieldedToken().raw] ?? 0n; @@ -83,7 +82,7 @@ export const buildWalletAndWaitForFunds = async ( export const createWalletAndMidnightProvider = async ( ctx: WalletContext ): Promise => { - const state = await Rx.firstValueFrom(ctx.wallet.state().pipe(Rx.filter((s) => s.isSynced))); + const state = await Rx.firstValueFrom(ctx.wallet.state().pipe(Rx.filter(isWalletSynced))); return { getCoinPublicKey() { diff --git a/e2e/packages/wallet/src/utils/balance.ts b/e2e/packages/wallet/src/utils/balance.ts index aee45cb..8dfd67f 100644 --- a/e2e/packages/wallet/src/utils/balance.ts +++ b/e2e/packages/wallet/src/utils/balance.ts @@ -5,12 +5,12 @@ import { ShieldedAddress, ShieldedCoinPublicKey, ShieldedEncryptionPublicKey, -} from '@midnight-ntwrk/wallet-sdk-address-format'; -import type { FacadeState, WalletFacade } from '@midnight-ntwrk/wallet-sdk-facade'; -import { Roles } from '@midnight-ntwrk/wallet-sdk-hd'; -import { createKeystore } from '@midnight-ntwrk/wallet-sdk-unshielded-wallet'; +} from '@midnight-ntwrk/wallet-sdk/address-format'; +import type { FacadeState, WalletFacade } from '@midnight-ntwrk/wallet-sdk/facade'; +import { Roles } from '@midnight-ntwrk/wallet-sdk/hd'; +import { createKeystore } from '@midnight-ntwrk/wallet-sdk/unshielded'; import * as Rx from 'rxjs'; -import { deriveKeysFromSeed } from './index.js'; +import { deriveKeysFromSeed, isWalletSynced } from './index.js'; export interface Balances { dust: bigint; @@ -64,7 +64,7 @@ export async function getBalancesAndAddresses( wallet: WalletFacade, seed: string ): Promise<{ balances: Balances; addresses: Addresses }> { - const state = await Rx.firstValueFrom(wallet.state().pipe(Rx.filter((s) => s.isSynced))); + const state = await Rx.firstValueFrom(wallet.state().pipe(Rx.filter(isWalletSynced))); return { balances: getBalances(state), addresses: getAddresses(seed, state), diff --git a/e2e/packages/wallet/src/utils/config.ts b/e2e/packages/wallet/src/utils/config.ts index 99d8095..6551196 100644 --- a/e2e/packages/wallet/src/utils/config.ts +++ b/e2e/packages/wallet/src/utils/config.ts @@ -1,17 +1,22 @@ -import { InMemoryTransactionHistoryStorage } from '@midnight-ntwrk/wallet-sdk-unshielded-wallet'; -import { DefaultConfiguration } from '@midnight-ntwrk/wallet-sdk-facade'; +import { InMemoryTransactionHistoryStorage } from '@midnight-ntwrk/wallet-sdk'; +import { + DefaultConfiguration, + mergeWalletEntries, + WalletEntrySchema, +} from '@midnight-ntwrk/wallet-sdk/facade'; +import { Config } from './types.js'; -export const createConfiguration = (): DefaultConfiguration => ({ - networkId: 'undeployed', +export const createConfiguration = (config: Config): DefaultConfiguration => ({ + networkId: config.networkId, indexerClientConnection: { - indexerHttpUrl: 'http://localhost:8088/api/v3/graphql', - indexerWsUrl: 'ws://localhost:8088/api/v3/graphql/ws', + indexerHttpUrl: config.indexer, + indexerWsUrl: config.indexerWS, }, - provingServerUrl: new URL('http://localhost:6300'), - relayURL: new URL('ws://localhost:9944'), + provingServerUrl: new URL(config.proofServer), + relayURL: new URL(config.node), costParameters: { additionalFeeOverhead: 300_000_000_000_000n, feeBlocksMargin: 5, }, - txHistoryStorage: new InMemoryTransactionHistoryStorage(), + txHistoryStorage: new InMemoryTransactionHistoryStorage(WalletEntrySchema, mergeWalletEntries), }); diff --git a/e2e/packages/wallet/src/utils/index.ts b/e2e/packages/wallet/src/utils/index.ts index 31a5fa6..786aeda 100644 --- a/e2e/packages/wallet/src/utils/index.ts +++ b/e2e/packages/wallet/src/utils/index.ts @@ -1,8 +1,8 @@ -import { type UnshieldedKeystore } from '@midnight-ntwrk/wallet-sdk-unshielded-wallet'; +import { type UnshieldedKeystore } from '@midnight-ntwrk/wallet-sdk/unshielded'; import * as ledger from '@midnight-ntwrk/ledger-v8'; -import { WalletFacade } from '@midnight-ntwrk/wallet-sdk-facade'; +import { FacadeState, WalletFacade } from '@midnight-ntwrk/wallet-sdk/facade'; import * as Rx from 'rxjs'; -import { HDWallet, Roles } from '@midnight-ntwrk/wallet-sdk-hd'; +import { HDWallet, Roles } from '@midnight-ntwrk/wallet-sdk/hd'; /** * Sign all unshielded offers in a transaction's intents, using the correct @@ -63,7 +63,7 @@ export const registerForDustGeneration = async ( wallet: WalletFacade, unshieldedKeystore: UnshieldedKeystore ): Promise => { - const state = await Rx.firstValueFrom(wallet.state().pipe(Rx.filter((s) => s.isSynced))); + const state = await Rx.firstValueFrom(wallet.state().pipe(Rx.filter(isWalletSynced))); // Check if dust is already available (for example, from a previous designation) if (state.dust.availableCoins.length > 0) { @@ -81,14 +81,10 @@ export const registerForDustGeneration = async ( if (nightUtxos.length === 0) { // All coins already registered — just wait for dust to generate await withStatus('Waiting for dust tokens to generate', () => - Rx.firstValueFrom( - wallet.state().pipe( - Rx.throttleTime(5_000), - Rx.filter((s) => s.isSynced), - Rx.filter((s) => s.dust.balance(new Date()) > 0n) - ) - ) - ); + wallet.waitForGeneratedDust(nightUtxos, 1n, { timeoutMs: 60_000 }) + ).catch(() => { + console.log('\n ⚠ Dust generation timed out after 60s — you can check balances manually'); + }); return; } @@ -107,31 +103,72 @@ export const registerForDustGeneration = async ( // Wait for dust to actually generate (balance > 0), not just for coins to appear await withStatus('Waiting for dust tokens to generate', () => - Rx.firstValueFrom( - wallet.state().pipe( - Rx.throttleTime(5_000), - Rx.filter((s) => s.isSynced), - Rx.filter((s) => s.dust.balance(new Date()) > 0n) - ) - ) - ); + wallet.waitForGeneratedDust(nightUtxos, 1n, { timeoutMs: 60_000 }) + ).catch(() => { + console.log('\n ⚠ Dust generation timed out after 60s — you can check balances manually'); + }); }; +export function isProgressStrictlyComplete(progress: unknown): boolean { + if (!progress || typeof progress !== 'object') { + return false; + } + const candidate = progress as { isStrictlyComplete?: unknown }; + if (typeof candidate.isStrictlyComplete !== 'function') { + return false; + } + return (candidate.isStrictlyComplete as () => boolean)(); +} + +export function isWalletSynced(state: FacadeState): boolean { + return ( + isProgressStrictlyComplete(state.shielded.state.progress) && + isProgressStrictlyComplete(state.unshielded.progress) + ); +} + /** Wait until the wallet has fully synced with the network. Returns the synced state. */ -export const waitForSync = (wallet: WalletFacade) => - Rx.firstValueFrom( +export async function syncWallet(wallet: WalletFacade, timeout = 300_000): Promise { + console.info('Syncing wallet...'); + let emissionCount = 0; + return Rx.firstValueFrom( wallet.state().pipe( - Rx.throttleTime(5_000), - Rx.filter((state) => state.isSynced) + Rx.tap((state: FacadeState) => { + emissionCount++; + // Heartbeat every 200 updates so a long sync shows progress without flooding the console. + if (emissionCount % 200 === 0) { + const shielded = isProgressStrictlyComplete(state.shielded.state.progress); + const unshielded = isProgressStrictlyComplete(state.unshielded.progress); + const dust = isProgressStrictlyComplete(state.dust.state.progress); + console.info( + `Still syncing: shielded=${shielded}, unshielded=${unshielded}, dust=${dust}` + ); + } + }), + // Wait for the shielded and unshielded channels to catch up. We do not gate + // on the dust channel here: on the public networks it may never report + // "strictly complete", which would hang this wait forever. + Rx.filter( + (state: FacadeState) => + isProgressStrictlyComplete(state.shielded.state.progress) && + isProgressStrictlyComplete(state.dust.state.progress) && + isProgressStrictlyComplete(state.unshielded.progress) + ), + Rx.tap(() => console.info('Wallet synced.')), + Rx.timeout({ + each: timeout, + with: () => Rx.throwError(() => new Error(`Wallet sync timed out after ${timeout}ms`)), + }) ) ); +} /** Wait until the wallet has a non-zero unshielded balance. Returns the balance. */ export const waitForFunds = (wallet: WalletFacade): Promise => Rx.firstValueFrom( wallet.state().pipe( Rx.throttleTime(10_000), - Rx.filter((state) => state.isSynced), + Rx.filter(isWalletSynced), Rx.map((s) => s.unshielded.balances[ledger.unshieldedToken().raw] ?? 0n), Rx.filter((balance) => balance > 0n) ) diff --git a/e2e/packages/wallet/src/utils/types.ts b/e2e/packages/wallet/src/utils/types.ts index 38ec114..3b56f48 100644 --- a/e2e/packages/wallet/src/utils/types.ts +++ b/e2e/packages/wallet/src/utils/types.ts @@ -1,6 +1,6 @@ import { ZswapSecretKeys, DustSecretKey } from '@midnight-ntwrk/ledger-v8'; -import { WalletFacade } from '@midnight-ntwrk/wallet-sdk-facade'; -import { type UnshieldedKeystore } from '@midnight-ntwrk/wallet-sdk-unshielded-wallet'; +import { WalletFacade } from '@midnight-ntwrk/wallet-sdk/facade'; +import { type UnshieldedKeystore } from '@midnight-ntwrk/wallet-sdk/unshielded'; export interface WalletContext { wallet: WalletFacade; @@ -17,4 +17,6 @@ export interface Config { readonly indexerWS: string; readonly node: string; readonly proofServer: string; + readonly networkId: string; + readonly syncTimeoutMs?: number; } diff --git a/package.json b/package.json index e66a00d..d8f2884 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,9 @@ }, "pnpm": { "overrides": { - "@midnight-ntwrk/wallet-sdk-address-format": "^3.1.2" + "@midnight-ntwrk/wallet-sdk-address-format": "^3.1.2", + "@midnight-ntwrk/wallet-sdk": "1.2.0", + "@midnight-ntwrk/wallet-sdk-utilities": "1.2.1" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e69d26..af271dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,6 +6,8 @@ settings: overrides: '@midnight-ntwrk/wallet-sdk-address-format': ^3.1.2 + '@midnight-ntwrk/wallet-sdk': 1.2.0 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 importers: @@ -103,15 +105,18 @@ importers: '@midnight-ntwrk/midnight-js': specifier: 4.1.1 version: 4.1.1 - '@midnight-ntwrk/wallet-sdk-indexer-client': - specifier: 1.2.2 - version: 1.2.2(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk': + specifier: 1.2.0 + version: 1.2.0(@midnight-ntwrk/ledger-v8@8.1.0)(ws@8.21.0) '@scure/bip39': specifier: ^2.2.0 version: 2.2.0 commander: specifier: ^14.0.3 version: 14.0.3 + dotenv: + specifier: ^16.5.0 + version: 16.6.1 rxjs: specifier: ^7.8.2 version: 7.8.2 @@ -159,24 +164,9 @@ importers: '@midnight-ntwrk/midnight-js': specifier: 4.1.1 version: 4.1.1 - '@midnight-ntwrk/wallet-sdk-address-format': - specifier: ^3.1.2 - version: 3.1.2 - '@midnight-ntwrk/wallet-sdk-dust-wallet': - specifier: ^3.0.0 - version: 3.0.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-facade': - specifier: ^3.0.0 - version: 3.0.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-hd': - specifier: ^3.0.2 - version: 3.0.2 - '@midnight-ntwrk/wallet-sdk-shielded': - specifier: 2.1.0 - version: 2.1.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-unshielded-wallet': - specifier: 2.1.0 - version: 2.1.0(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk': + specifier: 1.2.0 + version: 1.2.0(@midnight-ntwrk/ledger-v8@8.1.0)(ws@8.21.0) rxjs: specifier: ^7.8.2 version: 7.8.2 @@ -622,56 +612,64 @@ packages: '@midnight-ntwrk/platform-js@2.2.4': resolution: {integrity: sha512-6mrYKSSE8kPgn/5rQ2xofDJk1yAZZRdLOO6Yelweuh5GOnOGz7Qw4venDG/c4TRqtV9ouFp+F5j7ta8aprMinw==} - '@midnight-ntwrk/wallet-sdk-abstractions@2.0.0': - resolution: {integrity: sha512-urmdK+lpw/gmX3mKjN3p9rVUn6Ba3TyHVEYN5oAXc0na4NkHsvvhgxcn9t4Oh9FYoYWuUA0xDiiLJsAkO05b/A==} - '@midnight-ntwrk/wallet-sdk-abstractions@2.1.0': resolution: {integrity: sha512-mMcHFBrNxlZhurknS9J979HhrHQ0EsKdm6Kwaq7SAk/tStLOU2/sAoQzLUzzxr8Y60PcilTJdIKhaCgaydPATg==} '@midnight-ntwrk/wallet-sdk-address-format@3.1.2': resolution: {integrity: sha512-SRkgwmKFOZSUR25iurAB8U7kTKF7AljSl+tMkuuj8Pthc/l0yIg+/q1rFSozJ0Nz9FJRhshazDyrL0l84fOabg==} - '@midnight-ntwrk/wallet-sdk-capabilities@3.2.0': - resolution: {integrity: sha512-3S06DbFJ/I+2Zn30jG98a9T3xPxtBwRjm4fCiYnsn8CEcNgH8XINhVimpItWLakeCAviGRA2x7M93phk9u7hbw==} - '@midnight-ntwrk/wallet-sdk-capabilities@3.3.1': resolution: {integrity: sha512-V//D0wEKN0++XE+pKsXy6U5aH5/1+AoLdCl7Zp1RZilrdABffiywbJ0ZER/ePiTCG93ltDTz7L73WDyEJy6wPA==} - '@midnight-ntwrk/wallet-sdk-dust-wallet@3.0.0': - resolution: {integrity: sha512-7xkaOyPby5uVPfZ16X06xj0Jct5oDjpzXCsTYb7JFYK0v3zaEoWeyQUI1O/3J8/EJBRIlQwCpKNnQWMBPvsOlA==} - - '@midnight-ntwrk/wallet-sdk-facade@3.0.0': - resolution: {integrity: sha512-UrMHh0JI5eBKI6NcyWQ8r90CLAMF3cxnGWvChEpdTGYVQmK6LleBkXsFvfDJhORMjd+RB1aOt+oG5bEpY1o/9g==} + '@midnight-ntwrk/wallet-sdk-dust-wallet@4.2.0': + resolution: {integrity: sha512-+0soO09mrkJFHF0ffRzpPmCb7p6m5ZhRXDSDOmit9vcheVh8yzt/efKCVzVwhLoCjHuN6gz+J9/od8u0XJcSyw==} - '@midnight-ntwrk/wallet-sdk-hd@3.0.2': - resolution: {integrity: sha512-GdzZsfURF4WBh+bmSiimwOnj2vLjtd1pvMUJjRtY3OOnnr1mSesuX9//UPzb0fCjU1ZMCNb6UK7M2YcI4Gef4A==} + '@midnight-ntwrk/wallet-sdk-facade@4.1.0': + resolution: {integrity: sha512-6D4GugM6cve4g4UlgMHrdPmpgHWmhlHLwXcCi9MVzksgomZXC9fbXPAOBgWviw+ISvJeCaM05OcTD8noycj36w==} - '@midnight-ntwrk/wallet-sdk-indexer-client@1.2.0': - resolution: {integrity: sha512-VzwJ0LTBcUWqr5H4a56DhT6zpLYLjg/H6vRrwKYEz3EhQTKLGnQ7d2PKS0Z0QcKGEXOHzeeSmI41FsvG4FbTAQ==} + '@midnight-ntwrk/wallet-sdk-hd@3.0.3': + resolution: {integrity: sha512-h4Y6isqsTuOe1tQd0GdylSQ/pRyAe+ndBhVELftCoiot9XQb00BwGmJmWe/HmFh40CwXMdm+D7N9Tc0Jpx+YPQ==} '@midnight-ntwrk/wallet-sdk-indexer-client@1.2.2': resolution: {integrity: sha512-GokfgV1lOhF1h341cuglp1VoTT/+yEDuYIbiPex29JJkFrjOXdJfCKPoROySBtyIyI65lnEBAXBT0+AOBjPzhA==} + '@midnight-ntwrk/wallet-sdk-indexer-client@1.2.3': + resolution: {integrity: sha512-aOb8TJoix0l6cZBA94igfwifmpLgyQnMEYTpAqfxo82I+GUx4oM/BVYQFjixW7aQgS1wSv/VETObJbHKg4CL8A==} + '@midnight-ntwrk/wallet-sdk-node-client@1.1.2': resolution: {integrity: sha512-nV6lg1M0QQOGss9JiofwO3+bcI+kQIoGV36F+KwyDMgUjAH2nT2/m3SbhLDGizwvJwgniWMuZQV6k/YZ7nCcWA==} + '@midnight-ntwrk/wallet-sdk-node-client@1.1.3': + resolution: {integrity: sha512-SnxoPUXuE9nXlSpblspv2Byu6xEQpQyLtk6U94xsu7pez6ZVGsN7d2PXYsCF2LlrhhS69XzyvBV4dNzb2dESWg==} + peerDependencies: + '@midnight-ntwrk/ledger-v8': ^8.1.0 + '@midnight-ntwrk/wallet-sdk-prover-client': ^1.2.3 + peerDependenciesMeta: + '@midnight-ntwrk/ledger-v8': + optional: true + '@midnight-ntwrk/wallet-sdk-prover-client': + optional: true + '@midnight-ntwrk/wallet-sdk-prover-client@1.2.2': resolution: {integrity: sha512-Xbniz3S/ab1uxiEJd3OaBxLkDfygPIAWgNZfApwAeac/U8yUVUjrqJ9aWyruztMY2MZHN7QxUjlcAWDK84hX3A==} - '@midnight-ntwrk/wallet-sdk-runtime@1.0.2': - resolution: {integrity: sha512-AcDNF2TsH8U/2twe/pYPAEyal9mOCr9TUkViODoaNzeoRSz2HPTO81wGEfD89t5Lf+GS8xkaT2ju3Il30goOtg==} + '@midnight-ntwrk/wallet-sdk-prover-client@1.2.3': + resolution: {integrity: sha512-UDnLKevM0GjGRBlRI9+Qzyabqt19Wsen57J6IT/1QcqmxMN2FPO1gwqA6OElmGxOc+owNc4vT6GNXr5Es7plaQ==} + + '@midnight-ntwrk/wallet-sdk-runtime@1.0.5': + resolution: {integrity: sha512-NDDP+5zklY6TsHPKaANxICTXqwDmcl+8d0iuAKMmzddBkdMdcBukvAl2+h4p/YaAoKbuGzVqp3uFab5Hv1Uqqw==} - '@midnight-ntwrk/wallet-sdk-shielded@2.1.0': - resolution: {integrity: sha512-Qy0jeBqFso0hc2clpv5GAqscKS2b/1JBqjBhJzamsiqaCbZauaD+CbhaxGdpyc0s+WBDBuc7UnkbVDVQadWG0g==} + '@midnight-ntwrk/wallet-sdk-shielded@3.0.2': + resolution: {integrity: sha512-5pkGzqcLN1QDwoW1bYGq7HAduwtFnLDV4+e7XOP/29H3xctdPwJWPco7RVspjQgNMuO+t9R3KpQ7xJBrqY/MHw==} - '@midnight-ntwrk/wallet-sdk-unshielded-wallet@2.1.0': - resolution: {integrity: sha512-d+IZLTAQ0rJzqvJraaixcFOg+AgDX/D/g+EAjTTrsaB+RCfU/E2jD8iWPIPl0NnG239p9uB0PuPcxbpGHlefNg==} + '@midnight-ntwrk/wallet-sdk-unshielded-wallet@3.1.0': + resolution: {integrity: sha512-GujzejaxF7Z1Pqmfp2uyz2mmtLb4ImIoL4njeh+3XLeSfJLedpizXi2WrHmcINO/z4x3pXTw3qU98dF04j97eA==} - '@midnight-ntwrk/wallet-sdk-utilities@1.1.0': - resolution: {integrity: sha512-iTxP+VKPGtjhZWVY4AmliYf1WYwRVaPJsvdub7/BZYXg7gOoH9H3DsXGY64aPYwA3ZXuUm/Cjiy0Ak6CnkB5XQ==} + '@midnight-ntwrk/wallet-sdk-utilities@1.2.1': + resolution: {integrity: sha512-K85cpwKGpAbc4hb7EnlxyGOHNqYLFYZwsxm3AMjIdDglxWYCn04HmuTQiq5SQyWc5WlAgSMomQBGGg4z3vlp4A==} - '@midnight-ntwrk/wallet-sdk-utilities@1.2.0': - resolution: {integrity: sha512-62Q9WeomETvOdyoPcRFX7+OWwOwHuD4/IVQniJwshHdzzLACuy1r/03paXoMH1/+S7CCzFaI1VUEVLcQrtZbaw==} + '@midnight-ntwrk/wallet-sdk@1.2.0': + resolution: {integrity: sha512-9dswqwD4WVgOcXgsDT63a0NTCePaoT5KSU3fZBqVqk0nDyiLOefT0FGzKI1efOm/EQlcCzBZ+jeMOKYRFzhM4w==} '@midnight-ntwrk/zkir-v2@2.1.0': resolution: {integrity: sha512-UDMujjzCt0SA89uqOFWUL4LZTkxVAS8JjvOaYMAgxlSrWfN7m5th1R1qGlpDJuSH39rbWt6WwtuK3k08Mta6LA==} @@ -1307,6 +1305,10 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + effect@3.21.2: resolution: {integrity: sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg==} @@ -2484,10 +2486,6 @@ snapshots: effect: 3.21.2 tslib: 2.8.1 - '@midnight-ntwrk/wallet-sdk-abstractions@2.0.0': - dependencies: - effect: 3.21.2 - '@midnight-ntwrk/wallet-sdk-abstractions@2.1.0': dependencies: effect: 3.21.2 @@ -2498,25 +2496,6 @@ snapshots: '@scure/base': 2.2.0 '@subsquid/scale-codec': 4.0.1 - '@midnight-ntwrk/wallet-sdk-capabilities@3.2.0(ws@8.21.0)': - dependencies: - '@midnight-ntwrk/ledger-v8': 8.1.0 - '@midnight-ntwrk/wallet-sdk-abstractions': 2.1.0 - '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.2(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-node-client': 1.1.2 - '@midnight-ntwrk/wallet-sdk-prover-client': 1.2.2 - '@midnight-ntwrk/wallet-sdk-utilities': 1.2.0 - '@midnight-ntwrk/zkir-v2': 2.1.0 - effect: 3.21.2 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@fastify/websocket' - - bufferutil - - crossws - - supports-color - - utf-8-validate - - ws - '@midnight-ntwrk/wallet-sdk-capabilities@3.3.1(ws@8.21.0)': dependencies: '@midnight-ntwrk/ledger-v8': 8.1.0 @@ -2524,7 +2503,7 @@ snapshots: '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.2(ws@8.21.0) '@midnight-ntwrk/wallet-sdk-node-client': 1.1.2 '@midnight-ntwrk/wallet-sdk-prover-client': 1.2.2 - '@midnight-ntwrk/wallet-sdk-utilities': 1.2.0 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 '@midnight-ntwrk/zkir-v2': 2.1.0 effect: 3.21.2 rxjs: 7.8.2 @@ -2536,15 +2515,15 @@ snapshots: - utf-8-validate - ws - '@midnight-ntwrk/wallet-sdk-dust-wallet@3.0.0(ws@8.21.0)': + '@midnight-ntwrk/wallet-sdk-dust-wallet@4.2.0(ws@8.21.0)': dependencies: '@midnight-ntwrk/ledger-v8': 8.1.0 - '@midnight-ntwrk/wallet-sdk-abstractions': 2.0.0 + '@midnight-ntwrk/wallet-sdk-abstractions': 2.1.0 '@midnight-ntwrk/wallet-sdk-address-format': 3.1.2 - '@midnight-ntwrk/wallet-sdk-capabilities': 3.2.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-runtime': 1.0.2 - '@midnight-ntwrk/wallet-sdk-utilities': 1.1.0 + '@midnight-ntwrk/wallet-sdk-capabilities': 3.3.1(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.3(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-runtime': 1.0.5 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 effect: 3.21.2 rxjs: 7.8.2 transitivePeerDependencies: @@ -2555,15 +2534,16 @@ snapshots: - utf-8-validate - ws - '@midnight-ntwrk/wallet-sdk-facade@3.0.0(ws@8.21.0)': + '@midnight-ntwrk/wallet-sdk-facade@4.1.0(ws@8.21.0)': dependencies: '@midnight-ntwrk/ledger-v8': 8.1.0 + '@midnight-ntwrk/wallet-sdk-abstractions': 2.1.0 '@midnight-ntwrk/wallet-sdk-address-format': 3.1.2 '@midnight-ntwrk/wallet-sdk-capabilities': 3.3.1(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-dust-wallet': 3.0.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.2(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-shielded': 2.1.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-unshielded-wallet': 2.1.0(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-dust-wallet': 4.2.0(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.3(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-shielded': 3.0.2(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-unshielded-wallet': 3.1.0(ws@8.21.0) rxjs: 7.8.2 transitivePeerDependencies: - '@fastify/websocket' @@ -2573,15 +2553,15 @@ snapshots: - utf-8-validate - ws - '@midnight-ntwrk/wallet-sdk-hd@3.0.2': + '@midnight-ntwrk/wallet-sdk-hd@3.0.3': dependencies: '@scure/bip32': 2.2.0 '@scure/bip39': 2.2.0 - '@midnight-ntwrk/wallet-sdk-indexer-client@1.2.0(ws@8.21.0)': + '@midnight-ntwrk/wallet-sdk-indexer-client@1.2.2(ws@8.21.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.1) - '@midnight-ntwrk/wallet-sdk-utilities': 1.1.0 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 effect: 3.21.2 graphql: 16.14.1 graphql-http: 1.22.4(graphql@16.14.1) @@ -2591,10 +2571,10 @@ snapshots: - crossws - ws - '@midnight-ntwrk/wallet-sdk-indexer-client@1.2.2(ws@8.21.0)': + '@midnight-ntwrk/wallet-sdk-indexer-client@1.2.3(ws@8.21.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.1) - '@midnight-ntwrk/wallet-sdk-utilities': 1.2.0 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 effect: 3.21.2 graphql: 16.14.1 graphql-http: 1.22.4(graphql@16.14.1) @@ -2607,7 +2587,7 @@ snapshots: '@midnight-ntwrk/wallet-sdk-node-client@1.1.2': dependencies: '@midnight-ntwrk/wallet-sdk-abstractions': 2.1.0 - '@midnight-ntwrk/wallet-sdk-utilities': 1.2.0 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 '@polkadot/api': 16.5.6 '@polkadot/types': 16.5.6 '@polkadot/util': 14.0.3 @@ -2619,31 +2599,58 @@ snapshots: - supports-color - utf-8-validate + '@midnight-ntwrk/wallet-sdk-node-client@1.1.3(@midnight-ntwrk/ledger-v8@8.1.0)(@midnight-ntwrk/wallet-sdk-prover-client@1.2.3)': + dependencies: + '@midnight-ntwrk/wallet-sdk-abstractions': 2.1.0 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 + '@polkadot/api': 16.5.6 + '@polkadot/types': 16.5.6 + '@polkadot/util': 14.0.3 + '@types/bn.js': 5.2.0 + bn.js: 5.2.3 + effect: 3.21.2 + optionalDependencies: + '@midnight-ntwrk/ledger-v8': 8.1.0 + '@midnight-ntwrk/wallet-sdk-prover-client': 1.2.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@midnight-ntwrk/wallet-sdk-prover-client@1.2.2': dependencies: '@effect/platform': 0.96.1(effect@3.21.2) '@midnight-ntwrk/ledger-v8': 8.1.0 - '@midnight-ntwrk/wallet-sdk-utilities': 1.2.0 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 '@midnight-ntwrk/zkir-v2': 2.1.0 effect: 3.21.2 web-worker: 1.5.0 - '@midnight-ntwrk/wallet-sdk-runtime@1.0.2': + '@midnight-ntwrk/wallet-sdk-prover-client@1.2.3': dependencies: - '@midnight-ntwrk/wallet-sdk-abstractions': 2.0.0 - '@midnight-ntwrk/wallet-sdk-utilities': 1.1.0 + '@effect/platform': 0.96.1(effect@3.21.2) + '@midnight-ntwrk/ledger-v8': 8.1.0 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 + '@midnight-ntwrk/zkir-v2': 2.1.0 + effect: 3.21.2 + web-worker: 1.5.0 + + '@midnight-ntwrk/wallet-sdk-runtime@1.0.5': + dependencies: + '@midnight-ntwrk/wallet-sdk-abstractions': 2.1.0 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 effect: 3.21.2 rxjs: 7.8.2 - '@midnight-ntwrk/wallet-sdk-shielded@2.1.0(ws@8.21.0)': + '@midnight-ntwrk/wallet-sdk-shielded@3.0.2(ws@8.21.0)': dependencies: '@midnight-ntwrk/ledger-v8': 8.1.0 - '@midnight-ntwrk/wallet-sdk-abstractions': 2.0.0 + '@midnight-ntwrk/wallet-sdk-abstractions': 2.1.0 '@midnight-ntwrk/wallet-sdk-address-format': 3.1.2 - '@midnight-ntwrk/wallet-sdk-capabilities': 3.2.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-runtime': 1.0.2 - '@midnight-ntwrk/wallet-sdk-utilities': 1.1.0 + '@midnight-ntwrk/wallet-sdk-capabilities': 3.3.1(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.3(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-runtime': 1.0.5 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 effect: 3.21.2 rxjs: 7.8.2 transitivePeerDependencies: @@ -2654,15 +2661,15 @@ snapshots: - utf-8-validate - ws - '@midnight-ntwrk/wallet-sdk-unshielded-wallet@2.1.0(ws@8.21.0)': + '@midnight-ntwrk/wallet-sdk-unshielded-wallet@3.1.0(ws@8.21.0)': dependencies: '@midnight-ntwrk/ledger-v8': 8.1.0 - '@midnight-ntwrk/wallet-sdk-abstractions': 2.0.0 + '@midnight-ntwrk/wallet-sdk-abstractions': 2.1.0 '@midnight-ntwrk/wallet-sdk-address-format': 3.1.2 - '@midnight-ntwrk/wallet-sdk-capabilities': 3.2.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.0(ws@8.21.0) - '@midnight-ntwrk/wallet-sdk-runtime': 1.0.2 - '@midnight-ntwrk/wallet-sdk-utilities': 1.1.0 + '@midnight-ntwrk/wallet-sdk-capabilities': 3.3.1(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.2(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-runtime': 1.0.5 + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 effect: 3.21.2 rxjs: 7.8.2 transitivePeerDependencies: @@ -2673,15 +2680,34 @@ snapshots: - utf-8-validate - ws - '@midnight-ntwrk/wallet-sdk-utilities@1.1.0': + '@midnight-ntwrk/wallet-sdk-utilities@1.2.1': dependencies: effect: 3.21.2 rxjs: 7.8.2 - '@midnight-ntwrk/wallet-sdk-utilities@1.2.0': + '@midnight-ntwrk/wallet-sdk@1.2.0(@midnight-ntwrk/ledger-v8@8.1.0)(ws@8.21.0)': dependencies: - effect: 3.21.2 - rxjs: 7.8.2 + '@midnight-ntwrk/wallet-sdk-abstractions': 2.1.0 + '@midnight-ntwrk/wallet-sdk-address-format': 3.1.2 + '@midnight-ntwrk/wallet-sdk-capabilities': 3.3.1(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-dust-wallet': 4.2.0(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-facade': 4.1.0(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-hd': 3.0.3 + '@midnight-ntwrk/wallet-sdk-indexer-client': 1.2.3(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-node-client': 1.1.3(@midnight-ntwrk/ledger-v8@8.1.0)(@midnight-ntwrk/wallet-sdk-prover-client@1.2.3) + '@midnight-ntwrk/wallet-sdk-prover-client': 1.2.3 + '@midnight-ntwrk/wallet-sdk-runtime': 1.0.5 + '@midnight-ntwrk/wallet-sdk-shielded': 3.0.2(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-unshielded-wallet': 3.1.0(ws@8.21.0) + '@midnight-ntwrk/wallet-sdk-utilities': 1.2.1 + transitivePeerDependencies: + - '@fastify/websocket' + - '@midnight-ntwrk/ledger-v8' + - bufferutil + - crossws + - supports-color + - utf-8-validate + - ws '@midnight-ntwrk/zkir-v2@2.1.0': {} @@ -3441,6 +3467,8 @@ snapshots: detect-libc@2.1.2: {} + dotenv@16.6.1: {} + effect@3.21.2: dependencies: '@standard-schema/spec': 1.1.0