@nerochain/mpc-sdk 0.1.0
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/LICENSE +21 -0
- package/README.md +91 -0
- package/dist/aa.d.mts +185 -0
- package/dist/aa.d.ts +185 -0
- package/dist/aa.js +520 -0
- package/dist/aa.js.map +1 -0
- package/dist/aa.mjs +511 -0
- package/dist/aa.mjs.map +1 -0
- package/dist/chain-manager-C3eHsVt9.d.mts +98 -0
- package/dist/chain-manager-C3eHsVt9.d.ts +98 -0
- package/dist/chains.d.mts +17 -0
- package/dist/chains.d.ts +17 -0
- package/dist/chains.js +331 -0
- package/dist/chains.js.map +1 -0
- package/dist/chains.mjs +315 -0
- package/dist/chains.mjs.map +1 -0
- package/dist/index.d.mts +656 -0
- package/dist/index.d.ts +656 -0
- package/dist/index.js +6627 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +6502 -0
- package/dist/index.mjs.map +1 -0
- package/dist/modal.d.mts +68 -0
- package/dist/modal.d.ts +68 -0
- package/dist/modal.js +4867 -0
- package/dist/modal.js.map +1 -0
- package/dist/modal.mjs +4850 -0
- package/dist/modal.mjs.map +1 -0
- package/dist/nero-sdk-Cm8gzHZJ.d.mts +684 -0
- package/dist/nero-sdk-IhuTBrXZ.d.ts +684 -0
- package/dist/no-modal.d.mts +56 -0
- package/dist/no-modal.d.ts +56 -0
- package/dist/no-modal.js +4060 -0
- package/dist/no-modal.js.map +1 -0
- package/dist/no-modal.mjs +4041 -0
- package/dist/no-modal.mjs.map +1 -0
- package/dist/react.d.mts +28 -0
- package/dist/react.d.ts +28 -0
- package/dist/react.js +4033 -0
- package/dist/react.js.map +1 -0
- package/dist/react.mjs +4016 -0
- package/dist/react.mjs.map +1 -0
- package/dist/useNeroWallet-PZh940vV.d.ts +164 -0
- package/dist/useNeroWallet-awIYqM6e.d.mts +164 -0
- package/package.json +126 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/crypto-primitives.ts","../src/chains/configs.ts","../src/chains/chain-manager.ts","../src/types/index.ts","../src/core/client-key-manager.ts","../src/core/secure-storage.ts","../src/core/index.ts","../src/core/provider-types.ts","../src/core/provider.ts","../src/protocols/dkg/polynomial.ts","../src/protocols/dkg/commitments.ts","../src/protocols/dkg/share-exchange.ts","../src/protocols/dkg/dkg-client.ts","../src/transport/api-client.ts","../src/transport/websocket-client.ts","../src/protocols/signing/nonce.ts","../src/protocols/signing/partial-signature.ts","../src/protocols/signing/signing-client.ts","../src/wallet/address-derivation.ts","../src/wallet/smart-wallet.ts","../src/nero-sdk.ts","../src/aa/types.ts","../src/aa/bundler-client.ts","../src/aa/paymaster-client.ts","../src/aa/simple-account.ts"],"names":["bytesToHex","hexToBytes","utf8ToBytes","sha256","encryptWithPassword","decryptWithPassword","keccak_256","secp256k1","G","toBuffer","CURVE_ORDER","mod","generateRandomScalar","GET_ADDRESS_SELECTOR"],"mappings":"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","file":"no-modal.js","sourcesContent":["import { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex, hexToBytes, utf8ToBytes } from \"@noble/hashes/utils\";\n\nconst PBKDF2_ITERATIONS = 100000;\nconst SALT_LENGTH = 16;\nconst IV_LENGTH = 12;\nconst KEY_LENGTH = 256;\n\nfunction getSubtleCrypto(): SubtleCrypto {\n\tif (typeof globalThis.crypto?.subtle !== \"undefined\") {\n\t\treturn globalThis.crypto.subtle;\n\t}\n\tthrow new Error(\"WebCrypto API not available in this environment\");\n}\n\nfunction getRandomValues(length: number): Uint8Array {\n\tconst buffer = new Uint8Array(length);\n\tif (typeof globalThis.crypto?.getRandomValues !== \"undefined\") {\n\t\tglobalThis.crypto.getRandomValues(buffer);\n\t\treturn buffer;\n\t}\n\tthrow new Error(\"Secure random not available in this environment\");\n}\n\nfunction toBuffer(data: Uint8Array): ArrayBuffer {\n\treturn data.buffer.slice(\n\t\tdata.byteOffset,\n\t\tdata.byteOffset + data.byteLength,\n\t) as ArrayBuffer;\n}\n\nexport async function deriveKeyFromPassword(\n\tpassword: string,\n\tsalt: Uint8Array,\n): Promise<CryptoKey> {\n\tconst subtle = getSubtleCrypto();\n\n\tconst passwordKey = await subtle.importKey(\n\t\t\"raw\",\n\t\ttoBuffer(utf8ToBytes(password)),\n\t\t\"PBKDF2\",\n\t\tfalse,\n\t\t[\"deriveKey\"],\n\t);\n\n\treturn subtle.deriveKey(\n\t\t{\n\t\t\tname: \"PBKDF2\",\n\t\t\tsalt: toBuffer(salt),\n\t\t\titerations: PBKDF2_ITERATIONS,\n\t\t\thash: \"SHA-256\",\n\t\t},\n\t\tpasswordKey,\n\t\t{ name: \"AES-GCM\", length: KEY_LENGTH },\n\t\tfalse,\n\t\t[\"encrypt\", \"decrypt\"],\n\t);\n}\n\nexport async function deriveKeyFromDeviceInfo(\n\tdeviceId: string,\n\tuserId: string,\n): Promise<CryptoKey> {\n\tconst combined = `${deviceId}:${userId}`;\n\tconst hash = sha256(utf8ToBytes(combined));\n\n\tconst subtle = getSubtleCrypto();\n\treturn subtle.importKey(\n\t\t\"raw\",\n\t\ttoBuffer(hash),\n\t\t{ name: \"AES-GCM\", length: KEY_LENGTH },\n\t\tfalse,\n\t\t[\"encrypt\", \"decrypt\"],\n\t);\n}\n\nexport interface EncryptionResult {\n\tciphertext: string;\n\tiv: string;\n\tsalt: string;\n}\n\nexport async function encryptWithPassword(\n\tplaintext: string,\n\tpassword: string,\n): Promise<EncryptionResult> {\n\tconst subtle = getSubtleCrypto();\n\tconst salt = getRandomValues(SALT_LENGTH);\n\tconst iv = getRandomValues(IV_LENGTH);\n\n\tconst key = await deriveKeyFromPassword(password, salt);\n\n\tconst ciphertext = await subtle.encrypt(\n\t\t{ name: \"AES-GCM\", iv: toBuffer(iv) },\n\t\tkey,\n\t\ttoBuffer(utf8ToBytes(plaintext)),\n\t);\n\n\treturn {\n\t\tciphertext: bytesToHex(new Uint8Array(ciphertext)),\n\t\tiv: bytesToHex(iv),\n\t\tsalt: bytesToHex(salt),\n\t};\n}\n\nexport async function decryptWithPassword(\n\tencrypted: EncryptionResult,\n\tpassword: string,\n): Promise<string> {\n\tconst subtle = getSubtleCrypto();\n\tconst salt = hexToBytes(encrypted.salt);\n\tconst iv = hexToBytes(encrypted.iv);\n\tconst ciphertext = hexToBytes(encrypted.ciphertext);\n\n\tconst key = await deriveKeyFromPassword(password, salt);\n\n\tconst plaintext = await subtle.decrypt(\n\t\t{ name: \"AES-GCM\", iv: toBuffer(iv) },\n\t\tkey,\n\t\ttoBuffer(ciphertext),\n\t);\n\n\treturn new TextDecoder().decode(plaintext);\n}\n\nexport async function encryptWithKey(\n\tplaintext: string,\n\tkey: CryptoKey,\n): Promise<{ ciphertext: string; iv: string }> {\n\tconst subtle = getSubtleCrypto();\n\tconst iv = getRandomValues(IV_LENGTH);\n\n\tconst ciphertext = await subtle.encrypt(\n\t\t{ name: \"AES-GCM\", iv: toBuffer(iv) },\n\t\tkey,\n\t\ttoBuffer(utf8ToBytes(plaintext)),\n\t);\n\n\treturn {\n\t\tciphertext: bytesToHex(new Uint8Array(ciphertext)),\n\t\tiv: bytesToHex(iv),\n\t};\n}\n\nexport async function decryptWithKey(\n\tciphertext: string,\n\tiv: string,\n\tkey: CryptoKey,\n): Promise<string> {\n\tconst subtle = getSubtleCrypto();\n\n\tconst plaintext = await subtle.decrypt(\n\t\t{ name: \"AES-GCM\", iv: toBuffer(hexToBytes(iv)) },\n\t\tkey,\n\t\ttoBuffer(hexToBytes(ciphertext)),\n\t);\n\n\treturn new TextDecoder().decode(plaintext);\n}\n\nexport function generateRandomBytes(length: number): Uint8Array {\n\treturn getRandomValues(length);\n}\n\nexport function generateRandomHex(length: number): string {\n\treturn bytesToHex(getRandomValues(length));\n}\n\nexport function hashSha256(data: string | Uint8Array): string {\n\tconst input = typeof data === \"string\" ? utf8ToBytes(data) : data;\n\treturn bytesToHex(sha256(input));\n}\n\nexport function computeCommitment(value: string, blinding: string): string {\n\tconst combined = `${value}:${blinding}`;\n\treturn hashSha256(combined);\n}\n\nexport { bytesToHex, hexToBytes, utf8ToBytes };\n","import type { ChainConfig } from \"./types\";\n\nexport const NERO_TESTNET: ChainConfig = {\n\tchainId: 689,\n\tchainName: \"nero-testnet\",\n\tdisplayName: \"NERO Testnet\",\n\tnativeCurrency: {\n\t\tname: \"NERO\",\n\t\tsymbol: \"NERO\",\n\t\tdecimals: 18,\n\t},\n\trpcUrls: [\"https://testnet.nerochain.io\"],\n\tblockExplorerUrls: [\"https://testnetscan.nerochain.io\"],\n\tisTestnet: true,\n\tbundlerUrl: \"https://bundler.testnet.nerochain.io\",\n\tpaymasterUrl: \"https://paymaster.testnet.nerochain.io\",\n\tentryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n\tsimpleAccountFactoryAddress: \"0x9406Cc6185a346906296840746125a0E44976454\",\n};\n\nexport const NERO_MAINNET: ChainConfig = {\n\tchainId: 1689,\n\tchainName: \"nero-mainnet\",\n\tdisplayName: \"NERO Mainnet\",\n\tnativeCurrency: {\n\t\tname: \"NERO\",\n\t\tsymbol: \"NERO\",\n\t\tdecimals: 18,\n\t},\n\trpcUrls: [\"https://rpc.nerochain.io\"],\n\tblockExplorerUrls: [\"https://scan.nerochain.io\"],\n\tisTestnet: false,\n\tbundlerUrl: \"https://bundler.nerochain.io\",\n\tpaymasterUrl: \"https://paymaster.nerochain.io\",\n\tentryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n\tsimpleAccountFactoryAddress: \"0x9406Cc6185a346906296840746125a0E44976454\",\n};\n\nexport const ETHEREUM_MAINNET: ChainConfig = {\n\tchainId: 1,\n\tchainName: \"ethereum\",\n\tdisplayName: \"Ethereum\",\n\tnativeCurrency: {\n\t\tname: \"Ether\",\n\t\tsymbol: \"ETH\",\n\t\tdecimals: 18,\n\t},\n\trpcUrls: [\"https://eth.llamarpc.com\", \"https://rpc.ankr.com/eth\"],\n\tblockExplorerUrls: [\"https://etherscan.io\"],\n\tisTestnet: false,\n\tentryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n};\n\nexport const ETHEREUM_SEPOLIA: ChainConfig = {\n\tchainId: 11155111,\n\tchainName: \"sepolia\",\n\tdisplayName: \"Sepolia Testnet\",\n\tnativeCurrency: {\n\t\tname: \"Sepolia Ether\",\n\t\tsymbol: \"ETH\",\n\t\tdecimals: 18,\n\t},\n\trpcUrls: [\"https://rpc.sepolia.org\", \"https://rpc.ankr.com/eth_sepolia\"],\n\tblockExplorerUrls: [\"https://sepolia.etherscan.io\"],\n\tisTestnet: true,\n\tentryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n};\n\nexport const POLYGON_MAINNET: ChainConfig = {\n\tchainId: 137,\n\tchainName: \"polygon\",\n\tdisplayName: \"Polygon\",\n\tnativeCurrency: {\n\t\tname: \"MATIC\",\n\t\tsymbol: \"MATIC\",\n\t\tdecimals: 18,\n\t},\n\trpcUrls: [\"https://polygon-rpc.com\", \"https://rpc.ankr.com/polygon\"],\n\tblockExplorerUrls: [\"https://polygonscan.com\"],\n\tisTestnet: false,\n\tentryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n};\n\nexport const ARBITRUM_ONE: ChainConfig = {\n\tchainId: 42161,\n\tchainName: \"arbitrum\",\n\tdisplayName: \"Arbitrum One\",\n\tnativeCurrency: {\n\t\tname: \"Ether\",\n\t\tsymbol: \"ETH\",\n\t\tdecimals: 18,\n\t},\n\trpcUrls: [\"https://arb1.arbitrum.io/rpc\", \"https://rpc.ankr.com/arbitrum\"],\n\tblockExplorerUrls: [\"https://arbiscan.io\"],\n\tisTestnet: false,\n\tentryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n};\n\nexport const BASE_MAINNET: ChainConfig = {\n\tchainId: 8453,\n\tchainName: \"base\",\n\tdisplayName: \"Base\",\n\tnativeCurrency: {\n\t\tname: \"Ether\",\n\t\tsymbol: \"ETH\",\n\t\tdecimals: 18,\n\t},\n\trpcUrls: [\"https://mainnet.base.org\", \"https://base.llamarpc.com\"],\n\tblockExplorerUrls: [\"https://basescan.org\"],\n\tisTestnet: false,\n\tentryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n};\n\nexport const BUILTIN_CHAINS: Map<number, ChainConfig> = new Map([\n\t[NERO_TESTNET.chainId, NERO_TESTNET],\n\t[NERO_MAINNET.chainId, NERO_MAINNET],\n\t[ETHEREUM_MAINNET.chainId, ETHEREUM_MAINNET],\n\t[ETHEREUM_SEPOLIA.chainId, ETHEREUM_SEPOLIA],\n\t[POLYGON_MAINNET.chainId, POLYGON_MAINNET],\n\t[ARBITRUM_ONE.chainId, ARBITRUM_ONE],\n\t[BASE_MAINNET.chainId, BASE_MAINNET],\n]);\n\nexport function getChainConfig(chainId: number): ChainConfig | undefined {\n\treturn BUILTIN_CHAINS.get(chainId);\n}\n\nexport function getAllChains(): ChainConfig[] {\n\treturn Array.from(BUILTIN_CHAINS.values());\n}\n\nexport function getTestnetChains(): ChainConfig[] {\n\treturn getAllChains().filter((c) => c.isTestnet);\n}\n\nexport function getMainnetChains(): ChainConfig[] {\n\treturn getAllChains().filter((c) => !c.isTestnet);\n}\n","import { BUILTIN_CHAINS, getChainConfig } from \"./configs\";\nimport type { ChainConfig } from \"./types\";\n\ntype ChainChangeListener = (chainId: number, config: ChainConfig) => void;\n\nexport class ChainManager {\n\tprivate currentChainId: number;\n\tprivate customChains: Map<number, ChainConfig> = new Map();\n\tprivate listeners: Set<ChainChangeListener> = new Set();\n\tprivate rpcConnections: Map<number, RpcConnection> = new Map();\n\n\tconstructor(initialChainId = 689) {\n\t\tthis.currentChainId = initialChainId;\n\t}\n\n\tget chainId(): number {\n\t\treturn this.currentChainId;\n\t}\n\n\tget chainConfig(): ChainConfig | undefined {\n\t\treturn this.getConfig(this.currentChainId);\n\t}\n\n\tgetConfig(chainId: number): ChainConfig | undefined {\n\t\treturn getChainConfig(chainId) ?? this.customChains.get(chainId);\n\t}\n\n\tgetSupportedChains(): ChainConfig[] {\n\t\tconst builtins = Array.from(BUILTIN_CHAINS.values());\n\t\tconst custom = Array.from(this.customChains.values());\n\t\treturn [...builtins, ...custom];\n\t}\n\n\tgetSupportedChainIds(): number[] {\n\t\treturn this.getSupportedChains().map((c) => c.chainId);\n\t}\n\n\tisChainSupported(chainId: number): boolean {\n\t\treturn this.getConfig(chainId) !== undefined;\n\t}\n\n\taddChain(config: ChainConfig): void {\n\t\tthis.customChains.set(config.chainId, config);\n\t}\n\n\tremoveChain(chainId: number): boolean {\n\t\tif (BUILTIN_CHAINS.has(chainId)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.customChains.delete(chainId);\n\t}\n\n\tasync switchChain(chainId: number): Promise<ChainConfig> {\n\t\tconst config = this.getConfig(chainId);\n\t\tif (!config) {\n\t\t\tthrow new Error(`Chain ${chainId} is not supported`);\n\t\t}\n\n\t\tconst previousChainId = this.currentChainId;\n\t\tthis.currentChainId = chainId;\n\n\t\tif (previousChainId !== chainId) {\n\t\t\tthis.notifyListeners(chainId, config);\n\t\t}\n\n\t\treturn config;\n\t}\n\n\tonChainChange(listener: ChainChangeListener): () => void {\n\t\tthis.listeners.add(listener);\n\t\treturn () => this.listeners.delete(listener);\n\t}\n\n\tprivate notifyListeners(chainId: number, config: ChainConfig): void {\n\t\tfor (const listener of this.listeners) {\n\t\t\ttry {\n\t\t\t\tlistener(chainId, config);\n\t\t\t} catch {\n\t\t\t\t// Ignore listener errors\n\t\t\t}\n\t\t}\n\t}\n\n\tgetRpcConnection(chainId?: number): RpcConnection {\n\t\tconst targetChainId = chainId ?? this.currentChainId;\n\n\t\tlet connection = this.rpcConnections.get(targetChainId);\n\t\tif (!connection) {\n\t\t\tconst config = this.getConfig(targetChainId);\n\t\t\tif (!config) {\n\t\t\t\tthrow new Error(`Chain ${targetChainId} is not supported`);\n\t\t\t}\n\t\t\tconnection = new RpcConnection(config);\n\t\t\tthis.rpcConnections.set(targetChainId, connection);\n\t\t}\n\n\t\treturn connection;\n\t}\n\n\tgetTestnets(): ChainConfig[] {\n\t\treturn this.getSupportedChains().filter((c) => c.isTestnet);\n\t}\n\n\tgetMainnets(): ChainConfig[] {\n\t\treturn this.getSupportedChains().filter((c) => !c.isTestnet);\n\t}\n}\n\nexport class RpcConnection {\n\tprivate config: ChainConfig;\n\tprivate currentRpcIndex = 0;\n\n\tconstructor(config: ChainConfig) {\n\t\tthis.config = config;\n\t}\n\n\tget chainId(): number {\n\t\treturn this.config.chainId;\n\t}\n\n\tget rpcUrl(): string {\n\t\treturn this.config.rpcUrls[this.currentRpcIndex];\n\t}\n\n\tasync call<T>(method: string, params: unknown[] = []): Promise<T> {\n\t\tconst maxRetries = this.config.rpcUrls.length;\n\t\tlet lastError: Error | null = null;\n\n\t\tfor (let attempt = 0; attempt < maxRetries; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn await this.executeCall<T>(method, params);\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error;\n\t\t\t\tthis.rotateRpc();\n\t\t\t}\n\t\t}\n\n\t\tthrow lastError ?? new Error(\"RPC call failed\");\n\t}\n\n\tprivate async executeCall<T>(method: string, params: unknown[]): Promise<T> {\n\t\tconst response = await fetch(this.rpcUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid: Date.now(),\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t}),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`RPC request failed: ${response.status}`);\n\t\t}\n\n\t\tconst data = await response.json();\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(data.error.message ?? \"RPC error\");\n\t\t}\n\n\t\treturn data.result;\n\t}\n\n\tprivate rotateRpc(): void {\n\t\tthis.currentRpcIndex =\n\t\t\t(this.currentRpcIndex + 1) % this.config.rpcUrls.length;\n\t}\n\n\tasync getBlockNumber(): Promise<bigint> {\n\t\tconst result = await this.call<string>(\"eth_blockNumber\");\n\t\treturn BigInt(result);\n\t}\n\n\tasync getBalance(address: string): Promise<bigint> {\n\t\tconst result = await this.call<string>(\"eth_getBalance\", [\n\t\t\taddress,\n\t\t\t\"latest\",\n\t\t]);\n\t\treturn BigInt(result);\n\t}\n\n\tasync getTransactionCount(address: string): Promise<bigint> {\n\t\tconst result = await this.call<string>(\"eth_getTransactionCount\", [\n\t\t\taddress,\n\t\t\t\"latest\",\n\t\t]);\n\t\treturn BigInt(result);\n\t}\n\n\tasync getGasPrice(): Promise<bigint> {\n\t\tconst result = await this.call<string>(\"eth_gasPrice\");\n\t\treturn BigInt(result);\n\t}\n\n\tasync estimateGas(tx: {\n\t\tfrom?: string;\n\t\tto?: string;\n\t\tvalue?: string;\n\t\tdata?: string;\n\t}): Promise<bigint> {\n\t\tconst result = await this.call<string>(\"eth_estimateGas\", [tx]);\n\t\treturn BigInt(result);\n\t}\n\n\tasync getCode(address: string): Promise<string> {\n\t\treturn this.call<string>(\"eth_getCode\", [address, \"latest\"]);\n\t}\n\n\tasync sendRawTransaction(signedTx: string): Promise<string> {\n\t\treturn this.call<string>(\"eth_sendRawTransaction\", [signedTx]);\n\t}\n\n\tasync getTransactionReceipt(\n\t\thash: string,\n\t): Promise<TransactionReceipt | null> {\n\t\treturn this.call<TransactionReceipt | null>(\"eth_getTransactionReceipt\", [\n\t\t\thash,\n\t\t]);\n\t}\n\n\tasync waitForTransaction(\n\t\thash: string,\n\t\tconfirmations = 1,\n\t\ttimeout = 60000,\n\t): Promise<TransactionReceipt> {\n\t\tconst startTime = Date.now();\n\n\t\twhile (Date.now() - startTime < timeout) {\n\t\t\tconst receipt = await this.getTransactionReceipt(hash);\n\t\t\tif (receipt?.blockNumber) {\n\t\t\t\tconst currentBlock = await this.getBlockNumber();\n\t\t\t\tconst txBlock = BigInt(receipt.blockNumber);\n\t\t\t\tif (currentBlock - txBlock >= BigInt(confirmations - 1)) {\n\t\t\t\t\treturn receipt;\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 2000));\n\t\t}\n\n\t\tthrow new Error(`Transaction ${hash} not confirmed within timeout`);\n\t}\n}\n\nexport interface TransactionReceipt {\n\ttransactionHash: string;\n\ttransactionIndex: string;\n\tblockHash: string;\n\tblockNumber: string;\n\tfrom: string;\n\tto: string | null;\n\tcumulativeGasUsed: string;\n\tgasUsed: string;\n\tcontractAddress: string | null;\n\tlogs: Array<{\n\t\taddress: string;\n\t\ttopics: string[];\n\t\tdata: string;\n\t\tblockNumber: string;\n\t\ttransactionHash: string;\n\t\ttransactionIndex: string;\n\t\tblockHash: string;\n\t\tlogIndex: string;\n\t\tremoved: boolean;\n\t}>;\n\tlogsBloom: string;\n\tstatus: string;\n\teffectiveGasPrice?: string;\n\ttype?: string;\n}\n\nexport function createChainManager(initialChainId?: number): ChainManager {\n\treturn new ChainManager(initialChainId);\n}\n","export interface KeyShare {\n\tpartyId: number;\n\tprivateShare: string;\n\tpublicShare: string;\n\tcommitment: string;\n\tthreshold: number;\n\ttotalParties: number;\n\tprotocolVersion: string;\n}\n\nexport interface EncryptedKeyShare {\n\tciphertext: string;\n\tiv: string;\n\tsalt: string;\n\tversion: number;\n}\n\nexport interface DKGCommitment {\n\tpartyId: number;\n\tcommitments: string[];\n\tpublicKey: string;\n}\n\nexport interface DKGShare {\n\tfromPartyId: number;\n\ttoPartyId: number;\n\tencryptedShare: string;\n}\n\nexport interface DKGResult {\n\tsuccess: boolean;\n\tpublicKey?: string;\n\twalletAddress?: string;\n\tpartyId?: number;\n\terror?: string;\n}\n\nexport interface SigningRequest {\n\tmessageHash: string;\n\tmessageType: \"transaction\" | \"message\" | \"typed_data\";\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface PartialSignature {\n\tpartyId: number;\n\tr: string;\n\ts: string;\n\tpublicShare: string;\n\tnonceCommitment: string;\n}\n\nexport interface Signature {\n\tr: string;\n\ts: string;\n\tv: number;\n\tfullSignature: string;\n}\n\nexport interface SigningResult {\n\tsuccess: boolean;\n\tsignature?: Signature;\n\terror?: string;\n}\n\nexport type DKGRound =\n\t| \"commitment\"\n\t| \"share_exchange\"\n\t| \"verification\"\n\t| \"complete\";\n\nexport interface DKGSessionState {\n\tsessionId: string;\n\tround: DKGRound;\n\tpartyId: number;\n\tparticipantCount: number;\n\tthreshold: number;\n\tcommitments: Map<number, DKGCommitment>;\n\treceivedShares: Map<number, DKGShare>;\n\tpolynomial?: bigint[];\n\tprivateShare?: bigint;\n\tpublicKey?: string;\n}\n\nexport type SigningRound =\n\t| \"nonce_commitment\"\n\t| \"nonce_exchange\"\n\t| \"partial_signature\"\n\t| \"complete\";\n\nexport interface SigningSessionState {\n\tsessionId: string;\n\tround: SigningRound;\n\tmessageHash: string;\n\tparticipatingParties: number[];\n\tnonceCommitments: Map<number, string>;\n\tpartialSignatures: Map<number, PartialSignature>;\n}\n\nexport interface UIConfig {\n\tappName: string;\n\tlogoLight?: string;\n\tlogoDark?: string;\n\tmode?: \"light\" | \"dark\" | \"auto\";\n\ttheme?: {\n\t\tprimary?: string;\n\t\tsecondary?: string;\n\t\tbackground?: string;\n\t\ttext?: string;\n\t\tborder?: string;\n\t};\n\tdefaultLanguage?: string;\n}\n\nexport interface SDKConfig {\n\tbackendUrl: string;\n\tchainId?: number;\n\twsUrl?: string;\n\tstoragePrefix?: string;\n\tautoConnect?: boolean;\n\tuiConfig?: UIConfig;\n\tsessionTime?: number;\n\tweb3AuthClientId?: string;\n}\n\nexport interface AuthTokens {\n\taccessToken: string;\n\trefreshToken: string;\n\texpiresAt: number;\n}\n\nexport interface User {\n\tid: string;\n\temail?: string;\n\tdisplayName?: string;\n\tprofilePicture?: string;\n\twalletAddress?: string;\n\tcreatedAt: Date;\n}\n\nexport interface DeviceFingerprint {\n\tuserAgent: string;\n\tipAddress?: string;\n\tadditionalData?: string;\n}\n\nexport interface WalletInfo {\n\teoaAddress: string;\n\tsmartWalletAddress?: string;\n\tpublicKey: string;\n\tchainId: number;\n}\n\nexport type ProtocolMessageType =\n\t| \"dkg:commitment\"\n\t| \"dkg:share\"\n\t| \"dkg:verification\"\n\t| \"dkg:complete\"\n\t| \"signing:nonce_commitment\"\n\t| \"signing:nonce\"\n\t| \"signing:partial_signature\"\n\t| \"signing:complete\"\n\t| \"error\";\n\nexport interface ProtocolMessage {\n\ttype: ProtocolMessageType;\n\tsessionId: string;\n\tfromPartyId: number;\n\ttoPartyId?: number;\n\tpayload: unknown;\n\ttimestamp: number;\n\tsignature?: string;\n}\n\nexport interface StorageAdapter {\n\tget(key: string): Promise<string | null>;\n\tset(key: string, value: string): Promise<void>;\n\tdelete(key: string): Promise<void>;\n\tclear(): Promise<void>;\n}\n\nexport class SDKError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic code: string,\n\t\tpublic statusCode?: number,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"SDKError\";\n\t}\n}\n","import type { KeyShare, WalletInfo } from \"../types\";\nimport { SDKError } from \"../types\";\nimport { generateRandomHex, hashSha256 } from \"./crypto-primitives\";\nimport { type SecureKeyStorage, createSecureStorage } from \"./secure-storage\";\n\nexport interface KeyManagerConfig {\n\tstoragePrefix?: string;\n}\n\nexport class ClientKeyManager {\n\tprivate storage: SecureKeyStorage;\n\tprivate currentUserId: string | null = null;\n\tprivate cachedKeyShare: KeyShare | null = null;\n\tprivate cachedPartyShares: Map<number, string> | null = null;\n\n\tconstructor(deviceKey: string, config: KeyManagerConfig = {}) {\n\t\tthis.storage = createSecureStorage(\n\t\t\tdeviceKey,\n\t\t\tconfig.storagePrefix ?? \"nero\",\n\t\t);\n\t}\n\n\tasync initialize(userId: string): Promise<void> {\n\t\tthis.currentUserId = userId;\n\t\tthis.cachedKeyShare = await this.storage.getKeyShare(userId);\n\t}\n\n\tasync hasKeyShare(): Promise<boolean> {\n\t\tif (!this.currentUserId) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.storage.hasKeyShare(this.currentUserId);\n\t}\n\n\tasync getKeyShare(): Promise<KeyShare | null> {\n\t\tif (this.cachedKeyShare) {\n\t\t\treturn this.cachedKeyShare;\n\t\t}\n\n\t\tif (!this.currentUserId) {\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.cachedKeyShare = await this.storage.getKeyShare(this.currentUserId);\n\t\treturn this.cachedKeyShare;\n\t}\n\n\tasync storeKeyShare(keyShare: KeyShare): Promise<void> {\n\t\tif (!this.currentUserId) {\n\t\t\tthrow new SDKError(\"User not initialized\", \"USER_NOT_INITIALIZED\");\n\t\t}\n\n\t\tawait this.storage.storeKeyShare(this.currentUserId, keyShare);\n\t\tthis.cachedKeyShare = keyShare;\n\t}\n\n\tasync getPartyPublicShares(): Promise<Map<number, string> | null> {\n\t\tif (this.cachedPartyShares) {\n\t\t\treturn this.cachedPartyShares;\n\t\t}\n\n\t\tif (!this.currentUserId) {\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.cachedPartyShares = await this.storage.getPartyPublicShares(\n\t\t\tthis.currentUserId,\n\t\t);\n\t\treturn this.cachedPartyShares;\n\t}\n\n\tasync storePartyPublicShares(shares: Map<number, string>): Promise<void> {\n\t\tif (!this.currentUserId) {\n\t\t\tthrow new SDKError(\"User not initialized\", \"USER_NOT_INITIALIZED\");\n\t\t}\n\n\t\tawait this.storage.storePartyPublicShares(this.currentUserId, shares);\n\t\tthis.cachedPartyShares = shares;\n\t}\n\n\tasync deleteKeyShare(): Promise<void> {\n\t\tif (!this.currentUserId) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.storage.deleteKeyShare(this.currentUserId);\n\t\tthis.cachedKeyShare = null;\n\t}\n\n\tasync rotateKeyShare(newKeyShare: KeyShare): Promise<void> {\n\t\tif (!this.currentUserId) {\n\t\t\tthrow new SDKError(\"User not initialized\", \"USER_NOT_INITIALIZED\");\n\t\t}\n\n\t\tconst existingShare = await this.getKeyShare();\n\t\tif (!existingShare) {\n\t\t\tthrow new SDKError(\"No existing key share to rotate\", \"NO_KEY_SHARE\");\n\t\t}\n\n\t\tif (existingShare.partyId !== newKeyShare.partyId) {\n\t\t\tthrow new SDKError(\n\t\t\t\t\"Party ID mismatch during rotation\",\n\t\t\t\t\"PARTY_ID_MISMATCH\",\n\t\t\t);\n\t\t}\n\n\t\tawait this.storeKeyShare(newKeyShare);\n\t}\n\n\tasync exportBackup(password: string): Promise<string> {\n\t\tconst keyShare = await this.getKeyShare();\n\t\tif (!keyShare) {\n\t\t\tthrow new SDKError(\"No key share to export\", \"NO_KEY_SHARE\");\n\t\t}\n\n\t\tconst { encryptWithPassword } = await import(\"./crypto-primitives\");\n\t\tconst encrypted = await encryptWithPassword(\n\t\t\tJSON.stringify(keyShare),\n\t\t\tpassword,\n\t\t);\n\n\t\tconst backup = {\n\t\t\tversion: 1,\n\t\t\ttype: \"nero-mpc-backup\",\n\t\t\tdata: encrypted,\n\t\t\tcreatedAt: Date.now(),\n\t\t};\n\n\t\treturn btoa(JSON.stringify(backup));\n\t}\n\n\tasync importBackup(\n\t\tbackupString: string,\n\t\tpassword: string,\n\t): Promise<KeyShare> {\n\t\tconst backup = JSON.parse(atob(backupString));\n\n\t\tif (backup.type !== \"nero-mpc-backup\") {\n\t\t\tthrow new SDKError(\"Invalid backup format\", \"INVALID_BACKUP\");\n\t\t}\n\n\t\tif (backup.version !== 1) {\n\t\t\tthrow new SDKError(\n\t\t\t\t`Unsupported backup version: ${backup.version}`,\n\t\t\t\t\"UNSUPPORTED_VERSION\",\n\t\t\t);\n\t\t}\n\n\t\tconst { decryptWithPassword } = await import(\"./crypto-primitives\");\n\t\tconst plaintext = await decryptWithPassword(backup.data, password);\n\t\tconst keyShare = JSON.parse(plaintext) as KeyShare;\n\n\t\treturn keyShare;\n\t}\n\n\tgetWalletInfo(publicKey: string, chainId: number): WalletInfo {\n\t\tconst eoaAddress = this.deriveEOAAddress(publicKey);\n\n\t\treturn {\n\t\t\teoaAddress,\n\t\t\tpublicKey,\n\t\t\tchainId,\n\t\t};\n\t}\n\n\tprivate deriveEOAAddress(publicKey: string): string {\n\t\tlet pubKeyBytes: Uint8Array;\n\t\tconst pubKeyHex = publicKey.startsWith(\"0x\")\n\t\t\t? publicKey.slice(2)\n\t\t\t: publicKey;\n\n\t\tif (pubKeyHex.length === 130) {\n\t\t\tpubKeyBytes = hexToBytes(pubKeyHex.slice(2));\n\t\t} else if (pubKeyHex.length === 128) {\n\t\t\tpubKeyBytes = hexToBytes(pubKeyHex);\n\t\t} else {\n\t\t\tthrow new SDKError(\"Invalid public key format\", \"INVALID_PUBLIC_KEY\");\n\t\t}\n\n\t\tconst hash = keccak256(pubKeyBytes);\n\t\tconst addressBytes = hash.slice(-20);\n\t\treturn `0x${bytesToHex(addressBytes)}`;\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tawait this.storage.clearAll();\n\t\tthis.currentUserId = null;\n\t\tthis.cachedKeyShare = null;\n\t\tthis.cachedPartyShares = null;\n\t}\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n\tconst bytes = new Uint8Array(hex.length / 2);\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tbytes[i] = Number.parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n\t}\n\treturn bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n\treturn Array.from(bytes)\n\t\t.map((b) => b.toString(16).padStart(2, \"0\"))\n\t\t.join(\"\");\n}\n\nfunction keccak256(data: Uint8Array): Uint8Array {\n\tconst { keccak_256 } = require(\"@noble/hashes/sha3\");\n\treturn keccak_256(data);\n}\n\nexport function generateDeviceKey(): string {\n\treturn generateRandomHex(32);\n}\n\nexport function deriveDeviceKey(\n\tuserAgent: string,\n\tuserId: string,\n\tadditionalEntropy?: string,\n): string {\n\tconst combined = [userAgent, userId, additionalEntropy ?? \"\"].join(\":\");\n\treturn hashSha256(combined);\n}\n","import type { EncryptedKeyShare, KeyShare, StorageAdapter } from \"../types\";\nimport {\n\ttype EncryptionResult,\n\tdecryptWithPassword,\n\tencryptWithPassword,\n\thashSha256,\n} from \"./crypto-primitives\";\n\nconst DB_NAME = \"nero-mpc-sdk\";\nconst DB_VERSION = 1;\nconst STORE_NAME = \"encrypted-data\";\n\ninterface StoredItem {\n\tkey: string;\n\tvalue: string;\n\tcreatedAt: number;\n\tupdatedAt: number;\n}\n\nfunction openDatabase(): Promise<IDBDatabase> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst request = indexedDB.open(DB_NAME, DB_VERSION);\n\n\t\trequest.onerror = () => {\n\t\t\treject(new Error(`Failed to open IndexedDB: ${request.error?.message}`));\n\t\t};\n\n\t\trequest.onsuccess = () => {\n\t\t\tresolve(request.result);\n\t\t};\n\n\t\trequest.onupgradeneeded = (event) => {\n\t\t\tconst db = (event.target as IDBOpenDBRequest).result;\n\t\t\tif (!db.objectStoreNames.contains(STORE_NAME)) {\n\t\t\t\tdb.createObjectStore(STORE_NAME, { keyPath: \"key\" });\n\t\t\t}\n\t\t};\n\t});\n}\n\nexport class IndexedDBStorage implements StorageAdapter {\n\tprivate prefix: string;\n\n\tconstructor(prefix = \"nero\") {\n\t\tthis.prefix = prefix;\n\t}\n\n\tprivate prefixKey(key: string): string {\n\t\treturn `${this.prefix}:${key}`;\n\t}\n\n\tasync get(key: string): Promise<string | null> {\n\t\tconst db = await openDatabase();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst transaction = db.transaction(STORE_NAME, \"readonly\");\n\t\t\tconst store = transaction.objectStore(STORE_NAME);\n\t\t\tconst request = store.get(this.prefixKey(key));\n\n\t\t\trequest.onerror = () => reject(request.error);\n\t\t\trequest.onsuccess = () => {\n\t\t\t\tconst item = request.result as StoredItem | undefined;\n\t\t\t\tresolve(item?.value ?? null);\n\t\t\t};\n\t\t});\n\t}\n\n\tasync set(key: string, value: string): Promise<void> {\n\t\tconst db = await openDatabase();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst transaction = db.transaction(STORE_NAME, \"readwrite\");\n\t\t\tconst store = transaction.objectStore(STORE_NAME);\n\t\t\tconst now = Date.now();\n\t\t\tconst item: StoredItem = {\n\t\t\t\tkey: this.prefixKey(key),\n\t\t\t\tvalue,\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now,\n\t\t\t};\n\t\t\tconst request = store.put(item);\n\n\t\t\trequest.onerror = () => reject(request.error);\n\t\t\trequest.onsuccess = () => resolve();\n\t\t});\n\t}\n\n\tasync delete(key: string): Promise<void> {\n\t\tconst db = await openDatabase();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst transaction = db.transaction(STORE_NAME, \"readwrite\");\n\t\t\tconst store = transaction.objectStore(STORE_NAME);\n\t\t\tconst request = store.delete(this.prefixKey(key));\n\n\t\t\trequest.onerror = () => reject(request.error);\n\t\t\trequest.onsuccess = () => resolve();\n\t\t});\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tconst db = await openDatabase();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst transaction = db.transaction(STORE_NAME, \"readwrite\");\n\t\t\tconst store = transaction.objectStore(STORE_NAME);\n\n\t\t\tconst cursorRequest = store.openCursor();\n\t\t\tcursorRequest.onerror = () => reject(cursorRequest.error);\n\n\t\t\tcursorRequest.onsuccess = (event) => {\n\t\t\t\tconst cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;\n\t\t\t\tif (cursor) {\n\t\t\t\t\tconst key = cursor.key as string;\n\t\t\t\t\tif (key.startsWith(`${this.prefix}:`)) {\n\t\t\t\t\t\tcursor.delete();\n\t\t\t\t\t}\n\t\t\t\t\tcursor.continue();\n\t\t\t\t} else {\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n}\n\nexport class MemoryStorage implements StorageAdapter {\n\tprivate store = new Map<string, string>();\n\tprivate prefix: string;\n\n\tconstructor(prefix = \"nero\") {\n\t\tthis.prefix = prefix;\n\t}\n\n\tprivate prefixKey(key: string): string {\n\t\treturn `${this.prefix}:${key}`;\n\t}\n\n\tasync get(key: string): Promise<string | null> {\n\t\treturn this.store.get(this.prefixKey(key)) ?? null;\n\t}\n\n\tasync set(key: string, value: string): Promise<void> {\n\t\tthis.store.set(this.prefixKey(key), value);\n\t}\n\n\tasync delete(key: string): Promise<void> {\n\t\tthis.store.delete(this.prefixKey(key));\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tconst keysToDelete: string[] = [];\n\t\tfor (const key of this.store.keys()) {\n\t\t\tif (key.startsWith(`${this.prefix}:`)) {\n\t\t\t\tkeysToDelete.push(key);\n\t\t\t}\n\t\t}\n\t\tfor (const key of keysToDelete) {\n\t\t\tthis.store.delete(key);\n\t\t}\n\t}\n}\n\nconst ENCRYPTION_VERSION = 1;\n\nexport class SecureKeyStorage {\n\tprivate storage: StorageAdapter;\n\tprivate deviceKey: string;\n\n\tconstructor(storage: StorageAdapter, deviceKey: string) {\n\t\tthis.storage = storage;\n\t\tthis.deviceKey = deviceKey;\n\t}\n\n\tprivate getStorageKey(userId: string): string {\n\t\treturn `keyshare:${hashSha256(userId)}`;\n\t}\n\n\tprivate getPartySharesKey(userId: string): string {\n\t\treturn `partyshares:${hashSha256(userId)}`;\n\t}\n\n\tasync storeKeyShare(userId: string, keyShare: KeyShare): Promise<void> {\n\t\tconst plaintext = JSON.stringify(keyShare);\n\t\tconst encrypted = await encryptWithPassword(plaintext, this.deviceKey);\n\n\t\tconst storedData: EncryptedKeyShare = {\n\t\t\tciphertext: encrypted.ciphertext,\n\t\t\tiv: encrypted.iv,\n\t\t\tsalt: encrypted.salt,\n\t\t\tversion: ENCRYPTION_VERSION,\n\t\t};\n\n\t\tawait this.storage.set(\n\t\t\tthis.getStorageKey(userId),\n\t\t\tJSON.stringify(storedData),\n\t\t);\n\t}\n\n\tasync getKeyShare(userId: string): Promise<KeyShare | null> {\n\t\tconst stored = await this.storage.get(this.getStorageKey(userId));\n\t\tif (!stored) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst encryptedData = JSON.parse(stored) as EncryptedKeyShare;\n\n\t\tif (encryptedData.version !== ENCRYPTION_VERSION) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported encryption version: ${encryptedData.version}`,\n\t\t\t);\n\t\t}\n\n\t\tconst encrypted: EncryptionResult = {\n\t\t\tciphertext: encryptedData.ciphertext,\n\t\t\tiv: encryptedData.iv,\n\t\t\tsalt: encryptedData.salt,\n\t\t};\n\n\t\tconst plaintext = await decryptWithPassword(encrypted, this.deviceKey);\n\t\treturn JSON.parse(plaintext) as KeyShare;\n\t}\n\n\tasync hasKeyShare(userId: string): Promise<boolean> {\n\t\tconst stored = await this.storage.get(this.getStorageKey(userId));\n\t\treturn stored !== null;\n\t}\n\n\tasync deleteKeyShare(userId: string): Promise<void> {\n\t\tawait this.storage.delete(this.getStorageKey(userId));\n\t}\n\n\tasync storePartyPublicShares(\n\t\tuserId: string,\n\t\tshares: Map<number, string>,\n\t): Promise<void> {\n\t\tconst sharesArray = Array.from(shares.entries());\n\t\tconst plaintext = JSON.stringify(sharesArray);\n\t\tconst encrypted = await encryptWithPassword(plaintext, this.deviceKey);\n\n\t\tconst storedData = {\n\t\t\tciphertext: encrypted.ciphertext,\n\t\t\tiv: encrypted.iv,\n\t\t\tsalt: encrypted.salt,\n\t\t\tversion: ENCRYPTION_VERSION,\n\t\t};\n\n\t\tawait this.storage.set(\n\t\t\tthis.getPartySharesKey(userId),\n\t\t\tJSON.stringify(storedData),\n\t\t);\n\t}\n\n\tasync getPartyPublicShares(\n\t\tuserId: string,\n\t): Promise<Map<number, string> | null> {\n\t\tconst stored = await this.storage.get(this.getPartySharesKey(userId));\n\t\tif (!stored) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst encryptedData = JSON.parse(stored);\n\n\t\tif (encryptedData.version !== ENCRYPTION_VERSION) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported encryption version: ${encryptedData.version}`,\n\t\t\t);\n\t\t}\n\n\t\tconst encrypted: EncryptionResult = {\n\t\t\tciphertext: encryptedData.ciphertext,\n\t\t\tiv: encryptedData.iv,\n\t\t\tsalt: encryptedData.salt,\n\t\t};\n\n\t\tconst plaintext = await decryptWithPassword(encrypted, this.deviceKey);\n\t\tconst sharesArray = JSON.parse(plaintext) as Array<[number, string]>;\n\t\treturn new Map(sharesArray);\n\t}\n\n\tasync deletePartyPublicShares(userId: string): Promise<void> {\n\t\tawait this.storage.delete(this.getPartySharesKey(userId));\n\t}\n\n\tasync clearAll(): Promise<void> {\n\t\tawait this.storage.clear();\n\t}\n}\n\nexport function createSecureStorage(\n\tdeviceKey: string,\n\tprefix = \"nero\",\n): SecureKeyStorage {\n\tconst isIndexedDBAvailable =\n\t\ttypeof indexedDB !== \"undefined\" && indexedDB !== null;\n\n\tconst adapter = isIndexedDBAvailable\n\t\t? new IndexedDBStorage(prefix)\n\t\t: new MemoryStorage(prefix);\n\n\treturn new SecureKeyStorage(adapter, deviceKey);\n}\n","export {\n\tClientKeyManager,\n\tgenerateDeviceKey,\n\tderiveDeviceKey,\n\ttype KeyManagerConfig,\n} from \"./client-key-manager\";\n\nexport {\n\tSecureKeyStorage,\n\tIndexedDBStorage,\n\tMemoryStorage,\n\tcreateSecureStorage,\n} from \"./secure-storage\";\n\nexport {\n\tencryptWithPassword,\n\tdecryptWithPassword,\n\tencryptWithKey,\n\tdecryptWithKey,\n\tderiveKeyFromPassword,\n\tderiveKeyFromDeviceInfo,\n\tgenerateRandomBytes,\n\tgenerateRandomHex,\n\thashSha256,\n\tcomputeCommitment,\n\tbytesToHex,\n\thexToBytes,\n\tutf8ToBytes,\n\ttype EncryptionResult,\n} from \"./crypto-primitives\";\n\nexport {\n\tNeroProvider,\n\tcreateNeroProvider,\n\ttype NeroProviderConfig,\n} from \"./provider\";\n\nexport {\n\ttype EIP1193Provider,\n\ttype RequestArguments,\n\ttype ProviderRpcError,\n\ttype ProviderConnectInfo,\n\ttype ProviderMessage,\n\ttype AddEthereumChainParameter,\n\ttype WatchAssetParams,\n\ttype TransactionParams,\n\ttype TypedDataDomain,\n\ttype TypedDataField,\n\ttype TypedDataTypes,\n\ttype TypedDataMessage,\n\tEIP1193_ERROR_CODES,\n\tcreateProviderRpcError,\n} from \"./provider-types\";\n","export interface RequestArguments {\n\treadonly method: string;\n\treadonly params?: readonly unknown[] | object;\n}\n\nexport interface ProviderRpcError extends Error {\n\tcode: number;\n\tdata?: unknown;\n}\n\nexport interface ProviderConnectInfo {\n\treadonly chainId: string;\n}\n\nexport interface EIP1193Provider {\n\trequest(args: RequestArguments): Promise<unknown>;\n\ton(event: \"connect\", listener: (info: ProviderConnectInfo) => void): this;\n\ton(event: \"disconnect\", listener: (error: ProviderRpcError) => void): this;\n\ton(event: \"chainChanged\", listener: (chainId: string) => void): this;\n\ton(event: \"accountsChanged\", listener: (accounts: string[]) => void): this;\n\ton(event: \"message\", listener: (message: ProviderMessage) => void): this;\n\ton(event: string, listener: (...args: unknown[]) => void): this;\n\tremoveListener(event: string, listener: (...args: unknown[]) => void): this;\n\tremoveAllListeners(event?: string): this;\n}\n\nexport interface ProviderMessage {\n\treadonly type: string;\n\treadonly data: unknown;\n}\n\nexport interface AddEthereumChainParameter {\n\tchainId: string;\n\tchainName: string;\n\tnativeCurrency: {\n\t\tname: string;\n\t\tsymbol: string;\n\t\tdecimals: number;\n\t};\n\trpcUrls: string[];\n\tblockExplorerUrls?: string[];\n\ticonUrls?: string[];\n}\n\nexport interface WatchAssetParams {\n\ttype: \"ERC20\" | \"ERC721\" | \"ERC1155\";\n\toptions: {\n\t\taddress: string;\n\t\tsymbol?: string;\n\t\tdecimals?: number;\n\t\timage?: string;\n\t\ttokenId?: string;\n\t};\n}\n\nexport interface TransactionParams {\n\tfrom: string;\n\tto?: string;\n\tvalue?: string;\n\tgas?: string;\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n\tdata?: string;\n\tnonce?: string;\n}\n\nexport interface TypedDataDomain {\n\tname?: string;\n\tversion?: string;\n\tchainId?: number | string;\n\tverifyingContract?: string;\n\tsalt?: string;\n}\n\nexport interface TypedDataField {\n\tname: string;\n\ttype: string;\n}\n\nexport type TypedDataTypes = Record<string, TypedDataField[]>;\n\nexport interface TypedDataMessage {\n\t[key: string]: unknown;\n}\n\nexport const EIP1193_ERROR_CODES = {\n\tUSER_REJECTED: 4001,\n\tUNAUTHORIZED: 4100,\n\tUNSUPPORTED_METHOD: 4200,\n\tDISCONNECTED: 4900,\n\tCHAIN_DISCONNECTED: 4901,\n\tINVALID_PARAMS: -32602,\n\tINTERNAL_ERROR: -32603,\n\tCHAIN_NOT_ADDED: 4902,\n} as const;\n\nexport function createProviderRpcError(\n\tcode: number,\n\tmessage: string,\n\tdata?: unknown,\n): ProviderRpcError {\n\tconst error = new Error(message) as ProviderRpcError;\n\terror.code = code;\n\terror.data = data;\n\treturn error;\n}\n","import { hexToBytes, utf8ToBytes } from \"@noble/hashes/utils\";\nimport { getChainConfig } from \"../chains/configs\";\nimport type { ChainConfig } from \"../chains/types\";\nimport type {\n\tAddEthereumChainParameter,\n\tEIP1193Provider,\n\tProviderConnectInfo,\n\tProviderMessage,\n\tProviderRpcError,\n\tRequestArguments,\n\tTypedDataDomain,\n\tTypedDataMessage,\n\tTypedDataTypes,\n} from \"./provider-types\";\nimport { EIP1193_ERROR_CODES, createProviderRpcError } from \"./provider-types\";\n\ntype EventListener = (...args: unknown[]) => void;\n\nexport interface NeroProviderConfig {\n\tchainId: number;\n\tgetAccounts: () => string[];\n\tsignMessage: (message: string | Uint8Array) => Promise<string>;\n\tsignTypedData: (\n\t\tdomain: TypedDataDomain,\n\t\ttypes: TypedDataTypes,\n\t\tprimaryType: string,\n\t\tmessage: TypedDataMessage,\n\t) => Promise<string>;\n\tsendTransaction: (tx: unknown) => Promise<string>;\n\tonChainChanged?: (chainId: number) => void;\n}\n\nexport class NeroProvider implements EIP1193Provider {\n\tprivate chainId: number;\n\tprivate chainConfig: ChainConfig | undefined;\n\tprivate listeners: Map<string, Set<EventListener>> = new Map();\n\tprivate connected = false;\n\tprivate config: NeroProviderConfig;\n\tprivate customChains: Map<number, ChainConfig> = new Map();\n\n\tconstructor(config: NeroProviderConfig) {\n\t\tthis.config = config;\n\t\tthis.chainId = config.chainId;\n\t\tthis.chainConfig = getChainConfig(config.chainId);\n\t}\n\n\tget isNero(): boolean {\n\t\treturn true;\n\t}\n\n\tget isConnected(): boolean {\n\t\treturn this.connected;\n\t}\n\n\tasync request(args: RequestArguments): Promise<unknown> {\n\t\tconst { method, params } = args;\n\n\t\tswitch (method) {\n\t\t\tcase \"eth_chainId\":\n\t\t\t\treturn this.toHexChainId(this.chainId);\n\n\t\t\tcase \"net_version\":\n\t\t\t\treturn String(this.chainId);\n\n\t\t\tcase \"eth_accounts\":\n\t\t\tcase \"eth_requestAccounts\":\n\t\t\t\treturn this.handleRequestAccounts();\n\n\t\t\tcase \"eth_sign\":\n\t\t\t\treturn this.handleEthSign(params as [string, string]);\n\n\t\t\tcase \"personal_sign\":\n\t\t\t\treturn this.handlePersonalSign(params as [string, string]);\n\n\t\t\tcase \"eth_signTypedData\":\n\t\t\tcase \"eth_signTypedData_v3\":\n\t\t\tcase \"eth_signTypedData_v4\":\n\t\t\t\treturn this.handleSignTypedData(params as [string, string]);\n\n\t\t\tcase \"eth_sendTransaction\":\n\t\t\t\treturn this.handleSendTransaction(params as [unknown]);\n\n\t\t\tcase \"wallet_switchEthereumChain\":\n\t\t\t\treturn this.handleSwitchChain(params as [{ chainId: string }]);\n\n\t\t\tcase \"wallet_addEthereumChain\":\n\t\t\t\treturn this.handleAddChain(params as [AddEthereumChainParameter]);\n\n\t\t\tcase \"wallet_watchAsset\":\n\t\t\t\treturn true;\n\n\t\t\tcase \"eth_call\":\n\t\t\tcase \"eth_estimateGas\":\n\t\t\tcase \"eth_getBalance\":\n\t\t\tcase \"eth_getBlockByNumber\":\n\t\t\tcase \"eth_getBlockByHash\":\n\t\t\tcase \"eth_getTransactionByHash\":\n\t\t\tcase \"eth_getTransactionReceipt\":\n\t\t\tcase \"eth_getCode\":\n\t\t\tcase \"eth_getStorageAt\":\n\t\t\tcase \"eth_blockNumber\":\n\t\t\tcase \"eth_gasPrice\":\n\t\t\tcase \"eth_getTransactionCount\":\n\t\t\tcase \"eth_getLogs\":\n\t\t\tcase \"eth_feeHistory\":\n\t\t\tcase \"eth_maxPriorityFeePerGas\":\n\t\t\t\treturn this.forwardToRpc(method, params);\n\n\t\t\tdefault:\n\t\t\t\tthrow createProviderRpcError(\n\t\t\t\t\tEIP1193_ERROR_CODES.UNSUPPORTED_METHOD,\n\t\t\t\t\t`Method ${method} is not supported`,\n\t\t\t\t);\n\t\t}\n\t}\n\n\ton(event: \"connect\", listener: (info: ProviderConnectInfo) => void): this;\n\ton(event: \"disconnect\", listener: (error: ProviderRpcError) => void): this;\n\ton(event: \"chainChanged\", listener: (chainId: string) => void): this;\n\ton(event: \"accountsChanged\", listener: (accounts: string[]) => void): this;\n\ton(event: \"message\", listener: (message: ProviderMessage) => void): this;\n\ton(event: string, listener: (...args: unknown[]) => void): this;\n\ton(event: string, listener: (...args: any[]) => void): this {\n\t\tif (!this.listeners.has(event)) {\n\t\t\tthis.listeners.set(event, new Set());\n\t\t}\n\t\tthis.listeners.get(event)?.add(listener);\n\t\treturn this;\n\t}\n\n\tremoveListener(event: string, listener: (...args: unknown[]) => void): this {\n\t\tthis.listeners.get(event)?.delete(listener);\n\t\treturn this;\n\t}\n\n\tremoveAllListeners(event?: string): this {\n\t\tif (event) {\n\t\t\tthis.listeners.delete(event);\n\t\t} else {\n\t\t\tthis.listeners.clear();\n\t\t}\n\t\treturn this;\n\t}\n\n\temit(event: string, ...args: unknown[]): boolean {\n\t\tconst listeners = this.listeners.get(event);\n\t\tif (!listeners || listeners.size === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (const listener of listeners) {\n\t\t\ttry {\n\t\t\t\tlistener(...args);\n\t\t\t} catch {\n\t\t\t\t// Ignore listener errors\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tconnect(): void {\n\t\tif (this.connected) return;\n\t\tthis.connected = true;\n\t\tconst info: ProviderConnectInfo = {\n\t\t\tchainId: this.toHexChainId(this.chainId),\n\t\t};\n\t\tthis.emit(\"connect\", info);\n\t}\n\n\tdisconnect(error?: ProviderRpcError): void {\n\t\tif (!this.connected) return;\n\t\tthis.connected = false;\n\t\tthis.emit(\n\t\t\t\"disconnect\",\n\t\t\terror ??\n\t\t\t\tcreateProviderRpcError(\n\t\t\t\t\tEIP1193_ERROR_CODES.DISCONNECTED,\n\t\t\t\t\t\"Provider disconnected\",\n\t\t\t\t),\n\t\t);\n\t}\n\n\tasync switchChain(chainId: number): Promise<void> {\n\t\tconst config = this.getChainConfigById(chainId);\n\t\tif (!config) {\n\t\t\tthrow createProviderRpcError(\n\t\t\t\tEIP1193_ERROR_CODES.CHAIN_NOT_ADDED,\n\t\t\t\t`Chain ${chainId} has not been added`,\n\t\t\t);\n\t\t}\n\n\t\tconst previousChainId = this.chainId;\n\t\tthis.chainId = chainId;\n\t\tthis.chainConfig = config;\n\n\t\tif (previousChainId !== chainId) {\n\t\t\tthis.emit(\"chainChanged\", this.toHexChainId(chainId));\n\t\t\tthis.config.onChainChanged?.(chainId);\n\t\t}\n\t}\n\n\taddChain(config: ChainConfig): void {\n\t\tthis.customChains.set(config.chainId, config);\n\t}\n\n\tgetChainId(): number {\n\t\treturn this.chainId;\n\t}\n\n\tgetChainConfig(): ChainConfig | undefined {\n\t\treturn this.chainConfig;\n\t}\n\n\tprivate getChainConfigById(chainId: number): ChainConfig | undefined {\n\t\treturn getChainConfig(chainId) ?? this.customChains.get(chainId);\n\t}\n\n\tprivate async handleRequestAccounts(): Promise<string[]> {\n\t\tconst accounts = this.config.getAccounts();\n\t\tif (accounts.length === 0) {\n\t\t\tthrow createProviderRpcError(\n\t\t\t\tEIP1193_ERROR_CODES.UNAUTHORIZED,\n\t\t\t\t\"No accounts available\",\n\t\t\t);\n\t\t}\n\t\tif (!this.connected) {\n\t\t\tthis.connect();\n\t\t}\n\t\treturn accounts;\n\t}\n\n\tprivate async handleEthSign(params: [string, string]): Promise<string> {\n\t\tconst [address, message] = params;\n\t\tthis.validateAddress(address);\n\t\treturn this.config.signMessage(hexToBytes(message.slice(2)));\n\t}\n\n\tprivate async handlePersonalSign(params: [string, string]): Promise<string> {\n\t\tconst [message, address] = params;\n\t\tthis.validateAddress(address);\n\n\t\tconst messageBytes = message.startsWith(\"0x\")\n\t\t\t? hexToBytes(message.slice(2))\n\t\t\t: utf8ToBytes(message);\n\n\t\treturn this.config.signMessage(messageBytes);\n\t}\n\n\tprivate async handleSignTypedData(params: [string, string]): Promise<string> {\n\t\tconst [address, typedDataJson] = params;\n\t\tthis.validateAddress(address);\n\n\t\tconst typedData = JSON.parse(typedDataJson);\n\t\tconst { domain, types, primaryType, message } = typedData;\n\n\t\tconst typesWithoutEIP712Domain = { ...types };\n\t\ttypesWithoutEIP712Domain.EIP712Domain = undefined;\n\n\t\treturn this.config.signTypedData(\n\t\t\tdomain,\n\t\t\ttypesWithoutEIP712Domain,\n\t\t\tprimaryType,\n\t\t\tmessage,\n\t\t);\n\t}\n\n\tprivate async handleSendTransaction(params: [unknown]): Promise<string> {\n\t\tconst [tx] = params;\n\t\treturn this.config.sendTransaction(tx);\n\t}\n\n\tprivate async handleSwitchChain(\n\t\tparams: [{ chainId: string }],\n\t): Promise<null> {\n\t\tconst [{ chainId }] = params;\n\t\tconst numericChainId = Number.parseInt(chainId, 16);\n\t\tawait this.switchChain(numericChainId);\n\t\treturn null;\n\t}\n\n\tprivate async handleAddChain(\n\t\tparams: [AddEthereumChainParameter],\n\t): Promise<null> {\n\t\tconst [chainParams] = params;\n\t\tconst chainId = Number.parseInt(chainParams.chainId, 16);\n\n\t\tconst config: ChainConfig = {\n\t\t\tchainId,\n\t\t\tchainName: chainParams.chainName.toLowerCase().replace(/\\s+/g, \"-\"),\n\t\t\tdisplayName: chainParams.chainName,\n\t\t\tnativeCurrency: chainParams.nativeCurrency,\n\t\t\trpcUrls: chainParams.rpcUrls,\n\t\t\tblockExplorerUrls: chainParams.blockExplorerUrls,\n\t\t\tisTestnet: false,\n\t\t};\n\n\t\tthis.addChain(config);\n\t\treturn null;\n\t}\n\n\tprivate async forwardToRpc(\n\t\tmethod: string,\n\t\tparams?: readonly unknown[] | object,\n\t): Promise<unknown> {\n\t\tif (!this.chainConfig?.rpcUrls?.[0]) {\n\t\t\tthrow createProviderRpcError(\n\t\t\t\tEIP1193_ERROR_CODES.CHAIN_DISCONNECTED,\n\t\t\t\t\"No RPC URL available for current chain\",\n\t\t\t);\n\t\t}\n\n\t\tconst response = await fetch(this.chainConfig.rpcUrls[0], {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid: Date.now(),\n\t\t\t\tmethod,\n\t\t\t\tparams: params ?? [],\n\t\t\t}),\n\t\t});\n\n\t\tconst data = await response.json();\n\n\t\tif (data.error) {\n\t\t\tthrow createProviderRpcError(\n\t\t\t\tdata.error.code ?? EIP1193_ERROR_CODES.INTERNAL_ERROR,\n\t\t\t\tdata.error.message,\n\t\t\t\tdata.error.data,\n\t\t\t);\n\t\t}\n\n\t\treturn data.result;\n\t}\n\n\tprivate validateAddress(address: string): void {\n\t\tconst accounts = this.config.getAccounts();\n\t\tconst normalizedAddress = address.toLowerCase();\n\t\tconst hasAccount = accounts.some(\n\t\t\t(a) => a.toLowerCase() === normalizedAddress,\n\t\t);\n\n\t\tif (!hasAccount) {\n\t\t\tthrow createProviderRpcError(\n\t\t\t\tEIP1193_ERROR_CODES.UNAUTHORIZED,\n\t\t\t\t`Address ${address} is not authorized`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate toHexChainId(chainId: number): string {\n\t\treturn `0x${chainId.toString(16)}`;\n\t}\n}\n\nexport function createNeroProvider(config: NeroProviderConfig): NeroProvider {\n\treturn new NeroProvider(config);\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1\";\n\nconst CURVE_ORDER = secp256k1.CURVE.n;\n\nexport function generateRandomScalar(): bigint {\n\tconst bytes = new Uint8Array(32);\n\tcrypto.getRandomValues(bytes);\n\tconst scalar = bytesToBigInt(bytes) % CURVE_ORDER;\n\treturn scalar === 0n ? generateRandomScalar() : scalar;\n}\n\nexport function generatePolynomial(degree: number): bigint[] {\n\tif (degree < 0 || !Number.isInteger(degree)) {\n\t\tthrow new Error(`Invalid polynomial degree: ${degree}`);\n\t}\n\tconst coefficients: bigint[] = [];\n\tfor (let i = 0; i <= degree; i++) {\n\t\tcoefficients.push(generateRandomScalar());\n\t}\n\treturn coefficients;\n}\n\nexport function evaluatePolynomial(coefficients: bigint[], x: bigint): bigint {\n\tlet result = 0n;\n\tlet xPower = 1n;\n\n\tfor (const coeff of coefficients) {\n\t\tresult = mod(result + mod(coeff * xPower, CURVE_ORDER), CURVE_ORDER);\n\t\txPower = mod(xPower * x, CURVE_ORDER);\n\t}\n\n\treturn result;\n}\n\nexport function computeCommitments(coefficients: bigint[]): string[] {\n\treturn coefficients.map((coeff) => {\n\t\tconst point = secp256k1.ProjectivePoint.BASE.multiply(coeff);\n\t\treturn point.toHex(true);\n\t});\n}\n\nexport function verifyShareAgainstCommitments(\n\tshare: bigint,\n\tpartyIndex: bigint,\n\tcommitments: string[],\n): boolean {\n\tconst sharePoint = secp256k1.ProjectivePoint.BASE.multiply(share);\n\n\tlet expectedPoint = secp256k1.ProjectivePoint.fromHex(commitments[0]);\n\tlet indexPower = 1n;\n\n\tfor (let i = 1; i < commitments.length; i++) {\n\t\tindexPower = mod(indexPower * partyIndex, CURVE_ORDER);\n\t\tconst commitmentPoint = secp256k1.ProjectivePoint.fromHex(commitments[i]);\n\t\texpectedPoint = expectedPoint.add(commitmentPoint.multiply(indexPower));\n\t}\n\n\treturn sharePoint.equals(expectedPoint);\n}\n\nexport function combinePublicKeys(commitments: string[][]): string {\n\tlet combined = secp256k1.ProjectivePoint.fromHex(commitments[0][0]);\n\n\tfor (let i = 1; i < commitments.length; i++) {\n\t\tconst point = secp256k1.ProjectivePoint.fromHex(commitments[i][0]);\n\t\tcombined = combined.add(point);\n\t}\n\n\treturn combined.toHex(false);\n}\n\nexport function computeLagrangeCoefficient(\n\tpartyIndex: bigint,\n\tparticipatingIndices: bigint[],\n): bigint {\n\tlet numerator = 1n;\n\tlet denominator = 1n;\n\n\tfor (const j of participatingIndices) {\n\t\tif (j !== partyIndex) {\n\t\t\tnumerator = mod(numerator * (CURVE_ORDER - j), CURVE_ORDER);\n\t\t\tdenominator = mod(\n\t\t\t\tdenominator * mod(partyIndex - j, CURVE_ORDER),\n\t\t\t\tCURVE_ORDER,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst denominatorInverse = modInverse(denominator, CURVE_ORDER);\n\treturn mod(numerator * denominatorInverse, CURVE_ORDER);\n}\n\nexport function aggregateShares(\n\treceivedShares: Map<number, bigint>,\n\townShare: bigint,\n): bigint {\n\tlet combined = ownShare;\n\n\tfor (const share of receivedShares.values()) {\n\t\tcombined = mod(combined + share, CURVE_ORDER);\n\t}\n\n\treturn combined;\n}\n\nexport function scalarToHex(scalar: bigint): string {\n\treturn scalar.toString(16).padStart(64, \"0\");\n}\n\nexport function hexToScalar(hex: string): bigint {\n\treturn BigInt(`0x${hex}`);\n}\n\nexport function pointToHex(\n\tpoint: typeof secp256k1.ProjectivePoint.BASE,\n): string {\n\treturn point.toHex(false);\n}\n\nexport function hexToPoint(hex: string): typeof secp256k1.ProjectivePoint.BASE {\n\treturn secp256k1.ProjectivePoint.fromHex(hex);\n}\n\nexport function mod(n: bigint, m: bigint): bigint {\n\treturn ((n % m) + m) % m;\n}\n\nexport function modInverse(a: bigint, m: bigint): bigint {\n\tlet [oldR, r] = [a, m];\n\tlet [oldS, s] = [1n, 0n];\n\n\twhile (r !== 0n) {\n\t\tconst quotient = oldR / r;\n\t\t[oldR, r] = [r, oldR - quotient * r];\n\t\t[oldS, s] = [s, oldS - quotient * s];\n\t}\n\n\treturn mod(oldS, m);\n}\n\nfunction bytesToBigInt(bytes: Uint8Array): bigint {\n\tlet result = 0n;\n\tfor (const byte of bytes) {\n\t\tresult = (result << 8n) + BigInt(byte);\n\t}\n\treturn result;\n}\n\nexport { CURVE_ORDER };\n","import { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils\";\nimport {\n\tCURVE_ORDER,\n\tgenerateRandomScalar,\n\tmod,\n\tscalarToHex,\n} from \"./polynomial\";\n\nexport interface PedersenCommitment {\n\tcommitment: string;\n\tvalue: bigint;\n\tblinding: bigint;\n}\n\nlet H_POINT: typeof secp256k1.ProjectivePoint.BASE | null = null;\n\nfunction getHPoint(): typeof secp256k1.ProjectivePoint.BASE {\n\tif (!H_POINT) {\n\t\tconst hashInput = utf8ToBytes(\"NERO_MPC_PEDERSEN_H_GENERATOR\");\n\t\tconst hash = sha256(hashInput);\n\t\tconst scalar = mod(BigInt(`0x${bytesToHex(hash)}`), CURVE_ORDER);\n\t\tH_POINT = secp256k1.ProjectivePoint.BASE.multiply(scalar);\n\t}\n\treturn H_POINT;\n}\n\nexport function createPedersenCommitment(value: bigint): PedersenCommitment {\n\tconst blinding = generateRandomScalar();\n\tconst G = secp256k1.ProjectivePoint.BASE;\n\tconst H = getHPoint();\n\n\tconst valuePoint = G.multiply(value);\n\tconst blindingPoint = H.multiply(blinding);\n\tconst commitment = valuePoint.add(blindingPoint);\n\n\treturn {\n\t\tcommitment: commitment.toHex(true),\n\t\tvalue,\n\t\tblinding,\n\t};\n}\n\nexport function verifyPedersenCommitment(\n\tcommitment: string,\n\tvalue: bigint,\n\tblinding: bigint,\n): boolean {\n\tconst G = secp256k1.ProjectivePoint.BASE;\n\tconst H = getHPoint();\n\n\tconst valuePoint = G.multiply(value);\n\tconst blindingPoint = H.multiply(blinding);\n\tconst expectedCommitment = valuePoint.add(blindingPoint);\n\n\tconst commitmentPoint = secp256k1.ProjectivePoint.fromHex(commitment);\n\treturn expectedCommitment.equals(commitmentPoint);\n}\n\nexport interface VSSSCommitment {\n\tpartyId: number;\n\tcoefficientCommitments: string[];\n\tproofOfKnowledge: string;\n}\n\nexport function createVSSSCommitments(\n\tpartyId: number,\n\tcoefficients: bigint[],\n): VSSSCommitment {\n\tconst G = secp256k1.ProjectivePoint.BASE;\n\n\tconst coefficientCommitments = coefficients.map((coeff) =>\n\t\tG.multiply(coeff).toHex(true),\n\t);\n\n\tconst proof = createProofOfKnowledge(\n\t\tpartyId,\n\t\tcoefficients[0],\n\t\tcoefficientCommitments[0],\n\t);\n\n\treturn {\n\t\tpartyId,\n\t\tcoefficientCommitments,\n\t\tproofOfKnowledge: proof,\n\t};\n}\n\nexport function verifyVSSSCommitment(\n\tcommitment: VSSSCommitment,\n\tshare: bigint,\n\treceiverPartyId: number,\n): boolean {\n\tconst G = secp256k1.ProjectivePoint.BASE;\n\tconst sharePoint = G.multiply(share);\n\n\tlet expectedPoint = secp256k1.ProjectivePoint.fromHex(\n\t\tcommitment.coefficientCommitments[0],\n\t);\n\n\tconst x = BigInt(receiverPartyId);\n\tlet xPower = x;\n\n\tfor (let i = 1; i < commitment.coefficientCommitments.length; i++) {\n\t\tconst commitmentPoint = secp256k1.ProjectivePoint.fromHex(\n\t\t\tcommitment.coefficientCommitments[i],\n\t\t);\n\t\tconst scaled = commitmentPoint.multiply(xPower);\n\t\texpectedPoint = expectedPoint.add(scaled);\n\t\txPower = mod(xPower * x, CURVE_ORDER);\n\t}\n\n\treturn sharePoint.equals(expectedPoint);\n}\n\nfunction createProofOfKnowledge(\n\tpartyId: number,\n\tsecret: bigint,\n\tpublicCommitment: string,\n): string {\n\tconst G = secp256k1.ProjectivePoint.BASE;\n\n\tconst k = generateRandomScalar();\n\tconst R = G.multiply(k);\n\n\tconst challenge = computeChallenge(partyId, publicCommitment, R.toHex(true));\n\tconst response = mod(k + secret * challenge, CURVE_ORDER);\n\n\treturn JSON.stringify({\n\t\tR: R.toHex(true),\n\t\ts: scalarToHex(response),\n\t});\n}\n\nexport function verifyProofOfKnowledge(\n\tproof: string,\n\tpartyId: number,\n\tpublicCommitment: string,\n): boolean {\n\tconst G = secp256k1.ProjectivePoint.BASE;\n\n\tconst { R, s } = JSON.parse(proof);\n\tconst RPoint = secp256k1.ProjectivePoint.fromHex(R);\n\tconst response = BigInt(`0x${s}`);\n\n\tconst challenge = computeChallenge(partyId, publicCommitment, R);\n\n\tconst leftSide = G.multiply(response);\n\n\tconst commitmentPoint = secp256k1.ProjectivePoint.fromHex(publicCommitment);\n\tconst rightSide = RPoint.add(commitmentPoint.multiply(challenge));\n\n\treturn leftSide.equals(rightSide);\n}\n\nfunction computeChallenge(\n\tpartyId: number,\n\tcommitment: string,\n\tR: string,\n): bigint {\n\tconst input = `${partyId}:${commitment}:${R}`;\n\tconst hash = sha256(utf8ToBytes(input));\n\treturn mod(BigInt(`0x${bytesToHex(hash)}`), CURVE_ORDER);\n}\n\nexport function combineVSSSCommitments(commitments: VSSSCommitment[]): string {\n\tlet combined = secp256k1.ProjectivePoint.fromHex(\n\t\tcommitments[0].coefficientCommitments[0],\n\t);\n\n\tfor (let i = 1; i < commitments.length; i++) {\n\t\tconst point = secp256k1.ProjectivePoint.fromHex(\n\t\t\tcommitments[i].coefficientCommitments[0],\n\t\t);\n\t\tcombined = combined.add(point);\n\t}\n\n\treturn combined.toHex(false);\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex, hexToBytes, utf8ToBytes } from \"@noble/hashes/utils\";\nimport { CURVE_ORDER, hexToScalar, mod, scalarToHex } from \"./polynomial\";\n\nexport interface EncryptedShare {\n\tfromPartyId: number;\n\ttoPartyId: number;\n\tephemeralPublicKey: string;\n\tciphertext: string;\n\tnonce: string;\n\ttag: string;\n}\n\nexport interface DecryptedShare {\n\tfromPartyId: number;\n\tshare: bigint;\n}\n\nfunction toBuffer(data: Uint8Array): ArrayBuffer {\n\treturn data.buffer.slice(\n\t\tdata.byteOffset,\n\t\tdata.byteOffset + data.byteLength,\n\t) as ArrayBuffer;\n}\n\nasync function deriveSharedSecret(\n\tprivateKey: bigint,\n\tpublicKey: string,\n): Promise<Uint8Array> {\n\tconst pubPoint = secp256k1.ProjectivePoint.fromHex(publicKey);\n\tconst sharedPoint = pubPoint.multiply(privateKey);\n\tconst sharedBytes = hexToBytes(sharedPoint.toHex(true));\n\treturn sha256(sharedBytes);\n}\n\nasync function aesGcmEncrypt(\n\tplaintext: Uint8Array,\n\tkey: Uint8Array,\n\tnonce: Uint8Array,\n): Promise<{ ciphertext: Uint8Array; tag: Uint8Array }> {\n\tconst cryptoKey = await crypto.subtle.importKey(\n\t\t\"raw\",\n\t\ttoBuffer(key),\n\t\t{ name: \"AES-GCM\" },\n\t\tfalse,\n\t\t[\"encrypt\"],\n\t);\n\n\tconst encrypted = await crypto.subtle.encrypt(\n\t\t{ name: \"AES-GCM\", iv: toBuffer(nonce), tagLength: 128 },\n\t\tcryptoKey,\n\t\ttoBuffer(plaintext),\n\t);\n\n\tconst encryptedArray = new Uint8Array(encrypted);\n\tconst ciphertext = encryptedArray.slice(0, -16);\n\tconst tag = encryptedArray.slice(-16);\n\n\treturn { ciphertext, tag };\n}\n\nasync function aesGcmDecrypt(\n\tciphertext: Uint8Array,\n\ttag: Uint8Array,\n\tkey: Uint8Array,\n\tnonce: Uint8Array,\n): Promise<Uint8Array> {\n\tconst cryptoKey = await crypto.subtle.importKey(\n\t\t\"raw\",\n\t\ttoBuffer(key),\n\t\t{ name: \"AES-GCM\" },\n\t\tfalse,\n\t\t[\"decrypt\"],\n\t);\n\n\tconst combined = new Uint8Array(ciphertext.length + tag.length);\n\tcombined.set(ciphertext);\n\tcombined.set(tag, ciphertext.length);\n\n\tconst decrypted = await crypto.subtle.decrypt(\n\t\t{ name: \"AES-GCM\", iv: toBuffer(nonce), tagLength: 128 },\n\t\tcryptoKey,\n\t\ttoBuffer(combined),\n\t);\n\n\treturn new Uint8Array(decrypted);\n}\n\nexport async function encryptShare(\n\tshare: bigint,\n\tfromPartyId: number,\n\ttoPartyId: number,\n\trecipientPublicKey: string,\n): Promise<EncryptedShare> {\n\tconst ephemeralPrivateKey = generateSecureScalar();\n\n\tconst ephemeralPublicKey =\n\t\tsecp256k1.ProjectivePoint.BASE.multiply(ephemeralPrivateKey).toHex(true);\n\n\tconst sharedSecret = await deriveSharedSecret(\n\t\tephemeralPrivateKey,\n\t\trecipientPublicKey,\n\t);\n\n\tconst nonce = crypto.getRandomValues(new Uint8Array(12));\n\n\tconst shareHex = scalarToHex(share);\n\tconst plaintext = utf8ToBytes(shareHex);\n\n\tconst { ciphertext, tag } = await aesGcmEncrypt(\n\t\tplaintext,\n\t\tsharedSecret,\n\t\tnonce,\n\t);\n\n\treturn {\n\t\tfromPartyId,\n\t\ttoPartyId,\n\t\tephemeralPublicKey,\n\t\tciphertext: bytesToHex(ciphertext),\n\t\tnonce: bytesToHex(nonce),\n\t\ttag: bytesToHex(tag),\n\t};\n}\n\nexport async function decryptShare(\n\tencryptedShare: EncryptedShare,\n\trecipientPrivateKey: bigint,\n): Promise<DecryptedShare> {\n\tconst sharedSecret = await deriveSharedSecret(\n\t\trecipientPrivateKey,\n\t\tencryptedShare.ephemeralPublicKey,\n\t);\n\n\tconst ciphertext = hexToBytes(encryptedShare.ciphertext);\n\tconst nonce = hexToBytes(encryptedShare.nonce);\n\tconst tag = hexToBytes(encryptedShare.tag);\n\n\tconst plaintext = await aesGcmDecrypt(ciphertext, tag, sharedSecret, nonce);\n\tconst shareHex = new TextDecoder().decode(plaintext);\n\tconst share = hexToScalar(shareHex);\n\n\treturn {\n\t\tfromPartyId: encryptedShare.fromPartyId,\n\t\tshare,\n\t};\n}\n\nfunction generateSecureScalar(): bigint {\n\tconst bytes = crypto.getRandomValues(new Uint8Array(32));\n\tconst scalar = mod(BigInt(`0x${bytesToHex(bytes)}`), CURVE_ORDER);\n\tif (scalar === 0n) {\n\t\tthrow new Error(\"RNG failure: generated zero scalar\");\n\t}\n\treturn scalar;\n}\n\nexport function generateEphemeralKeyPair(): {\n\tprivateKey: bigint;\n\tpublicKey: string;\n} {\n\tconst privateKey = generateSecureScalar();\n\n\tconst publicKey =\n\t\tsecp256k1.ProjectivePoint.BASE.multiply(privateKey).toHex(true);\n\n\treturn { privateKey, publicKey };\n}\n\nexport function serializeEncryptedShare(share: EncryptedShare): string {\n\treturn JSON.stringify(share);\n}\n\nexport function deserializeEncryptedShare(data: string): EncryptedShare {\n\treturn JSON.parse(data);\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\nimport type { APIClient } from \"../../transport/api-client\";\nimport type { WebSocketClient } from \"../../transport/websocket-client\";\nimport type { DKGResult, DKGSessionState, KeyShare } from \"../../types\";\nimport { SDKError } from \"../../types\";\nimport {\n\ttype VSSSCommitment,\n\tcombineVSSSCommitments,\n\tcreateVSSSCommitments,\n\tverifyProofOfKnowledge,\n\tverifyVSSSCommitment,\n} from \"./commitments\";\nimport {\n\taggregateShares,\n\tevaluatePolynomial,\n\tgeneratePolynomial,\n\tscalarToHex,\n} from \"./polynomial\";\nimport {\n\ttype EncryptedShare,\n\tdecryptShare,\n\tencryptShare,\n\tgenerateEphemeralKeyPair,\n} from \"./share-exchange\";\n\nconst PROTOCOL_VERSION = \"pedersen-dkg-v1\";\n\nexport interface DKGClientConfig {\n\tapiClient: APIClient;\n\twsClient?: WebSocketClient;\n\ttimeout?: number;\n}\n\nexport class DKGClient {\n\tprivate apiClient: APIClient;\n\tprivate wsClient?: WebSocketClient;\n\tprivate timeout: number;\n\tprivate state: DKGSessionState | null = null;\n\n\tprivate polynomial: bigint[] = [];\n\tprivate ephemeralKeyPair: { privateKey: bigint; publicKey: string } | null =\n\t\tnull;\n\tprivate receivedCommitments: Map<number, VSSSCommitment> = new Map();\n\tprivate receivedShares: Map<number, bigint> = new Map();\n\n\tconstructor(config: DKGClientConfig) {\n\t\tthis.apiClient = config.apiClient;\n\t\tthis.wsClient = config.wsClient;\n\t\tthis.timeout = config.timeout ?? 60000;\n\t}\n\n\tasync execute(): Promise<DKGResult> {\n\t\ttry {\n\t\t\tawait this.initializeSession();\n\n\t\t\tawait this.runCommitmentPhase();\n\n\t\t\tawait this.runShareExchangePhase();\n\n\t\t\tawait this.runVerificationPhase();\n\n\t\t\treturn await this.completeProtocol();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"DKG failed\";\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: message,\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate async initializeSession(): Promise<void> {\n\t\tconst { sessionId, partyId, participantCount, threshold } =\n\t\t\tawait this.apiClient.initiateDKG();\n\n\t\tif (threshold < 2) {\n\t\t\tthrow new SDKError(\n\t\t\t\t\"Threshold must be at least 2 for security\",\n\t\t\t\t\"INVALID_THRESHOLD\",\n\t\t\t);\n\t\t}\n\t\tif (participantCount < 2) {\n\t\t\tthrow new SDKError(\n\t\t\t\t\"Participant count must be at least 2\",\n\t\t\t\t\"INVALID_PARTICIPANT_COUNT\",\n\t\t\t);\n\t\t}\n\t\tif (threshold > participantCount) {\n\t\t\tthrow new SDKError(\n\t\t\t\t\"Threshold cannot exceed participant count\",\n\t\t\t\t\"INVALID_THRESHOLD\",\n\t\t\t);\n\t\t}\n\n\t\tthis.state = {\n\t\t\tsessionId,\n\t\t\tround: \"commitment\",\n\t\t\tpartyId,\n\t\t\tparticipantCount,\n\t\t\tthreshold,\n\t\t\tcommitments: new Map(),\n\t\t\treceivedShares: new Map(),\n\t\t};\n\n\t\tthis.polynomial = generatePolynomial(threshold - 1);\n\n\t\tthis.ephemeralKeyPair = generateEphemeralKeyPair();\n\n\t\tif (this.wsClient) {\n\t\t\tawait this.wsClient.connect();\n\t\t\tthis.wsClient.setAccessToken(\n\t\t\t\tthis.apiClient.getTokens()?.accessToken ?? \"\",\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async runCommitmentPhase(): Promise<void> {\n\t\tif (!this.state) throw new SDKError(\"State not initialized\", \"STATE_ERROR\");\n\n\t\tconst commitment = createVSSSCommitments(\n\t\t\tthis.state.partyId,\n\t\t\tthis.polynomial,\n\t\t);\n\n\t\tconst apiCommitment = {\n\t\t\tpartyId: this.state.partyId,\n\t\t\tcommitments: commitment.coefficientCommitments,\n\t\t\tpublicKey: this.ephemeralKeyPair?.publicKey ?? \"\",\n\t\t\tproofOfKnowledge: commitment.proofOfKnowledge,\n\t\t};\n\n\t\tawait this.apiClient.submitDKGCommitment(\n\t\t\tthis.state.sessionId,\n\t\t\tapiCommitment,\n\t\t);\n\n\t\tthis.receivedCommitments.set(this.state.partyId, commitment);\n\n\t\tconst otherCommitments = await this.waitForCommitments();\n\n\t\tfor (const [partyId, comm] of otherCommitments) {\n\t\t\tif (!comm.proofOfKnowledge) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Missing proof of knowledge from party ${comm.partyId}. Backend must relay proofs for client-side verification.`,\n\t\t\t\t\t\"MISSING_COMMITMENT_PROOF\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (comm.partyId !== partyId) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Party ID mismatch: expected ${partyId}, got ${comm.partyId}`,\n\t\t\t\t\t\"PARTY_ID_MISMATCH\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!verifyProofOfKnowledge(\n\t\t\t\t\tcomm.proofOfKnowledge,\n\t\t\t\t\tcomm.partyId,\n\t\t\t\t\tcomm.coefficientCommitments[0],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Invalid proof of knowledge from party ${comm.partyId}`,\n\t\t\t\t\t\"INVALID_COMMITMENT_PROOF\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.receivedCommitments.set(comm.partyId, comm);\n\t\t}\n\n\t\tthis.state.round = \"share_exchange\";\n\t}\n\n\tprivate async runShareExchangePhase(): Promise<void> {\n\t\tif (!this.state) throw new SDKError(\"State not initialized\", \"STATE_ERROR\");\n\n\t\tfor (let partyId = 1; partyId <= this.state.participantCount; partyId++) {\n\t\t\tif (partyId === this.state.partyId) continue;\n\n\t\t\tconst share = evaluatePolynomial(this.polynomial, BigInt(partyId));\n\n\t\t\tconst commitment = this.receivedCommitments.get(partyId);\n\t\t\tif (!commitment) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Missing commitment from party ${partyId}`,\n\t\t\t\t\t\"MISSING_COMMITMENT\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst apiCommitment = await this.apiClient.getDKGCommitments(\n\t\t\t\tthis.state.sessionId,\n\t\t\t);\n\t\t\tconst partyCommitment = apiCommitment.commitments.find(\n\t\t\t\t(c) => c.partyId === partyId,\n\t\t\t);\n\t\t\tif (!partyCommitment) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Missing public key from party ${partyId}`,\n\t\t\t\t\t\"MISSING_PUBLIC_KEY\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst encrypted = await encryptShare(\n\t\t\t\tshare,\n\t\t\t\tthis.state.partyId,\n\t\t\t\tpartyId,\n\t\t\t\tpartyCommitment.publicKey,\n\t\t\t);\n\n\t\t\tawait this.apiClient.submitDKGShare(\n\t\t\t\tthis.state.sessionId,\n\t\t\t\tJSON.stringify(encrypted),\n\t\t\t\tpartyId,\n\t\t\t);\n\t\t}\n\n\t\tconst ownShare = evaluatePolynomial(\n\t\t\tthis.polynomial,\n\t\t\tBigInt(this.state.partyId),\n\t\t);\n\t\tthis.receivedShares.set(this.state.partyId, ownShare);\n\n\t\tconst receivedShares = await this.waitForShares();\n\n\t\tfor (const [partyId, encryptedShare] of receivedShares) {\n\t\t\tconst decrypted = await decryptShare(\n\t\t\t\tencryptedShare,\n\t\t\t\tthis.ephemeralKeyPair?.privateKey ?? 0n,\n\t\t\t);\n\n\t\t\tconst commitment = this.receivedCommitments.get(partyId);\n\t\t\tif (!commitment) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Missing commitment from party ${partyId}`,\n\t\t\t\t\t\"MISSING_COMMITMENT\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!verifyVSSSCommitment(commitment, decrypted.share, this.state.partyId)\n\t\t\t) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Invalid share from party ${partyId}`,\n\t\t\t\t\t\"INVALID_SHARE\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.receivedShares.set(partyId, decrypted.share);\n\t\t}\n\n\t\tthis.state.round = \"verification\";\n\t}\n\n\tprivate async runVerificationPhase(): Promise<void> {\n\t\tif (!this.state) throw new SDKError(\"State not initialized\", \"STATE_ERROR\");\n\n\t\tconst finalShare = aggregateShares(this.receivedShares, 0n);\n\n\t\tconst allCommitments = Array.from(this.receivedCommitments.values());\n\t\tconst publicKey = combineVSSSCommitments(allCommitments);\n\n\t\tthis.state.privateShare = finalShare;\n\t\tthis.state.publicKey = publicKey;\n\t\tthis.state.round = \"complete\";\n\t}\n\n\tprivate async completeProtocol(): Promise<DKGResult> {\n\t\tif (!this.state || !this.state.privateShare || !this.state.publicKey) {\n\t\t\tthrow new SDKError(\"Protocol not complete\", \"PROTOCOL_INCOMPLETE\");\n\t\t}\n\n\t\tconst walletAddress = this.deriveWalletAddress(this.state.publicKey);\n\n\t\tawait this.apiClient.completeDKG(\n\t\t\tthis.state.sessionId,\n\t\t\tthis.state.partyId,\n\t\t\tthis.state.publicKey,\n\t\t\twalletAddress,\n\t\t);\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tpublicKey: this.state.publicKey,\n\t\t\twalletAddress,\n\t\t\tpartyId: this.state.partyId,\n\t\t};\n\t}\n\n\tgetKeyShare(): KeyShare | null {\n\t\tif (!this.state?.privateShare) return null;\n\n\t\treturn {\n\t\t\tpartyId: this.state.partyId,\n\t\t\tprivateShare: scalarToHex(this.state.privateShare),\n\t\t\tpublicShare: secp256k1.ProjectivePoint.BASE.multiply(\n\t\t\t\tthis.state.privateShare,\n\t\t\t).toHex(true),\n\t\t\tcommitment: this.computeShareCommitment(this.state.privateShare),\n\t\t\tthreshold: this.state.threshold,\n\t\t\ttotalParties: this.state.participantCount,\n\t\t\tprotocolVersion: PROTOCOL_VERSION,\n\t\t};\n\t}\n\n\tgetPartyPublicShares(): Map<number, string> {\n\t\tconst shares = new Map<number, string>();\n\n\t\tfor (const [partyId, commitment] of this.receivedCommitments) {\n\t\t\tif (commitment.coefficientCommitments.length > 0) {\n\t\t\t\tshares.set(partyId, commitment.coefficientCommitments[0]);\n\t\t\t}\n\t\t}\n\n\t\treturn shares;\n\t}\n\n\tprivate async waitForCommitments(): Promise<Map<number, VSSSCommitment>> {\n\t\tconst startTime = Date.now();\n\t\tconst commitments = new Map<number, VSSSCommitment>();\n\n\t\twhile (Date.now() - startTime < this.timeout) {\n\t\t\tconst result = await this.apiClient.getDKGCommitments(\n\t\t\t\tthis.state?.sessionId ?? \"\",\n\t\t\t);\n\n\t\t\tfor (const comm of result.commitments) {\n\t\t\t\tif (\n\t\t\t\t\tcomm.partyId !== this.state?.partyId &&\n\t\t\t\t\t!commitments.has(comm.partyId)\n\t\t\t\t) {\n\t\t\t\t\tcommitments.set(comm.partyId, {\n\t\t\t\t\t\tpartyId: comm.partyId,\n\t\t\t\t\t\tcoefficientCommitments: comm.commitments,\n\t\t\t\t\t\tproofOfKnowledge: comm.proofOfKnowledge ?? \"\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tresult.ready ||\n\t\t\t\tcommitments.size >= (this.state?.participantCount ?? 1) - 1\n\t\t\t) {\n\t\t\t\treturn commitments;\n\t\t\t}\n\n\t\t\tawait this.delay(1000);\n\t\t}\n\n\t\tthrow new SDKError(\"Timeout waiting for commitments\", \"COMMITMENT_TIMEOUT\");\n\t}\n\n\tprivate async waitForShares(): Promise<Map<number, EncryptedShare>> {\n\t\tconst startTime = Date.now();\n\t\tconst shares = new Map<number, EncryptedShare>();\n\n\t\twhile (Date.now() - startTime < this.timeout) {\n\t\t\tconst result = await this.apiClient.getDKGShares(\n\t\t\t\tthis.state?.sessionId ?? \"\",\n\t\t\t\tthis.state?.partyId ?? 0,\n\t\t\t);\n\n\t\t\tfor (const share of result.shares) {\n\t\t\t\tif (!shares.has(share.fromPartyId)) {\n\t\t\t\t\tshares.set(share.fromPartyId, JSON.parse(share.encryptedShare));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tresult.ready ||\n\t\t\t\tshares.size >= (this.state?.participantCount ?? 1) - 1\n\t\t\t) {\n\t\t\t\treturn shares;\n\t\t\t}\n\n\t\t\tawait this.delay(1000);\n\t\t}\n\n\t\tthrow new SDKError(\"Timeout waiting for shares\", \"SHARE_TIMEOUT\");\n\t}\n\n\tprivate deriveWalletAddress(publicKey: string): string {\n\t\tconst pubKeyBytes = hexToBytes(\n\t\t\tpublicKey.startsWith(\"04\") ? publicKey.slice(2) : publicKey,\n\t\t);\n\t\tconst hash = keccak_256(pubKeyBytes);\n\t\tconst addressBytes = hash.slice(-20);\n\t\treturn `0x${bytesToHex(addressBytes)}`;\n\t}\n\n\tprivate computeShareCommitment(share: bigint): string {\n\t\tconst shareHex = scalarToHex(share);\n\t\treturn bytesToHex(sha256(hexToBytes(shareHex)));\n\t}\n\n\tprivate delay(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n\n\tcleanup(): void {\n\t\tthis.state = null;\n\t\tthis.polynomial = [];\n\t\tthis.ephemeralKeyPair = null;\n\t\tthis.receivedCommitments.clear();\n\t\tthis.receivedShares.clear();\n\t}\n}\n","import type {\n\tAuthTokens,\n\tDeviceFingerprint,\n\tSDKConfig,\n\tUser,\n\tWalletInfo,\n} from \"../types\";\nimport { SDKError } from \"../types\";\n\ninterface APIResponse<T> {\n\tsuccess: boolean;\n\tdata?: T;\n\terror?: {\n\t\tcode: string;\n\t\tmessage: string;\n\t};\n}\n\nexport class APIClient {\n\tprivate baseUrl: string;\n\tprivate tokens: AuthTokens | null = null;\n\tprivate refreshPromise: Promise<void> | null = null;\n\n\tconstructor(config: SDKConfig) {\n\t\tthis.baseUrl = config.backendUrl.replace(/\\/$/, \"\");\n\t}\n\n\tsetTokens(tokens: AuthTokens): void {\n\t\tthis.tokens = tokens;\n\t}\n\n\tgetTokens(): AuthTokens | null {\n\t\treturn this.tokens;\n\t}\n\n\tclearTokens(): void {\n\t\tthis.tokens = null;\n\t}\n\n\tprivate async request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t\trequiresAuth = true,\n\t): Promise<T> {\n\t\tif (requiresAuth && this.tokens) {\n\t\t\tif (Date.now() >= this.tokens.expiresAt - 60000) {\n\t\t\t\tawait this.refreshAccessToken();\n\t\t\t}\n\t\t}\n\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t};\n\n\t\tif (requiresAuth && this.tokens) {\n\t\t\theaders.Authorization = `Bearer ${this.tokens.accessToken}`;\n\t\t}\n\n\t\tconst response = await fetch(`${this.baseUrl}${path}`, {\n\t\t\tmethod,\n\t\t\theaders,\n\t\t\tbody: body ? JSON.stringify(body) : undefined,\n\t\t\tcredentials: \"include\",\n\t\t});\n\n\t\tconst data: APIResponse<T> = await response.json();\n\n\t\tif (!data.success) {\n\t\t\tthrow new SDKError(\n\t\t\t\tdata.error?.message ?? \"Request failed\",\n\t\t\t\tdata.error?.code ?? \"REQUEST_FAILED\",\n\t\t\t\tresponse.status,\n\t\t\t);\n\t\t}\n\n\t\treturn data.data as T;\n\t}\n\n\tprivate async refreshAccessToken(): Promise<void> {\n\t\tif (this.refreshPromise) {\n\t\t\treturn this.refreshPromise;\n\t\t}\n\n\t\tthis.refreshPromise = (async () => {\n\t\t\tif (!this.tokens?.refreshToken) {\n\t\t\t\tthrow new SDKError(\"No refresh token available\", \"NO_REFRESH_TOKEN\");\n\t\t\t}\n\n\t\t\tconst response = await fetch(`${this.baseUrl}/api/auth/refresh`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({ refreshToken: this.tokens.refreshToken }),\n\t\t\t});\n\n\t\t\tconst data: APIResponse<{\n\t\t\t\taccessToken: string;\n\t\t\t\trefreshToken: string;\n\t\t\t\texpiresIn: number;\n\t\t\t}> = await response.json();\n\n\t\t\tif (!data.success || !data.data) {\n\t\t\t\tthis.tokens = null;\n\t\t\t\tthrow new SDKError(\"Token refresh failed\", \"TOKEN_REFRESH_FAILED\");\n\t\t\t}\n\n\t\t\tthis.tokens = {\n\t\t\t\taccessToken: data.data.accessToken,\n\t\t\t\trefreshToken: data.data.refreshToken,\n\t\t\t\texpiresAt: Date.now() + data.data.expiresIn * 1000,\n\t\t\t};\n\t\t})();\n\n\t\ttry {\n\t\t\tawait this.refreshPromise;\n\t\t} finally {\n\t\t\tthis.refreshPromise = null;\n\t\t}\n\t}\n\n\tasync getOAuthUrl(\n\t\tprovider: \"google\" | \"github\" | \"apple\",\n\t\tredirectUri: string,\n\t): Promise<{ url: string; state: string }> {\n\t\treturn this.request(\n\t\t\t\"POST\",\n\t\t\t\"/api/auth/oauth/url\",\n\t\t\t{ provider, redirectUri },\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tasync handleOAuthCallback(\n\t\tprovider: string,\n\t\tcode: string,\n\t\tstate: string,\n\t\tfingerprint: DeviceFingerprint,\n\t): Promise<{\n\t\tuser: User;\n\t\ttokens: AuthTokens;\n\t\twallet?: WalletInfo;\n\t\trequiresDKG: boolean;\n\t}> {\n\t\tconst result = await this.request<{\n\t\t\tuser: User;\n\t\t\taccessToken: string;\n\t\t\trefreshToken: string;\n\t\t\texpiresIn: number;\n\t\t\twallet?: WalletInfo;\n\t\t\trequiresDKG: boolean;\n\t\t}>(\n\t\t\t\"POST\",\n\t\t\t\"/api/auth/oauth/callback\",\n\t\t\t{ provider, code, state, fingerprint },\n\t\t\tfalse,\n\t\t);\n\n\t\tthis.tokens = {\n\t\t\taccessToken: result.accessToken,\n\t\t\trefreshToken: result.refreshToken,\n\t\t\texpiresAt: Date.now() + result.expiresIn * 1000,\n\t\t};\n\n\t\treturn {\n\t\t\tuser: result.user,\n\t\t\ttokens: this.tokens,\n\t\t\twallet: result.wallet,\n\t\t\trequiresDKG: result.requiresDKG,\n\t\t};\n\t}\n\n\tasync getCurrentUser(): Promise<User> {\n\t\treturn this.request(\"GET\", \"/api/user/me\");\n\t}\n\n\tasync logout(): Promise<void> {\n\t\tawait this.request(\"POST\", \"/api/auth/logout\");\n\t\tthis.tokens = null;\n\t}\n\n\tasync initiateDKG(): Promise<{\n\t\tsessionId: string;\n\t\tpartyId: number;\n\t\tparticipantCount: number;\n\t\tthreshold: number;\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/mpc/dkg/initiate\");\n\t}\n\n\tasync submitDKGCommitment(\n\t\tsessionId: string,\n\t\tcommitment: {\n\t\t\tpartyId: number;\n\t\t\tcommitments: string[];\n\t\t\tpublicKey: string;\n\t\t\tproofOfKnowledge: string;\n\t\t},\n\t): Promise<void> {\n\t\treturn this.request(\"POST\", \"/api/mpc/dkg/commitment\", {\n\t\t\tsessionId,\n\t\t\tcommitment,\n\t\t});\n\t}\n\n\tasync getDKGCommitments(sessionId: string): Promise<{\n\t\tcommitments: Array<{\n\t\t\tpartyId: number;\n\t\t\tcommitments: string[];\n\t\t\tpublicKey: string;\n\t\t\tproofOfKnowledge?: string;\n\t\t}>;\n\t\tready: boolean;\n\t}> {\n\t\treturn this.request(\"GET\", `/api/mpc/dkg/${sessionId}/commitments`);\n\t}\n\n\tasync submitDKGShare(\n\t\tsessionId: string,\n\t\tencryptedShare: string,\n\t\ttoPartyId: number,\n\t): Promise<void> {\n\t\treturn this.request(\"POST\", \"/api/mpc/dkg/share\", {\n\t\t\tsessionId,\n\t\t\tencryptedShare,\n\t\t\ttoPartyId,\n\t\t});\n\t}\n\n\tasync getDKGShares(\n\t\tsessionId: string,\n\t\tpartyId: number,\n\t): Promise<{\n\t\tshares: Array<{\n\t\t\tfromPartyId: number;\n\t\t\tencryptedShare: string;\n\t\t}>;\n\t\tready: boolean;\n\t}> {\n\t\treturn this.request(\"GET\", `/api/mpc/dkg/${sessionId}/shares/${partyId}`);\n\t}\n\n\tasync completeDKG(\n\t\tsessionId: string,\n\t\tpartyId: number,\n\t\tpublicKey: string,\n\t\twalletAddress: string,\n\t): Promise<{\n\t\tsuccess: boolean;\n\t\twallet: WalletInfo;\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/mpc/dkg/complete\", {\n\t\t\tsessionId,\n\t\t\tpartyId,\n\t\t\tpublicKey,\n\t\t\twalletAddress,\n\t\t});\n\t}\n\n\tasync initiateSigningSession(\n\t\tmessageHash: string,\n\t\tmessageType: \"transaction\" | \"message\" | \"typed_data\",\n\t): Promise<{\n\t\tsessionId: string;\n\t\tparticipatingParties: number[];\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/mpc/signing/initiate\", {\n\t\t\tmessageHash,\n\t\t\tmessageType,\n\t\t});\n\t}\n\n\tasync submitNonceCommitment(\n\t\tsessionId: string,\n\t\tpartyId: number,\n\t\tcommitment: string,\n\t): Promise<void> {\n\t\treturn this.request(\"POST\", \"/api/mpc/signing/nonce-commitment\", {\n\t\t\tsessionId,\n\t\t\tpartyId,\n\t\t\tcommitment,\n\t\t});\n\t}\n\n\tasync getNonceCommitments(sessionId: string): Promise<{\n\t\tcommitments: Map<number, string>;\n\t\tready: boolean;\n\t}> {\n\t\treturn this.request(\n\t\t\t\"GET\",\n\t\t\t`/api/mpc/signing/${sessionId}/nonce-commitments`,\n\t\t);\n\t}\n\n\tasync submitPartialSignature(\n\t\tsessionId: string,\n\t\tpartyId: number,\n\t\tpartialSignature: {\n\t\t\tr: string;\n\t\t\ts: string;\n\t\t\tpublicShare: string;\n\t\t\tnonceCommitment: string;\n\t\t},\n\t): Promise<void> {\n\t\treturn this.request(\"POST\", \"/api/mpc/signing/partial\", {\n\t\t\tsessionId,\n\t\t\tpartyId,\n\t\t\tpartialSignature,\n\t\t});\n\t}\n\n\tasync getPartialSignatures(sessionId: string): Promise<{\n\t\tpartials: Array<{\n\t\t\tpartyId: number;\n\t\t\ts: string;\n\t\t\tpublicShare: string;\n\t\t\tnonceCommitment: string;\n\t\t}>;\n\t\tready: boolean;\n\t}> {\n\t\treturn this.request(\"GET\", `/api/mpc/signing/${sessionId}/partials`);\n\t}\n\n\tasync getSigningResult(sessionId: string): Promise<{\n\t\tcomplete: boolean;\n\t\tsignature?: {\n\t\t\tr: string;\n\t\t\ts: string;\n\t\t\tv: number;\n\t\t\tfullSignature: string;\n\t\t};\n\t}> {\n\t\treturn this.request(\"GET\", `/api/mpc/signing/${sessionId}/result`);\n\t}\n\n\tasync getWalletInfo(): Promise<WalletInfo> {\n\t\treturn this.request(\"GET\", \"/api/wallet/info\");\n\t}\n\n\tasync getPartyPublicShares(): Promise<{\n\t\tshares: Array<{ partyId: number; publicShare: string }>;\n\t}> {\n\t\treturn this.request(\"GET\", \"/api/wallet/party-shares\");\n\t}\n\n\t// DKLS V2 API Methods\n\n\tasync dklsKeygenInit(): Promise<{\n\t\tsessionId: string;\n\t\tbackendCommitment: {\n\t\t\tpartyId: number;\n\t\t\tcommitment: string;\n\t\t};\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/v2/dkls/keygen/init\");\n\t}\n\n\tasync dklsKeygenCommitment(\n\t\tsessionId: string,\n\t\tclientCommitment: {\n\t\t\tpartyId: number;\n\t\t\tcommitment: string;\n\t\t},\n\t): Promise<{\n\t\tsessionId: string;\n\t\tbackendPublicShare: {\n\t\t\tpartyId: number;\n\t\t\tpublicShare: string;\n\t\t\tproof: {\n\t\t\t\tcommitment: string;\n\t\t\t\tchallenge: string;\n\t\t\t\tresponse: string;\n\t\t\t};\n\t\t};\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/v2/dkls/keygen/commitment\", {\n\t\t\tsessionId,\n\t\t\tclientCommitment,\n\t\t});\n\t}\n\n\tasync dklsKeygenComplete(\n\t\tsessionId: string,\n\t\tclientPublicShare: {\n\t\t\tpartyId: number;\n\t\t\tpublicShare: string;\n\t\t\tproof: {\n\t\t\t\tcommitment: string;\n\t\t\t\tchallenge: string;\n\t\t\t\tresponse: string;\n\t\t\t};\n\t\t},\n\t): Promise<{\n\t\tsessionId: string;\n\t\twalletAddress: string;\n\t\tjointPublicKey: string;\n\t\tkeyId: string;\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/v2/dkls/keygen/complete\", {\n\t\t\tsessionId,\n\t\t\tclientPublicShare,\n\t\t});\n\t}\n\n\tasync dklsSigningInit(params: {\n\t\tmessageHash: string;\n\t\tmessageType?: \"message\" | \"transaction\" | \"typed_data\";\n\t\tdkgSessionId: string;\n\t}): Promise<{\n\t\tsessionId: string;\n\t\tstatus: string;\n\t\tbackendNonceCommitment: {\n\t\t\tpartyId: number;\n\t\t\tcommitment: string;\n\t\t};\n\t\twalletAddress: string;\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/v2/dkls/signing/init\", params);\n\t}\n\n\tasync dklsSigningNonce(\n\t\tsessionId: string,\n\t\tclientNonceCommitment: {\n\t\t\tpartyId: number;\n\t\t\tR: string;\n\t\t\tcommitment: string;\n\t\t},\n\t): Promise<{\n\t\tsessionId: string;\n\t\tr: string;\n\t\trValue: string;\n\t\tbackendNonceReveal: {\n\t\t\tpartyId: number;\n\t\t\tR: string;\n\t\t};\n\t\tbackendPartialSignature: {\n\t\t\tpartyId: number;\n\t\t\tsigma: string;\n\t\t\tR: string;\n\t\t};\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/v2/dkls/signing/nonce\", {\n\t\t\tsessionId,\n\t\t\tclientNonceCommitment,\n\t\t});\n\t}\n\n\t/**\n\t * @deprecated This method defeats threshold security by transmitting the full key share.\n\t * Use the MtA-based signing flow instead: dklsMtaRound1 -> dklsMtaRound2 -> dklsSigningPartial.\n\t * This endpoint is only available in test mode (DKLS_LOCAL_TESTING_MODE=true).\n\t */\n\tasync dklsSigningComplete(\n\t\tsessionId: string,\n\t\tclientKeyShare: {\n\t\t\tpartyId: number;\n\t\t\tsecretShare: string;\n\t\t\tpublicShare: string;\n\t\t\tjointPublicKey: string;\n\t\t},\n\t): Promise<{\n\t\tsessionId: string;\n\t\tsignature: string;\n\t\tr: string;\n\t\ts: string;\n\t\tv: number;\n\t\tmessageHash: string;\n\t\twalletAddress: string | null;\n\t\tsecurityLevel: string;\n\t}> {\n\t\tconsole.warn(\n\t\t\t\"[DEPRECATED] dklsSigningComplete defeats threshold security. \" +\n\t\t\t\t\"Use MtA-based signing (dklsMtaRound1/dklsMtaRound2/dklsSigningPartial) instead.\",\n\t\t);\n\t\treturn this.request(\"POST\", \"/api/v2/dkls/signing/complete\", {\n\t\t\tsessionId,\n\t\t\tclientKeyShare,\n\t\t});\n\t}\n\n\tasync dklsSigningStatus(sessionId: string): Promise<{\n\t\tsessionId: string;\n\t\tstatus: string;\n\t\tmessageHash: string;\n\t\tmessageType: string;\n\t\tresult?: {\n\t\t\tsignature: string;\n\t\t\tr: string;\n\t\t\ts: string;\n\t\t\tv: number;\n\t\t};\n\t\terror?: string;\n\t\tcreatedAt: string;\n\t\tcompletedAt?: string;\n\t}> {\n\t\treturn this.request(\"GET\", `/api/v2/dkls/signing/${sessionId}`);\n\t}\n\n\tasync dklsSigningCancel(sessionId: string): Promise<{\n\t\tsessionId: string;\n\t\tmessage: string;\n\t}> {\n\t\treturn this.request(\"DELETE\", `/api/v2/dkls/signing/${sessionId}`);\n\t}\n\n\tasync dklsMtaRound1(\n\t\tsessionId: string,\n\t\tmta1Setup: {\n\t\t\tsessionId: string;\n\t\t\tsetup: {\n\t\t\t\tsetups: Array<{ A: string }>;\n\t\t\t};\n\t\t},\n\t\tmta2Setup: {\n\t\t\tsessionId: string;\n\t\t\tsetup: {\n\t\t\t\tsetups: Array<{ A: string }>;\n\t\t\t};\n\t\t},\n\t): Promise<{\n\t\tmta1Response: {\n\t\t\tsessionId: string;\n\t\t\tresponse: {\n\t\t\t\tresponses: Array<{ B: string }>;\n\t\t\t};\n\t\t};\n\t\tmta2Response: {\n\t\t\tsessionId: string;\n\t\t\tresponse: {\n\t\t\t\tresponses: Array<{ B: string }>;\n\t\t\t};\n\t\t};\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/v2/dkls/signing/mta/round1\", {\n\t\t\tsessionId,\n\t\t\tmta1Setup,\n\t\t\tmta2Setup,\n\t\t});\n\t}\n\n\tasync dklsMtaRound2(\n\t\tsessionId: string,\n\t\tmta1Encrypted: {\n\t\t\tsessionId: string;\n\t\t\tencrypted: {\n\t\t\t\tencrypted: Array<{ e0: string; e1: string }>;\n\t\t\t};\n\t\t},\n\t\tmta2Encrypted: {\n\t\t\tsessionId: string;\n\t\t\tencrypted: {\n\t\t\t\tencrypted: Array<{ e0: string; e1: string }>;\n\t\t\t};\n\t\t},\n\t): Promise<{\n\t\tsuccess: true;\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/v2/dkls/signing/mta/round2\", {\n\t\t\tsessionId,\n\t\t\tmta1Encrypted,\n\t\t\tmta2Encrypted,\n\t\t});\n\t}\n\n\tasync dklsSigningPartial(\n\t\tsessionId: string,\n\t\tclientPartialSignature: {\n\t\t\tpartyId: number;\n\t\t\ts: string;\n\t\t},\n\t): Promise<{\n\t\tsignature: string;\n\t\tr: string;\n\t\ts: string;\n\t\tv: number;\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/v2/dkls/signing/partial\", {\n\t\t\tsessionId,\n\t\t\tclientPartialSignature,\n\t\t});\n\t}\n\n\tasync initiateDeviceVerification(\n\t\tfingerprint: DeviceFingerprint,\n\t\tdeviceName?: string,\n\t): Promise<{\n\t\tverificationId: string;\n\t\texpiresAt: string;\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/user/devices/verify/initiate\", {\n\t\t\tfingerprint,\n\t\t\tdeviceName,\n\t\t});\n\t}\n\n\tasync completeDeviceVerification(\n\t\tverificationId: string,\n\t\tcode: string,\n\t\tfingerprint: DeviceFingerprint,\n\t): Promise<{\n\t\tdeviceId: string;\n\t\ttrustLevel: string;\n\t}> {\n\t\treturn this.request(\"POST\", \"/api/user/devices/verify/complete\", {\n\t\t\tverificationId,\n\t\t\tcode,\n\t\t\tfingerprint,\n\t\t});\n\t}\n}\n","import type { ProtocolMessage, ProtocolMessageType } from \"../types\";\nimport { SDKError } from \"../types\";\n\ntype MessageHandler = (message: ProtocolMessage) => void;\ntype ConnectionHandler = () => void;\ntype ErrorHandler = (error: Error) => void;\n\ninterface PendingMessage {\n\tmessage: ProtocolMessage;\n\ttimestamp: number;\n}\n\nconst RECONNECT_DELAYS = [1000, 2000, 5000, 10000, 30000];\nconst PING_INTERVAL = 30000;\nconst MESSAGE_QUEUE_MAX = 100;\n\nexport class WebSocketClient {\n\tprivate ws: WebSocket | null = null;\n\tprivate url: string;\n\tprivate accessToken: string | null = null;\n\tprivate messageHandlers = new Map<ProtocolMessageType, Set<MessageHandler>>();\n\tprivate globalHandlers = new Set<MessageHandler>();\n\tprivate onConnectHandlers = new Set<ConnectionHandler>();\n\tprivate onDisconnectHandlers = new Set<ConnectionHandler>();\n\tprivate onErrorHandlers = new Set<ErrorHandler>();\n\tprivate reconnectAttempt = 0;\n\tprivate reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n\tprivate pingInterval: ReturnType<typeof setInterval> | null = null;\n\tprivate messageQueue: PendingMessage[] = [];\n\tprivate isConnecting = false;\n\n\tconstructor(url: string) {\n\t\tthis.url = url;\n\t}\n\n\tsetAccessToken(token: string): void {\n\t\tthis.accessToken = token;\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tif (this.ws?.readyState === WebSocket.OPEN) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.isConnecting) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isConnecting = true;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst wsUrl = this.accessToken\n\t\t\t\t? `${this.url}?token=${encodeURIComponent(this.accessToken)}`\n\t\t\t\t: this.url;\n\n\t\t\tthis.ws = new WebSocket(wsUrl);\n\n\t\t\tthis.ws.onopen = () => {\n\t\t\t\tthis.isConnecting = false;\n\t\t\t\tthis.reconnectAttempt = 0;\n\t\t\t\tthis.startPingInterval();\n\t\t\t\tthis.flushMessageQueue();\n\t\t\t\tthis.onConnectHandlers.forEach((handler) => handler());\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tthis.ws.onmessage = (event) => {\n\t\t\t\tthis.handleMessage(event.data);\n\t\t\t};\n\n\t\t\tthis.ws.onerror = () => {\n\t\t\t\tconst error = new Error(\"WebSocket error\");\n\t\t\t\tthis.onErrorHandlers.forEach((handler) => handler(error));\n\t\t\t};\n\n\t\t\tthis.ws.onclose = (event) => {\n\t\t\t\tthis.isConnecting = false;\n\t\t\t\tthis.stopPingInterval();\n\t\t\t\tthis.onDisconnectHandlers.forEach((handler) => handler());\n\n\t\t\t\tif (!event.wasClean) {\n\t\t\t\t\tthis.scheduleReconnect();\n\t\t\t\t}\n\n\t\t\t\tif (this.isConnecting) {\n\t\t\t\t\treject(new SDKError(\"Connection failed\", \"CONNECTION_FAILED\"));\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n\tdisconnect(): void {\n\t\tthis.stopReconnect();\n\t\tthis.stopPingInterval();\n\n\t\tif (this.ws) {\n\t\t\tthis.ws.close(1000, \"Client disconnect\");\n\t\t\tthis.ws = null;\n\t\t}\n\t}\n\n\tisConnected(): boolean {\n\t\treturn this.ws?.readyState === WebSocket.OPEN;\n\t}\n\n\tsend(message: ProtocolMessage): void {\n\t\tif (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n\t\t\tthis.queueMessage(message);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.ws.send(JSON.stringify(message));\n\t}\n\n\ton(type: ProtocolMessageType, handler: MessageHandler): () => void {\n\t\tif (!this.messageHandlers.has(type)) {\n\t\t\tthis.messageHandlers.set(type, new Set());\n\t\t}\n\t\tthis.messageHandlers.get(type)?.add(handler);\n\n\t\treturn () => {\n\t\t\tthis.messageHandlers.get(type)?.delete(handler);\n\t\t};\n\t}\n\n\tonAny(handler: MessageHandler): () => void {\n\t\tthis.globalHandlers.add(handler);\n\t\treturn () => {\n\t\t\tthis.globalHandlers.delete(handler);\n\t\t};\n\t}\n\n\tonConnect(handler: ConnectionHandler): () => void {\n\t\tthis.onConnectHandlers.add(handler);\n\t\treturn () => {\n\t\t\tthis.onConnectHandlers.delete(handler);\n\t\t};\n\t}\n\n\tonDisconnect(handler: ConnectionHandler): () => void {\n\t\tthis.onDisconnectHandlers.add(handler);\n\t\treturn () => {\n\t\t\tthis.onDisconnectHandlers.delete(handler);\n\t\t};\n\t}\n\n\tonError(handler: ErrorHandler): () => void {\n\t\tthis.onErrorHandlers.add(handler);\n\t\treturn () => {\n\t\t\tthis.onErrorHandlers.delete(handler);\n\t\t};\n\t}\n\n\twaitForMessage(\n\t\ttype: ProtocolMessageType,\n\t\tsessionId: string,\n\t\ttimeout = 30000,\n\t): Promise<ProtocolMessage> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tunsubscribe();\n\t\t\t\treject(new SDKError(`Timeout waiting for ${type}`, \"MESSAGE_TIMEOUT\"));\n\t\t\t}, timeout);\n\n\t\t\tconst unsubscribe = this.on(type, (message) => {\n\t\t\t\tif (message.sessionId === sessionId) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tunsubscribe();\n\t\t\t\t\tresolve(message);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate handleMessage(data: string): void {\n\t\tlet message: ProtocolMessage;\n\n\t\ttry {\n\t\t\tmessage = JSON.parse(data);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tif (message.type === (\"pong\" as ProtocolMessageType)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.globalHandlers.forEach((handler) => handler(message));\n\n\t\tconst typeHandlers = this.messageHandlers.get(message.type);\n\t\tif (typeHandlers) {\n\t\t\ttypeHandlers.forEach((handler) => handler(message));\n\t\t}\n\t}\n\n\tprivate queueMessage(message: ProtocolMessage): void {\n\t\tif (this.messageQueue.length >= MESSAGE_QUEUE_MAX) {\n\t\t\tthis.messageQueue.shift();\n\t\t}\n\n\t\tthis.messageQueue.push({\n\t\t\tmessage,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t}\n\n\tprivate flushMessageQueue(): void {\n\t\tconst now = Date.now();\n\t\tconst validMessages = this.messageQueue.filter(\n\t\t\t(item) => now - item.timestamp < 60000,\n\t\t);\n\n\t\tthis.messageQueue = [];\n\n\t\tfor (const item of validMessages) {\n\t\t\tthis.send(item.message);\n\t\t}\n\t}\n\n\tprivate scheduleReconnect(): void {\n\t\tif (this.reconnectTimeout) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst delay =\n\t\t\tRECONNECT_DELAYS[\n\t\t\t\tMath.min(this.reconnectAttempt, RECONNECT_DELAYS.length - 1)\n\t\t\t];\n\n\t\tthis.reconnectTimeout = setTimeout(() => {\n\t\t\tthis.reconnectTimeout = null;\n\t\t\tthis.reconnectAttempt++;\n\t\t\tthis.connect().catch(() => {});\n\t\t}, delay);\n\t}\n\n\tprivate stopReconnect(): void {\n\t\tif (this.reconnectTimeout) {\n\t\t\tclearTimeout(this.reconnectTimeout);\n\t\t\tthis.reconnectTimeout = null;\n\t\t}\n\t\tthis.reconnectAttempt = 0;\n\t}\n\n\tprivate startPingInterval(): void {\n\t\tthis.pingInterval = setInterval(() => {\n\t\t\tif (this.ws?.readyState === WebSocket.OPEN) {\n\t\t\t\tthis.ws.send(JSON.stringify({ type: \"ping\" }));\n\t\t\t}\n\t\t}, PING_INTERVAL);\n\t}\n\n\tprivate stopPingInterval(): void {\n\t\tif (this.pingInterval) {\n\t\t\tclearInterval(this.pingInterval);\n\t\t\tthis.pingInterval = null;\n\t\t}\n\t}\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils\";\n\nconst CURVE_ORDER = secp256k1.CURVE.n;\n\nexport interface NonceShare {\n\tk: bigint;\n\tgamma: bigint;\n}\n\nexport interface NonceCommitment {\n\tpartyId: number;\n\tD: string;\n\tE: string;\n\tproof: string;\n}\n\nexport interface NonceDecommitment {\n\tpartyId: number;\n\tk: bigint;\n\tgamma: bigint;\n}\n\nfunction mod(n: bigint, m: bigint): bigint {\n\treturn ((n % m) + m) % m;\n}\n\nfunction generateRandomScalar(): bigint {\n\tconst bytes = new Uint8Array(32);\n\tcrypto.getRandomValues(bytes);\n\tlet result = 0n;\n\tfor (const byte of bytes) {\n\t\tresult = (result << 8n) + BigInt(byte);\n\t}\n\tconst scalar = mod(result, CURVE_ORDER);\n\treturn scalar === 0n ? generateRandomScalar() : scalar;\n}\n\nexport function generateNonceShare(): NonceShare {\n\treturn {\n\t\tk: generateRandomScalar(),\n\t\tgamma: generateRandomScalar(),\n\t};\n}\n\nexport function createNonceCommitment(\n\tpartyId: number,\n\tnonce: NonceShare,\n): NonceCommitment {\n\tconst G = secp256k1.ProjectivePoint.BASE;\n\n\tconst D = G.multiply(nonce.gamma);\n\tconst E = G.multiply(nonce.k);\n\n\tconst proof = createNonceProof(partyId, nonce.k, nonce.gamma, D, E);\n\n\treturn {\n\t\tpartyId,\n\t\tD: D.toHex(true),\n\t\tE: E.toHex(true),\n\t\tproof,\n\t};\n}\n\nexport function verifyNonceCommitment(commitment: NonceCommitment): boolean {\n\ttry {\n\t\tsecp256k1.ProjectivePoint.fromHex(commitment.D);\n\t\tsecp256k1.ProjectivePoint.fromHex(commitment.E);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function verifyNonceProof(commitment: NonceCommitment): boolean {\n\ttry {\n\t\tconst G = secp256k1.ProjectivePoint.BASE;\n\t\tconst D = secp256k1.ProjectivePoint.fromHex(commitment.D);\n\t\tconst E = secp256k1.ProjectivePoint.fromHex(commitment.E);\n\n\t\tconst { R1, R2, s1, s2 } = JSON.parse(commitment.proof);\n\n\t\tif (!/^[0-9a-fA-F]{1,64}$/.test(s1) || !/^[0-9a-fA-F]{1,64}$/.test(s2)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst R1Point = secp256k1.ProjectivePoint.fromHex(R1);\n\t\tconst R2Point = secp256k1.ProjectivePoint.fromHex(R2);\n\t\tconst s1Scalar = BigInt(`0x${s1}`);\n\t\tconst s2Scalar = BigInt(`0x${s2}`);\n\n\t\tif (s1Scalar <= 0n || s1Scalar >= CURVE_ORDER) return false;\n\t\tif (s2Scalar <= 0n || s2Scalar >= CURVE_ORDER) return false;\n\n\t\tconst challenge = computeNonceChallenge(\n\t\t\tcommitment.partyId,\n\t\t\tcommitment.D,\n\t\t\tcommitment.E,\n\t\t\tR1,\n\t\t\tR2,\n\t\t);\n\n\t\tconst leftSide1 = G.multiply(s1Scalar);\n\t\tconst rightSide1 = R1Point.add(D.multiply(challenge));\n\t\tif (!leftSide1.equals(rightSide1)) return false;\n\n\t\tconst leftSide2 = G.multiply(s2Scalar);\n\t\tconst rightSide2 = R2Point.add(E.multiply(challenge));\n\t\tif (!leftSide2.equals(rightSide2)) return false;\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction createNonceProof(\n\tpartyId: number,\n\tk: bigint,\n\tgamma: bigint,\n\tD: typeof secp256k1.ProjectivePoint.BASE,\n\tE: typeof secp256k1.ProjectivePoint.BASE,\n): string {\n\tconst G = secp256k1.ProjectivePoint.BASE;\n\n\tconst r1 = generateRandomScalar();\n\tconst r2 = generateRandomScalar();\n\n\tconst R1 = G.multiply(r1);\n\tconst R2 = G.multiply(r2);\n\n\tconst challenge = computeNonceChallenge(\n\t\tpartyId,\n\t\tD.toHex(true),\n\t\tE.toHex(true),\n\t\tR1.toHex(true),\n\t\tR2.toHex(true),\n\t);\n\n\tconst s1 = mod(r1 + gamma * challenge, CURVE_ORDER);\n\tconst s2 = mod(r2 + k * challenge, CURVE_ORDER);\n\n\treturn JSON.stringify({\n\t\tR1: R1.toHex(true),\n\t\tR2: R2.toHex(true),\n\t\ts1: s1.toString(16).padStart(64, \"0\"),\n\t\ts2: s2.toString(16).padStart(64, \"0\"),\n\t});\n}\n\nfunction computeNonceChallenge(\n\tpartyId: number,\n\tD: string,\n\tE: string,\n\tR1: string,\n\tR2: string,\n): bigint {\n\tconst input = `${partyId}:${D}:${E}:${R1}:${R2}`;\n\tconst hash = sha256(utf8ToBytes(input));\n\treturn mod(BigInt(`0x${bytesToHex(hash)}`), CURVE_ORDER);\n}\n\nexport function combineNonceCommitments(commitments: NonceCommitment[]): {\n\tR: string;\n\tcombinedGamma: string;\n} {\n\tlet combinedD = secp256k1.ProjectivePoint.fromHex(commitments[0].D);\n\tlet combinedE = secp256k1.ProjectivePoint.fromHex(commitments[0].E);\n\n\tfor (let i = 1; i < commitments.length; i++) {\n\t\tcombinedD = combinedD.add(\n\t\t\tsecp256k1.ProjectivePoint.fromHex(commitments[i].D),\n\t\t);\n\t\tcombinedE = combinedE.add(\n\t\t\tsecp256k1.ProjectivePoint.fromHex(commitments[i].E),\n\t\t);\n\t}\n\n\treturn {\n\t\tR: combinedE.toHex(true),\n\t\tcombinedGamma: combinedD.toHex(true),\n\t};\n}\n\nexport function computeR(combinedE: string): {\n\tr: bigint;\n\tR: string;\n\trPoint: { x: bigint; y: bigint };\n} {\n\tconst R = secp256k1.ProjectivePoint.fromHex(combinedE);\n\tconst rFull = R.toAffine();\n\tconst r = mod(rFull.x, CURVE_ORDER);\n\n\treturn {\n\t\tr,\n\t\tR: R.toHex(true),\n\t\trPoint: { x: rFull.x, y: rFull.y },\n\t};\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1\";\n\nconst CURVE_ORDER = secp256k1.CURVE.n;\nconst G = secp256k1.ProjectivePoint.BASE;\n\nexport interface PartialSignatureData {\n\tpartyId: number;\n\tsigma: bigint;\n\tpublicShare: string;\n\tnonceCommitment: string;\n}\n\nfunction mod(n: bigint, m: bigint): bigint {\n\treturn ((n % m) + m) % m;\n}\n\nfunction modInverse(a: bigint, m: bigint): bigint {\n\tlet [oldR, r] = [a, m];\n\tlet [oldS, s] = [1n, 0n];\n\n\twhile (r !== 0n) {\n\t\tconst quotient = oldR / r;\n\t\t[oldR, r] = [r, oldR - quotient * r];\n\t\t[oldS, s] = [s, oldS - quotient * s];\n\t}\n\n\treturn mod(oldS, m);\n}\n\nexport function computeLagrangeCoefficient(\n\tpartyId: number,\n\tparticipatingParties: number[],\n): bigint {\n\tlet numerator = 1n;\n\tlet denominator = 1n;\n\n\tconst i = BigInt(partyId);\n\n\tfor (const j of participatingParties) {\n\t\tif (j !== partyId) {\n\t\t\tconst jBig = BigInt(j);\n\t\t\tnumerator = mod(numerator * (CURVE_ORDER - jBig), CURVE_ORDER);\n\t\t\tdenominator = mod(denominator * mod(i - jBig, CURVE_ORDER), CURVE_ORDER);\n\t\t}\n\t}\n\n\tconst denominatorInverse = modInverse(denominator, CURVE_ORDER);\n\treturn mod(numerator * denominatorInverse, CURVE_ORDER);\n}\n\nexport function computePartialSignature(\n\tpartyId: number,\n\tkeyShare: bigint,\n\tnonceK: bigint,\n\t_nonceGamma: bigint,\n\tmessageHash: bigint,\n\tr: bigint,\n\tparticipatingParties: number[],\n): PartialSignatureData {\n\tconst lambda = computeLagrangeCoefficient(partyId, participatingParties);\n\n\tconst kInverse = modInverse(nonceK, CURVE_ORDER);\n\n\tconst adjustedShare = mod(keyShare * lambda, CURVE_ORDER);\n\tconst sigma = mod(kInverse * (messageHash + r * adjustedShare), CURVE_ORDER);\n\n\tconst publicShare = G.multiply(keyShare).toHex(true);\n\tconst nonceCommitment = G.multiply(nonceK).toHex(true);\n\n\treturn {\n\t\tpartyId,\n\t\tsigma,\n\t\tpublicShare,\n\t\tnonceCommitment,\n\t};\n}\n\nexport function combinePartialSignatures(\n\tpartials: PartialSignatureData[],\n\tr: bigint,\n\tcombinedRPoint: { x: bigint; y: bigint },\n): { r: bigint; s: bigint; v: number } {\n\tlet s = 0n;\n\n\tfor (const partial of partials) {\n\t\ts = mod(s + partial.sigma, CURVE_ORDER);\n\t}\n\n\tlet v = combinedRPoint.y % 2n === 0n ? 27 : 28;\n\n\tif (s > CURVE_ORDER / 2n) {\n\t\ts = CURVE_ORDER - s;\n\t\tv = v === 27 ? 28 : 27;\n\t}\n\n\treturn { r, s, v };\n}\n\nexport function verifyPartialSignature(\n\tpartial: PartialSignatureData,\n\texpectedPublicShare: string,\n\texpectedNonceCommitment: string,\n\tr: bigint,\n\tmessageHash: bigint,\n\tparticipatingParties: number[],\n): boolean {\n\tif (partial.sigma <= 0n || partial.sigma >= CURVE_ORDER) {\n\t\treturn false;\n\t}\n\n\tif (!partial.publicShare || !partial.nonceCommitment) {\n\t\treturn false;\n\t}\n\n\tif (expectedPublicShare && partial.publicShare !== expectedPublicShare) {\n\t\treturn false;\n\t}\n\n\tif (\n\t\texpectedNonceCommitment &&\n\t\tpartial.nonceCommitment !== expectedNonceCommitment\n\t) {\n\t\treturn false;\n\t}\n\n\tlet R_i: typeof G;\n\ttry {\n\t\tR_i = secp256k1.ProjectivePoint.fromHex(partial.nonceCommitment);\n\t} catch {\n\t\treturn false;\n\t}\n\n\tlet P_i: typeof G;\n\ttry {\n\t\tP_i = secp256k1.ProjectivePoint.fromHex(partial.publicShare);\n\t} catch {\n\t\treturn false;\n\t}\n\n\tconst lambda = computeLagrangeCoefficient(\n\t\tpartial.partyId,\n\t\tparticipatingParties,\n\t);\n\n\tconst rTimesLambda = mod(r * lambda, CURVE_ORDER);\n\n\tconst leftSide = R_i.multiply(partial.sigma);\n\n\tconst rightSide = G.multiply(messageHash).add(P_i.multiply(rTimesLambda));\n\n\treturn leftSide.equals(rightSide);\n}\n\nexport function formatSignature(r: bigint, s: bigint, v: number): string {\n\tconst rHex = r.toString(16).padStart(64, \"0\");\n\tconst sHex = s.toString(16).padStart(64, \"0\");\n\tconst vHex = v.toString(16).padStart(2, \"0\");\n\n\treturn `0x${rHex}${sHex}${vHex}`;\n}\n\nexport function parseMessageHash(hash: string): bigint {\n\tconst cleanHash = hash.startsWith(\"0x\") ? hash.slice(2) : hash;\n\treturn BigInt(`0x${cleanHash}`);\n}\n","import type { APIClient } from \"../../transport/api-client\";\nimport type { WebSocketClient } from \"../../transport/websocket-client\";\nimport type {\n\tKeyShare,\n\tSignature,\n\tSigningRequest,\n\tSigningResult,\n\tSigningSessionState,\n} from \"../../types\";\nimport { SDKError } from \"../../types\";\nimport {\n\ttype NonceCommitment,\n\ttype NonceShare,\n\tcombineNonceCommitments,\n\tcomputeR,\n\tcreateNonceCommitment,\n\tgenerateNonceShare,\n\tverifyNonceCommitment,\n\tverifyNonceProof,\n} from \"./nonce\";\nimport {\n\ttype PartialSignatureData,\n\tcomputePartialSignature,\n\tparseMessageHash,\n\tverifyPartialSignature,\n} from \"./partial-signature\";\n\nexport interface SigningClientConfig {\n\tapiClient: APIClient;\n\twsClient?: WebSocketClient;\n\tkeyShare: KeyShare;\n\tpartyPublicShares: Map<number, string>;\n\ttimeout?: number;\n}\n\nexport class SigningClient {\n\tprivate apiClient: APIClient;\n\tprivate wsClient?: WebSocketClient;\n\tprivate keyShare: KeyShare;\n\tprivate timeout: number;\n\n\tprivate state: SigningSessionState | null = null;\n\tprivate nonceShare: NonceShare | null = null;\n\tprivate receivedCommitments: Map<number, NonceCommitment> = new Map();\n\tprivate expectedPublicShares: Map<number, string> = new Map();\n\tprivate r: bigint | null = null;\n\n\tconstructor(config: SigningClientConfig) {\n\t\tthis.apiClient = config.apiClient;\n\t\tthis.wsClient = config.wsClient;\n\t\tthis.keyShare = config.keyShare;\n\t\tthis.expectedPublicShares = new Map(config.partyPublicShares);\n\t\tthis.timeout = config.timeout ?? 30000;\n\t}\n\n\tasync sign(request: SigningRequest): Promise<SigningResult> {\n\t\ttry {\n\t\t\tawait this.initializeSession(request);\n\n\t\t\tawait this.runNonceCommitmentPhase();\n\n\t\t\tawait this.runPartialSignaturePhase();\n\n\t\t\treturn await this.completeProtocol();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"Signing failed\";\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: message,\n\t\t\t};\n\t\t} finally {\n\t\t\tthis.cleanup();\n\t\t}\n\t}\n\n\tprivate async initializeSession(request: SigningRequest): Promise<void> {\n\t\tconst { sessionId, participatingParties } =\n\t\t\tawait this.apiClient.initiateSigningSession(\n\t\t\t\trequest.messageHash,\n\t\t\t\trequest.messageType,\n\t\t\t);\n\n\t\tif (participatingParties.length < this.keyShare.threshold) {\n\t\t\tthrow new SDKError(\n\t\t\t\t`Insufficient participating parties: got ${participatingParties.length}, need ${this.keyShare.threshold}`,\n\t\t\t\t\"INSUFFICIENT_PARTIES\",\n\t\t\t);\n\t\t}\n\n\t\tthis.state = {\n\t\t\tsessionId,\n\t\t\tround: \"nonce_commitment\",\n\t\t\tmessageHash: request.messageHash,\n\t\t\tparticipatingParties,\n\t\t\tnonceCommitments: new Map(),\n\t\t\tpartialSignatures: new Map(),\n\t\t};\n\n\t\tthis.nonceShare = generateNonceShare();\n\n\t\tif (this.wsClient) {\n\t\t\tawait this.wsClient.connect();\n\t\t}\n\t}\n\n\tprivate async runNonceCommitmentPhase(): Promise<void> {\n\t\tif (!this.state || !this.nonceShare) {\n\t\t\tthrow new SDKError(\"State not initialized\", \"STATE_ERROR\");\n\t\t}\n\n\t\tconst commitment = createNonceCommitment(\n\t\t\tthis.keyShare.partyId,\n\t\t\tthis.nonceShare,\n\t\t);\n\n\t\tawait this.apiClient.submitNonceCommitment(\n\t\t\tthis.state.sessionId,\n\t\t\tthis.keyShare.partyId,\n\t\t\tJSON.stringify(commitment),\n\t\t);\n\n\t\tthis.receivedCommitments.set(this.keyShare.partyId, commitment);\n\n\t\tconst otherCommitments = await this.waitForNonceCommitments();\n\n\t\tfor (const [partyId, comm] of otherCommitments) {\n\t\t\tif (!verifyNonceCommitment(comm)) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Invalid nonce commitment from party ${partyId}`,\n\t\t\t\t\t\"INVALID_NONCE_COMMITMENT\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!verifyNonceProof(comm)) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Invalid nonce proof from party ${partyId}`,\n\t\t\t\t\t\"INVALID_NONCE_PROOF\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.receivedCommitments.set(partyId, comm);\n\t\t}\n\n\t\tconst allCommitments = Array.from(this.receivedCommitments.values());\n\t\tconst { R } = combineNonceCommitments(allCommitments);\n\t\tconst { r } = computeR(R);\n\t\tthis.r = r;\n\n\t\tthis.state.round = \"partial_signature\";\n\t}\n\n\tprivate async runPartialSignaturePhase(): Promise<void> {\n\t\tif (!this.state || !this.nonceShare || this.r === null) {\n\t\t\tthrow new SDKError(\"State not initialized\", \"STATE_ERROR\");\n\t\t}\n\n\t\tconst messageHashBigInt = parseMessageHash(this.state.messageHash);\n\t\tconst keyShareBigInt = BigInt(`0x${this.keyShare.privateShare}`);\n\n\t\tconst partial = computePartialSignature(\n\t\t\tthis.keyShare.partyId,\n\t\t\tkeyShareBigInt,\n\t\t\tthis.nonceShare.k,\n\t\t\tthis.nonceShare.gamma,\n\t\t\tmessageHashBigInt,\n\t\t\tthis.r,\n\t\t\tthis.state.participatingParties,\n\t\t);\n\n\t\tawait this.apiClient.submitPartialSignature(\n\t\t\tthis.state.sessionId,\n\t\t\tthis.keyShare.partyId,\n\t\t\t{\n\t\t\t\tr: this.r.toString(16).padStart(64, \"0\"),\n\t\t\t\ts: partial.sigma.toString(16).padStart(64, \"0\"),\n\t\t\t\tpublicShare: partial.publicShare,\n\t\t\t\tnonceCommitment: partial.nonceCommitment,\n\t\t\t},\n\t\t);\n\n\t\tthis.state.partialSignatures.set(this.keyShare.partyId, {\n\t\t\tpartyId: this.keyShare.partyId,\n\t\t\tr: this.r.toString(16).padStart(64, \"0\"),\n\t\t\ts: partial.sigma.toString(16).padStart(64, \"0\"),\n\t\t\tpublicShare: partial.publicShare,\n\t\t\tnonceCommitment: partial.nonceCommitment,\n\t\t});\n\n\t\tconst otherPartials = await this.waitForPartialSignatures();\n\t\tawait this.verifyOtherPartials(otherPartials, messageHashBigInt);\n\n\t\tthis.state.round = \"complete\";\n\t}\n\n\tprivate async waitForPartialSignatures(): Promise<\n\t\tMap<number, PartialSignatureData>\n\t> {\n\t\tconst startTime = Date.now();\n\t\tconst partials = new Map<number, PartialSignatureData>();\n\n\t\twhile (Date.now() - startTime < this.timeout) {\n\t\t\tconst result = await this.apiClient.getPartialSignatures(\n\t\t\t\tthis.state?.sessionId ?? \"\",\n\t\t\t);\n\n\t\t\tfor (const p of result.partials) {\n\t\t\t\tif (p.partyId !== this.keyShare.partyId && !partials.has(p.partyId)) {\n\t\t\t\t\tlet sigma: bigint;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (!/^[0-9a-fA-F]{1,64}$/.test(p.s)) {\n\t\t\t\t\t\t\tthrow new SDKError(\n\t\t\t\t\t\t\t\t`Invalid sigma hex from party ${p.partyId}`,\n\t\t\t\t\t\t\t\t\"INVALID_PARTIAL_FORMAT\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsigma = BigInt(`0x${p.s}`);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (e instanceof SDKError) throw e;\n\t\t\t\t\t\tthrow new SDKError(\n\t\t\t\t\t\t\t`Failed to parse sigma from party ${p.partyId}`,\n\t\t\t\t\t\t\t\"INVALID_PARTIAL_FORMAT\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tpartials.set(p.partyId, {\n\t\t\t\t\t\tpartyId: p.partyId,\n\t\t\t\t\t\tsigma,\n\t\t\t\t\t\tpublicShare: p.publicShare,\n\t\t\t\t\t\tnonceCommitment: p.nonceCommitment,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst expectedCount = (this.state?.participatingParties.length ?? 1) - 1;\n\t\t\tif (result.ready || partials.size >= expectedCount) {\n\t\t\t\treturn partials;\n\t\t\t}\n\n\t\t\tawait this.delay(500);\n\t\t}\n\n\t\tthrow new SDKError(\n\t\t\t\"Timeout waiting for partial signatures\",\n\t\t\t\"PARTIAL_SIGNATURE_TIMEOUT\",\n\t\t);\n\t}\n\n\tprivate async verifyOtherPartials(\n\t\tpartials: Map<number, PartialSignatureData>,\n\t\tmessageHash: bigint,\n\t): Promise<void> {\n\t\tfor (const [partyId, partial] of partials) {\n\t\t\tconst expectedNonceCommitment = this.receivedCommitments.get(partyId);\n\t\t\tif (!expectedNonceCommitment) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Missing nonce commitment for party ${partyId}`,\n\t\t\t\t\t\"MISSING_NONCE_COMMITMENT\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst expectedPublicShare = this.expectedPublicShares.get(partyId);\n\t\t\tif (!expectedPublicShare) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Missing expected public share for party ${partyId}. Public shares from DKG must be provided via partyPublicShares config.`,\n\t\t\t\t\t\"MISSING_PUBLIC_SHARE\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst isValid = verifyPartialSignature(\n\t\t\t\tpartial,\n\t\t\t\texpectedPublicShare,\n\t\t\t\texpectedNonceCommitment.E,\n\t\t\t\tthis.r!,\n\t\t\t\tmessageHash,\n\t\t\t\tthis.state?.participatingParties ?? [],\n\t\t\t);\n\n\t\t\tif (!isValid) {\n\t\t\t\tthrow new SDKError(\n\t\t\t\t\t`Invalid partial signature from party ${partyId}`,\n\t\t\t\t\t\"INVALID_PARTIAL_SIGNATURE\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.state?.partialSignatures.set(partyId, {\n\t\t\t\tpartyId,\n\t\t\t\tr: this.r?.toString(16).padStart(64, \"0\") ?? \"\",\n\t\t\t\ts: partial.sigma.toString(16).padStart(64, \"0\"),\n\t\t\t\tpublicShare: partial.publicShare,\n\t\t\t\tnonceCommitment: partial.nonceCommitment,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async completeProtocol(): Promise<SigningResult> {\n\t\tif (!this.state || this.r === null) {\n\t\t\tthrow new SDKError(\"Protocol not complete\", \"PROTOCOL_INCOMPLETE\");\n\t\t}\n\n\t\tconst result = await this.waitForSigningResult();\n\n\t\tif (!result.complete || !result.signature) {\n\t\t\tthrow new SDKError(\"Signing not complete\", \"SIGNING_INCOMPLETE\");\n\t\t}\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tsignature: result.signature,\n\t\t};\n\t}\n\n\tprivate async waitForNonceCommitments(): Promise<\n\t\tMap<number, NonceCommitment>\n\t> {\n\t\tconst startTime = Date.now();\n\t\tconst commitments = new Map<number, NonceCommitment>();\n\n\t\twhile (Date.now() - startTime < this.timeout) {\n\t\t\tconst result = await this.apiClient.getNonceCommitments(\n\t\t\t\tthis.state?.sessionId ?? \"\",\n\t\t\t);\n\n\t\t\tfor (const [partyIdStr, commitmentStr] of Object.entries(\n\t\t\t\tresult.commitments,\n\t\t\t)) {\n\t\t\t\tconst partyId = Number.parseInt(partyIdStr, 10);\n\t\t\t\tif (partyId !== this.keyShare.partyId && !commitments.has(partyId)) {\n\t\t\t\t\tcommitments.set(partyId, JSON.parse(commitmentStr as string));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result.ready) {\n\t\t\t\treturn commitments;\n\t\t\t}\n\n\t\t\tconst expectedCount = (this.state?.participatingParties.length ?? 1) - 1;\n\t\t\tif (commitments.size >= expectedCount) {\n\t\t\t\treturn commitments;\n\t\t\t}\n\n\t\t\tawait this.delay(500);\n\t\t}\n\n\t\tthrow new SDKError(\n\t\t\t\"Timeout waiting for nonce commitments\",\n\t\t\t\"NONCE_COMMITMENT_TIMEOUT\",\n\t\t);\n\t}\n\n\tprivate async waitForSigningResult(): Promise<{\n\t\tcomplete: boolean;\n\t\tsignature?: Signature;\n\t}> {\n\t\tconst startTime = Date.now();\n\n\t\twhile (Date.now() - startTime < this.timeout) {\n\t\t\tconst result = await this.apiClient.getSigningResult(\n\t\t\t\tthis.state?.sessionId ?? \"\",\n\t\t\t);\n\n\t\t\tif (result.complete && result.signature) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tawait this.delay(500);\n\t\t}\n\n\t\tthrow new SDKError(\n\t\t\t\"Timeout waiting for signing result\",\n\t\t\t\"SIGNING_RESULT_TIMEOUT\",\n\t\t);\n\t}\n\n\tprivate delay(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n\n\tprivate cleanup(): void {\n\t\tthis.state = null;\n\t\tthis.nonceShare = null;\n\t\tthis.receivedCommitments.clear();\n\t\tthis.expectedPublicShares.clear();\n\t\tthis.r = null;\n\t}\n}\n\nexport function createSigningClient(\n\tapiClient: APIClient,\n\tkeyShare: KeyShare,\n\tpartyPublicShares: Map<number, string>,\n\twsClient?: WebSocketClient,\n): SigningClient {\n\treturn new SigningClient({\n\t\tapiClient,\n\t\twsClient,\n\t\tkeyShare,\n\t\tpartyPublicShares,\n\t});\n}\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\n\nexport function deriveEOAAddress(publicKey: string): string {\n\tlet pubKeyHex = publicKey.startsWith(\"0x\") ? publicKey.slice(2) : publicKey;\n\n\tif (pubKeyHex.startsWith(\"04\")) {\n\t\tpubKeyHex = pubKeyHex.slice(2);\n\t}\n\n\tif (pubKeyHex.length !== 128) {\n\t\tthrow new Error(\n\t\t\t`Invalid public key length: expected 128 hex chars (64 bytes), got ${pubKeyHex.length}`,\n\t\t);\n\t}\n\n\tconst pubKeyBytes = hexToBytes(pubKeyHex);\n\tconst hash = keccak_256(pubKeyBytes);\n\tconst addressBytes = hash.slice(-20);\n\n\treturn `0x${bytesToHex(addressBytes)}`;\n}\n\n/**\n * @deprecated This function produces incorrect addresses.\n * Use SmartWallet.getSmartWalletAddress() or SimpleAccount.getAccountAddress()\n * which call the factory's getAddress() method via RPC.\n */\nexport function deriveSmartWalletAddress(\n\t_factoryAddress: string,\n\t_ownerAddress: string,\n\t_salt = 0n,\n): string {\n\tthrow new Error(\n\t\t\"deriveSmartWalletAddress is deprecated. \" +\n\t\t\t\"Use SmartWallet.getSmartWalletAddress() or SimpleAccount.getAccountAddress() \" +\n\t\t\t\"which call the factory's getAddress() method via RPC.\",\n\t);\n}\n\nexport function computeCreate2Address(\n\tfactoryAddress: string,\n\tsalt: string,\n\tinitCodeHash: string,\n): string {\n\tconst CREATE2_PREFIX = \"ff\";\n\n\tconst factoryHex = factoryAddress.slice(2).toLowerCase();\n\tconst saltHex = salt.startsWith(\"0x\") ? salt.slice(2) : salt;\n\tconst initCodeHashHex = initCodeHash.startsWith(\"0x\")\n\t\t? initCodeHash.slice(2)\n\t\t: initCodeHash;\n\n\tconst packedData = hexToBytes(\n\t\tCREATE2_PREFIX + factoryHex + saltHex.padStart(64, \"0\") + initCodeHashHex,\n\t);\n\n\tconst hash = keccak_256(packedData);\n\tconst addressBytes = hash.slice(-20);\n\n\treturn `0x${bytesToHex(addressBytes)}`;\n}\n\nexport function checksumAddress(address: string): string {\n\tconst addr = address.toLowerCase().replace(\"0x\", \"\");\n\tconst hash = bytesToHex(keccak_256(new TextEncoder().encode(addr)));\n\n\tlet checksummed = \"0x\";\n\tfor (let i = 0; i < 40; i++) {\n\t\tif (Number.parseInt(hash[i], 16) >= 8) {\n\t\t\tchecksummed += addr[i].toUpperCase();\n\t\t} else {\n\t\t\tchecksummed += addr[i];\n\t\t}\n\t}\n\n\treturn checksummed;\n}\n\nexport function isValidAddress(address: string): boolean {\n\tif (!/^0x[a-fA-F0-9]{40}$/.test(address)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { bytesToHex, hexToBytes, utf8ToBytes } from \"@noble/hashes/utils\";\nimport type { RpcConnection } from \"../chains/chain-manager\";\nimport { SigningClient } from \"../protocols/signing/signing-client\";\nimport type { APIClient } from \"../transport/api-client\";\nimport type { KeyShare, Signature, WalletInfo } from \"../types\";\nimport { SDKError } from \"../types\";\nimport { checksumAddress, deriveEOAAddress } from \"./address-derivation\";\n\nfunction stripHexPrefix(value: string): string {\n\treturn value.startsWith(\"0x\") ? value.slice(2) : value;\n}\n\nexport interface UserOperation {\n\tsender: string;\n\tnonce: bigint;\n\tinitCode: string;\n\tcallData: string;\n\tcallGasLimit: bigint;\n\tverificationGasLimit: bigint;\n\tpreVerificationGas: bigint;\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n\tpaymasterAndData: string;\n\tsignature: string;\n}\n\nexport interface TransactionRequest {\n\tto: string;\n\tvalue?: bigint;\n\tdata?: string;\n}\n\nexport interface SmartWalletConfig {\n\tapiClient: APIClient;\n\tkeyShare: KeyShare;\n\tpartyPublicShares: Map<number, string>;\n\tpublicKey: string;\n\tchainId: number;\n\trpcConnection: RpcConnection;\n\tbundlerUrl: string;\n\tentryPointAddress?: string;\n\tfactoryAddress?: string;\n\tpaymasterUrl?: string;\n}\n\nconst DEFAULT_ENTRY_POINT = \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\";\nconst DEFAULT_FACTORY = \"0x9406Cc6185a346906296840746125a0E44976454\";\nconst GET_ADDRESS_SELECTOR = \"8cb84e18\";\n\nexport class SmartWallet {\n\tprivate apiClient: APIClient;\n\tprivate keyShare: KeyShare;\n\tprivate partyPublicShares: Map<number, string>;\n\tprivate publicKey: string;\n\tprivate chainId: number;\n\tprivate rpcConnection: RpcConnection;\n\tprivate bundlerUrl: string;\n\tprivate entryPointAddress: string;\n\tprivate factoryAddress: string;\n\tprivate paymasterUrl?: string;\n\n\tprivate _eoaAddress: string;\n\tprivate _smartWalletAddress: string | null = null;\n\tprivate _isDeployed: boolean | null = null;\n\tprivate _cachedNonce: bigint | null = null;\n\n\tconstructor(config: SmartWalletConfig) {\n\t\tthis.apiClient = config.apiClient;\n\t\tthis.keyShare = config.keyShare;\n\t\tthis.partyPublicShares = config.partyPublicShares;\n\t\tthis.publicKey = config.publicKey;\n\t\tthis.chainId = config.chainId;\n\t\tthis.rpcConnection = config.rpcConnection;\n\t\tthis.bundlerUrl = config.bundlerUrl;\n\t\tthis.entryPointAddress = config.entryPointAddress ?? DEFAULT_ENTRY_POINT;\n\t\tthis.factoryAddress = config.factoryAddress ?? DEFAULT_FACTORY;\n\t\tthis.paymasterUrl = config.paymasterUrl;\n\n\t\tthis._eoaAddress = deriveEOAAddress(this.publicKey);\n\t}\n\n\tget eoaAddress(): string {\n\t\treturn checksumAddress(this._eoaAddress);\n\t}\n\n\t/**\n\t * @deprecated Use getSmartWalletAddress() instead.\n\t */\n\tget smartWalletAddress(): string {\n\t\tif (this._smartWalletAddress) {\n\t\t\treturn checksumAddress(this._smartWalletAddress);\n\t\t}\n\t\tthrow new Error(\n\t\t\t\"SmartWallet.smartWalletAddress is deprecated. \" +\n\t\t\t\t\"Use 'await wallet.getSmartWalletAddress()' instead.\",\n\t\t);\n\t}\n\n\tasync getSmartWalletAddress(): Promise<string> {\n\t\tif (this._smartWalletAddress) {\n\t\t\treturn checksumAddress(this._smartWalletAddress);\n\t\t}\n\n\t\tconst ownerPadded = this._eoaAddress.slice(2).padStart(64, \"0\");\n\t\tconst saltPadded = \"0\".padStart(64, \"0\");\n\n\t\tconst result = await this.rpcConnection.call<string>(\"eth_call\", [\n\t\t\t{\n\t\t\t\tto: this.factoryAddress,\n\t\t\t\tdata: `0x${GET_ADDRESS_SELECTOR}${ownerPadded}${saltPadded}`,\n\t\t\t},\n\t\t\t\"latest\",\n\t\t]);\n\n\t\tthis._smartWalletAddress = `0x${result.slice(-40)}`;\n\t\treturn checksumAddress(this._smartWalletAddress);\n\t}\n\n\tasync getWalletInfo(): Promise<WalletInfo> {\n\t\treturn {\n\t\t\teoaAddress: this.eoaAddress,\n\t\t\tsmartWalletAddress: await this.getSmartWalletAddress(),\n\t\t\tpublicKey: this.publicKey,\n\t\t\tchainId: this.chainId,\n\t\t};\n\t}\n\n\tasync buildUserOperation(\n\t\ttransactions: TransactionRequest | TransactionRequest[],\n\t): Promise<UserOperation> {\n\t\tconst txArray = Array.isArray(transactions) ? transactions : [transactions];\n\n\t\tconst callData = this.encodeExecuteBatch(txArray);\n\t\tconst smartWalletAddress = await this.getSmartWalletAddress();\n\n\t\tconst nonce = await this.getNonce();\n\n\t\tconst isDeployed = await this.isDeployed();\n\t\tconst initCode = isDeployed ? \"0x\" : this.getInitCode();\n\n\t\tconst feeData = await this.getFeeData();\n\n\t\tconst userOp: UserOperation = {\n\t\t\tsender: smartWalletAddress,\n\t\t\tnonce,\n\t\t\tinitCode,\n\t\t\tcallData,\n\t\t\tcallGasLimit: 200000n,\n\t\t\tverificationGasLimit: isDeployed ? 100000n : 400000n,\n\t\t\tpreVerificationGas: 50000n,\n\t\t\tmaxFeePerGas: feeData.maxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n\t\t\tpaymasterAndData: \"0x\",\n\t\t\tsignature: \"0x\",\n\t\t};\n\n\t\tif (this.paymasterUrl) {\n\t\t\tconst paymasterData = await this.getPaymasterData(userOp);\n\t\t\tuserOp.paymasterAndData = paymasterData;\n\t\t}\n\n\t\treturn userOp;\n\t}\n\n\tasync signUserOperation(userOp: UserOperation): Promise<UserOperation> {\n\t\tconst userOpHash = this.computeUserOpHash(userOp);\n\n\t\tconst signingClient = new SigningClient({\n\t\t\tapiClient: this.apiClient,\n\t\t\tkeyShare: this.keyShare,\n\t\t\tpartyPublicShares: this.partyPublicShares,\n\t\t});\n\n\t\tconst result = await signingClient.sign({\n\t\t\tmessageHash: userOpHash,\n\t\t\tmessageType: \"transaction\",\n\t\t});\n\n\t\tif (!result.success || !result.signature) {\n\t\t\tthrow new SDKError(result.error ?? \"Signing failed\", \"SIGNING_FAILED\");\n\t\t}\n\n\t\treturn {\n\t\t\t...userOp,\n\t\t\tsignature: result.signature.fullSignature,\n\t\t};\n\t}\n\n\tasync sendUserOperation(\n\t\tuserOp: UserOperation,\n\t): Promise<{ userOpHash: string; wait: () => Promise<void> }> {\n\t\tconst signedUserOp =\n\t\t\tuserOp.signature === \"0x\" ? await this.signUserOperation(userOp) : userOp;\n\n\t\tconst userOpHex = this.userOpToHex(signedUserOp);\n\n\t\tconst response = await fetch(this.bundlerUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid: 1,\n\t\t\t\tmethod: \"eth_sendUserOperation\",\n\t\t\t\tparams: [userOpHex, this.entryPointAddress],\n\t\t\t}),\n\t\t});\n\n\t\tconst data = await response.json();\n\t\tif (data.error) {\n\t\t\tthrow new SDKError(\n\t\t\t\t`Bundler error: ${data.error.message}`,\n\t\t\t\t\"BUNDLER_ERROR\",\n\t\t\t);\n\t\t}\n\n\t\tconst userOpHash = data.result as string;\n\n\t\treturn {\n\t\t\tuserOpHash,\n\t\t\twait: async () => {\n\t\t\t\tawait this.waitForUserOperationReceipt(userOpHash);\n\t\t\t\tthis._isDeployed = true;\n\t\t\t\tthis._cachedNonce = null;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async waitForUserOperationReceipt(userOpHash: string): Promise<void> {\n\t\tconst maxAttempts = 60;\n\t\tconst intervalMs = 2000;\n\n\t\tfor (let i = 0; i < maxAttempts; i++) {\n\t\t\tconst response = await fetch(this.bundlerUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid: 1,\n\t\t\t\t\tmethod: \"eth_getUserOperationReceipt\",\n\t\t\t\t\tparams: [userOpHash],\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tconst data = await response.json();\n\t\t\tif (data.result) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, intervalMs));\n\t\t}\n\n\t\tthrow new SDKError(\"UserOperation receipt not found\", \"TIMEOUT\");\n\t}\n\n\tprivate userOpToHex(userOp: UserOperation): Record<string, string> {\n\t\treturn {\n\t\t\tsender: userOp.sender,\n\t\t\tnonce: `0x${userOp.nonce.toString(16)}`,\n\t\t\tinitCode: userOp.initCode,\n\t\t\tcallData: userOp.callData,\n\t\t\tcallGasLimit: `0x${userOp.callGasLimit.toString(16)}`,\n\t\t\tverificationGasLimit: `0x${userOp.verificationGasLimit.toString(16)}`,\n\t\t\tpreVerificationGas: `0x${userOp.preVerificationGas.toString(16)}`,\n\t\t\tmaxFeePerGas: `0x${userOp.maxFeePerGas.toString(16)}`,\n\t\t\tmaxPriorityFeePerGas: `0x${userOp.maxPriorityFeePerGas.toString(16)}`,\n\t\t\tpaymasterAndData: userOp.paymasterAndData,\n\t\t\tsignature: userOp.signature,\n\t\t};\n\t}\n\n\tasync signMessage(message: string | Uint8Array): Promise<Signature> {\n\t\tconst messageBytes =\n\t\t\ttypeof message === \"string\" ? utf8ToBytes(message) : message;\n\n\t\tconst prefix = utf8ToBytes(\n\t\t\t`\\x19Ethereum Signed Message:\\n${messageBytes.length}`,\n\t\t);\n\t\tconst prefixedMessage = new Uint8Array(prefix.length + messageBytes.length);\n\t\tprefixedMessage.set(prefix);\n\t\tprefixedMessage.set(messageBytes, prefix.length);\n\n\t\tconst messageHash = `0x${bytesToHex(keccak_256(prefixedMessage))}`;\n\n\t\tconst signingClient = new SigningClient({\n\t\t\tapiClient: this.apiClient,\n\t\t\tkeyShare: this.keyShare,\n\t\t\tpartyPublicShares: this.partyPublicShares,\n\t\t});\n\n\t\tconst result = await signingClient.sign({\n\t\t\tmessageHash,\n\t\t\tmessageType: \"message\",\n\t\t});\n\n\t\tif (!result.success || !result.signature) {\n\t\t\tthrow new SDKError(\n\t\t\t\tresult.error ?? \"Message signing failed\",\n\t\t\t\t\"MESSAGE_SIGNING_FAILED\",\n\t\t\t);\n\t\t}\n\n\t\treturn result.signature;\n\t}\n\n\tasync signTypedData(\n\t\tdomain: Record<string, unknown>,\n\t\ttypes: Record<string, Array<{ name: string; type: string }>>,\n\t\tprimaryType: string,\n\t\tvalue: Record<string, unknown>,\n\t): Promise<Signature> {\n\t\tconst domainSeparator = this.hashTypedDataDomain(domain);\n\t\tconst structHash = this.hashTypedDataStruct(types, primaryType, value);\n\n\t\tconst messageHash = `0x${bytesToHex(\n\t\t\tkeccak_256(\n\t\t\t\thexToBytes(`1901${domainSeparator.slice(2)}${structHash.slice(2)}`),\n\t\t\t),\n\t\t)}`;\n\n\t\tconst signingClient = new SigningClient({\n\t\t\tapiClient: this.apiClient,\n\t\t\tkeyShare: this.keyShare,\n\t\t\tpartyPublicShares: this.partyPublicShares,\n\t\t});\n\n\t\tconst result = await signingClient.sign({\n\t\t\tmessageHash,\n\t\t\tmessageType: \"typed_data\",\n\t\t});\n\n\t\tif (!result.success || !result.signature) {\n\t\t\tthrow new SDKError(\n\t\t\t\tresult.error ?? \"Typed data signing failed\",\n\t\t\t\t\"TYPED_DATA_SIGNING_FAILED\",\n\t\t\t);\n\t\t}\n\n\t\treturn result.signature;\n\t}\n\n\tprivate computeUserOpHash(userOp: UserOperation): string {\n\t\tconst packed = this.packUserOp(userOp);\n\t\tconst userOpHash = keccak_256(packed);\n\n\t\tconst finalHash = keccak_256(\n\t\t\thexToBytes(\n\t\t\t\tbytesToHex(userOpHash) +\n\t\t\t\t\tthis.entryPointAddress.slice(2).toLowerCase().padStart(64, \"0\") +\n\t\t\t\t\tthis.chainId.toString(16).padStart(64, \"0\"),\n\t\t\t),\n\t\t);\n\n\t\treturn `0x${bytesToHex(finalHash)}`;\n\t}\n\n\tprivate packUserOp(userOp: UserOperation): Uint8Array {\n\t\tconst initCodeHash = keccak_256(hexToBytes(userOp.initCode.slice(2) || \"\"));\n\t\tconst callDataHash = keccak_256(hexToBytes(userOp.callData.slice(2) || \"\"));\n\t\tconst paymasterAndDataHash = keccak_256(\n\t\t\thexToBytes(userOp.paymasterAndData.slice(2) || \"\"),\n\t\t);\n\n\t\tconst packed =\n\t\t\tuserOp.sender.slice(2).toLowerCase().padStart(64, \"0\") +\n\t\t\tuserOp.nonce.toString(16).padStart(64, \"0\") +\n\t\t\tbytesToHex(initCodeHash) +\n\t\t\tbytesToHex(callDataHash) +\n\t\t\tuserOp.callGasLimit.toString(16).padStart(64, \"0\") +\n\t\t\tuserOp.verificationGasLimit.toString(16).padStart(64, \"0\") +\n\t\t\tuserOp.preVerificationGas.toString(16).padStart(64, \"0\") +\n\t\t\tuserOp.maxFeePerGas.toString(16).padStart(64, \"0\") +\n\t\t\tuserOp.maxPriorityFeePerGas.toString(16).padStart(64, \"0\") +\n\t\t\tbytesToHex(paymasterAndDataHash);\n\n\t\treturn hexToBytes(packed);\n\t}\n\n\tprivate encodeExecuteBatch(transactions: TransactionRequest[]): string {\n\t\tif (transactions.length === 1) {\n\t\t\tconst tx = transactions[0];\n\t\t\tconst selector = \"b61d27f6\";\n\t\t\tconst to = tx.to.slice(2).toLowerCase().padStart(64, \"0\");\n\t\t\tconst value = (tx.value ?? 0n).toString(16).padStart(64, \"0\");\n\t\t\tconst dataOffset = \"60\".padStart(64, \"0\");\n\t\t\tconst data = tx.data?.slice(2) ?? \"\";\n\t\t\tconst dataLength = (data.length / 2).toString(16).padStart(64, \"0\");\n\n\t\t\treturn `0x${selector}${to}${value}${dataOffset}${dataLength}${data}`;\n\t\t}\n\n\t\tconst n = transactions.length;\n\n\t\tconst destArraySize = 32 + n * 32;\n\t\tconst valueArraySize = 32 + n * 32;\n\n\t\tconst destOffset = 96;\n\t\tconst valueOffset = destOffset + destArraySize;\n\t\tconst funcOffset = valueOffset + valueArraySize;\n\n\t\tlet encoded = \"18dfb3c7\";\n\n\t\tencoded += destOffset.toString(16).padStart(64, \"0\");\n\t\tencoded += valueOffset.toString(16).padStart(64, \"0\");\n\t\tencoded += funcOffset.toString(16).padStart(64, \"0\");\n\n\t\tencoded += n.toString(16).padStart(64, \"0\");\n\t\tfor (const tx of transactions) {\n\t\t\tencoded += tx.to.slice(2).toLowerCase().padStart(64, \"0\");\n\t\t}\n\n\t\tencoded += n.toString(16).padStart(64, \"0\");\n\t\tfor (const tx of transactions) {\n\t\t\tencoded += (tx.value ?? 0n).toString(16).padStart(64, \"0\");\n\t\t}\n\n\t\tconst funcDatas: string[] = transactions.map((tx) => {\n\t\t\tconst data = tx.data ?? \"0x\";\n\t\t\treturn data.startsWith(\"0x\") ? data.slice(2) : data;\n\t\t});\n\n\t\tconst funcElementOffsets: number[] = [];\n\t\tlet currentOffset = 32 + n * 32;\n\t\tfor (const funcData of funcDatas) {\n\t\t\tfuncElementOffsets.push(currentOffset);\n\t\t\tconst dataLen = funcData.length / 2;\n\t\t\tconst paddedLen = Math.ceil(dataLen / 32) * 32;\n\t\t\tcurrentOffset += 32 + paddedLen;\n\t\t}\n\n\t\tencoded += n.toString(16).padStart(64, \"0\");\n\t\tfor (const offset of funcElementOffsets) {\n\t\t\tencoded += offset.toString(16).padStart(64, \"0\");\n\t\t}\n\n\t\tfor (const funcData of funcDatas) {\n\t\t\tconst dataLen = funcData.length / 2;\n\t\t\tencoded += dataLen.toString(16).padStart(64, \"0\");\n\t\t\tif (funcData.length > 0) {\n\t\t\t\tconst paddedLen = Math.ceil(dataLen / 32) * 32;\n\t\t\t\tencoded += funcData.padEnd(paddedLen * 2, \"0\");\n\t\t\t}\n\t\t}\n\n\t\treturn `0x${encoded}`;\n\t}\n\n\tprivate getInitCode(): string {\n\t\tconst selector = \"5fbfb9cf\";\n\t\tconst owner = this._eoaAddress.slice(2).toLowerCase().padStart(64, \"0\");\n\t\tconst salt = \"0\".padStart(64, \"0\");\n\n\t\treturn this.factoryAddress.toLowerCase() + selector + owner + salt;\n\t}\n\n\tprivate async getNonce(): Promise<bigint> {\n\t\tconst isDeployed = await this.isDeployed();\n\t\tif (!isDeployed) {\n\t\t\treturn 0n;\n\t\t}\n\n\t\tif (this._cachedNonce !== null) {\n\t\t\treturn this._cachedNonce;\n\t\t}\n\n\t\tconst smartWalletAddress = await this.getSmartWalletAddress();\n\t\tconst nonceKey = 0n;\n\t\tconst nonceData = await this.rpcConnection.call<string>(\"eth_call\", [\n\t\t\t{\n\t\t\t\tto: this.entryPointAddress,\n\t\t\t\tdata: `0x35567e1a${smartWalletAddress.slice(2).padStart(64, \"0\")}${nonceKey.toString(16).padStart(64, \"0\")}`,\n\t\t\t},\n\t\t\t\"latest\",\n\t\t]);\n\n\t\tconst nonce = BigInt(nonceData);\n\t\tthis._cachedNonce = nonce;\n\t\treturn nonce;\n\t}\n\n\tprivate async isDeployed(): Promise<boolean> {\n\t\tif (this._isDeployed !== null) {\n\t\t\treturn this._isDeployed;\n\t\t}\n\n\t\ttry {\n\t\t\tconst smartWalletAddress = await this.getSmartWalletAddress();\n\t\t\tconst code = await this.rpcConnection.getCode(smartWalletAddress);\n\t\t\tthis._isDeployed = code !== \"0x\" && code.length > 2;\n\t\t\treturn this._isDeployed;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tprivate async getFeeData(): Promise<{\n\t\tmaxFeePerGas: bigint;\n\t\tmaxPriorityFeePerGas: bigint;\n\t}> {\n\t\ttry {\n\t\t\tconst gasPrice = await this.rpcConnection.getGasPrice();\n\t\t\treturn {\n\t\t\t\tmaxFeePerGas: gasPrice * 2n,\n\t\t\t\tmaxPriorityFeePerGas: gasPrice / 10n,\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tmaxFeePerGas: 1000000000n,\n\t\t\t\tmaxPriorityFeePerGas: 1000000000n,\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate async getPaymasterData(userOp: UserOperation): Promise<string> {\n\t\tif (!this.paymasterUrl) {\n\t\t\treturn \"0x\";\n\t\t}\n\n\t\ttry {\n\t\t\tconst userOpHex = this.userOpToHex(userOp);\n\t\t\tconst response = await fetch(this.paymasterUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid: 1,\n\t\t\t\t\tmethod: \"pm_sponsorUserOperation\",\n\t\t\t\t\tparams: [userOpHex, this.entryPointAddress, {}],\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tconst data = await response.json();\n\t\t\tif (data.error || !data.result?.paymasterAndData) {\n\t\t\t\treturn \"0x\";\n\t\t\t}\n\n\t\t\treturn data.result.paymasterAndData;\n\t\t} catch {\n\t\t\treturn \"0x\";\n\t\t}\n\t}\n\n\tprivate hashTypedDataDomain(domain: Record<string, unknown>): string {\n\t\tconst domainFields: Array<{ name: string; type: string }> = [];\n\t\tlet domainValues = \"\";\n\n\t\tif (domain.name !== undefined) {\n\t\t\tdomainFields.push({ name: \"name\", type: \"string\" });\n\t\t\tdomainValues += bytesToHex(\n\t\t\t\tkeccak_256(utf8ToBytes(domain.name as string)),\n\t\t\t);\n\t\t}\n\t\tif (domain.version !== undefined) {\n\t\t\tdomainFields.push({ name: \"version\", type: \"string\" });\n\t\t\tdomainValues += bytesToHex(\n\t\t\t\tkeccak_256(utf8ToBytes(domain.version as string)),\n\t\t\t);\n\t\t}\n\t\tif (domain.chainId !== undefined) {\n\t\t\tdomainFields.push({ name: \"chainId\", type: \"uint256\" });\n\t\t\tdomainValues += BigInt(domain.chainId as number)\n\t\t\t\t.toString(16)\n\t\t\t\t.padStart(64, \"0\");\n\t\t}\n\t\tif (domain.verifyingContract !== undefined) {\n\t\t\tdomainFields.push({ name: \"verifyingContract\", type: \"address\" });\n\t\t\tdomainValues += stripHexPrefix(domain.verifyingContract as string)\n\t\t\t\t.toLowerCase()\n\t\t\t\t.padStart(64, \"0\");\n\t\t}\n\t\tif (domain.salt !== undefined) {\n\t\t\tdomainFields.push({ name: \"salt\", type: \"bytes32\" });\n\t\t\tdomainValues += stripHexPrefix(domain.salt as string).padStart(64, \"0\");\n\t\t}\n\n\t\tconst domainTypeString = this.formatType(\"EIP712Domain\", domainFields);\n\t\tconst domainTypeHash = `0x${bytesToHex(keccak_256(utf8ToBytes(domainTypeString)))}`;\n\t\treturn `0x${bytesToHex(keccak_256(hexToBytes(domainTypeHash.slice(2) + domainValues)))}`;\n\t}\n\n\tprivate hashTypedDataStruct(\n\t\ttypes: Record<string, Array<{ name: string; type: string }>>,\n\t\tprimaryType: string,\n\t\tvalue: Record<string, unknown>,\n\t): string {\n\t\treturn this.hashStruct(primaryType, types, value);\n\t}\n\n\tprivate encodeType(\n\t\ttypeName: string,\n\t\ttypes: Record<string, Array<{ name: string; type: string }>>,\n\t): string {\n\t\tconst fields = types[typeName];\n\t\tif (!fields) {\n\t\t\tthrow new SDKError(`Unknown type: ${typeName}`, \"INVALID_TYPE\");\n\t\t}\n\n\t\tconst deps = this.findTypeDependencies(typeName, types, new Set());\n\t\tdeps.delete(typeName);\n\n\t\tconst sortedDeps = Array.from(deps).sort();\n\n\t\tlet result = this.formatType(typeName, fields);\n\t\tfor (const dep of sortedDeps) {\n\t\t\tresult += this.formatType(dep, types[dep]);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate formatType(\n\t\ttypeName: string,\n\t\tfields: Array<{ name: string; type: string }>,\n\t): string {\n\t\treturn `${typeName}(${fields.map((f) => `${f.type} ${f.name}`).join(\",\")})`;\n\t}\n\n\tprivate findTypeDependencies(\n\t\ttypeName: string,\n\t\ttypes: Record<string, Array<{ name: string; type: string }>>,\n\t\tfound: Set<string>,\n\t): Set<string> {\n\t\tif (found.has(typeName)) return found;\n\n\t\tconst fields = types[typeName];\n\t\tif (!fields) return found;\n\n\t\tfound.add(typeName);\n\n\t\tfor (const field of fields) {\n\t\t\tlet baseType = field.type;\n\t\t\tif (baseType.endsWith(\"[]\")) {\n\t\t\t\tbaseType = baseType.slice(0, -2);\n\t\t\t}\n\t\t\tif (types[baseType]) {\n\t\t\t\tthis.findTypeDependencies(baseType, types, found);\n\t\t\t}\n\t\t}\n\n\t\treturn found;\n\t}\n\n\tprivate hashType(\n\t\ttypeName: string,\n\t\ttypes: Record<string, Array<{ name: string; type: string }>>,\n\t): string {\n\t\tconst encodedType = this.encodeType(typeName, types);\n\t\treturn `0x${bytesToHex(keccak_256(utf8ToBytes(encodedType)))}`;\n\t}\n\n\tprivate hashStruct(\n\t\ttypeName: string,\n\t\ttypes: Record<string, Array<{ name: string; type: string }>>,\n\t\tvalue: Record<string, unknown>,\n\t): string {\n\t\tconst fields = types[typeName];\n\t\tif (!fields) {\n\t\t\tthrow new SDKError(`Unknown type: ${typeName}`, \"INVALID_TYPE\");\n\t\t}\n\n\t\tconst typeHash = this.hashType(typeName, types);\n\t\tlet encodedValues = \"\";\n\n\t\tfor (const field of fields) {\n\t\t\tconst fieldValue = value[field.name];\n\t\t\tencodedValues += this.encodeField(field.type, fieldValue, types);\n\t\t}\n\n\t\treturn `0x${bytesToHex(keccak_256(hexToBytes(typeHash.slice(2) + encodedValues)))}`;\n\t}\n\n\tprivate encodeField(\n\t\ttype: string,\n\t\tvalue: unknown,\n\t\ttypes: Record<string, Array<{ name: string; type: string }>>,\n\t): string {\n\t\tif (type === \"string\") {\n\t\t\treturn bytesToHex(keccak_256(utf8ToBytes(value as string)));\n\t\t}\n\t\tif (type === \"bytes\") {\n\t\t\tconst bytesValue = stripHexPrefix(value as string);\n\t\t\treturn bytesToHex(keccak_256(hexToBytes(bytesValue)));\n\t\t}\n\t\tif (type === \"bool\") {\n\t\t\treturn (value ? 1n : 0n).toString(16).padStart(64, \"0\");\n\t\t}\n\t\tif (type === \"address\") {\n\t\t\treturn stripHexPrefix(value as string)\n\t\t\t\t.toLowerCase()\n\t\t\t\t.padStart(64, \"0\");\n\t\t}\n\t\tif (type.startsWith(\"uint\") || type.startsWith(\"int\")) {\n\t\t\tconst n = BigInt(value as number | string);\n\t\t\tif (type.startsWith(\"int\") && n < 0n) {\n\t\t\t\treturn ((1n << 256n) + n).toString(16).padStart(64, \"0\");\n\t\t\t}\n\t\t\treturn n.toString(16).padStart(64, \"0\");\n\t\t}\n\t\tif (type.startsWith(\"bytes\")) {\n\t\t\tconst bytesValue = stripHexPrefix(value as string);\n\t\t\treturn bytesValue.padEnd(64, \"0\");\n\t\t}\n\t\tif (types[type]) {\n\t\t\treturn this.hashStruct(\n\t\t\t\ttype,\n\t\t\t\ttypes,\n\t\t\t\tvalue as Record<string, unknown>,\n\t\t\t).slice(2);\n\t\t}\n\t\tif (type.endsWith(\"[]\")) {\n\t\t\tconst arrayType = type.slice(0, -2);\n\t\t\tconst arrayValue = value as unknown[];\n\t\t\tconst encodedItems = arrayValue.map((item) =>\n\t\t\t\tthis.encodeField(arrayType, item, types),\n\t\t\t);\n\t\t\treturn bytesToHex(keccak_256(hexToBytes(encodedItems.join(\"\"))));\n\t\t}\n\t\tthrow new SDKError(`Unsupported type: ${type}`, \"UNSUPPORTED_TYPE\");\n\t}\n}\n\nexport function createSmartWallet(config: SmartWalletConfig): SmartWallet {\n\treturn new SmartWallet(config);\n}\n","import { ChainManager } from \"./chains/chain-manager\";\nimport { BUILTIN_CHAINS, getChainConfig } from \"./chains/configs\";\nimport type { ChainConfig } from \"./chains/types\";\nimport { type EIP1193Provider, NeroProvider } from \"./core\";\nimport { ClientKeyManager, generateDeviceKey } from \"./core/client-key-manager\";\nimport type {\n\tTypedDataDomain,\n\tTypedDataMessage,\n\tTypedDataTypes,\n} from \"./core/provider-types\";\nimport { DKGClient } from \"./protocols/dkg/dkg-client\";\nimport { APIClient } from \"./transport/api-client\";\nimport { WebSocketClient } from \"./transport/websocket-client\";\nimport type {\n\tAuthTokens,\n\tDeviceFingerprint,\n\tSDKConfig,\n\tUser,\n\tWalletInfo,\n} from \"./types\";\nimport { SDKError } from \"./types\";\nimport { SmartWallet } from \"./wallet/smart-wallet\";\n\nexport type OAuthProvider = \"google\" | \"github\" | \"apple\";\nexport type LoginProvider = OAuthProvider;\n\nexport interface NeroSDKState {\n\tisAuthenticated: boolean;\n\tisInitialized: boolean;\n\thasWallet: boolean;\n\tuser: User | null;\n\twalletInfo: WalletInfo | null;\n\tchainId: number;\n\tisConnected: boolean;\n}\n\nexport type ConnectionStatus =\n\t| \"connected\"\n\t| \"disconnected\"\n\t| \"connecting\"\n\t| \"errored\";\n\nexport interface UserInfo {\n\temail?: string;\n\tname?: string;\n\tprofileImage?: string;\n\tverifier?: string;\n\tverifierId?: string;\n\taggregateVerifier?: string;\n\ttypeOfLogin?: string;\n\tdappShare?: string;\n\tidToken?: string;\n\toAuthIdToken?: string;\n\toAuthAccessToken?: string;\n}\n\nexport class NeroMpcSDK {\n\tprivate config: SDKConfig;\n\tprivate apiClient: APIClient;\n\tprivate wsClient: WebSocketClient | null = null;\n\tprivate keyManager: ClientKeyManager | null = null;\n\tprivate deviceKey: string | null = null;\n\tprivate chainManager: ChainManager;\n\n\tprivate _user: User | null = null;\n\tprivate _wallet: SmartWallet | null = null;\n\tprivate _publicKey: string | null = null;\n\tprivate _partyPublicShares: Map<number, string> = new Map();\n\tprivate _provider: NeroProvider | null = null;\n\tprivate _chainId: number;\n\tprivate _connectionStatus: ConnectionStatus = \"disconnected\";\n\tprivate _customChains: Map<number, ChainConfig> = new Map();\n\tprivate _cachedWalletInfo: WalletInfo | null = null;\n\n\tconstructor(config: SDKConfig) {\n\t\tthis.config = {\n\t\t\tchainId: 689,\n\t\t\tstoragePrefix: \"nero\",\n\t\t\tautoConnect: true,\n\t\t\t...config,\n\t\t};\n\n\t\tthis._chainId = this.config.chainId!;\n\t\tthis.apiClient = new APIClient(this.config);\n\t\tthis.chainManager = new ChainManager(this._chainId);\n\n\t\tif (this.config.wsUrl) {\n\t\t\tthis.wsClient = new WebSocketClient(this.config.wsUrl);\n\t\t}\n\t}\n\n\tget isAuthenticated(): boolean {\n\t\treturn this._user !== null && this.apiClient.getTokens() !== null;\n\t}\n\n\tget hasWallet(): boolean {\n\t\treturn this._wallet !== null;\n\t}\n\n\tget user(): User | null {\n\t\treturn this._user;\n\t}\n\n\tget wallet(): SmartWallet | null {\n\t\treturn this._wallet;\n\t}\n\n\tget chainId(): number {\n\t\treturn this._chainId;\n\t}\n\n\tget connected(): boolean {\n\t\treturn this._connectionStatus === \"connected\";\n\t}\n\n\tget status(): ConnectionStatus {\n\t\treturn this._connectionStatus;\n\t}\n\n\tget provider(): EIP1193Provider | null {\n\t\treturn this._provider;\n\t}\n\n\tget state(): NeroSDKState {\n\t\treturn {\n\t\t\tisAuthenticated: this.isAuthenticated,\n\t\t\tisInitialized: this.keyManager !== null,\n\t\t\thasWallet: this.hasWallet,\n\t\t\tuser: this._user,\n\t\t\twalletInfo: this._cachedWalletInfo,\n\t\t\tchainId: this._chainId,\n\t\t\tisConnected: this.connected,\n\t\t};\n\t}\n\n\tasync getWalletInfo(): Promise<WalletInfo | null> {\n\t\tif (!this._wallet) return null;\n\t\tthis._cachedWalletInfo = await this._wallet.getWalletInfo();\n\t\treturn this._cachedWalletInfo;\n\t}\n\n\tasync initialize(): Promise<void> {\n\t\tthis.deviceKey = this.loadOrGenerateDeviceKey();\n\t\tthis.keyManager = new ClientKeyManager(this.deviceKey, {\n\t\t\tstoragePrefix: this.config.storagePrefix,\n\t\t});\n\n\t\tconst storedTokens = this.loadStoredTokens();\n\t\tif (storedTokens) {\n\t\t\tthis.apiClient.setTokens(storedTokens);\n\n\t\t\ttry {\n\t\t\t\tthis._user = await this.apiClient.getCurrentUser();\n\t\t\t\tawait this.initializeWallet();\n\t\t\t} catch {\n\t\t\t\tthis.apiClient.clearTokens();\n\t\t\t\tthis.clearStoredTokens();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync getOAuthUrl(\n\t\tprovider: OAuthProvider,\n\t\tredirectUri: string,\n\t): Promise<{ url: string; state: string }> {\n\t\treturn this.apiClient.getOAuthUrl(provider, redirectUri);\n\t}\n\n\tasync handleOAuthCallback(\n\t\tprovider: OAuthProvider,\n\t\tcode: string,\n\t\tstate: string,\n\t): Promise<{ user: User; requiresDKG: boolean }> {\n\t\tconst fingerprint = this.getDeviceFingerprint();\n\n\t\tconst result = await this.apiClient.handleOAuthCallback(\n\t\t\tprovider,\n\t\t\tcode,\n\t\t\tstate,\n\t\t\tfingerprint,\n\t\t);\n\n\t\tthis._user = result.user;\n\t\tthis.storeTokens(result.tokens);\n\n\t\tif (this.keyManager && this._user) {\n\t\t\tawait this.keyManager.initialize(this._user.id);\n\t\t}\n\n\t\tif (!result.requiresDKG && result.wallet) {\n\t\t\tawait this.initializeWallet();\n\t\t\tawait this.connect();\n\t\t}\n\n\t\treturn {\n\t\t\tuser: result.user,\n\t\t\trequiresDKG: result.requiresDKG,\n\t\t};\n\t}\n\n\tasync loginWithGoogle(redirectUri?: string): Promise<void> {\n\t\tconst { url } = await this.getOAuthUrl(\n\t\t\t\"google\",\n\t\t\tredirectUri ?? window.location.href,\n\t\t);\n\t\twindow.location.href = url;\n\t}\n\n\tasync loginWithGithub(redirectUri?: string): Promise<void> {\n\t\tconst { url } = await this.getOAuthUrl(\n\t\t\t\"github\",\n\t\t\tredirectUri ?? window.location.href,\n\t\t);\n\t\twindow.location.href = url;\n\t}\n\n\tasync loginWithApple(redirectUri?: string): Promise<void> {\n\t\tconst { url } = await this.getOAuthUrl(\n\t\t\t\"apple\",\n\t\t\tredirectUri ?? window.location.href,\n\t\t);\n\t\twindow.location.href = url;\n\t}\n\n\tasync generateWallet(): Promise<WalletInfo> {\n\t\tif (!this._user) {\n\t\t\tthrow new SDKError(\"User not authenticated\", \"NOT_AUTHENTICATED\");\n\t\t}\n\n\t\tif (!this.keyManager) {\n\t\t\tthrow new SDKError(\"SDK not initialized\", \"NOT_INITIALIZED\");\n\t\t}\n\n\t\tconst dkgClient = new DKGClient({\n\t\t\tapiClient: this.apiClient,\n\t\t\twsClient: this.wsClient ?? undefined,\n\t\t});\n\n\t\tconst result = await dkgClient.execute();\n\n\t\tif (!result.success) {\n\t\t\tthrow new SDKError(result.error ?? \"DKG failed\", \"DKG_FAILED\");\n\t\t}\n\n\t\tconst keyShare = dkgClient.getKeyShare();\n\t\tif (!keyShare) {\n\t\t\tthrow new SDKError(\"Failed to get key share\", \"KEY_SHARE_ERROR\");\n\t\t}\n\n\t\tawait this.keyManager.storeKeyShare(keyShare);\n\n\t\tthis._publicKey = result.publicKey!;\n\t\tthis._partyPublicShares = dkgClient.getPartyPublicShares();\n\n\t\tawait this.keyManager.storePartyPublicShares(this._partyPublicShares);\n\n\t\tthis._wallet = this.createSmartWallet(\n\t\t\tkeyShare,\n\t\t\tthis._partyPublicShares,\n\t\t\tthis._publicKey,\n\t\t);\n\n\t\tdkgClient.cleanup();\n\n\t\tawait this.connect();\n\n\t\tthis._cachedWalletInfo = await this._wallet.getWalletInfo();\n\t\treturn this._cachedWalletInfo;\n\t}\n\n\tasync logout(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.apiClient.logout();\n\t\t} catch {}\n\n\t\tthis._user = null;\n\t\tthis._wallet = null;\n\t\tthis._publicKey = null;\n\t\tthis._connectionStatus = \"disconnected\";\n\t\tthis.apiClient.clearTokens();\n\t\tthis.clearStoredTokens();\n\n\t\tif (this._provider) {\n\t\t\tthis._provider.disconnect();\n\t\t}\n\n\t\tif (this.wsClient) {\n\t\t\tthis.wsClient.disconnect();\n\t\t}\n\t}\n\n\tasync connect(): Promise<EIP1193Provider> {\n\t\tif (!this._wallet) {\n\t\t\tthrow new SDKError(\"Wallet not available\", \"NO_WALLET\");\n\t\t}\n\n\t\tthis._connectionStatus = \"connecting\";\n\n\t\ttry {\n\t\t\tthis._provider = new NeroProvider({\n\t\t\t\tchainId: this._chainId,\n\t\t\t\tgetAccounts: () => this.getAccounts(),\n\t\t\t\tsignMessage: (message) => this.signMessageInternal(message),\n\t\t\t\tsignTypedData: (domain, types, primaryType, message) =>\n\t\t\t\t\tthis.signTypedDataInternal(domain, types, primaryType, message),\n\t\t\t\tsendTransaction: (tx) => this.sendTransactionInternal(tx),\n\t\t\t\tonChainChanged: (chainId) => this.handleChainChanged(chainId),\n\t\t\t});\n\n\t\t\tthis._provider.connect();\n\t\t\tthis._connectionStatus = \"connected\";\n\n\t\t\treturn this._provider;\n\t\t} catch (error) {\n\t\t\tthis._connectionStatus = \"errored\";\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this._provider) {\n\t\t\tthis._provider.disconnect();\n\t\t}\n\t\tthis._connectionStatus = \"disconnected\";\n\t\tawait this.logout();\n\t}\n\n\tgetProvider(): EIP1193Provider | null {\n\t\treturn this._provider;\n\t}\n\n\tgetUserInfo(): UserInfo | null {\n\t\tif (!this._user) return null;\n\n\t\treturn {\n\t\t\temail: this._user.email,\n\t\t\tname: this._user.displayName,\n\t\t\tprofileImage: this._user.profilePicture,\n\t\t\tverifier: \"nero-mpc\",\n\t\t\tverifierId: this._user.id,\n\t\t\ttypeOfLogin: \"social\",\n\t\t};\n\t}\n\n\tasync switchChain(chainId: number): Promise<void> {\n\t\tconst config = this.getChainConfigForId(chainId);\n\t\tif (!config) {\n\t\t\tthrow new SDKError(`Chain ${chainId} not supported`, \"UNSUPPORTED_CHAIN\");\n\t\t}\n\n\t\tthis._chainId = chainId;\n\t\tawait this.chainManager.switchChain(chainId);\n\n\t\tif (this._provider) {\n\t\t\tawait this._provider.switchChain(chainId);\n\t\t}\n\n\t\tif (this._wallet && this.keyManager) {\n\t\t\tconst keyShare = await this.keyManager.getKeyShare();\n\t\t\tif (keyShare) {\n\t\t\t\tthis._wallet = this.createSmartWallet(\n\t\t\t\t\tkeyShare,\n\t\t\t\t\tthis._partyPublicShares,\n\t\t\t\t\tthis._publicKey!,\n\t\t\t\t);\n\t\t\t\tthis._cachedWalletInfo = await this._wallet.getWalletInfo();\n\t\t\t}\n\t\t}\n\t}\n\n\taddChain(config: ChainConfig): void {\n\t\tthis._customChains.set(config.chainId, config);\n\t\tthis.chainManager.addChain(config);\n\t\tif (this._provider) {\n\t\t\tthis._provider.addChain(config);\n\t\t}\n\t}\n\n\tgetChainConfig(chainId?: number): ChainConfig | undefined {\n\t\tconst targetChainId = chainId ?? this._chainId;\n\t\treturn this.getChainConfigForId(targetChainId);\n\t}\n\n\tgetSupportedChainIds(): number[] {\n\t\tconst builtinIds = Array.from(BUILTIN_CHAINS.keys());\n\t\tconst customIds = Array.from(this._customChains.keys());\n\t\treturn [...new Set([...builtinIds, ...customIds])];\n\t}\n\n\tprivate getAccounts(): string[] {\n\t\tif (!this._wallet) return [];\n\t\treturn [this._wallet.eoaAddress];\n\t}\n\n\tprivate async signMessageInternal(\n\t\tmessage: string | Uint8Array,\n\t): Promise<string> {\n\t\tif (!this._wallet) {\n\t\t\tthrow new SDKError(\"Wallet not available\", \"NO_WALLET\");\n\t\t}\n\t\tconst signature = await this._wallet.signMessage(message);\n\t\treturn signature.fullSignature;\n\t}\n\n\tprivate async signTypedDataInternal(\n\t\tdomain: TypedDataDomain,\n\t\ttypes: TypedDataTypes,\n\t\tprimaryType: string,\n\t\tmessage: TypedDataMessage,\n\t): Promise<string> {\n\t\tif (!this._wallet) {\n\t\t\tthrow new SDKError(\"Wallet not available\", \"NO_WALLET\");\n\t\t}\n\t\tconst signature = await this._wallet.signTypedData(\n\t\t\tdomain as Record<string, unknown>,\n\t\t\ttypes as Record<string, Array<{ name: string; type: string }>>,\n\t\t\tprimaryType,\n\t\t\tmessage as Record<string, unknown>,\n\t\t);\n\t\treturn signature.fullSignature;\n\t}\n\n\tprivate async sendTransactionInternal(tx: unknown): Promise<string> {\n\t\tif (!this._wallet) {\n\t\t\tthrow new SDKError(\"Wallet not available\", \"NO_WALLET\");\n\t\t}\n\t\tconst txRequest = tx as { to: string; value?: string; data?: string };\n\t\tconst userOp = await this._wallet.buildUserOperation({\n\t\t\tto: txRequest.to,\n\t\t\tvalue: txRequest.value ? BigInt(txRequest.value) : undefined,\n\t\t\tdata: txRequest.data,\n\t\t});\n\t\tconst result = await this._wallet.sendUserOperation(userOp);\n\t\treturn result.userOpHash;\n\t}\n\n\tprivate handleChainChanged(chainId: number): void {\n\t\tthis._chainId = chainId;\n\t}\n\n\tprivate getChainConfigForId(chainId: number): ChainConfig | undefined {\n\t\treturn getChainConfig(chainId) ?? this._customChains.get(chainId);\n\t}\n\n\tprivate createSmartWallet(\n\t\tkeyShare: import(\"./types\").KeyShare,\n\t\tpartyPublicShares: Map<number, string>,\n\t\tpublicKey: string,\n\t): SmartWallet {\n\t\tconst chainConfig = this.getChainConfigForId(this._chainId);\n\t\tconst rpcConnection = this.chainManager.getRpcConnection();\n\t\tconst bundlerUrl =\n\t\t\tchainConfig?.bundlerUrl ?? `${this.config.backendUrl}/api/v1/bundler`;\n\n\t\treturn new SmartWallet({\n\t\t\tapiClient: this.apiClient,\n\t\t\tkeyShare,\n\t\t\tpartyPublicShares,\n\t\t\tpublicKey,\n\t\t\tchainId: this._chainId,\n\t\t\trpcConnection,\n\t\t\tbundlerUrl,\n\t\t\tentryPointAddress: chainConfig?.entryPointAddress,\n\t\t\tfactoryAddress: chainConfig?.simpleAccountFactoryAddress,\n\t\t\tpaymasterUrl: chainConfig?.paymasterUrl,\n\t\t});\n\t}\n\n\tasync exportBackup(password: string): Promise<string> {\n\t\tif (!this.keyManager) {\n\t\t\tthrow new SDKError(\"SDK not initialized\", \"NOT_INITIALIZED\");\n\t\t}\n\n\t\treturn this.keyManager.exportBackup(password);\n\t}\n\n\tasync importBackup(backupString: string, password: string): Promise<void> {\n\t\tif (!this.keyManager || !this._user) {\n\t\t\tthrow new SDKError(\"SDK not initialized\", \"NOT_INITIALIZED\");\n\t\t}\n\n\t\tconst keyShare = await this.keyManager.importBackup(backupString, password);\n\t\tawait this.keyManager.storeKeyShare(keyShare);\n\n\t\tawait this.initializeWallet();\n\t}\n\n\tprivate async initializeWallet(): Promise<void> {\n\t\tif (!this.keyManager || !this._user) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst keyShare = await this.keyManager.getKeyShare();\n\t\tif (!keyShare) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst storedPartyShares = await this.keyManager.getPartyPublicShares();\n\t\tif (!storedPartyShares) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst walletInfo = await this.apiClient.getWalletInfo();\n\t\t\tthis._publicKey = walletInfo.publicKey;\n\t\t\tthis._partyPublicShares = storedPartyShares;\n\n\t\t\tthis._wallet = this.createSmartWallet(\n\t\t\t\tkeyShare,\n\t\t\t\tthis._partyPublicShares,\n\t\t\t\tthis._publicKey,\n\t\t\t);\n\t\t\tthis._cachedWalletInfo = await this._wallet.getWalletInfo();\n\t\t} catch {}\n\t}\n\n\tprivate getDeviceFingerprint(): DeviceFingerprint {\n\t\treturn {\n\t\t\tuserAgent:\n\t\t\t\ttypeof navigator !== \"undefined\" ? navigator.userAgent : \"unknown\",\n\t\t};\n\t}\n\n\tprivate loadOrGenerateDeviceKey(): string {\n\t\tconst storageKey = `${this.config.storagePrefix}:device_key`;\n\n\t\tif (typeof localStorage !== \"undefined\") {\n\t\t\tconst stored = localStorage.getItem(storageKey);\n\t\t\tif (stored) {\n\t\t\t\treturn stored;\n\t\t\t}\n\t\t}\n\n\t\tconst newKey = generateDeviceKey();\n\n\t\tif (typeof localStorage !== \"undefined\") {\n\t\t\tlocalStorage.setItem(storageKey, newKey);\n\t\t}\n\n\t\treturn newKey;\n\t}\n\n\tprivate storeTokens(tokens: AuthTokens): void {\n\t\tif (typeof localStorage !== \"undefined\") {\n\t\t\tlocalStorage.setItem(\n\t\t\t\t`${this.config.storagePrefix}:tokens`,\n\t\t\t\tJSON.stringify(tokens),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate loadStoredTokens(): AuthTokens | null {\n\t\tif (typeof localStorage === \"undefined\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst stored = localStorage.getItem(`${this.config.storagePrefix}:tokens`);\n\t\tif (!stored) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(stored);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate clearStoredTokens(): void {\n\t\tif (typeof localStorage !== \"undefined\") {\n\t\t\tlocalStorage.removeItem(`${this.config.storagePrefix}:tokens`);\n\t\t}\n\t}\n}\n\nexport function createNeroSDK(config: SDKConfig): NeroMpcSDK {\n\treturn new NeroMpcSDK(config);\n}\n","export interface UserOperation {\n\tsender: string;\n\tnonce: bigint;\n\tinitCode: string;\n\tcallData: string;\n\tcallGasLimit: bigint;\n\tverificationGasLimit: bigint;\n\tpreVerificationGas: bigint;\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n\tpaymasterAndData: string;\n\tsignature: string;\n}\n\nexport interface UserOperationHex {\n\tsender: string;\n\tnonce: string;\n\tinitCode: string;\n\tcallData: string;\n\tcallGasLimit: string;\n\tverificationGasLimit: string;\n\tpreVerificationGas: string;\n\tmaxFeePerGas: string;\n\tmaxPriorityFeePerGas: string;\n\tpaymasterAndData: string;\n\tsignature: string;\n}\n\nexport interface GasEstimate {\n\tpreVerificationGas: bigint;\n\tverificationGasLimit: bigint;\n\tcallGasLimit: bigint;\n}\n\nexport interface UserOperationReceipt {\n\tuserOpHash: string;\n\tentryPoint: string;\n\tsender: string;\n\tnonce: string;\n\tpaymaster: string;\n\tactualGasCost: string;\n\tactualGasUsed: string;\n\tsuccess: boolean;\n\tlogs: Array<{\n\t\taddress: string;\n\t\ttopics: string[];\n\t\tdata: string;\n\t}>;\n\treceipt: {\n\t\ttransactionHash: string;\n\t\ttransactionIndex: string;\n\t\tblockHash: string;\n\t\tblockNumber: string;\n\t\tfrom: string;\n\t\tto: string;\n\t\tgasUsed: string;\n\t\tstatus: string;\n\t};\n}\n\nexport interface PaymasterResult {\n\tpaymasterAndData: string;\n\tpreVerificationGas?: bigint;\n\tverificationGasLimit?: bigint;\n\tcallGasLimit?: bigint;\n}\n\nexport interface PaymasterContext {\n\tmode?: \"free\" | \"sponsored\" | \"erc20\";\n\ttoken?: string;\n\tsponsorId?: string;\n}\n\nexport interface SimpleAccountFactoryData {\n\tfactoryAddress: string;\n\townerAddress: string;\n\tsalt: bigint;\n}\n\nexport function userOpToHex(userOp: UserOperation): UserOperationHex {\n\treturn {\n\t\tsender: userOp.sender,\n\t\tnonce: `0x${userOp.nonce.toString(16)}`,\n\t\tinitCode: userOp.initCode,\n\t\tcallData: userOp.callData,\n\t\tcallGasLimit: `0x${userOp.callGasLimit.toString(16)}`,\n\t\tverificationGasLimit: `0x${userOp.verificationGasLimit.toString(16)}`,\n\t\tpreVerificationGas: `0x${userOp.preVerificationGas.toString(16)}`,\n\t\tmaxFeePerGas: `0x${userOp.maxFeePerGas.toString(16)}`,\n\t\tmaxPriorityFeePerGas: `0x${userOp.maxPriorityFeePerGas.toString(16)}`,\n\t\tpaymasterAndData: userOp.paymasterAndData,\n\t\tsignature: userOp.signature,\n\t};\n}\n\nexport function userOpFromHex(userOpHex: UserOperationHex): UserOperation {\n\treturn {\n\t\tsender: userOpHex.sender,\n\t\tnonce: BigInt(userOpHex.nonce),\n\t\tinitCode: userOpHex.initCode,\n\t\tcallData: userOpHex.callData,\n\t\tcallGasLimit: BigInt(userOpHex.callGasLimit),\n\t\tverificationGasLimit: BigInt(userOpHex.verificationGasLimit),\n\t\tpreVerificationGas: BigInt(userOpHex.preVerificationGas),\n\t\tmaxFeePerGas: BigInt(userOpHex.maxFeePerGas),\n\t\tmaxPriorityFeePerGas: BigInt(userOpHex.maxPriorityFeePerGas),\n\t\tpaymasterAndData: userOpHex.paymasterAndData,\n\t\tsignature: userOpHex.signature,\n\t};\n}\n","import type {\n\tGasEstimate,\n\tUserOperation,\n\tUserOperationHex,\n\tUserOperationReceipt,\n} from \"./types\";\nimport { userOpToHex } from \"./types\";\n\nexport interface BundlerClientConfig {\n\tbundlerUrl: string;\n\tentryPointAddress: string;\n\tchainId: number;\n}\n\ninterface JsonRpcResponse<T> {\n\tjsonrpc: string;\n\tid: number;\n\tresult?: T;\n\terror?: {\n\t\tcode: number;\n\t\tmessage: string;\n\t\tdata?: unknown;\n\t};\n}\n\nexport class BundlerClient {\n\tprivate bundlerUrl: string;\n\tprivate entryPointAddress: string;\n\tprivate requestId = 0;\n\n\tconstructor(config: BundlerClientConfig) {\n\t\tthis.bundlerUrl = config.bundlerUrl;\n\t\tthis.entryPointAddress = config.entryPointAddress;\n\t}\n\n\tasync sendUserOperation(userOp: UserOperation): Promise<string> {\n\t\tconst userOpHex = userOpToHex(userOp);\n\t\treturn this.call<string>(\"eth_sendUserOperation\", [\n\t\t\tuserOpHex,\n\t\t\tthis.entryPointAddress,\n\t\t]);\n\t}\n\n\tasync estimateUserOperationGas(\n\t\tuserOp: Partial<UserOperation>,\n\t): Promise<GasEstimate> {\n\t\tconst partialOpHex: Partial<UserOperationHex> = {};\n\n\t\tif (userOp.sender) partialOpHex.sender = userOp.sender;\n\t\tif (userOp.nonce !== undefined)\n\t\t\tpartialOpHex.nonce = `0x${userOp.nonce.toString(16)}`;\n\t\tif (userOp.initCode) partialOpHex.initCode = userOp.initCode;\n\t\tif (userOp.callData) partialOpHex.callData = userOp.callData;\n\t\tif (userOp.callGasLimit !== undefined)\n\t\t\tpartialOpHex.callGasLimit = `0x${userOp.callGasLimit.toString(16)}`;\n\t\tif (userOp.verificationGasLimit !== undefined)\n\t\t\tpartialOpHex.verificationGasLimit = `0x${userOp.verificationGasLimit.toString(16)}`;\n\t\tif (userOp.preVerificationGas !== undefined)\n\t\t\tpartialOpHex.preVerificationGas = `0x${userOp.preVerificationGas.toString(16)}`;\n\t\tif (userOp.maxFeePerGas !== undefined)\n\t\t\tpartialOpHex.maxFeePerGas = `0x${userOp.maxFeePerGas.toString(16)}`;\n\t\tif (userOp.maxPriorityFeePerGas !== undefined)\n\t\t\tpartialOpHex.maxPriorityFeePerGas = `0x${userOp.maxPriorityFeePerGas.toString(16)}`;\n\t\tif (userOp.paymasterAndData)\n\t\t\tpartialOpHex.paymasterAndData = userOp.paymasterAndData;\n\t\tif (userOp.signature) partialOpHex.signature = userOp.signature;\n\n\t\tconst result = await this.call<{\n\t\t\tpreVerificationGas: string;\n\t\t\tverificationGasLimit: string;\n\t\t\tcallGasLimit: string;\n\t\t}>(\"eth_estimateUserOperationGas\", [partialOpHex, this.entryPointAddress]);\n\n\t\treturn {\n\t\t\tpreVerificationGas: BigInt(result.preVerificationGas),\n\t\t\tverificationGasLimit: BigInt(result.verificationGasLimit),\n\t\t\tcallGasLimit: BigInt(result.callGasLimit),\n\t\t};\n\t}\n\n\tasync getUserOperationByHash(\n\t\thash: string,\n\t): Promise<UserOperationReceipt | null> {\n\t\ttry {\n\t\t\treturn await this.call<UserOperationReceipt | null>(\n\t\t\t\t\"eth_getUserOperationByHash\",\n\t\t\t\t[hash],\n\t\t\t);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync getUserOperationReceipt(\n\t\thash: string,\n\t): Promise<UserOperationReceipt | null> {\n\t\ttry {\n\t\t\treturn await this.call<UserOperationReceipt | null>(\n\t\t\t\t\"eth_getUserOperationReceipt\",\n\t\t\t\t[hash],\n\t\t\t);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync getSupportedEntryPoints(): Promise<string[]> {\n\t\treturn this.call<string[]>(\"eth_supportedEntryPoints\", []);\n\t}\n\n\tasync getChainId(): Promise<number> {\n\t\tconst result = await this.call<string>(\"eth_chainId\", []);\n\t\treturn Number.parseInt(result, 16);\n\t}\n\n\tasync waitForUserOperationReceipt(\n\t\thash: string,\n\t\ttimeout = 60000,\n\t\tinterval = 2000,\n\t): Promise<UserOperationReceipt> {\n\t\tconst startTime = Date.now();\n\n\t\twhile (Date.now() - startTime < timeout) {\n\t\t\tconst receipt = await this.getUserOperationReceipt(hash);\n\t\t\tif (receipt) {\n\t\t\t\treturn receipt;\n\t\t\t}\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, interval));\n\t\t}\n\n\t\tthrow new Error(`UserOperation ${hash} not confirmed within timeout`);\n\t}\n\n\tprivate async call<T>(method: string, params: unknown[]): Promise<T> {\n\t\tconst response = await fetch(this.bundlerUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid: ++this.requestId,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t}),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Bundler request failed: ${response.status}`);\n\t\t}\n\n\t\tconst data: JsonRpcResponse<T> = await response.json();\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Bundler error: ${data.error.message} (code: ${data.error.code})`,\n\t\t\t);\n\t\t}\n\n\t\treturn data.result as T;\n\t}\n}\n\nexport function createBundlerClient(\n\tconfig: BundlerClientConfig,\n): BundlerClient {\n\treturn new BundlerClient(config);\n}\n","import type {\n\tPaymasterContext,\n\tPaymasterResult,\n\tUserOperation,\n\tUserOperationHex,\n} from \"./types\";\nimport { userOpToHex } from \"./types\";\n\nexport interface PaymasterClientConfig {\n\tpaymasterUrl: string;\n\tentryPointAddress: string;\n\tchainId: number;\n}\n\ninterface JsonRpcResponse<T> {\n\tjsonrpc: string;\n\tid: number;\n\tresult?: T;\n\terror?: {\n\t\tcode: number;\n\t\tmessage: string;\n\t\tdata?: unknown;\n\t};\n}\n\ninterface SponsorUserOperationResult {\n\tpaymasterAndData: string;\n\tpreVerificationGas?: string;\n\tverificationGasLimit?: string;\n\tcallGasLimit?: string;\n}\n\nexport class PaymasterClient {\n\tprivate paymasterUrl: string;\n\tprivate entryPointAddress: string;\n\tprivate chainId: number;\n\tprivate requestId = 0;\n\n\tconstructor(config: PaymasterClientConfig) {\n\t\tthis.paymasterUrl = config.paymasterUrl;\n\t\tthis.entryPointAddress = config.entryPointAddress;\n\t\tthis.chainId = config.chainId;\n\t}\n\n\tasync getPaymasterData(\n\t\tuserOp: Partial<UserOperation>,\n\t\tcontext?: PaymasterContext,\n\t): Promise<PaymasterResult> {\n\t\tconst partialOpHex = this.partialUserOpToHex(userOp);\n\n\t\tconst result = await this.call<SponsorUserOperationResult>(\n\t\t\t\"pm_sponsorUserOperation\",\n\t\t\t[partialOpHex, this.entryPointAddress, context ?? {}],\n\t\t);\n\n\t\treturn {\n\t\t\tpaymasterAndData: result.paymasterAndData,\n\t\t\tpreVerificationGas: result.preVerificationGas\n\t\t\t\t? BigInt(result.preVerificationGas)\n\t\t\t\t: undefined,\n\t\t\tverificationGasLimit: result.verificationGasLimit\n\t\t\t\t? BigInt(result.verificationGasLimit)\n\t\t\t\t: undefined,\n\t\t\tcallGasLimit: result.callGasLimit\n\t\t\t\t? BigInt(result.callGasLimit)\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\tasync validatePaymasterUserOp(\n\t\tuserOp: UserOperation,\n\t): Promise<{ valid: boolean; validAfter?: bigint; validUntil?: bigint }> {\n\t\tconst userOpHex = userOpToHex(userOp);\n\n\t\ttry {\n\t\t\tconst result = await this.call<{\n\t\t\t\tvalid: boolean;\n\t\t\t\tvalidAfter?: string;\n\t\t\t\tvalidUntil?: string;\n\t\t\t}>(\"pm_validatePaymasterUserOp\", [userOpHex, this.entryPointAddress]);\n\n\t\t\treturn {\n\t\t\t\tvalid: result.valid,\n\t\t\t\tvalidAfter: result.validAfter ? BigInt(result.validAfter) : undefined,\n\t\t\t\tvalidUntil: result.validUntil ? BigInt(result.validUntil) : undefined,\n\t\t\t};\n\t\t} catch {\n\t\t\treturn { valid: false };\n\t\t}\n\t}\n\n\tasync getSupportedTokens(): Promise<\n\t\tArray<{ address: string; symbol: string; decimals: number }>\n\t> {\n\t\ttry {\n\t\t\treturn await this.call<\n\t\t\t\tArray<{ address: string; symbol: string; decimals: number }>\n\t\t\t>(\"pm_supportedTokens\", [this.chainId.toString()]);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tasync getTokenPaymasterData(\n\t\tuserOp: Partial<UserOperation>,\n\t\ttokenAddress: string,\n\t): Promise<PaymasterResult> {\n\t\treturn this.getPaymasterData(userOp, {\n\t\t\tmode: \"erc20\",\n\t\t\ttoken: tokenAddress,\n\t\t});\n\t}\n\n\tprivate partialUserOpToHex(\n\t\tuserOp: Partial<UserOperation>,\n\t): Partial<UserOperationHex> {\n\t\tconst result: Partial<UserOperationHex> = {};\n\n\t\tif (userOp.sender) result.sender = userOp.sender;\n\t\tif (userOp.nonce !== undefined)\n\t\t\tresult.nonce = `0x${userOp.nonce.toString(16)}`;\n\t\tif (userOp.initCode) result.initCode = userOp.initCode;\n\t\tif (userOp.callData) result.callData = userOp.callData;\n\t\tif (userOp.callGasLimit !== undefined)\n\t\t\tresult.callGasLimit = `0x${userOp.callGasLimit.toString(16)}`;\n\t\tif (userOp.verificationGasLimit !== undefined)\n\t\t\tresult.verificationGasLimit = `0x${userOp.verificationGasLimit.toString(16)}`;\n\t\tif (userOp.preVerificationGas !== undefined)\n\t\t\tresult.preVerificationGas = `0x${userOp.preVerificationGas.toString(16)}`;\n\t\tif (userOp.maxFeePerGas !== undefined)\n\t\t\tresult.maxFeePerGas = `0x${userOp.maxFeePerGas.toString(16)}`;\n\t\tif (userOp.maxPriorityFeePerGas !== undefined)\n\t\t\tresult.maxPriorityFeePerGas = `0x${userOp.maxPriorityFeePerGas.toString(16)}`;\n\t\tif (userOp.paymasterAndData)\n\t\t\tresult.paymasterAndData = userOp.paymasterAndData;\n\t\tif (userOp.signature) result.signature = userOp.signature;\n\n\t\treturn result;\n\t}\n\n\tprivate async call<T>(method: string, params: unknown[]): Promise<T> {\n\t\tconst response = await fetch(this.paymasterUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid: ++this.requestId,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t}),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Paymaster request failed: ${response.status}`);\n\t\t}\n\n\t\tconst data: JsonRpcResponse<T> = await response.json();\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Paymaster error: ${data.error.message} (code: ${data.error.code})`,\n\t\t\t);\n\t\t}\n\n\t\treturn data.result as T;\n\t}\n}\n\nexport function createPaymasterClient(\n\tconfig: PaymasterClientConfig,\n): PaymasterClient {\n\treturn new PaymasterClient(config);\n}\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\nimport type { RpcConnection } from \"../chains/chain-manager\";\nimport { BundlerClient } from \"./bundler-client\";\nimport { PaymasterClient } from \"./paymaster-client\";\nimport type { GasEstimate, UserOperation } from \"./types\";\nimport type { PaymasterContext } from \"./types\";\n\nexport interface SimpleAccountConfig {\n\townerAddress: string;\n\tfactoryAddress: string;\n\tentryPointAddress: string;\n\tbundlerUrl: string;\n\tpaymasterUrl?: string;\n\tchainId: number;\n\tsalt?: bigint;\n\trpcConnection: RpcConnection;\n}\n\nexport interface TransactionRequest {\n\tto: string;\n\tvalue?: bigint;\n\tdata?: string;\n}\n\nconst EXECUTE_SELECTOR = \"b61d27f6\";\nconst EXECUTE_BATCH_SELECTOR = \"18dfb3c7\";\nconst CREATE_ACCOUNT_SELECTOR = \"5fbfb9cf\";\nconst GET_ADDRESS_SELECTOR = \"8cb84e18\";\n\nexport class SimpleAccount {\n\tprivate ownerAddress: string;\n\tprivate factoryAddress: string;\n\tprivate entryPointAddress: string;\n\tprivate salt: bigint;\n\tprivate bundlerClient: BundlerClient;\n\tprivate paymasterClient: PaymasterClient | null;\n\tprivate chainId: number;\n\tprivate rpcConnection: RpcConnection;\n\n\tprivate _accountAddress: string | null = null;\n\tprivate _isDeployed: boolean | null = null;\n\tprivate _cachedNonce: bigint | null = null;\n\n\tconstructor(config: SimpleAccountConfig) {\n\t\tthis.ownerAddress = config.ownerAddress.toLowerCase();\n\t\tthis.factoryAddress = config.factoryAddress.toLowerCase();\n\t\tthis.entryPointAddress = config.entryPointAddress.toLowerCase();\n\t\tthis.salt = config.salt ?? 0n;\n\t\tthis.chainId = config.chainId;\n\t\tthis.rpcConnection = config.rpcConnection;\n\n\t\tthis.bundlerClient = new BundlerClient({\n\t\t\tbundlerUrl: config.bundlerUrl,\n\t\t\tentryPointAddress: config.entryPointAddress,\n\t\t\tchainId: config.chainId,\n\t\t});\n\n\t\tthis.paymasterClient = config.paymasterUrl\n\t\t\t? new PaymasterClient({\n\t\t\t\t\tpaymasterUrl: config.paymasterUrl,\n\t\t\t\t\tentryPointAddress: config.entryPointAddress,\n\t\t\t\t\tchainId: config.chainId,\n\t\t\t\t})\n\t\t\t: null;\n\t}\n\n\t/**\n\t * @deprecated Use getAccountAddress() instead. This sync getter is removed\n\t * because address derivation now requires an RPC call to the factory.\n\t */\n\tget accountAddress(): string {\n\t\tif (this._accountAddress) {\n\t\t\treturn this._accountAddress;\n\t\t}\n\t\tthrow new Error(\n\t\t\t\"SimpleAccount.accountAddress is deprecated. \" +\n\t\t\t\t\"Use 'await account.getAccountAddress()' instead. \" +\n\t\t\t\t\"Address derivation now requires an RPC call to factory.getAddress().\",\n\t\t);\n\t}\n\n\tasync getAccountAddress(): Promise<string> {\n\t\tif (this._accountAddress) {\n\t\t\treturn this._accountAddress;\n\t\t}\n\n\t\tthis._accountAddress = await this.fetchAccountAddressFromFactory();\n\t\treturn this._accountAddress;\n\t}\n\n\tasync isDeployed(): Promise<boolean> {\n\t\tif (this._isDeployed !== null) {\n\t\t\treturn this._isDeployed;\n\t\t}\n\n\t\ttry {\n\t\t\tconst code = await this.getAccountCode();\n\t\t\tthis._isDeployed = code !== \"0x\" && code.length > 2;\n\t\t\treturn this._isDeployed;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tinvalidateDeploymentCache(): void {\n\t\tthis._isDeployed = null;\n\t}\n\n\tasync buildUserOperation(\n\t\ttransactions: TransactionRequest | TransactionRequest[],\n\t\toptions?: {\n\t\t\tusePaymaster?: boolean;\n\t\t\tpaymasterContext?: PaymasterContext;\n\t\t},\n\t): Promise<UserOperation> {\n\t\tconst txArray = Array.isArray(transactions) ? transactions : [transactions];\n\t\tconst callData = this.encodeExecute(txArray);\n\n\t\tconst accountAddress = await this.getAccountAddress();\n\t\tconst isDeployed = await this.isDeployed();\n\t\tconst initCode = isDeployed ? \"0x\" : this.getInitCode();\n\n\t\tconst nonce = await this.getNonce();\n\n\t\tlet userOp: UserOperation = {\n\t\t\tsender: accountAddress,\n\t\t\tnonce,\n\t\t\tinitCode,\n\t\t\tcallData,\n\t\t\tcallGasLimit: 0n,\n\t\t\tverificationGasLimit: 0n,\n\t\t\tpreVerificationGas: 0n,\n\t\t\tmaxFeePerGas: 0n,\n\t\t\tmaxPriorityFeePerGas: 0n,\n\t\t\tpaymasterAndData: \"0x\",\n\t\t\tsignature: this.getDummySignature(),\n\t\t};\n\n\t\tconst gasEstimate = await this.estimateGas(userOp);\n\t\tconst feeData = await this.getFeeData();\n\n\t\tuserOp = {\n\t\t\t...userOp,\n\t\t\tcallGasLimit: gasEstimate.callGasLimit,\n\t\t\tverificationGasLimit: gasEstimate.verificationGasLimit,\n\t\t\tpreVerificationGas: gasEstimate.preVerificationGas,\n\t\t\tmaxFeePerGas: feeData.maxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n\t\t};\n\n\t\tif (options?.usePaymaster && this.paymasterClient) {\n\t\t\tconst paymasterData = await this.paymasterClient.getPaymasterData(\n\t\t\t\tuserOp,\n\t\t\t\toptions.paymasterContext,\n\t\t\t);\n\t\t\tuserOp.paymasterAndData = paymasterData.paymasterAndData;\n\n\t\t\tif (paymasterData.preVerificationGas) {\n\t\t\t\tuserOp.preVerificationGas = paymasterData.preVerificationGas;\n\t\t\t}\n\t\t\tif (paymasterData.verificationGasLimit) {\n\t\t\t\tuserOp.verificationGasLimit = paymasterData.verificationGasLimit;\n\t\t\t}\n\t\t\tif (paymasterData.callGasLimit) {\n\t\t\t\tuserOp.callGasLimit = paymasterData.callGasLimit;\n\t\t\t}\n\t\t}\n\n\t\tuserOp.signature = \"0x\";\n\n\t\treturn userOp;\n\t}\n\n\tcomputeUserOpHash(userOp: UserOperation): string {\n\t\tconst packed = this.packUserOp(userOp);\n\t\tconst userOpHash = keccak_256(packed);\n\n\t\tconst finalHash = keccak_256(\n\t\t\thexToBytes(\n\t\t\t\tbytesToHex(userOpHash) +\n\t\t\t\t\tthis.entryPointAddress.slice(2).padStart(64, \"0\") +\n\t\t\t\t\tthis.chainId.toString(16).padStart(64, \"0\"),\n\t\t\t),\n\t\t);\n\n\t\treturn `0x${bytesToHex(finalHash)}`;\n\t}\n\n\tasync sendUserOperation(\n\t\tuserOp: UserOperation,\n\t): Promise<{ userOpHash: string; wait: () => Promise<void> }> {\n\t\tconst userOpHash = await this.bundlerClient.sendUserOperation(userOp);\n\n\t\treturn {\n\t\t\tuserOpHash,\n\t\t\twait: async () => {\n\t\t\t\tawait this.bundlerClient.waitForUserOperationReceipt(userOpHash);\n\t\t\t\tthis._isDeployed = true;\n\t\t\t\tthis.invalidateNonceCache();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async fetchAccountAddressFromFactory(): Promise<string> {\n\t\tconst ownerPadded = this.ownerAddress.slice(2).padStart(64, \"0\");\n\t\tconst saltPadded = this.salt.toString(16).padStart(64, \"0\");\n\n\t\tconst result = await this.rpcConnection.call<string>(\"eth_call\", [\n\t\t\t{\n\t\t\t\tto: this.factoryAddress,\n\t\t\t\tdata: `0x${GET_ADDRESS_SELECTOR}${ownerPadded}${saltPadded}`,\n\t\t\t},\n\t\t\t\"latest\",\n\t\t]);\n\n\t\treturn `0x${result.slice(-40)}`;\n\t}\n\n\tprivate getInitCode(): string {\n\t\tconst ownerPadded = this.ownerAddress.slice(2).padStart(64, \"0\");\n\t\tconst saltPadded = this.salt.toString(16).padStart(64, \"0\");\n\n\t\treturn (\n\t\t\tthis.factoryAddress + CREATE_ACCOUNT_SELECTOR + ownerPadded + saltPadded\n\t\t);\n\t}\n\n\tprivate encodeExecute(transactions: TransactionRequest[]): string {\n\t\tif (transactions.length === 1) {\n\t\t\tconst tx = transactions[0];\n\t\t\tconst to = tx.to.slice(2).toLowerCase().padStart(64, \"0\");\n\t\t\tconst value = (tx.value ?? 0n).toString(16).padStart(64, \"0\");\n\t\t\tconst dataOffset = \"60\".padStart(64, \"0\");\n\t\t\tconst data = tx.data?.slice(2) ?? \"\";\n\t\t\tconst dataLength = (data.length / 2).toString(16).padStart(64, \"0\");\n\n\t\t\treturn `0x${EXECUTE_SELECTOR}${to}${value}${dataOffset}${dataLength}${data}`;\n\t\t}\n\n\t\tconst n = transactions.length;\n\n\t\tconst destArraySize = 32 + n * 32;\n\t\tconst valueArraySize = 32 + n * 32;\n\n\t\tconst destOffset = 96;\n\t\tconst valueOffset = destOffset + destArraySize;\n\t\tconst funcOffset = valueOffset + valueArraySize;\n\n\t\tlet encoded = EXECUTE_BATCH_SELECTOR;\n\n\t\tencoded += destOffset.toString(16).padStart(64, \"0\");\n\t\tencoded += valueOffset.toString(16).padStart(64, \"0\");\n\t\tencoded += funcOffset.toString(16).padStart(64, \"0\");\n\n\t\tencoded += n.toString(16).padStart(64, \"0\");\n\t\tfor (const tx of transactions) {\n\t\t\tencoded += tx.to.slice(2).toLowerCase().padStart(64, \"0\");\n\t\t}\n\n\t\tencoded += n.toString(16).padStart(64, \"0\");\n\t\tfor (const tx of transactions) {\n\t\t\tencoded += (tx.value ?? 0n).toString(16).padStart(64, \"0\");\n\t\t}\n\n\t\tconst funcDatas: string[] = transactions.map((tx) => {\n\t\t\tconst data = tx.data ?? \"0x\";\n\t\t\treturn data.startsWith(\"0x\") ? data.slice(2) : data;\n\t\t});\n\n\t\tconst funcElementOffsets: number[] = [];\n\t\tlet currentOffset = 32 + n * 32;\n\t\tfor (const funcData of funcDatas) {\n\t\t\tfuncElementOffsets.push(currentOffset);\n\t\t\tconst dataLen = funcData.length / 2;\n\t\t\tconst paddedLen = Math.ceil(dataLen / 32) * 32;\n\t\t\tcurrentOffset += 32 + paddedLen;\n\t\t}\n\n\t\tencoded += n.toString(16).padStart(64, \"0\");\n\t\tfor (const offset of funcElementOffsets) {\n\t\t\tencoded += offset.toString(16).padStart(64, \"0\");\n\t\t}\n\n\t\tfor (const funcData of funcDatas) {\n\t\t\tconst dataLen = funcData.length / 2;\n\t\t\tencoded += dataLen.toString(16).padStart(64, \"0\");\n\t\t\tif (funcData.length > 0) {\n\t\t\t\tconst paddedLen = Math.ceil(dataLen / 32) * 32;\n\t\t\t\tencoded += funcData.padEnd(paddedLen * 2, \"0\");\n\t\t\t}\n\t\t}\n\n\t\treturn `0x${encoded}`;\n\t}\n\n\tprivate packUserOp(userOp: UserOperation): Uint8Array {\n\t\tconst initCodeHash = keccak_256(hexToBytes(userOp.initCode.slice(2) || \"\"));\n\t\tconst callDataHash = keccak_256(hexToBytes(userOp.callData.slice(2) || \"\"));\n\t\tconst paymasterAndDataHash = keccak_256(\n\t\t\thexToBytes(userOp.paymasterAndData.slice(2) || \"\"),\n\t\t);\n\n\t\tconst packed =\n\t\t\tuserOp.sender.slice(2).toLowerCase().padStart(64, \"0\") +\n\t\t\tuserOp.nonce.toString(16).padStart(64, \"0\") +\n\t\t\tbytesToHex(initCodeHash) +\n\t\t\tbytesToHex(callDataHash) +\n\t\t\tuserOp.callGasLimit.toString(16).padStart(64, \"0\") +\n\t\t\tuserOp.verificationGasLimit.toString(16).padStart(64, \"0\") +\n\t\t\tuserOp.preVerificationGas.toString(16).padStart(64, \"0\") +\n\t\t\tuserOp.maxFeePerGas.toString(16).padStart(64, \"0\") +\n\t\t\tuserOp.maxPriorityFeePerGas.toString(16).padStart(64, \"0\") +\n\t\t\tbytesToHex(paymasterAndDataHash);\n\n\t\treturn hexToBytes(packed);\n\t}\n\n\tprivate getDummySignature(): string {\n\t\treturn `0x${\"00\".repeat(65)}`;\n\t}\n\n\tprivate async getNonce(): Promise<bigint> {\n\t\tconst isDeployed = await this.isDeployed();\n\t\tif (!isDeployed) {\n\t\t\treturn 0n;\n\t\t}\n\n\t\tif (this._cachedNonce !== null) {\n\t\t\treturn this._cachedNonce;\n\t\t}\n\n\t\tconst accountAddress = await this.getAccountAddress();\n\t\tconst nonceKey = 0n;\n\t\tconst nonceData = await this.rpcConnection.call<string>(\"eth_call\", [\n\t\t\t{\n\t\t\t\tto: this.entryPointAddress,\n\t\t\t\tdata: `0x35567e1a${accountAddress.slice(2).padStart(64, \"0\")}${nonceKey.toString(16).padStart(64, \"0\")}`,\n\t\t\t},\n\t\t\t\"latest\",\n\t\t]);\n\n\t\tconst nonce = BigInt(nonceData);\n\t\tthis._cachedNonce = nonce;\n\t\treturn nonce;\n\t}\n\n\tinvalidateNonceCache(): void {\n\t\tthis._cachedNonce = null;\n\t}\n\n\tprivate async estimateGas(userOp: UserOperation): Promise<GasEstimate> {\n\t\ttry {\n\t\t\treturn await this.bundlerClient.estimateUserOperationGas(userOp);\n\t\t} catch {\n\t\t\tconst isDeployed = await this.isDeployed();\n\t\t\treturn {\n\t\t\t\tpreVerificationGas: 50000n,\n\t\t\t\tverificationGasLimit: isDeployed ? 100000n : 400000n,\n\t\t\t\tcallGasLimit: 200000n,\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate async getFeeData(): Promise<{\n\t\tmaxFeePerGas: bigint;\n\t\tmaxPriorityFeePerGas: bigint;\n\t}> {\n\t\ttry {\n\t\t\tconst gasPrice = await this.rpcConnection.getGasPrice();\n\t\t\treturn {\n\t\t\t\tmaxFeePerGas: gasPrice * 2n,\n\t\t\t\tmaxPriorityFeePerGas: gasPrice / 10n,\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tmaxFeePerGas: 1000000000n,\n\t\t\t\tmaxPriorityFeePerGas: 1000000000n,\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate async getAccountCode(): Promise<string> {\n\t\tconst accountAddress = await this.getAccountAddress();\n\t\treturn this.rpcConnection.getCode(accountAddress);\n\t}\n}\n\nexport function createSimpleAccount(\n\tconfig: SimpleAccountConfig,\n): SimpleAccount {\n\treturn new SimpleAccount(config);\n}\n"]}
|