@miden-sdk/miden-sdk 0.13.2 → 0.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Cargo-e77f9a02.js → Cargo-0ed69232.js} +143 -130
- package/dist/Cargo-0ed69232.js.map +1 -0
- package/dist/assets/miden_client_web.wasm +0 -0
- package/dist/index.d.ts +29 -1
- package/dist/index.js +775 -290
- package/dist/index.js.map +1 -1
- package/dist/wasm.js +1 -1
- package/dist/workers/{Cargo-e77f9a02-e77f9a02.js → Cargo-0ed69232-0ed69232.js} +143 -130
- package/dist/workers/Cargo-0ed69232-0ed69232.js.map +1 -0
- package/dist/workers/assets/miden_client_web.wasm +0 -0
- package/dist/workers/web-client-methods-worker.js +1 -1
- package/dist/workers/web-client-methods-worker.js.map +1 -1
- package/package.json +2 -1
- package/dist/Cargo-e77f9a02.js.map +0 -1
- package/dist/workers/Cargo-e77f9a02-e77f9a02.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../js/constants.js","../js/syncLock.js","../js/index.js"],"sourcesContent":["export const WorkerAction = Object.freeze({\n INIT: \"init\",\n INIT_MOCK: \"initMock\",\n CALL_METHOD: \"callMethod\",\n EXECUTE_CALLBACK: \"executeCallback\",\n});\n\nexport const CallbackType = Object.freeze({\n GET_KEY: \"getKey\",\n INSERT_KEY: \"insertKey\",\n SIGN: \"sign\",\n});\n\nexport const MethodName = Object.freeze({\n CREATE_CLIENT: \"createClient\",\n NEW_WALLET: \"newWallet\",\n NEW_FAUCET: \"newFaucet\",\n EXECUTE_TRANSACTION: \"executeTransaction\",\n PROVE_TRANSACTION: \"proveTransaction\",\n SUBMIT_NEW_TRANSACTION: \"submitNewTransaction\",\n SUBMIT_NEW_TRANSACTION_MOCK: \"submitNewTransactionMock\",\n SUBMIT_NEW_TRANSACTION_WITH_PROVER: \"submitNewTransactionWithProver\",\n SUBMIT_NEW_TRANSACTION_WITH_PROVER_MOCK: \"submitNewTransactionWithProverMock\",\n SYNC_STATE: \"syncState\",\n SYNC_STATE_MOCK: \"syncStateMock\",\n});\n","/**\n * Sync Lock Module\n *\n * Provides coordination for concurrent syncState() calls using the Web Locks API\n * with an in-process mutex fallback for older browsers.\n *\n * Behavior:\n * - Uses \"coalescing\": if a sync is in progress, subsequent callers wait and receive\n * the same result\n * - Web Locks for cross-tab coordination (Chrome 69+, Safari 15.4+)\n * - In-process mutex fallback when Web Locks unavailable\n * - Optional timeout support\n */\n\n/**\n * Check if the Web Locks API is available.\n */\nexport function hasWebLocks() {\n return (\n typeof navigator !== \"undefined\" &&\n navigator.locks !== undefined &&\n typeof navigator.locks.request === \"function\"\n );\n}\n\n/**\n * Internal state for tracking in-progress syncs and waiters per database.\n */\nconst syncStates = new Map();\n\n/**\n * Get or create sync state for a database.\n */\nfunction getSyncState(dbId) {\n let state = syncStates.get(dbId);\n if (!state) {\n state = {\n inProgress: false,\n result: null,\n error: null,\n waiters: [],\n releaseLock: null,\n syncGeneration: 0,\n };\n syncStates.set(dbId, state);\n }\n return state;\n}\n\n/**\n * Acquire a sync lock for the given database.\n *\n * If a sync is already in progress:\n * - Returns { acquired: false, coalescedResult } after waiting for the result\n *\n * If no sync is in progress:\n * - Returns { acquired: true } and the caller should perform the sync,\n * then call releaseSyncLock() or releaseSyncLockWithError()\n *\n * @param {string} dbId - The database ID to lock\n * @param {number} timeoutMs - Optional timeout in milliseconds (0 = no timeout)\n * @returns {Promise<{acquired: boolean, coalescedResult?: any}>}\n */\nexport async function acquireSyncLock(dbId, timeoutMs = 0) {\n const state = getSyncState(dbId);\n\n // If a sync is already in progress, wait for it to complete (coalescing)\n if (state.inProgress) {\n return new Promise((resolve, reject) => {\n let timeoutId;\n if (timeoutMs > 0) {\n timeoutId = setTimeout(() => {\n const idx = state.waiters.findIndex((w) => w.resolve === onResult);\n if (idx !== -1) {\n state.waiters.splice(idx, 1);\n }\n reject(new Error(\"Sync lock acquisition timed out\"));\n }, timeoutMs);\n }\n\n const onResult = (result) => {\n if (timeoutId) clearTimeout(timeoutId);\n resolve({ acquired: false, coalescedResult: result });\n };\n\n const onError = (error) => {\n if (timeoutId) clearTimeout(timeoutId);\n reject(error);\n };\n\n state.waiters.push({ resolve: onResult, reject: onError });\n });\n }\n\n // Mark sync as in progress and increment generation\n state.inProgress = true;\n state.result = null;\n state.error = null;\n state.syncGeneration++;\n const currentGeneration = state.syncGeneration;\n\n // Try to acquire Web Lock if available\n if (hasWebLocks()) {\n const lockName = `miden-sync-${dbId}`;\n\n return new Promise((resolve, reject) => {\n let timeoutId;\n let timedOut = false;\n\n if (timeoutMs > 0) {\n timeoutId = setTimeout(() => {\n timedOut = true;\n if (state.syncGeneration === currentGeneration) {\n state.inProgress = false;\n const error = new Error(\"Sync lock acquisition timed out\");\n for (const waiter of state.waiters) {\n waiter.reject(error);\n }\n state.waiters = [];\n }\n reject(new Error(\"Sync lock acquisition timed out\"));\n }, timeoutMs);\n }\n\n navigator.locks\n .request(lockName, { mode: \"exclusive\" }, async () => {\n if (timedOut || state.syncGeneration !== currentGeneration) {\n return;\n }\n\n if (timeoutId) clearTimeout(timeoutId);\n\n return new Promise((releaseLock) => {\n state.releaseLock = releaseLock;\n resolve({ acquired: true });\n });\n })\n .catch((err) => {\n if (timeoutId) clearTimeout(timeoutId);\n if (state.syncGeneration === currentGeneration) {\n state.inProgress = false;\n }\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n });\n } else {\n // Fallback: no Web Locks, just use in-process state\n return { acquired: true };\n }\n}\n\n/**\n * Release the sync lock with a successful result.\n *\n * This notifies all waiting callers with the result and releases the lock.\n *\n * @param {string} dbId - The database ID\n * @param {any} result - The sync result to pass to waiters\n */\nexport function releaseSyncLock(dbId, result) {\n const state = getSyncState(dbId);\n\n if (!state.inProgress) {\n console.warn(\"releaseSyncLock called but no sync was in progress\");\n return;\n }\n\n state.result = result;\n state.inProgress = false;\n\n for (const waiter of state.waiters) {\n waiter.resolve(result);\n }\n state.waiters = [];\n\n if (state.releaseLock) {\n state.releaseLock();\n state.releaseLock = null;\n }\n}\n\n/**\n * Release the sync lock due to an error.\n *\n * This notifies all waiting callers that the sync failed.\n *\n * @param {string} dbId - The database ID\n * @param {Error} error - The error to pass to waiters\n */\nexport function releaseSyncLockWithError(dbId, error) {\n const state = getSyncState(dbId);\n\n if (!state.inProgress) {\n console.warn(\"releaseSyncLockWithError called but no sync was in progress\");\n return;\n }\n\n state.error = error;\n state.inProgress = false;\n\n for (const waiter of state.waiters) {\n waiter.reject(error);\n }\n state.waiters = [];\n\n if (state.releaseLock) {\n state.releaseLock();\n state.releaseLock = null;\n }\n}\n","import loadWasm from \"./wasm.js\";\nimport { CallbackType, MethodName, WorkerAction } from \"./constants.js\";\nimport {\n acquireSyncLock,\n releaseSyncLock,\n releaseSyncLockWithError,\n} from \"./syncLock.js\";\nexport * from \"../Cargo.toml\";\n\nconst buildTypedArraysExport = (exportObject) => {\n return Object.entries(exportObject).reduce(\n (exports, [exportName, _export]) => {\n if (exportName.endsWith(\"Array\")) {\n exports[exportName] = _export;\n }\n return exports;\n },\n {}\n );\n};\n\nconst deserializeError = (errorLike) => {\n if (!errorLike) {\n return new Error(\"Unknown error received from worker\");\n }\n const { name, message, stack, cause, ...rest } = errorLike;\n const reconstructedError = new Error(message ?? \"Unknown worker error\");\n reconstructedError.name = name ?? reconstructedError.name;\n if (stack) {\n reconstructedError.stack = stack;\n }\n if (cause) {\n reconstructedError.cause = deserializeError(cause);\n }\n Object.entries(rest).forEach(([key, value]) => {\n if (value !== undefined) {\n reconstructedError[key] = value;\n }\n });\n return reconstructedError;\n};\n\nexport const MidenArrays = {};\n\nlet wasmModule = null;\nlet wasmLoadPromise = null;\nlet webClientStaticsCopied = false;\n\nconst ensureWasm = async () => {\n if (wasmModule) {\n return wasmModule;\n }\n if (!wasmLoadPromise) {\n wasmLoadPromise = loadWasm().then((module) => {\n wasmModule = module;\n if (module) {\n Object.assign(MidenArrays, buildTypedArraysExport(module));\n if (!webClientStaticsCopied && module.WebClient) {\n copyWebClientStatics(module.WebClient);\n webClientStaticsCopied = true;\n }\n }\n return module;\n });\n }\n return wasmLoadPromise;\n};\n\nconst getWasmOrThrow = async () => {\n const module = await ensureWasm();\n if (!module) {\n throw new Error(\n \"Miden WASM bindings are unavailable in this environment (SSR is disabled).\"\n );\n }\n return module;\n};\n/**\n * WebClient is a wrapper around the underlying WASM WebClient object.\n *\n * This wrapper serves several purposes:\n *\n * 1. It creates a dedicated web worker to offload computationally heavy tasks\n * (such as creating accounts, executing transactions, submitting transactions, etc.)\n * from the main thread, helping to prevent UI freezes in the browser.\n *\n * 2. It defines methods that mirror the API of the underlying WASM WebClient,\n * with the intention of executing these functions via the web worker. This allows us\n * to maintain the same API and parameters while benefiting from asynchronous, worker-based computation.\n *\n * 3. It employs a Proxy to forward any calls not designated for web worker computation\n * directly to the underlying WASM WebClient instance.\n *\n * Additionally, the wrapper provides a static createClient function. This static method\n * instantiates the WebClient object and ensures that the necessary createClient calls are\n * performed both in the main thread and within the worker thread. This dual initialization\n * correctly passes user parameters (RPC URL and seed) to both the main-thread\n * WASM WebClient and the worker-side instance.\n *\n * Because of this implementation, the only breaking change for end users is in the way the\n * web client is instantiated. Users should now use the WebClient.createClient static call.\n */\nexport class WebClient {\n /**\n * Create a WebClient wrapper.\n *\n * @param {string | undefined} rpcUrl - RPC endpoint URL used by the client.\n * @param {Uint8Array | undefined} seed - Optional seed for account initialization.\n * @param {string | undefined} storeName - Optional name for the store to be used by the client.\n * @param {(pubKey: Uint8Array) => Promise<Uint8Array | null | undefined> | Uint8Array | null | undefined} [getKeyCb]\n * - Callback to retrieve the secret key bytes for a given public key. The `pubKey`\n * parameter is the serialized public key (from `PublicKey.serialize()`). Return the\n * corresponding secret key as a `Uint8Array`, or `null`/`undefined` if not found. The\n * return value may be provided synchronously or via a `Promise`.\n * @param {(pubKey: Uint8Array, AuthSecretKey: Uint8Array) => Promise<void> | void} [insertKeyCb]\n * - Callback to persist a secret key. `pubKey` is the serialized public key, and\n * `authSecretKey` is the serialized secret key (from `AuthSecretKey.serialize()`). May return\n * `void` or a `Promise<void>`.\n * @param {(pubKey: Uint8Array, signingInputs: Uint8Array) => Promise<Uint8Array> | Uint8Array} [signCb]\n * - Callback to produce serialized signature bytes for the provided inputs. `pubKey` is the\n * serialized public key, and `signingInputs` is a `Uint8Array` produced by\n * `SigningInputs.serialize()`. Must return a `Uint8Array` containing the serialized\n * signature, either directly or wrapped in a `Promise`.\n * @param {string | undefined} [logLevel] - Optional log verbosity level\n * (\"error\", \"warn\", \"info\", \"debug\", \"trace\", \"off\", or \"none\").\n * When set, Rust tracing output is routed to the browser console.\n */\n constructor(\n rpcUrl,\n noteTransportUrl,\n seed,\n storeName,\n getKeyCb,\n insertKeyCb,\n signCb,\n logLevel\n ) {\n this.rpcUrl = rpcUrl;\n this.noteTransportUrl = noteTransportUrl;\n this.seed = seed;\n this.storeName = storeName;\n this.getKeyCb = getKeyCb;\n this.insertKeyCb = insertKeyCb;\n this.signCb = signCb;\n this.logLevel = logLevel;\n\n // Check if Web Workers are available.\n if (typeof Worker !== \"undefined\") {\n console.log(\"WebClient: Web Workers are available.\");\n // Create the worker.\n this.worker = new Worker(\n new URL(\"./workers/web-client-methods-worker.js\", import.meta.url),\n { type: \"module\" }\n );\n\n // Map to track pending worker requests.\n this.pendingRequests = new Map();\n\n // Promises to track when the worker script is loaded and ready.\n this.loaded = new Promise((resolve) => {\n this.loadedResolver = resolve;\n });\n\n // Create a promise that resolves when the worker signals that it is fully initialized.\n this.ready = new Promise((resolve) => {\n this.readyResolver = resolve;\n });\n\n // Listen for messages from the worker.\n this.worker.addEventListener(\"message\", async (event) => {\n const data = event.data;\n\n // Worker script loaded.\n if (data.loaded) {\n this.loadedResolver();\n return;\n }\n\n // Worker ready.\n if (data.ready) {\n this.readyResolver();\n return;\n }\n\n if (data.action === WorkerAction.EXECUTE_CALLBACK) {\n const { callbackType, args, requestId } = data;\n try {\n const callbackMapping = {\n [CallbackType.GET_KEY]: this.getKeyCb,\n [CallbackType.INSERT_KEY]: this.insertKeyCb,\n [CallbackType.SIGN]: this.signCb,\n };\n if (!callbackMapping[callbackType]) {\n throw new Error(`Callback ${callbackType} not available`);\n }\n const callbackFunction = callbackMapping[callbackType];\n let result = callbackFunction.apply(this, args);\n if (result instanceof Promise) {\n result = await result;\n }\n\n this.worker.postMessage({\n callbackResult: result,\n callbackRequestId: requestId,\n });\n } catch (error) {\n this.worker.postMessage({\n callbackError: error.message,\n callbackRequestId: requestId,\n });\n }\n return;\n }\n\n // Handle responses for method calls.\n const { requestId, error, result, methodName } = data;\n if (requestId && this.pendingRequests.has(requestId)) {\n const { resolve, reject } = this.pendingRequests.get(requestId);\n this.pendingRequests.delete(requestId);\n if (error) {\n const workerError =\n error instanceof Error ? error : deserializeError(error);\n console.error(\n `WebClient: Error from worker in ${methodName}:`,\n workerError\n );\n reject(workerError);\n } else {\n resolve(result);\n }\n }\n });\n\n // Once the worker script has loaded, initialize the worker.\n this.loaded.then(() => this.initializeWorker());\n } else {\n console.log(\"WebClient: Web Workers are not available.\");\n // Worker not available; set up fallback values.\n this.worker = null;\n this.pendingRequests = null;\n this.loaded = Promise.resolve();\n this.ready = Promise.resolve();\n }\n\n // Lazy initialize the underlying WASM WebClient when first requested.\n this.wasmWebClient = null;\n this.wasmWebClientPromise = null;\n }\n\n // TODO: This will soon conflict with some changes in main.\n // More context here:\n // https://github.com/0xMiden/miden-client/pull/1645?notification_referrer_id=NT_kwHOA1yg7NoAJVJlcG9zaXRvcnk7NjU5MzQzNzAyO0lzc3VlOzM3OTY4OTU1Nzk¬ifications_query=is%3Aunread#discussion_r2696075480\n initializeWorker() {\n this.worker.postMessage({\n action: WorkerAction.INIT,\n args: [\n this.rpcUrl,\n this.noteTransportUrl,\n this.seed,\n this.storeName,\n !!this.getKeyCb,\n !!this.insertKeyCb,\n !!this.signCb,\n this.logLevel,\n ],\n });\n }\n\n async getWasmWebClient() {\n if (this.wasmWebClient) {\n return this.wasmWebClient;\n }\n if (!this.wasmWebClientPromise) {\n this.wasmWebClientPromise = (async () => {\n const wasm = await getWasmOrThrow();\n const client = new wasm.WebClient();\n this.wasmWebClient = client;\n return client;\n })();\n }\n return this.wasmWebClientPromise;\n }\n\n /**\n * Factory method to create and initialize a WebClient instance.\n * This method is async so you can await the asynchronous call to createClient().\n *\n * @param {string} rpcUrl - The RPC URL.\n * @param {string} noteTransportUrl - The note transport URL (optional).\n * @param {string} seed - The seed for the account.\n * @param {string | undefined} network - Optional name for the store. Setting this allows multiple clients to be used in the same browser.\n * @param {string | undefined} logLevel - Optional log verbosity level (\"error\", \"warn\", \"info\", \"debug\", \"trace\", \"off\", or \"none\").\n * @returns {Promise<WebClient>} The fully initialized WebClient.\n */\n static async createClient(rpcUrl, noteTransportUrl, seed, network, logLevel) {\n // Construct the instance (synchronously).\n const instance = new WebClient(\n rpcUrl,\n noteTransportUrl,\n seed,\n network,\n undefined,\n undefined,\n undefined,\n logLevel\n );\n\n // Set up logging on the main thread before creating the client.\n if (logLevel) {\n const wasm = await getWasmOrThrow();\n wasm.setupLogging(logLevel);\n }\n\n // Wait for the underlying wasmWebClient to be initialized.\n const wasmWebClient = await instance.getWasmWebClient();\n await wasmWebClient.createClient(rpcUrl, noteTransportUrl, seed, network);\n\n // Wait for the worker to be ready\n await instance.ready;\n\n // Return a proxy that forwards missing properties to wasmWebClient.\n return new Proxy(instance, {\n get(target, prop, receiver) {\n // If the property exists on the wrapper, return it.\n if (prop in target) {\n return Reflect.get(target, prop, receiver);\n }\n // Otherwise, if the wasmWebClient has it, return that.\n if (target.wasmWebClient && prop in target.wasmWebClient) {\n const value = target.wasmWebClient[prop];\n if (typeof value === \"function\") {\n return value.bind(target.wasmWebClient);\n }\n return value;\n }\n return undefined;\n },\n });\n }\n\n /**\n * Factory method to create and initialize a WebClient instance with a remote keystore.\n * This method is async so you can await the asynchronous call to createClientWithExternalKeystore().\n *\n * @param {string} rpcUrl - The RPC URL.\n * @param {string | undefined} noteTransportUrl - The note transport URL (optional).\n * @param {string | undefined} seed - The seed for the account.\n * @param {string | undefined} storeName - Optional name for the store. Setting this allows multiple clients to be used in the same browser.\n * @param {Function | undefined} getKeyCb - The get key callback.\n * @param {Function | undefined} insertKeyCb - The insert key callback.\n * @param {Function | undefined} signCb - The sign callback.\n * @param {string | undefined} logLevel - Optional log verbosity level (\"error\", \"warn\", \"info\", \"debug\", \"trace\", \"off\", or \"none\").\n * @returns {Promise<WebClient>} The fully initialized WebClient.\n */\n static async createClientWithExternalKeystore(\n rpcUrl,\n noteTransportUrl,\n seed,\n storeName,\n getKeyCb,\n insertKeyCb,\n signCb,\n logLevel\n ) {\n // Construct the instance (synchronously).\n const instance = new WebClient(\n rpcUrl,\n noteTransportUrl,\n seed,\n storeName,\n getKeyCb,\n insertKeyCb,\n signCb,\n logLevel\n );\n\n // Set up logging on the main thread before creating the client.\n if (logLevel) {\n const wasm = await getWasmOrThrow();\n wasm.setupLogging(logLevel);\n }\n\n // Wait for the underlying wasmWebClient to be initialized.\n const wasmWebClient = await instance.getWasmWebClient();\n await wasmWebClient.createClientWithExternalKeystore(\n rpcUrl,\n noteTransportUrl,\n seed,\n storeName,\n getKeyCb,\n insertKeyCb,\n signCb\n );\n\n await instance.ready;\n // Return a proxy that forwards missing properties to wasmWebClient.\n return new Proxy(instance, {\n get(target, prop, receiver) {\n // If the property exists on the wrapper, return it.\n if (prop in target) {\n return Reflect.get(target, prop, receiver);\n }\n // Otherwise, if the wasmWebClient has it, return that.\n if (target.wasmWebClient && prop in target.wasmWebClient) {\n const value = target.wasmWebClient[prop];\n if (typeof value === \"function\") {\n return value.bind(target.wasmWebClient);\n }\n return value;\n }\n return undefined;\n },\n });\n }\n\n /**\n * Call a method via the worker.\n * @param {string} methodName - Name of the method to call.\n * @param {...any} args - Arguments for the method.\n * @returns {Promise<any>}\n */\n async callMethodWithWorker(methodName, ...args) {\n await this.ready;\n // Create a unique request ID.\n const requestId = `${methodName}-${Date.now()}-${Math.random()}`;\n return new Promise((resolve, reject) => {\n // Save the resolve and reject callbacks in the pendingRequests map.\n this.pendingRequests.set(requestId, { resolve, reject });\n // Send the method call request to the worker.\n this.worker.postMessage({\n action: WorkerAction.CALL_METHOD,\n methodName,\n args,\n requestId,\n });\n });\n }\n\n // ----- Explicitly Wrapped Methods (Worker-Forwarded) -----\n\n async newWallet(storageMode, mutable, authSchemeId, seed) {\n try {\n if (!this.worker) {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.newWallet(\n storageMode,\n mutable,\n authSchemeId,\n seed\n );\n }\n const wasm = await getWasmOrThrow();\n const serializedStorageMode = storageMode.asStr();\n const serializedAccountBytes = await this.callMethodWithWorker(\n MethodName.NEW_WALLET,\n serializedStorageMode,\n mutable,\n authSchemeId,\n seed\n );\n return wasm.Account.deserialize(new Uint8Array(serializedAccountBytes));\n } catch (error) {\n console.error(\"INDEX.JS: Error in newWallet:\", error);\n throw error;\n }\n }\n\n async newFaucet(\n storageMode,\n nonFungible,\n tokenSymbol,\n decimals,\n maxSupply,\n authSchemeId\n ) {\n try {\n if (!this.worker) {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.newFaucet(\n storageMode,\n nonFungible,\n tokenSymbol,\n decimals,\n maxSupply,\n authSchemeId\n );\n }\n const wasm = await getWasmOrThrow();\n const serializedStorageMode = storageMode.asStr();\n const serializedMaxSupply = maxSupply.toString();\n const serializedAccountBytes = await this.callMethodWithWorker(\n MethodName.NEW_FAUCET,\n serializedStorageMode,\n nonFungible,\n tokenSymbol,\n decimals,\n serializedMaxSupply,\n authSchemeId\n );\n\n return wasm.Account.deserialize(new Uint8Array(serializedAccountBytes));\n } catch (error) {\n console.error(\"INDEX.JS: Error in newFaucet:\", error);\n throw error;\n }\n }\n\n async submitNewTransaction(accountId, transactionRequest) {\n try {\n if (!this.worker) {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.submitNewTransaction(\n accountId,\n transactionRequest\n );\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const result = await this.callMethodWithWorker(\n MethodName.SUBMIT_NEW_TRANSACTION,\n accountId.toString(),\n serializedTransactionRequest\n );\n\n const transactionResult = wasm.TransactionResult.deserialize(\n new Uint8Array(result.serializedTransactionResult)\n );\n\n return transactionResult.id();\n } catch (error) {\n console.error(\"INDEX.JS: Error in submitNewTransaction:\", error);\n throw error;\n }\n }\n\n async submitNewTransactionWithProver(accountId, transactionRequest, prover) {\n try {\n if (!this.worker) {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.submitNewTransactionWithProver(\n accountId,\n transactionRequest,\n prover\n );\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const proverPayload = prover.serialize();\n const result = await this.callMethodWithWorker(\n MethodName.SUBMIT_NEW_TRANSACTION_WITH_PROVER,\n accountId.toString(),\n serializedTransactionRequest,\n proverPayload\n );\n\n const transactionResult = wasm.TransactionResult.deserialize(\n new Uint8Array(result.serializedTransactionResult)\n );\n\n return transactionResult.id();\n } catch (error) {\n console.error(\n \"INDEX.JS: Error in submitNewTransactionWithProver:\",\n error\n );\n throw error;\n }\n }\n\n async executeTransaction(accountId, transactionRequest) {\n try {\n if (!this.worker) {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.executeTransaction(\n accountId,\n transactionRequest\n );\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const serializedResultBytes = await this.callMethodWithWorker(\n MethodName.EXECUTE_TRANSACTION,\n accountId.toString(),\n serializedTransactionRequest\n );\n\n return wasm.TransactionResult.deserialize(\n new Uint8Array(serializedResultBytes)\n );\n } catch (error) {\n console.error(\"INDEX.JS: Error in executeTransaction:\", error);\n throw error;\n }\n }\n\n async proveTransaction(transactionResult, prover) {\n try {\n if (!this.worker) {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.proveTransaction(transactionResult, prover);\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionResult = transactionResult.serialize();\n const proverPayload = prover ? prover.serialize() : null;\n\n const serializedProvenBytes = await this.callMethodWithWorker(\n MethodName.PROVE_TRANSACTION,\n serializedTransactionResult,\n proverPayload\n );\n\n return wasm.ProvenTransaction.deserialize(\n new Uint8Array(serializedProvenBytes)\n );\n } catch (error) {\n console.error(\"INDEX.JS: Error in proveTransaction:\", error);\n throw error;\n }\n }\n\n /**\n * Syncs the client state with the node.\n *\n * This method coordinates concurrent sync calls using the Web Locks API when available,\n * with an in-process mutex fallback for older browsers. If a sync is already in progress,\n * subsequent callers will wait and receive the same result (coalescing behavior).\n *\n * @returns {Promise<SyncSummary>} The sync summary\n */\n async syncState() {\n return this.syncStateWithTimeout(0);\n }\n\n /**\n * Syncs the client state with the node with an optional timeout.\n *\n * This method coordinates concurrent sync calls using the Web Locks API when available,\n * with an in-process mutex fallback for older browsers. If a sync is already in progress,\n * subsequent callers will wait and receive the same result (coalescing behavior).\n *\n * @param {number} timeoutMs - Timeout in milliseconds (0 = no timeout)\n * @returns {Promise<SyncSummary>} The sync summary\n */\n async syncStateWithTimeout(timeoutMs = 0) {\n // Use storeName as the database ID for lock coordination\n const dbId = this.storeName || \"default\";\n\n try {\n // Acquire the sync lock (coordinates concurrent calls)\n const lockHandle = await acquireSyncLock(dbId, timeoutMs);\n\n if (!lockHandle.acquired) {\n // We're coalescing - return the result from the in-progress sync\n return lockHandle.coalescedResult;\n }\n\n // We acquired the lock - perform the sync\n try {\n let result;\n if (!this.worker) {\n const wasmWebClient = await this.getWasmWebClient();\n result = await wasmWebClient.syncStateImpl();\n } else {\n const wasm = await getWasmOrThrow();\n const serializedSyncSummaryBytes = await this.callMethodWithWorker(\n MethodName.SYNC_STATE\n );\n result = wasm.SyncSummary.deserialize(\n new Uint8Array(serializedSyncSummaryBytes)\n );\n }\n\n // Release the lock with the result\n releaseSyncLock(dbId, result);\n return result;\n } catch (error) {\n // Release the lock with the error\n releaseSyncLockWithError(dbId, error);\n throw error;\n }\n } catch (error) {\n console.error(\"INDEX.JS: Error in syncState:\", error);\n throw error;\n }\n }\n\n terminate() {\n if (this.worker) {\n this.worker.terminate();\n }\n }\n}\n\nexport class MockWebClient extends WebClient {\n constructor(seed, logLevel) {\n super(null, null, seed, \"mock\", undefined, undefined, undefined, logLevel);\n }\n\n initializeWorker() {\n this.worker.postMessage({\n action: WorkerAction.INIT_MOCK,\n args: [this.seed, this.logLevel],\n });\n }\n\n /**\n * Factory method to create a WebClient with a mock chain for testing purposes.\n *\n * @param serializedMockChain - Serialized mock chain data (optional). Will use an empty chain if not provided.\n * @param serializedMockNoteTransportNode - Serialized mock note transport node data (optional). Will use a new instance if not provided.\n * @param seed - The seed for the account (optional).\n * @returns A promise that resolves to a MockWebClient.\n */\n static async createClient(\n serializedMockChain,\n serializedMockNoteTransportNode,\n seed,\n logLevel\n ) {\n // Construct the instance (synchronously).\n const instance = new MockWebClient(seed, logLevel);\n\n // Set up logging on the main thread before creating the client.\n if (logLevel) {\n const wasm = await getWasmOrThrow();\n wasm.setupLogging(logLevel);\n }\n\n // Wait for the underlying wasmWebClient to be initialized.\n const wasmWebClient = await instance.getWasmWebClient();\n await wasmWebClient.createMockClient(\n seed,\n serializedMockChain,\n serializedMockNoteTransportNode\n );\n\n // Wait for the worker to be ready\n await instance.ready;\n\n // Return a proxy that forwards missing properties to wasmWebClient.\n return new Proxy(instance, {\n get(target, prop, receiver) {\n // If the property exists on the wrapper, return it.\n if (prop in target) {\n return Reflect.get(target, prop, receiver);\n }\n // Otherwise, if the wasmWebClient has it, return that.\n if (target.wasmWebClient && prop in target.wasmWebClient) {\n const value = target.wasmWebClient[prop];\n if (typeof value === \"function\") {\n return value.bind(target.wasmWebClient);\n }\n return value;\n }\n return undefined;\n },\n });\n }\n\n /**\n * Syncs the mock client state.\n *\n * This method coordinates concurrent sync calls using the Web Locks API when available,\n * with an in-process mutex fallback for older browsers. If a sync is already in progress,\n * subsequent callers will wait and receive the same result (coalescing behavior).\n *\n * @returns {Promise<SyncSummary>} The sync summary\n */\n async syncState() {\n return this.syncStateWithTimeout(0);\n }\n\n /**\n * Syncs the mock client state with an optional timeout.\n *\n * @param {number} timeoutMs - Timeout in milliseconds (0 = no timeout)\n * @returns {Promise<SyncSummary>} The sync summary\n */\n async syncStateWithTimeout(timeoutMs = 0) {\n const dbId = this.storeName || \"mock\";\n\n try {\n const lockHandle = await acquireSyncLock(dbId, timeoutMs);\n\n if (!lockHandle.acquired) {\n return lockHandle.coalescedResult;\n }\n\n try {\n let result;\n const wasmWebClient = await this.getWasmWebClient();\n\n if (!this.worker) {\n result = await wasmWebClient.syncStateImpl();\n } else {\n let serializedMockChain = wasmWebClient.serializeMockChain().buffer;\n let serializedMockNoteTransportNode =\n wasmWebClient.serializeMockNoteTransportNode().buffer;\n\n const wasm = await getWasmOrThrow();\n\n const serializedSyncSummaryBytes = await this.callMethodWithWorker(\n MethodName.SYNC_STATE_MOCK,\n serializedMockChain,\n serializedMockNoteTransportNode\n );\n\n result = wasm.SyncSummary.deserialize(\n new Uint8Array(serializedSyncSummaryBytes)\n );\n }\n\n releaseSyncLock(dbId, result);\n return result;\n } catch (error) {\n releaseSyncLockWithError(dbId, error);\n throw error;\n }\n } catch (error) {\n console.error(\"INDEX.JS: Error in syncState:\", error);\n throw error;\n }\n }\n\n async submitNewTransaction(accountId, transactionRequest) {\n try {\n if (!this.worker) {\n return await super.submitNewTransaction(accountId, transactionRequest);\n }\n\n const wasmWebClient = await this.getWasmWebClient();\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const serializedMockChain = wasmWebClient.serializeMockChain().buffer;\n const serializedMockNoteTransportNode =\n wasmWebClient.serializeMockNoteTransportNode().buffer;\n\n const result = await this.callMethodWithWorker(\n MethodName.SUBMIT_NEW_TRANSACTION_MOCK,\n accountId.toString(),\n serializedTransactionRequest,\n serializedMockChain,\n serializedMockNoteTransportNode\n );\n\n const newMockChain = new Uint8Array(result.serializedMockChain);\n const newMockNoteTransportNode = result.serializedMockNoteTransportNode\n ? new Uint8Array(result.serializedMockNoteTransportNode)\n : undefined;\n\n const transactionResult = wasm.TransactionResult.deserialize(\n new Uint8Array(result.serializedTransactionResult)\n );\n\n if (!(this instanceof MockWebClient)) {\n return transactionResult.id();\n }\n\n this.wasmWebClient = new wasm.WebClient();\n this.wasmWebClientPromise = Promise.resolve(this.wasmWebClient);\n await this.wasmWebClient.createMockClient(\n this.seed,\n newMockChain,\n newMockNoteTransportNode\n );\n\n return transactionResult.id();\n } catch (error) {\n console.error(\"INDEX.JS: Error in submitNewTransaction:\", error);\n throw error;\n }\n }\n\n async submitNewTransactionWithProver(accountId, transactionRequest, prover) {\n try {\n if (!this.worker) {\n return await super.submitNewTransactionWithProver(\n accountId,\n transactionRequest,\n prover\n );\n }\n\n const wasmWebClient = await this.getWasmWebClient();\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const proverPayload = prover.serialize();\n const serializedMockChain = wasmWebClient.serializeMockChain().buffer;\n const serializedMockNoteTransportNode =\n wasmWebClient.serializeMockNoteTransportNode().buffer;\n\n const result = await this.callMethodWithWorker(\n MethodName.SUBMIT_NEW_TRANSACTION_WITH_PROVER_MOCK,\n accountId.toString(),\n serializedTransactionRequest,\n proverPayload,\n serializedMockChain,\n serializedMockNoteTransportNode\n );\n\n const newMockChain = new Uint8Array(result.serializedMockChain);\n const newMockNoteTransportNode = result.serializedMockNoteTransportNode\n ? new Uint8Array(result.serializedMockNoteTransportNode)\n : undefined;\n\n const transactionResult = wasm.TransactionResult.deserialize(\n new Uint8Array(result.serializedTransactionResult)\n );\n\n if (!(this instanceof MockWebClient)) {\n return transactionResult.id();\n }\n\n this.wasmWebClient = new wasm.WebClient();\n this.wasmWebClientPromise = Promise.resolve(this.wasmWebClient);\n await this.wasmWebClient.createMockClient(\n this.seed,\n newMockChain,\n newMockNoteTransportNode\n );\n\n return transactionResult.id();\n } catch (error) {\n console.error(\n \"INDEX.JS: Error in submitNewTransactionWithProver:\",\n error\n );\n throw error;\n }\n }\n}\n\nfunction copyWebClientStatics(WasmWebClient) {\n if (!WasmWebClient) {\n return;\n }\n Object.getOwnPropertyNames(WasmWebClient).forEach((prop) => {\n if (\n typeof WasmWebClient[prop] === \"function\" &&\n prop !== \"constructor\" &&\n prop !== \"prototype\"\n ) {\n WebClient[prop] = WasmWebClient[prop];\n }\n });\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../js/constants.js","../js/syncLock.js","../js/asyncLock.js","../js/webLock.js","../js/index.js"],"sourcesContent":["export const WorkerAction = Object.freeze({\n INIT: \"init\",\n INIT_MOCK: \"initMock\",\n CALL_METHOD: \"callMethod\",\n EXECUTE_CALLBACK: \"executeCallback\",\n});\n\nexport const CallbackType = Object.freeze({\n GET_KEY: \"getKey\",\n INSERT_KEY: \"insertKey\",\n SIGN: \"sign\",\n});\n\nexport const MethodName = Object.freeze({\n CREATE_CLIENT: \"createClient\",\n NEW_WALLET: \"newWallet\",\n NEW_FAUCET: \"newFaucet\",\n EXECUTE_TRANSACTION: \"executeTransaction\",\n PROVE_TRANSACTION: \"proveTransaction\",\n SUBMIT_NEW_TRANSACTION: \"submitNewTransaction\",\n SUBMIT_NEW_TRANSACTION_MOCK: \"submitNewTransactionMock\",\n SUBMIT_NEW_TRANSACTION_WITH_PROVER: \"submitNewTransactionWithProver\",\n SUBMIT_NEW_TRANSACTION_WITH_PROVER_MOCK: \"submitNewTransactionWithProverMock\",\n SYNC_STATE: \"syncState\",\n SYNC_STATE_MOCK: \"syncStateMock\",\n});\n","/**\n * Sync Lock Module\n *\n * Provides coordination for concurrent syncState() calls using the Web Locks API\n * with an in-process mutex fallback for older browsers.\n *\n * Behavior:\n * - Uses \"coalescing\": if a sync is in progress, subsequent callers wait and receive\n * the same result\n * - Web Locks for cross-tab coordination (Chrome 69+, Safari 15.4+)\n * - In-process mutex fallback when Web Locks unavailable\n * - Optional timeout support\n */\n\n/**\n * Check if the Web Locks API is available.\n */\nexport function hasWebLocks() {\n return (\n typeof navigator !== \"undefined\" &&\n navigator.locks !== undefined &&\n typeof navigator.locks.request === \"function\"\n );\n}\n\n/**\n * Internal state for tracking in-progress syncs and waiters per database.\n */\nconst syncStates = new Map();\n\n/**\n * Get or create sync state for a database.\n */\nfunction getSyncState(dbId) {\n let state = syncStates.get(dbId);\n if (!state) {\n state = {\n inProgress: false,\n result: null,\n error: null,\n waiters: [],\n releaseLock: null,\n syncGeneration: 0,\n };\n syncStates.set(dbId, state);\n }\n return state;\n}\n\n/**\n * Acquire a sync lock for the given database.\n *\n * If a sync is already in progress:\n * - Returns { acquired: false, coalescedResult } after waiting for the result\n *\n * If no sync is in progress:\n * - Returns { acquired: true } and the caller should perform the sync,\n * then call releaseSyncLock() or releaseSyncLockWithError()\n *\n * @param {string} dbId - The database ID to lock\n * @param {number} timeoutMs - Optional timeout in milliseconds (0 = no timeout)\n * @returns {Promise<{acquired: boolean, coalescedResult?: any}>}\n */\nexport async function acquireSyncLock(dbId, timeoutMs = 0) {\n const state = getSyncState(dbId);\n\n // If a sync is already in progress, wait for it to complete (coalescing)\n if (state.inProgress) {\n return new Promise((resolve, reject) => {\n let timeoutId;\n if (timeoutMs > 0) {\n timeoutId = setTimeout(() => {\n const idx = state.waiters.findIndex((w) => w.resolve === onResult);\n if (idx !== -1) {\n state.waiters.splice(idx, 1);\n }\n reject(new Error(\"Sync lock acquisition timed out\"));\n }, timeoutMs);\n }\n\n const onResult = (result) => {\n if (timeoutId) clearTimeout(timeoutId);\n resolve({ acquired: false, coalescedResult: result });\n };\n\n const onError = (error) => {\n if (timeoutId) clearTimeout(timeoutId);\n reject(error);\n };\n\n state.waiters.push({ resolve: onResult, reject: onError });\n });\n }\n\n // Mark sync as in progress and increment generation\n state.inProgress = true;\n state.result = null;\n state.error = null;\n state.syncGeneration++;\n const currentGeneration = state.syncGeneration;\n\n // Try to acquire Web Lock if available\n if (hasWebLocks()) {\n const lockName = `miden-sync-${dbId}`;\n\n return new Promise((resolve, reject) => {\n let timeoutId;\n let timedOut = false;\n\n if (timeoutMs > 0) {\n timeoutId = setTimeout(() => {\n timedOut = true;\n if (state.syncGeneration === currentGeneration) {\n state.inProgress = false;\n const error = new Error(\"Sync lock acquisition timed out\");\n for (const waiter of state.waiters) {\n waiter.reject(error);\n }\n state.waiters = [];\n }\n reject(new Error(\"Sync lock acquisition timed out\"));\n }, timeoutMs);\n }\n\n navigator.locks\n .request(lockName, { mode: \"exclusive\" }, async () => {\n if (timedOut || state.syncGeneration !== currentGeneration) {\n return;\n }\n\n if (timeoutId) clearTimeout(timeoutId);\n\n return new Promise((releaseLock) => {\n state.releaseLock = releaseLock;\n resolve({ acquired: true });\n });\n })\n .catch((err) => {\n if (timeoutId) clearTimeout(timeoutId);\n if (state.syncGeneration === currentGeneration) {\n state.inProgress = false;\n }\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n });\n } else {\n // Fallback: no Web Locks, just use in-process state\n return { acquired: true };\n }\n}\n\n/**\n * Release the sync lock with a successful result.\n *\n * This notifies all waiting callers with the result and releases the lock.\n *\n * @param {string} dbId - The database ID\n * @param {any} result - The sync result to pass to waiters\n */\nexport function releaseSyncLock(dbId, result) {\n const state = getSyncState(dbId);\n\n if (!state.inProgress) {\n console.warn(\"releaseSyncLock called but no sync was in progress\");\n return;\n }\n\n state.result = result;\n state.inProgress = false;\n\n for (const waiter of state.waiters) {\n waiter.resolve(result);\n }\n state.waiters = [];\n\n if (state.releaseLock) {\n state.releaseLock();\n state.releaseLock = null;\n }\n}\n\n/**\n * Release the sync lock due to an error.\n *\n * This notifies all waiting callers that the sync failed.\n *\n * @param {string} dbId - The database ID\n * @param {Error} error - The error to pass to waiters\n */\nexport function releaseSyncLockWithError(dbId, error) {\n const state = getSyncState(dbId);\n\n if (!state.inProgress) {\n console.warn(\"releaseSyncLockWithError called but no sync was in progress\");\n return;\n }\n\n state.error = error;\n state.inProgress = false;\n\n for (const waiter of state.waiters) {\n waiter.reject(error);\n }\n state.waiters = [];\n\n if (state.releaseLock) {\n state.releaseLock();\n state.releaseLock = null;\n }\n}\n","/**\n * A simple promise-chain mutex for serializing async operations.\n *\n * Ignores errors: if one operation throws, the next still runs (no deadlocks).\n */\nexport class AsyncLock {\n constructor() {\n this._pending = Promise.resolve();\n }\n\n /**\n * Queue `fn` so that it runs only after all previously queued operations\n * have settled (resolved or rejected).\n *\n * @template T\n * @param {() => Promise<T>} fn\n * @returns {Promise<T>}\n */\n runExclusive(fn) {\n const run = this._pending.then(\n () => fn(),\n () => fn()\n );\n // Swallow the result/error so the chain itself never rejects\n this._pending = run.then(\n () => undefined,\n () => undefined\n );\n return run;\n }\n}\n","/**\n * Cross-Tab Write Lock Module\n *\n * Provides an exclusive write lock using the Web Locks API so that mutating\n * operations on the same IndexedDB database are serialized across browser tabs.\n *\n * When the Web Locks API is unavailable the lock is a no-op — the in-process\n * AsyncLock still protects against concurrent WASM access within a single tab.\n */\n\nimport { hasWebLocks } from \"./syncLock.js\";\n\n/**\n * Execute `fn` while holding an exclusive cross-tab write lock for the given\n * store. If the Web Locks API is not available, `fn` runs immediately.\n *\n * @param {string} storeName - Logical database / store name.\n * @param {() => Promise<T>} fn - The async work to perform under the lock.\n * @param {number} [timeoutMs=0] - Optional timeout in milliseconds for\n * acquiring the lock. 0 (default) means wait indefinitely. When the timeout\n * fires the lock request is aborted and the returned promise rejects with an\n * `AbortError`. Has no effect when the Web Locks API is unavailable.\n * @returns {Promise<T>}\n * @template T\n */\nexport async function withWriteLock(storeName, fn, timeoutMs = 0) {\n if (!hasWebLocks()) {\n return fn();\n }\n\n const lockName = `miden-db-${storeName || \"default\"}`;\n\n if (timeoutMs > 0) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n return await navigator.locks.request(\n lockName,\n { mode: \"exclusive\", signal: controller.signal },\n async () => {\n clearTimeout(timeoutId);\n return fn();\n }\n );\n } catch (err) {\n clearTimeout(timeoutId);\n throw err;\n }\n }\n\n return navigator.locks.request(lockName, { mode: \"exclusive\" }, async () => {\n return fn();\n });\n}\n","import loadWasm from \"./wasm.js\";\nimport { CallbackType, MethodName, WorkerAction } from \"./constants.js\";\nimport {\n acquireSyncLock,\n releaseSyncLock,\n releaseSyncLockWithError,\n} from \"./syncLock.js\";\nimport { AsyncLock } from \"./asyncLock.js\";\nimport { withWriteLock } from \"./webLock.js\";\nexport * from \"../Cargo.toml\";\n\n// WASM PROXY METHODS\n// ================================================================================================\n\n/**\n * Set of method names that are synchronous (non-async) on the WASM object\n * and should NOT be wrapped with the async WASM lock. Wrapping them would\n * turn their return type from T into Promise<T>, breaking callers that\n * expect a synchronous return value.\n *\n * These methods may still mutate internal client state (e.g. RNG), but they\n * complete in a single synchronous call without yielding to the event loop.\n * JavaScript's single-threaded execution guarantees they cannot interleave\n * with an in-progress async WASM call.\n *\n * When updating this set, check the Rust source for any `pub fn` (non-async)\n * method on `impl WebClient` with #[wasm_bindgen] that is NOT already handled\n * by an explicit wrapper method on the JS WebClient class.\n */\nconst SYNC_METHODS = new Set([\n \"newMintTransactionRequest\",\n \"newSendTransactionRequest\",\n \"newConsumeTransactionRequest\",\n \"newSwapTransactionRequest\",\n \"createCodeBuilder\",\n \"buildSwapTag\",\n \"setDebugMode\",\n \"usesMockChain\",\n \"serializeMockChain\",\n \"serializeMockNoteTransportNode\",\n \"proveBlock\",\n]);\n\n/**\n * Set of method names that mutate state. These are wrapped with the cross-tab\n * write lock (Layer 2) when accessed through the Proxy fallback.\n */\nconst WRITE_METHODS = new Set([\n \"newAccount\",\n \"importAccountFile\",\n \"importAccountById\",\n \"importPublicAccountFromSeed\",\n \"importNoteFile\",\n \"forceImportStore\",\n \"addTag\",\n \"removeTag\",\n \"setSetting\",\n \"removeSetting\",\n \"insertAccountAddress\",\n \"removeAccountAddress\",\n \"sendPrivateNote\",\n // fetch*PrivateNotes fetches from the note transport AND writes to IndexedDB\n \"fetchPrivateNotes\",\n \"fetchAllPrivateNotes\",\n \"addAccountSecretKeyToWebStore\",\n \"executeForSummary\",\n]);\n\n/**\n * Set of method names that are read-only (no state mutation). These are\n * wrapped with the in-process WASM lock only (Layer 1).\n *\n * This set exists purely for the CI lint check (`check-method-classification`)\n * which ensures every WASM export is explicitly classified — preventing new\n * write methods from silently defaulting to read-only.\n *\n * The Proxy behaviour is unchanged: methods not in SYNC_METHODS or\n * WRITE_METHODS already get WASM-lock-only wrapping.\n */\nconst READ_METHODS = new Set([\n \"getAccounts\",\n \"getAccount\",\n \"getAccountAuthByPubKeyCommitment\",\n \"getPublicKeyCommitmentsOfAccount\",\n \"getInputNotes\",\n \"getInputNote\",\n \"getOutputNotes\",\n \"getOutputNote\",\n \"getConsumableNotes\",\n \"getTransactions\",\n \"getSyncHeight\",\n \"exportNoteFile\",\n \"exportStore\",\n \"exportAccountFile\",\n \"listTags\",\n \"getSetting\",\n \"listSettingKeys\",\n]);\n\n/**\n * Module-level map tracking whether the current tab already holds the\n * cross-tab Web Lock for a given store name. Keyed by storeName so that\n * two WebClient instances targeting the same store correctly detect\n * re-entrancy and skip re-acquiring the lock (which would deadlock).\n */\nconst _writeLockHeldByStore = new Map();\n\n/**\n * Create the Proxy that wraps a WebClient instance. The proxy:\n * - Returns properties from the wrapper (instance) first.\n * - Falls back to the underlying WASM WebClient, wrapping function calls\n * through the in-process WASM lock (Layer 1) and, for write methods,\n * the cross-tab write lock (Layer 2).\n */\nfunction createClientProxy(instance) {\n return new Proxy(instance, {\n get(target, prop, receiver) {\n // If the property exists on the wrapper, return it.\n if (prop in target) {\n return Reflect.get(target, prop, receiver);\n }\n // Otherwise, if the wasmWebClient has it, return that.\n if (target.wasmWebClient && prop in target.wasmWebClient) {\n const value = target.wasmWebClient[prop];\n if (typeof value === \"function\") {\n // Synchronous methods: call directly without async wrapping.\n // These are pure-computation methods whose callers expect a\n // synchronous return value.\n if (SYNC_METHODS.has(prop)) {\n return (...args) => value.apply(target.wasmWebClient, args);\n } else if (WRITE_METHODS.has(prop)) {\n // Write methods: cross-tab lock (outer) → WASM lock (inner)\n return (...args) =>\n target._withWrite(prop, () =>\n target._wasmLock.runExclusive(() =>\n value.apply(target.wasmWebClient, args)\n )\n );\n } else if (READ_METHODS.has(prop)) {\n // Read methods: WASM lock only\n return (...args) =>\n target._wasmLock.runExclusive(() =>\n value.apply(target.wasmWebClient, args)\n );\n } else {\n throw new Error(\n `Unclassified WASM method: \"${prop}\". Add it to SYNC_METHODS, WRITE_METHODS, or READ_METHODS.`\n );\n }\n }\n return value;\n }\n return undefined;\n },\n });\n}\n\n// WASM MODULE LOADING\n// ================================================================================================\n\nconst buildTypedArraysExport = (exportObject) => {\n return Object.entries(exportObject).reduce(\n (exports, [exportName, _export]) => {\n if (exportName.endsWith(\"Array\")) {\n exports[exportName] = _export;\n }\n return exports;\n },\n {}\n );\n};\n\nconst deserializeError = (errorLike) => {\n if (!errorLike) {\n return new Error(\"Unknown error received from worker\");\n }\n const { name, message, stack, cause, ...rest } = errorLike;\n const reconstructedError = new Error(message ?? \"Unknown worker error\");\n reconstructedError.name = name ?? reconstructedError.name;\n if (stack) {\n reconstructedError.stack = stack;\n }\n if (cause) {\n reconstructedError.cause = deserializeError(cause);\n }\n Object.entries(rest).forEach(([key, value]) => {\n if (value !== undefined) {\n reconstructedError[key] = value;\n }\n });\n return reconstructedError;\n};\n\nexport const MidenArrays = {};\n\nlet wasmModule = null;\nlet wasmLoadPromise = null;\nlet webClientStaticsCopied = false;\n\nconst ensureWasm = async () => {\n if (wasmModule) {\n return wasmModule;\n }\n if (!wasmLoadPromise) {\n wasmLoadPromise = loadWasm().then((module) => {\n wasmModule = module;\n if (module) {\n Object.assign(MidenArrays, buildTypedArraysExport(module));\n if (!webClientStaticsCopied && module.WebClient) {\n copyWebClientStatics(module.WebClient);\n webClientStaticsCopied = true;\n }\n }\n return module;\n });\n }\n return wasmLoadPromise;\n};\n\nconst getWasmOrThrow = async () => {\n const module = await ensureWasm();\n if (!module) {\n throw new Error(\n \"Miden WASM bindings are unavailable in this environment (SSR is disabled).\"\n );\n }\n return module;\n};\n\n// WEB CLIENT\n// ================================================================================================\n\n/**\n * WebClient is a wrapper around the underlying WASM WebClient object.\n *\n * This wrapper serves several purposes:\n *\n * 1. It creates a dedicated web worker to offload computationally heavy tasks\n * (such as creating accounts, executing transactions, submitting transactions, etc.)\n * from the main thread, helping to prevent UI freezes in the browser.\n *\n * 2. It defines methods that mirror the API of the underlying WASM WebClient,\n * with the intention of executing these functions via the web worker. This allows us\n * to maintain the same API and parameters while benefiting from asynchronous, worker-based computation.\n *\n * 3. It employs a Proxy to forward any calls not designated for web worker computation\n * directly to the underlying WASM WebClient instance.\n *\n * Concurrency safety is provided by three layers:\n *\n * - **Layer 1 (In-Process AsyncLock):** All main-thread WASM calls are serialized\n * through `_wasmLock` to prevent \"recursive use of an object detected\" panics.\n *\n * - **Layer 2 (Cross-Tab Write Lock):** Mutating operations acquire an exclusive\n * Web Lock (`miden-db-{storeName}`) so that writes from different tabs are\n * serialized against the same IndexedDB database.\n *\n * - **Layer 3 (BroadcastChannel):** After every write, a notification is sent\n * to all other tabs so they can refresh stale in-memory state.\n *\n * Additionally, the wrapper provides a static createClient function. This static method\n * instantiates the WebClient object and ensures that the necessary createClient calls are\n * performed both in the main thread and within the worker thread. This dual initialization\n * correctly passes user parameters (RPC URL and seed) to both the main-thread\n * WASM WebClient and the worker-side instance.\n *\n * Because of this implementation, the only breaking change for end users is in the way the\n * web client is instantiated. Users should now use the WebClient.createClient static call.\n */\nexport class WebClient {\n /**\n * Create a WebClient wrapper.\n *\n * @param {string | undefined} rpcUrl - RPC endpoint URL used by the client.\n * @param {Uint8Array | undefined} seed - Optional seed for account initialization.\n * @param {string | undefined} storeName - Optional name for the store to be used by the client.\n * @param {(pubKey: Uint8Array) => Promise<Uint8Array | null | undefined> | Uint8Array | null | undefined} [getKeyCb]\n * - Callback to retrieve the secret key bytes for a given public key. The `pubKey`\n * parameter is the serialized public key (from `PublicKey.serialize()`). Return the\n * corresponding secret key as a `Uint8Array`, or `null`/`undefined` if not found. The\n * return value may be provided synchronously or via a `Promise`.\n * @param {(pubKey: Uint8Array, AuthSecretKey: Uint8Array) => Promise<void> | void} [insertKeyCb]\n * - Callback to persist a secret key. `pubKey` is the serialized public key, and\n * `authSecretKey` is the serialized secret key (from `AuthSecretKey.serialize()`). May return\n * `void` or a `Promise<void>`.\n * @param {(pubKey: Uint8Array, signingInputs: Uint8Array) => Promise<Uint8Array> | Uint8Array} [signCb]\n * - Callback to produce serialized signature bytes for the provided inputs. `pubKey` is the\n * serialized public key, and `signingInputs` is a `Uint8Array` produced by\n * `SigningInputs.serialize()`. Must return a `Uint8Array` containing the serialized\n * signature, either directly or wrapped in a `Promise`.\n * @param {string | undefined} [logLevel] - Optional log verbosity level\n * (\"error\", \"warn\", \"info\", \"debug\", \"trace\", \"off\", or \"none\").\n * When set, Rust tracing output is routed to the browser console.\n */\n constructor(\n rpcUrl,\n noteTransportUrl,\n seed,\n storeName,\n getKeyCb,\n insertKeyCb,\n signCb,\n logLevel\n ) {\n this.rpcUrl = rpcUrl;\n this.noteTransportUrl = noteTransportUrl;\n this.seed = seed;\n this.storeName = storeName;\n this.getKeyCb = getKeyCb;\n this.insertKeyCb = insertKeyCb;\n this.signCb = signCb;\n this.logLevel = logLevel;\n\n // Layer 1: In-process WASM lock — serializes all main-thread WASM calls.\n this._wasmLock = new AsyncLock();\n\n // Layer 2 timeout: how long to wait to acquire the cross-tab write lock\n // before aborting. Set to 0 to wait indefinitely. Can be overridden on\n // the instance, e.g. client._writeLockTimeoutMs = 0.\n this._writeLockTimeoutMs = 60_000;\n\n // Layer 3: BroadcastChannel for cross-tab state-change notifications.\n // If construction fails (e.g. unsupported WebView), Layer 3 is disabled\n // but correctness is preserved: the cross-tab write lock (Layer 2) still\n // prevents concurrent writes, and the next explicit user action will\n // trigger a sync. Tabs just won't receive proactive refresh signals.\n const channelName = `miden-state-${storeName || \"default\"}`;\n try {\n this._stateChannel =\n typeof BroadcastChannel !== \"undefined\"\n ? new BroadcastChannel(channelName)\n : null;\n } catch {\n this._stateChannel = null;\n }\n this._stateListeners = [];\n if (this._stateChannel) {\n this._stateChannel.onmessage = async (event) => {\n // Ignore cross-tab messages until the client is fully initialized.\n if (!this.wasmWebClient) return;\n\n // Auto-sync: refresh in-memory Rust Client state from IndexedDB.\n // Sync coalescing (in syncLock.js) ensures concurrent syncs share the\n // same result, so rapid messages are handled without debouncing.\n try {\n await this.syncState();\n } catch {\n // Sync failure is non-fatal — the next explicit sync will retry.\n }\n\n // Invoke listeners AFTER syncState resolves so in-memory state\n // is guaranteed fresh when callbacks run.\n for (const listener of this._stateListeners) {\n try {\n listener(event.data);\n } catch {\n // Swallow listener errors.\n }\n }\n };\n }\n\n // Check if Web Workers are available.\n if (typeof Worker !== \"undefined\") {\n console.log(\"WebClient: Web Workers are available.\");\n // Create the worker.\n this.worker = new Worker(\n new URL(\"./workers/web-client-methods-worker.js\", import.meta.url),\n { type: \"module\" }\n );\n\n // Map to track pending worker requests.\n this.pendingRequests = new Map();\n\n // Promises to track when the worker script is loaded and ready.\n this.loaded = new Promise((resolve) => {\n this.loadedResolver = resolve;\n });\n\n // Create a promise that resolves when the worker signals that it is fully initialized.\n this.ready = new Promise((resolve) => {\n this.readyResolver = resolve;\n });\n\n // Listen for messages from the worker.\n this.worker.addEventListener(\"message\", async (event) => {\n const data = event.data;\n\n // Worker script loaded.\n if (data.loaded) {\n this.loadedResolver();\n return;\n }\n\n // Worker ready.\n if (data.ready) {\n this.readyResolver();\n return;\n }\n\n if (data.action === WorkerAction.EXECUTE_CALLBACK) {\n const { callbackType, args, requestId } = data;\n try {\n const callbackMapping = {\n [CallbackType.GET_KEY]: this.getKeyCb,\n [CallbackType.INSERT_KEY]: this.insertKeyCb,\n [CallbackType.SIGN]: this.signCb,\n };\n if (!callbackMapping[callbackType]) {\n throw new Error(`Callback ${callbackType} not available`);\n }\n const callbackFunction = callbackMapping[callbackType];\n let result = callbackFunction.apply(this, args);\n if (result instanceof Promise) {\n result = await result;\n }\n\n this.worker.postMessage({\n callbackResult: result,\n callbackRequestId: requestId,\n });\n } catch (error) {\n this.worker.postMessage({\n callbackError: error.message,\n callbackRequestId: requestId,\n });\n }\n return;\n }\n\n // Handle responses for method calls.\n const { requestId, error, result, methodName } = data;\n if (requestId && this.pendingRequests.has(requestId)) {\n const { resolve, reject } = this.pendingRequests.get(requestId);\n this.pendingRequests.delete(requestId);\n if (error) {\n const workerError =\n error instanceof Error ? error : deserializeError(error);\n console.error(\n `WebClient: Error from worker in ${methodName}:`,\n workerError\n );\n reject(workerError);\n } else {\n resolve(result);\n }\n }\n });\n\n // Once the worker script has loaded, initialize the worker.\n this.loaded.then(() => this.initializeWorker());\n } else {\n console.log(\"WebClient: Web Workers are not available.\");\n // Worker not available; set up fallback values.\n this.worker = null;\n this.pendingRequests = null;\n this.loaded = Promise.resolve();\n this.ready = Promise.resolve();\n }\n\n // Lazy initialize the underlying WASM WebClient when first requested.\n this.wasmWebClient = null;\n this.wasmWebClientPromise = null;\n }\n\n // CONCURRENCY HELPERS\n // ================================================================================================\n\n /**\n * Execute `fn` under the cross-tab write lock and broadcast a state-change\n * notification when it completes. Safe to call re-entrantly within the same\n * tab (the inner call skips the cross-tab lock since the outer call holds it).\n *\n * @param {string} operation - Name of the operation (for the broadcast payload).\n * @param {() => Promise<T>} fn - The async work.\n * @returns {Promise<T>}\n * @template T\n */\n async _withWrite(operation, fn) {\n const storeName = this.storeName || \"default\";\n\n if (_writeLockHeldByStore.get(storeName)) {\n // This tab already holds the cross-tab Web Lock for this store —\n // skip re-acquiring it to avoid deadlock. The outer call's lock\n // still blocks other tabs. Works correctly even when two WebClient\n // instances target the same store within the same tab.\n return fn();\n }\n\n const result = await withWriteLock(\n storeName,\n async () => {\n _writeLockHeldByStore.set(storeName, true);\n try {\n return await fn();\n } finally {\n _writeLockHeldByStore.set(storeName, false);\n }\n },\n this._writeLockTimeoutMs\n );\n\n // Layer 3: notify other tabs. Skip for syncState — sync is not a\n // user-facing mutation, and broadcasting it would cause a ping-pong\n // loop (Tab A syncs → broadcasts → Tab B auto-syncs → broadcasts → …).\n if (operation !== \"syncState\") {\n this._broadcastStateChange(operation);\n }\n\n return result;\n }\n\n /**\n * Send a state-change notification over the BroadcastChannel (Layer 3).\n *\n * @param {string} [operation] - Human-readable name of the operation.\n */\n _broadcastStateChange(operation) {\n if (this._stateChannel) {\n try {\n this._stateChannel.postMessage({\n type: \"stateChanged\",\n operation,\n storeName: this.storeName || \"default\",\n });\n } catch {\n // BroadcastChannel may be closed — ignore.\n }\n }\n }\n\n /**\n * Register a listener that is called when **another tab** mutates the same\n * IndexedDB database (Layer 3). The WebClient automatically calls\n * `syncState()` before invoking listeners, so the in-memory state is\n * already refreshed when your callback runs. Use this for additional\n * work like re-fetching accounts or updating UI.\n *\n * Returns an unsubscribe function.\n *\n * @param {(event: {type: string, operation?: string, storeName: string}) => void} callback\n * @returns {() => void} Unsubscribe function.\n */\n onStateChanged(callback) {\n this._stateListeners.push(callback);\n return () => {\n this._stateListeners = this._stateListeners.filter((l) => l !== callback);\n };\n }\n\n // WORKER / WASM INITIALIZATION\n // ================================================================================================\n\n // TODO: This will soon conflict with some changes in main.\n // More context here:\n // https://github.com/0xMiden/miden-client/pull/1645?notification_referrer_id=NT_kwHOA1yg7NoAJVJlcG9zaXRvcnk7NjU5MzQzNzAyO0lzc3VlOzM3OTY4OTU1Nzk¬ifications_query=is%3Aunread#discussion_r2696075480\n initializeWorker() {\n this.worker.postMessage({\n action: WorkerAction.INIT,\n args: [\n this.rpcUrl,\n this.noteTransportUrl,\n this.seed,\n this.storeName,\n !!this.getKeyCb,\n !!this.insertKeyCb,\n !!this.signCb,\n this.logLevel,\n ],\n });\n }\n\n async getWasmWebClient() {\n if (this.wasmWebClient) {\n return this.wasmWebClient;\n }\n if (!this.wasmWebClientPromise) {\n this.wasmWebClientPromise = (async () => {\n const wasm = await getWasmOrThrow();\n const client = new wasm.WebClient();\n this.wasmWebClient = client;\n return client;\n })();\n }\n return this.wasmWebClientPromise;\n }\n\n // FACTORY METHODS\n // ================================================================================================\n\n /**\n * Factory method to create and initialize a WebClient instance.\n * This method is async so you can await the asynchronous call to createClient().\n *\n * @param {string} rpcUrl - The RPC URL.\n * @param {string} noteTransportUrl - The note transport URL (optional).\n * @param {string} seed - The seed for the account.\n * @param {string | undefined} network - Optional name for the store. Setting this allows multiple clients to be used in the same browser.\n * @param {string | undefined} logLevel - Optional log verbosity level (\"error\", \"warn\", \"info\", \"debug\", \"trace\", \"off\", or \"none\").\n * @returns {Promise<WebClient>} The fully initialized WebClient.\n */\n static async createClient(rpcUrl, noteTransportUrl, seed, network, logLevel) {\n // Construct the instance (synchronously).\n const instance = new WebClient(\n rpcUrl,\n noteTransportUrl,\n seed,\n network,\n undefined,\n undefined,\n undefined,\n logLevel\n );\n\n // Set up logging on the main thread before creating the client.\n if (logLevel) {\n const wasm = await getWasmOrThrow();\n wasm.setupLogging(logLevel);\n }\n\n // Wait for the underlying wasmWebClient to be initialized.\n const wasmWebClient = await instance.getWasmWebClient();\n await wasmWebClient.createClient(rpcUrl, noteTransportUrl, seed, network);\n\n // Wait for the worker to be ready\n await instance.ready;\n\n return createClientProxy(instance);\n }\n\n /**\n * Factory method to create and initialize a WebClient instance with a remote keystore.\n * This method is async so you can await the asynchronous call to createClientWithExternalKeystore().\n *\n * @param {string} rpcUrl - The RPC URL.\n * @param {string | undefined} noteTransportUrl - The note transport URL (optional).\n * @param {string | undefined} seed - The seed for the account.\n * @param {string | undefined} storeName - Optional name for the store. Setting this allows multiple clients to be used in the same browser.\n * @param {Function | undefined} getKeyCb - The get key callback.\n * @param {Function | undefined} insertKeyCb - The insert key callback.\n * @param {Function | undefined} signCb - The sign callback.\n * @param {string | undefined} logLevel - Optional log verbosity level (\"error\", \"warn\", \"info\", \"debug\", \"trace\", \"off\", or \"none\").\n * @returns {Promise<WebClient>} The fully initialized WebClient.\n */\n static async createClientWithExternalKeystore(\n rpcUrl,\n noteTransportUrl,\n seed,\n storeName,\n getKeyCb,\n insertKeyCb,\n signCb,\n logLevel\n ) {\n // Construct the instance (synchronously).\n const instance = new WebClient(\n rpcUrl,\n noteTransportUrl,\n seed,\n storeName,\n getKeyCb,\n insertKeyCb,\n signCb,\n logLevel\n );\n\n // Set up logging on the main thread before creating the client.\n if (logLevel) {\n const wasm = await getWasmOrThrow();\n wasm.setupLogging(logLevel);\n }\n\n // Wait for the underlying wasmWebClient to be initialized.\n const wasmWebClient = await instance.getWasmWebClient();\n await wasmWebClient.createClientWithExternalKeystore(\n rpcUrl,\n noteTransportUrl,\n seed,\n storeName,\n getKeyCb,\n insertKeyCb,\n signCb\n );\n\n await instance.ready;\n\n return createClientProxy(instance);\n }\n\n /**\n * Call a method via the worker.\n * @param {string} methodName - Name of the method to call.\n * @param {...any} args - Arguments for the method.\n * @returns {Promise<any>}\n */\n async callMethodWithWorker(methodName, ...args) {\n await this.ready;\n // Create a unique request ID.\n const requestId = `${methodName}-${Date.now()}-${Math.random()}`;\n return new Promise((resolve, reject) => {\n // Save the resolve and reject callbacks in the pendingRequests map.\n this.pendingRequests.set(requestId, { resolve, reject });\n // Send the method call request to the worker.\n this.worker.postMessage({\n action: WorkerAction.CALL_METHOD,\n methodName,\n args,\n requestId,\n });\n });\n }\n\n // EXPLICITLY WRAPPED METHODS (Worker-Forwarded + Concurrency-Safe)\n // ================================================================================================\n\n async newWallet(storageMode, mutable, authSchemeId, seed) {\n return this._withWrite(\"newWallet\", async () => {\n try {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.newWallet(\n storageMode,\n mutable,\n authSchemeId,\n seed\n );\n });\n }\n const wasm = await getWasmOrThrow();\n const serializedStorageMode = storageMode.asStr();\n const serializedAccountBytes = await this.callMethodWithWorker(\n MethodName.NEW_WALLET,\n serializedStorageMode,\n mutable,\n authSchemeId,\n seed\n );\n return wasm.Account.deserialize(new Uint8Array(serializedAccountBytes));\n } catch (error) {\n console.error(\"INDEX.JS: Error in newWallet:\", error);\n throw error;\n }\n });\n }\n\n async newFaucet(\n storageMode,\n nonFungible,\n tokenSymbol,\n decimals,\n maxSupply,\n authSchemeId\n ) {\n return this._withWrite(\"newFaucet\", async () => {\n try {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.newFaucet(\n storageMode,\n nonFungible,\n tokenSymbol,\n decimals,\n maxSupply,\n authSchemeId\n );\n });\n }\n const wasm = await getWasmOrThrow();\n const serializedStorageMode = storageMode.asStr();\n const serializedMaxSupply = maxSupply.toString();\n const serializedAccountBytes = await this.callMethodWithWorker(\n MethodName.NEW_FAUCET,\n serializedStorageMode,\n nonFungible,\n tokenSymbol,\n decimals,\n serializedMaxSupply,\n authSchemeId\n );\n\n return wasm.Account.deserialize(new Uint8Array(serializedAccountBytes));\n } catch (error) {\n console.error(\"INDEX.JS: Error in newFaucet:\", error);\n throw error;\n }\n });\n }\n\n async submitNewTransaction(accountId, transactionRequest) {\n return this._withWrite(\"submitNewTransaction\", async () => {\n try {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.submitNewTransaction(\n accountId,\n transactionRequest\n );\n });\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const result = await this.callMethodWithWorker(\n MethodName.SUBMIT_NEW_TRANSACTION,\n accountId.toString(),\n serializedTransactionRequest\n );\n\n const transactionResult = wasm.TransactionResult.deserialize(\n new Uint8Array(result.serializedTransactionResult)\n );\n\n return transactionResult.id();\n } catch (error) {\n console.error(\"INDEX.JS: Error in submitNewTransaction:\", error);\n throw error;\n }\n });\n }\n\n async submitNewTransactionWithProver(accountId, transactionRequest, prover) {\n return this._withWrite(\"submitNewTransactionWithProver\", async () => {\n try {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.submitNewTransactionWithProver(\n accountId,\n transactionRequest,\n prover\n );\n });\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const proverPayload = prover.serialize();\n const result = await this.callMethodWithWorker(\n MethodName.SUBMIT_NEW_TRANSACTION_WITH_PROVER,\n accountId.toString(),\n serializedTransactionRequest,\n proverPayload\n );\n\n const transactionResult = wasm.TransactionResult.deserialize(\n new Uint8Array(result.serializedTransactionResult)\n );\n\n return transactionResult.id();\n } catch (error) {\n console.error(\n \"INDEX.JS: Error in submitNewTransactionWithProver:\",\n error\n );\n throw error;\n }\n });\n }\n\n async executeTransaction(accountId, transactionRequest) {\n return this._withWrite(\"executeTransaction\", async () => {\n try {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.executeTransaction(\n accountId,\n transactionRequest\n );\n });\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const serializedResultBytes = await this.callMethodWithWorker(\n MethodName.EXECUTE_TRANSACTION,\n accountId.toString(),\n serializedTransactionRequest\n );\n\n return wasm.TransactionResult.deserialize(\n new Uint8Array(serializedResultBytes)\n );\n } catch (error) {\n console.error(\"INDEX.JS: Error in executeTransaction:\", error);\n throw error;\n }\n });\n }\n\n // proveTransaction is CPU-heavy but does NOT write to IndexedDB, so it only\n // needs the in-process WASM lock (Layer 1), not the cross-tab write lock.\n async proveTransaction(transactionResult, prover) {\n try {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.proveTransaction(\n transactionResult,\n prover\n );\n });\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionResult = transactionResult.serialize();\n const proverPayload = prover ? prover.serialize() : null;\n\n const serializedProvenBytes = await this.callMethodWithWorker(\n MethodName.PROVE_TRANSACTION,\n serializedTransactionResult,\n proverPayload\n );\n\n return wasm.ProvenTransaction.deserialize(\n new Uint8Array(serializedProvenBytes)\n );\n } catch (error) {\n console.error(\"INDEX.JS: Error in proveTransaction:\", error);\n throw error;\n }\n }\n\n // submitProvenTransaction and applyTransaction sync state before the write\n // to catch cross-tab writes that occurred between execute and submit.\n // This ensures the local IndexedDB view is fresh before submission.\n\n async submitProvenTransaction(provenTransaction, transactionResult) {\n return this._withWrite(\"submitProvenTransaction\", async () => {\n // Sync state to catch cross-tab writes that occurred since execute.\n // We call syncStateImpl directly (bypassing the sync lock) because we\n // already hold the write lock — calling syncState() would attempt to\n // acquire sync lock → write lock, which is the reverse of the normal\n // sync lock → write lock order and could deadlock across tabs.\n try {\n await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n await wasmWebClient.syncStateImpl();\n });\n } catch {\n // Sync failure is non-fatal — proceed with submission.\n // The node will reject truly invalid transactions.\n }\n\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.submitProvenTransaction(\n provenTransaction,\n transactionResult\n );\n });\n });\n }\n\n async applyTransaction(provenTransaction, transactionResult) {\n return this._withWrite(\"applyTransaction\", async () => {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.applyTransaction(\n provenTransaction,\n transactionResult\n );\n });\n });\n }\n\n // SYNC\n // ================================================================================================\n\n /**\n * Syncs the client state with the node.\n *\n * This method coordinates concurrent sync calls using the Web Locks API when available,\n * with an in-process mutex fallback for older browsers. If a sync is already in progress,\n * subsequent callers will wait and receive the same result (coalescing behavior).\n *\n * Sync also acquires the cross-tab write lock (Layer 2) so that it does not\n * interleave with writes from other tabs.\n *\n * @returns {Promise<SyncSummary>} The sync summary\n */\n async syncState() {\n return this.syncStateWithTimeout(0);\n }\n\n /**\n * Syncs the client state with the node with an optional timeout.\n *\n * This method coordinates concurrent sync calls using the Web Locks API when available,\n * with an in-process mutex fallback for older browsers. If a sync is already in progress,\n * subsequent callers will wait and receive the same result (coalescing behavior).\n *\n * Lock nesting order: Sync Lock (coalescing, outer) → Write Lock → WASM Lock (inner).\n *\n * @param {number} timeoutMs - Timeout in milliseconds (0 = no timeout)\n * @returns {Promise<SyncSummary>} The sync summary\n */\n async syncStateWithTimeout(timeoutMs = 0) {\n // Use storeName as the database ID for lock coordination\n const dbId = this.storeName || \"default\";\n\n try {\n // Acquire the sync lock (coordinates concurrent calls via coalescing)\n const lockHandle = await acquireSyncLock(dbId, timeoutMs);\n\n if (!lockHandle.acquired) {\n // We're coalescing - return the result from the in-progress sync\n return lockHandle.coalescedResult;\n }\n\n // We acquired the sync lock. Now acquire the write lock so that\n // sync doesn't interleave with writes from other tabs.\n try {\n const result = await this._withWrite(\"syncState\", async () => {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.syncStateImpl();\n });\n } else {\n const wasm = await getWasmOrThrow();\n const serializedSyncSummaryBytes = await this.callMethodWithWorker(\n MethodName.SYNC_STATE\n );\n return wasm.SyncSummary.deserialize(\n new Uint8Array(serializedSyncSummaryBytes)\n );\n }\n });\n\n // Release the sync lock with the result\n releaseSyncLock(dbId, result);\n return result;\n } catch (error) {\n // Release the sync lock with the error\n releaseSyncLockWithError(dbId, error);\n throw error;\n }\n } catch (error) {\n console.error(\"INDEX.JS: Error in syncState:\", error);\n throw error;\n }\n }\n\n /**\n * Replace the sign callback on a live client instance.\n * This allows hot-swapping the signer without recreating the client.\n *\n * @param {(pubKey: Uint8Array, signingInputs: Uint8Array) => Promise<Uint8Array> | Uint8Array} signCb\n * - The new sign callback, or null/undefined to clear it.\n */\n setSignCb(signCb) {\n this.signCb = signCb ?? null;\n }\n\n // LIFECYCLE\n // ================================================================================================\n\n terminate() {\n if (this.worker) {\n this.worker.terminate();\n }\n if (this._stateChannel) {\n try {\n this._stateChannel.close();\n } catch {\n // Already closed — ignore.\n }\n this._stateChannel = null;\n }\n this._stateListeners = [];\n }\n}\n\n// MOCK WEB CLIENT\n// ================================================================================================\n\nexport class MockWebClient extends WebClient {\n constructor(seed, logLevel) {\n super(null, null, seed, \"mock\", undefined, undefined, undefined, logLevel);\n }\n\n initializeWorker() {\n this.worker.postMessage({\n action: WorkerAction.INIT_MOCK,\n args: [this.seed, this.logLevel],\n });\n }\n\n /**\n * Factory method to create a WebClient with a mock chain for testing purposes.\n *\n * @param serializedMockChain - Serialized mock chain data (optional). Will use an empty chain if not provided.\n * @param serializedMockNoteTransportNode - Serialized mock note transport node data (optional). Will use a new instance if not provided.\n * @param seed - The seed for the account (optional).\n * @returns A promise that resolves to a MockWebClient.\n */\n static async createClient(\n serializedMockChain,\n serializedMockNoteTransportNode,\n seed,\n logLevel\n ) {\n // Construct the instance (synchronously).\n const instance = new MockWebClient(seed, logLevel);\n\n // Set up logging on the main thread before creating the client.\n if (logLevel) {\n const wasm = await getWasmOrThrow();\n wasm.setupLogging(logLevel);\n }\n\n // Wait for the underlying wasmWebClient to be initialized.\n const wasmWebClient = await instance.getWasmWebClient();\n await wasmWebClient.createMockClient(\n seed,\n serializedMockChain,\n serializedMockNoteTransportNode\n );\n\n // Wait for the worker to be ready\n await instance.ready;\n\n return createClientProxy(instance);\n }\n\n /**\n * Syncs the mock client state.\n *\n * This method coordinates concurrent sync calls using the Web Locks API when available,\n * with an in-process mutex fallback for older browsers. If a sync is already in progress,\n * subsequent callers will wait and receive the same result (coalescing behavior).\n *\n * @returns {Promise<SyncSummary>} The sync summary\n */\n async syncState() {\n return this.syncStateWithTimeout(0);\n }\n\n /**\n * Syncs the mock client state with an optional timeout.\n *\n * @param {number} timeoutMs - Timeout in milliseconds (0 = no timeout)\n * @returns {Promise<SyncSummary>} The sync summary\n */\n async syncStateWithTimeout(timeoutMs = 0) {\n const dbId = this.storeName || \"mock\";\n\n try {\n const lockHandle = await acquireSyncLock(dbId, timeoutMs);\n\n if (!lockHandle.acquired) {\n return lockHandle.coalescedResult;\n }\n\n try {\n const result = await this._withWrite(\"syncState\", async () => {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return wasmWebClient.syncStateImpl();\n });\n }\n\n const { serializedMockChain, serializedMockNoteTransportNode } =\n await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return {\n serializedMockChain: wasmWebClient.serializeMockChain().buffer,\n serializedMockNoteTransportNode:\n wasmWebClient.serializeMockNoteTransportNode().buffer,\n };\n });\n\n const wasm = await getWasmOrThrow();\n\n const serializedSyncSummaryBytes = await this.callMethodWithWorker(\n MethodName.SYNC_STATE_MOCK,\n serializedMockChain,\n serializedMockNoteTransportNode\n );\n\n return wasm.SyncSummary.deserialize(\n new Uint8Array(serializedSyncSummaryBytes)\n );\n });\n\n releaseSyncLock(dbId, result);\n return result;\n } catch (error) {\n releaseSyncLockWithError(dbId, error);\n throw error;\n }\n } catch (error) {\n console.error(\"INDEX.JS: Error in syncState:\", error);\n throw error;\n }\n }\n\n async submitNewTransaction(accountId, transactionRequest) {\n return this._withWrite(\"submitNewTransaction\", async () => {\n try {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.submitNewTransaction(\n accountId,\n transactionRequest\n );\n });\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const { serializedMockChain, serializedMockNoteTransportNode } =\n await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return {\n serializedMockChain: wasmWebClient.serializeMockChain().buffer,\n serializedMockNoteTransportNode:\n wasmWebClient.serializeMockNoteTransportNode().buffer,\n };\n });\n\n const result = await this.callMethodWithWorker(\n MethodName.SUBMIT_NEW_TRANSACTION_MOCK,\n accountId.toString(),\n serializedTransactionRequest,\n serializedMockChain,\n serializedMockNoteTransportNode\n );\n\n const newMockChain = new Uint8Array(result.serializedMockChain);\n const newMockNoteTransportNode = result.serializedMockNoteTransportNode\n ? new Uint8Array(result.serializedMockNoteTransportNode)\n : undefined;\n\n const transactionResult = wasm.TransactionResult.deserialize(\n new Uint8Array(result.serializedTransactionResult)\n );\n\n if (!(this instanceof MockWebClient)) {\n return transactionResult.id();\n }\n\n this.wasmWebClient = new wasm.WebClient();\n this.wasmWebClientPromise = Promise.resolve(this.wasmWebClient);\n await this.wasmWebClient.createMockClient(\n this.seed,\n newMockChain,\n newMockNoteTransportNode\n );\n\n return transactionResult.id();\n } catch (error) {\n console.error(\"INDEX.JS: Error in submitNewTransaction:\", error);\n throw error;\n }\n });\n }\n\n async submitNewTransactionWithProver(accountId, transactionRequest, prover) {\n return this._withWrite(\"submitNewTransactionWithProver\", async () => {\n try {\n if (!this.worker) {\n return await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return await wasmWebClient.submitNewTransactionWithProver(\n accountId,\n transactionRequest,\n prover\n );\n });\n }\n\n const wasm = await getWasmOrThrow();\n const serializedTransactionRequest = transactionRequest.serialize();\n const proverPayload = prover.serialize();\n const { serializedMockChain, serializedMockNoteTransportNode } =\n await this._wasmLock.runExclusive(async () => {\n const wasmWebClient = await this.getWasmWebClient();\n return {\n serializedMockChain: wasmWebClient.serializeMockChain().buffer,\n serializedMockNoteTransportNode:\n wasmWebClient.serializeMockNoteTransportNode().buffer,\n };\n });\n\n const result = await this.callMethodWithWorker(\n MethodName.SUBMIT_NEW_TRANSACTION_WITH_PROVER_MOCK,\n accountId.toString(),\n serializedTransactionRequest,\n proverPayload,\n serializedMockChain,\n serializedMockNoteTransportNode\n );\n\n const newMockChain = new Uint8Array(result.serializedMockChain);\n const newMockNoteTransportNode = result.serializedMockNoteTransportNode\n ? new Uint8Array(result.serializedMockNoteTransportNode)\n : undefined;\n\n const transactionResult = wasm.TransactionResult.deserialize(\n new Uint8Array(result.serializedTransactionResult)\n );\n\n if (!(this instanceof MockWebClient)) {\n return transactionResult.id();\n }\n\n this.wasmWebClient = new wasm.WebClient();\n this.wasmWebClientPromise = Promise.resolve(this.wasmWebClient);\n await this.wasmWebClient.createMockClient(\n this.seed,\n newMockChain,\n newMockNoteTransportNode\n );\n\n return transactionResult.id();\n } catch (error) {\n console.error(\n \"INDEX.JS: Error in submitNewTransactionWithProver:\",\n error\n );\n throw error;\n }\n });\n }\n}\n\n// STATICS\n// ================================================================================================\n\nfunction copyWebClientStatics(WasmWebClient) {\n if (!WasmWebClient) {\n return;\n }\n Object.getOwnPropertyNames(WasmWebClient).forEach((prop) => {\n if (\n typeof WasmWebClient[prop] === \"function\" &&\n prop !== \"constructor\" &&\n prop !== \"prototype\"\n ) {\n WebClient[prop] = WasmWebClient[prop];\n }\n });\n}\n"],"names":[],"mappings":"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"}
|
package/dist/wasm.js
CHANGED