@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.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -0
  3. package/dist/aa.d.mts +185 -0
  4. package/dist/aa.d.ts +185 -0
  5. package/dist/aa.js +520 -0
  6. package/dist/aa.js.map +1 -0
  7. package/dist/aa.mjs +511 -0
  8. package/dist/aa.mjs.map +1 -0
  9. package/dist/chain-manager-C3eHsVt9.d.mts +98 -0
  10. package/dist/chain-manager-C3eHsVt9.d.ts +98 -0
  11. package/dist/chains.d.mts +17 -0
  12. package/dist/chains.d.ts +17 -0
  13. package/dist/chains.js +331 -0
  14. package/dist/chains.js.map +1 -0
  15. package/dist/chains.mjs +315 -0
  16. package/dist/chains.mjs.map +1 -0
  17. package/dist/index.d.mts +656 -0
  18. package/dist/index.d.ts +656 -0
  19. package/dist/index.js +6627 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/index.mjs +6502 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/modal.d.mts +68 -0
  24. package/dist/modal.d.ts +68 -0
  25. package/dist/modal.js +4867 -0
  26. package/dist/modal.js.map +1 -0
  27. package/dist/modal.mjs +4850 -0
  28. package/dist/modal.mjs.map +1 -0
  29. package/dist/nero-sdk-Cm8gzHZJ.d.mts +684 -0
  30. package/dist/nero-sdk-IhuTBrXZ.d.ts +684 -0
  31. package/dist/no-modal.d.mts +56 -0
  32. package/dist/no-modal.d.ts +56 -0
  33. package/dist/no-modal.js +4060 -0
  34. package/dist/no-modal.js.map +1 -0
  35. package/dist/no-modal.mjs +4041 -0
  36. package/dist/no-modal.mjs.map +1 -0
  37. package/dist/react.d.mts +28 -0
  38. package/dist/react.d.ts +28 -0
  39. package/dist/react.js +4033 -0
  40. package/dist/react.js.map +1 -0
  41. package/dist/react.mjs +4016 -0
  42. package/dist/react.mjs.map +1 -0
  43. package/dist/useNeroWallet-PZh940vV.d.ts +164 -0
  44. package/dist/useNeroWallet-awIYqM6e.d.mts +164 -0
  45. package/package.json +126 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/crypto-primitives.ts","../src/react/context.ts","../src/react/theme/default-theme.ts","../src/react/theme/theme-context.tsx","../src/modal/components/LoginButton.tsx","../src/modal/components/Modal.tsx","../src/modal/components/LoginModal.tsx","../src/modal/components/Button.tsx","../src/modal/components/WalletModal.tsx","../src/modal/NeroModal.tsx","../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/react/NeroMpcAuthProvider.tsx","../src/react/hooks/useNeroMpcAuth.ts","../src/react/hooks/useNeroConnect.ts","../src/react/hooks/useNeroDisconnect.ts","../src/react/hooks/useNeroUser.ts","../src/react/hooks/useNeroWallet.ts"],"names":["createContext","useContext","jsx","useCallback","useEffect","jsxs","useState","LoadingSpinner","Fragment","encryptWithPassword","decryptWithPassword","hexToBytes","bytesToHex","keccak_256","utf8ToBytes","G","secp256k1","sha256","toBuffer","CURVE_ORDER","mod","generateRandomScalar","useMemo","error"],"mappings":"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","file":"modal.mjs","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 { createContext, useContext } from \"react\";\nimport type { NeroMpcSDK, NeroSDKState } from \"../nero-sdk\";\n\nexport interface NeroMpcAuthContextValue {\n\tsdk: NeroMpcSDK | null;\n\tstate: NeroSDKState;\n\tisLoading: boolean;\n\terror: Error | null;\n}\n\nexport const NeroMpcAuthContext = createContext<NeroMpcAuthContextValue | null>(\n\tnull,\n);\n\nexport function useNeroMpcAuthContext(): NeroMpcAuthContextValue {\n\tconst context = useContext(NeroMpcAuthContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useNeroMpcAuthContext must be used within a NeroMpcAuthProvider\",\n\t\t);\n\t}\n\treturn context;\n}\n","import type {\n\tTheme,\n\tThemeBorderRadius,\n\tThemeColors,\n\tThemeShadows,\n\tThemeSpacing,\n\tThemeTypography,\n} from \"./types\";\n\nconst lightColors: ThemeColors = {\n\tprimary: \"#6366f1\",\n\tprimaryHover: \"#4f46e5\",\n\tsecondary: \"#8b5cf6\",\n\tsecondaryHover: \"#7c3aed\",\n\tbackground: \"#ffffff\",\n\tbackgroundSecondary: \"#f9fafb\",\n\tsurface: \"#ffffff\",\n\tsurfaceHover: \"#f3f4f6\",\n\ttext: \"#111827\",\n\ttextSecondary: \"#374151\",\n\ttextMuted: \"#6b7280\",\n\tborder: \"#e5e7eb\",\n\tborderFocus: \"#6366f1\",\n\terror: \"#ef4444\",\n\terrorBackground: \"#fef2f2\",\n\tsuccess: \"#22c55e\",\n\tsuccessBackground: \"#f0fdf4\",\n\twarning: \"#f59e0b\",\n\twarningBackground: \"#fffbeb\",\n\toverlay: \"rgba(0, 0, 0, 0.5)\",\n};\n\nconst darkColors: ThemeColors = {\n\tprimary: \"#818cf8\",\n\tprimaryHover: \"#6366f1\",\n\tsecondary: \"#a78bfa\",\n\tsecondaryHover: \"#8b5cf6\",\n\tbackground: \"#0f172a\",\n\tbackgroundSecondary: \"#1e293b\",\n\tsurface: \"#1e293b\",\n\tsurfaceHover: \"#334155\",\n\ttext: \"#f8fafc\",\n\ttextSecondary: \"#e2e8f0\",\n\ttextMuted: \"#94a3b8\",\n\tborder: \"#334155\",\n\tborderFocus: \"#818cf8\",\n\terror: \"#f87171\",\n\terrorBackground: \"#450a0a\",\n\tsuccess: \"#4ade80\",\n\tsuccessBackground: \"#052e16\",\n\twarning: \"#fbbf24\",\n\twarningBackground: \"#451a03\",\n\toverlay: \"rgba(0, 0, 0, 0.7)\",\n};\n\nconst typography: ThemeTypography = {\n\tfontFamily:\n\t\t'-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n\tfontFamilyMono:\n\t\t'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n\tfontSizeXs: \"0.75rem\",\n\tfontSizeSm: \"0.875rem\",\n\tfontSizeMd: \"1rem\",\n\tfontSizeLg: \"1.125rem\",\n\tfontSizeXl: \"1.25rem\",\n\tfontWeightNormal: 400,\n\tfontWeightMedium: 500,\n\tfontWeightSemibold: 600,\n\tfontWeightBold: 700,\n\tlineHeightTight: 1.25,\n\tlineHeightNormal: 1.5,\n\tlineHeightRelaxed: 1.75,\n};\n\nconst spacing: ThemeSpacing = {\n\txs: \"0.25rem\",\n\tsm: \"0.5rem\",\n\tmd: \"1rem\",\n\tlg: \"1.5rem\",\n\txl: \"2rem\",\n\txxl: \"3rem\",\n};\n\nconst borderRadius: ThemeBorderRadius = {\n\tnone: \"0\",\n\tsm: \"0.25rem\",\n\tmd: \"0.375rem\",\n\tlg: \"0.5rem\",\n\txl: \"0.75rem\",\n\tfull: \"9999px\",\n};\n\nconst shadows: ThemeShadows = {\n\tsm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\n\tmd: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n\tlg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n\txl: \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\n};\n\nexport const lightTheme: Theme = {\n\tmode: \"light\",\n\tcolors: lightColors,\n\ttypography,\n\tspacing,\n\tborderRadius,\n\tshadows,\n};\n\nexport const darkTheme: Theme = {\n\tmode: \"dark\",\n\tcolors: darkColors,\n\ttypography,\n\tspacing,\n\tborderRadius,\n\tshadows,\n};\n\nexport function getDefaultTheme(mode: \"light\" | \"dark\"): Theme {\n\treturn mode === \"dark\" ? darkTheme : lightTheme;\n}\n\nexport function createTheme(\n\tmode: \"light\" | \"dark\",\n\toverrides?: {\n\t\tprimary?: string;\n\t\tsecondary?: string;\n\t\tbackground?: string;\n\t\ttext?: string;\n\t\tborder?: string;\n\t\tfontFamily?: string;\n\t},\n): Theme {\n\tconst base = getDefaultTheme(mode);\n\n\tif (!overrides) {\n\t\treturn base;\n\t}\n\n\treturn {\n\t\t...base,\n\t\tcolors: {\n\t\t\t...base.colors,\n\t\t\t...(overrides.primary && { primary: overrides.primary }),\n\t\t\t...(overrides.secondary && { secondary: overrides.secondary }),\n\t\t\t...(overrides.background && { background: overrides.background }),\n\t\t\t...(overrides.text && { text: overrides.text }),\n\t\t\t...(overrides.border && { border: overrides.border }),\n\t\t},\n\t\ttypography: {\n\t\t\t...base.typography,\n\t\t\t...(overrides.fontFamily && { fontFamily: overrides.fontFamily }),\n\t\t},\n\t};\n}\n","import type React from \"react\";\nimport {\n\ttype ReactNode,\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from \"react\";\nimport { createTheme, getDefaultTheme } from \"./default-theme\";\nimport type { Theme, ThemeMode, UIConfig } from \"./types\";\n\nexport interface ThemeContextValue {\n\ttheme: Theme;\n\tmode: ThemeMode;\n\tresolvedMode: \"light\" | \"dark\";\n\tsetMode: (mode: ThemeMode) => void;\n\tuiConfig: UIConfig;\n\tlogo: string | undefined;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n\tchildren: ReactNode;\n\tuiConfig?: UIConfig;\n\tdefaultMode?: ThemeMode;\n}\n\nfunction getSystemTheme(): \"light\" | \"dark\" {\n\tif (typeof window === \"undefined\" || !window.matchMedia) {\n\t\treturn \"light\";\n\t}\n\ttry {\n\t\treturn window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n\t\t\t? \"dark\"\n\t\t\t: \"light\";\n\t} catch {\n\t\treturn \"light\";\n\t}\n}\n\nexport function ThemeProvider({\n\tchildren,\n\tuiConfig,\n\tdefaultMode = \"auto\",\n}: ThemeProviderProps): React.ReactElement {\n\tconst [mode, setMode] = useState<ThemeMode>(defaultMode);\n\tconst [systemTheme, setSystemTheme] = useState<\"light\" | \"dark\">(\n\t\tgetSystemTheme,\n\t);\n\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\" || !window.matchMedia) return undefined;\n\n\t\ttry {\n\t\t\tconst mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n\t\t\tconst handleChange = (e: MediaQueryListEvent) => {\n\t\t\t\tsetSystemTheme(e.matches ? \"dark\" : \"light\");\n\t\t\t};\n\n\t\t\tmediaQuery.addEventListener(\"change\", handleChange);\n\t\t\treturn () => mediaQuery.removeEventListener(\"change\", handleChange);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}, []);\n\n\tconst resolvedMode = useMemo(() => {\n\t\tif (mode === \"auto\") {\n\t\t\treturn systemTheme;\n\t\t}\n\t\treturn mode;\n\t}, [mode, systemTheme]);\n\n\tconst theme = useMemo(() => {\n\t\tconst overrides = uiConfig?.theme;\n\t\tif (overrides) {\n\t\t\treturn createTheme(resolvedMode, overrides);\n\t\t}\n\t\treturn getDefaultTheme(resolvedMode);\n\t}, [resolvedMode, uiConfig?.theme]);\n\n\tconst logo = useMemo(() => {\n\t\tif (!uiConfig) return undefined;\n\t\treturn resolvedMode === \"dark\" ? uiConfig.logoDark : uiConfig.logoLight;\n\t}, [uiConfig, resolvedMode]);\n\n\tconst config: UIConfig = useMemo(() => {\n\t\treturn {\n\t\t\tappName: uiConfig?.appName ?? \"NERO MPC Wallet\",\n\t\t\tlogoLight: uiConfig?.logoLight,\n\t\t\tlogoDark: uiConfig?.logoDark,\n\t\t\tmode: uiConfig?.mode ?? defaultMode,\n\t\t\ttheme: uiConfig?.theme,\n\t\t\tdefaultLanguage: uiConfig?.defaultLanguage ?? \"en\",\n\t\t};\n\t}, [uiConfig, defaultMode]);\n\n\tconst handleSetMode = useCallback((newMode: ThemeMode) => {\n\t\tsetMode(newMode);\n\t\tif (typeof localStorage !== \"undefined\") {\n\t\t\tlocalStorage.setItem(\"nero-theme-mode\", newMode);\n\t\t}\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (typeof localStorage === \"undefined\") return;\n\t\tconst stored = localStorage.getItem(\"nero-theme-mode\") as ThemeMode | null;\n\t\tif (stored && [\"light\", \"dark\", \"auto\"].includes(stored)) {\n\t\t\tsetMode(stored);\n\t\t}\n\t}, []);\n\n\tconst value = useMemo<ThemeContextValue>(\n\t\t() => ({\n\t\t\ttheme,\n\t\t\tmode,\n\t\t\tresolvedMode,\n\t\t\tsetMode: handleSetMode,\n\t\t\tuiConfig: config,\n\t\t\tlogo,\n\t\t}),\n\t\t[theme, mode, resolvedMode, handleSetMode, config, logo],\n\t);\n\n\treturn (\n\t\t<ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n\t);\n}\n\nexport function useTheme(): ThemeContextValue {\n\tconst context = useContext(ThemeContext);\n\tif (!context) {\n\t\tthrow new Error(\"useTheme must be used within a ThemeProvider\");\n\t}\n\treturn context;\n}\n\nexport function useThemeColors() {\n\tconst { theme } = useTheme();\n\treturn theme.colors;\n}\n\nexport function useResolvedMode(): \"light\" | \"dark\" {\n\tconst { resolvedMode } = useTheme();\n\treturn resolvedMode;\n}\n","import type React from \"react\";\nimport type { OAuthProvider } from \"../../nero-sdk\";\nimport { useTheme } from \"../../react/theme\";\n\nexport interface LoginButtonProps {\n\tprovider: OAuthProvider;\n\tonClick: () => void;\n\tisLoading?: boolean;\n\tdisabled?: boolean;\n}\n\nconst providerConfig: Record<\n\tOAuthProvider,\n\t{ name: string; iconColor: string; bgColor: string }\n> = {\n\tgoogle: {\n\t\tname: \"Google\",\n\t\ticonColor: \"#4285F4\",\n\t\tbgColor: \"#ffffff\",\n\t},\n\tgithub: {\n\t\tname: \"GitHub\",\n\t\ticonColor: \"#24292e\",\n\t\tbgColor: \"#ffffff\",\n\t},\n\tapple: {\n\t\tname: \"Apple\",\n\t\ticonColor: \"#000000\",\n\t\tbgColor: \"#ffffff\",\n\t},\n};\n\nfunction GoogleIcon() {\n\treturn (\n\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\n\t\t\t<path\n\t\t\t\tfill=\"#4285F4\"\n\t\t\t\td=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"#34A853\"\n\t\t\t\td=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"#FBBC05\"\n\t\t\t\td=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"#EA4335\"\n\t\t\t\td=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n\t\t\t/>\n\t\t</svg>\n\t);\n}\n\nfunction GitHubIcon() {\n\treturn (\n\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"#24292e\">\n\t\t\t<path d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\" />\n\t\t</svg>\n\t);\n}\n\nfunction AppleIcon() {\n\treturn (\n\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"#000000\">\n\t\t\t<path d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.81-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z\" />\n\t\t</svg>\n\t);\n}\n\nfunction getProviderIcon(provider: OAuthProvider): React.ReactElement {\n\tswitch (provider) {\n\t\tcase \"google\":\n\t\t\treturn <GoogleIcon />;\n\t\tcase \"github\":\n\t\t\treturn <GitHubIcon />;\n\t\tcase \"apple\":\n\t\t\treturn <AppleIcon />;\n\t}\n}\n\nexport function LoginButton({\n\tprovider,\n\tonClick,\n\tisLoading = false,\n\tdisabled = false,\n}: LoginButtonProps): React.ReactElement {\n\tconst { theme } = useTheme();\n\tconst config = providerConfig[provider];\n\n\tconst buttonStyle: React.CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: theme.spacing.sm,\n\t\twidth: \"100%\",\n\t\tpadding: `${theme.spacing.md} ${theme.spacing.lg}`,\n\t\tbackgroundColor: config.bgColor,\n\t\tborder: `1px solid ${theme.colors.border}`,\n\t\tborderRadius: theme.borderRadius.lg,\n\t\tcursor: disabled || isLoading ? \"not-allowed\" : \"pointer\",\n\t\topacity: disabled || isLoading ? 0.6 : 1,\n\t\tfontFamily: theme.typography.fontFamily,\n\t\tfontSize: theme.typography.fontSizeMd,\n\t\tfontWeight: theme.typography.fontWeightMedium,\n\t\tcolor: theme.colors.text,\n\t\ttransition: \"background-color 0.2s, border-color 0.2s\",\n\t};\n\n\treturn (\n\t\t<button\n\t\t\tonClick={onClick}\n\t\t\tdisabled={disabled || isLoading}\n\t\t\tstyle={buttonStyle}\n\t\t\tonMouseEnter={(e) => {\n\t\t\t\tif (!disabled && !isLoading) {\n\t\t\t\t\te.currentTarget.style.borderColor = theme.colors.borderFocus;\n\t\t\t\t\te.currentTarget.style.backgroundColor = theme.colors.surfaceHover;\n\t\t\t\t}\n\t\t\t}}\n\t\t\tonMouseLeave={(e) => {\n\t\t\t\tif (!disabled && !isLoading) {\n\t\t\t\t\te.currentTarget.style.borderColor = theme.colors.border;\n\t\t\t\t\te.currentTarget.style.backgroundColor = config.bgColor;\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t{isLoading ? (\n\t\t\t\t<LoadingSpinner />\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{getProviderIcon(provider)}\n\t\t\t\t\t<span>Continue with {config.name}</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</button>\n\t);\n}\n\nfunction LoadingSpinner() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"20\"\n\t\t\theight=\"20\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstyle={{\n\t\t\t\tanimation: \"spin 1s linear infinite\",\n\t\t\t}}\n\t\t>\n\t\t\t<style>\n\t\t\t\t{\n\t\t\t\t\t\"@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\"\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<circle\n\t\t\t\tcx=\"12\"\n\t\t\t\tcy=\"12\"\n\t\t\t\tr=\"10\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"3\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstrokeDasharray=\"60\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t);\n}\n","import type React from \"react\";\nimport { type ReactNode, useCallback, useEffect } from \"react\";\nimport { useTheme } from \"../../react/theme\";\n\nexport interface ModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tchildren: ReactNode;\n\ttitle?: string;\n\tcloseOnOverlayClick?: boolean;\n\tcloseOnEscape?: boolean;\n\twidth?: string;\n}\n\nexport function Modal({\n\tisOpen,\n\tonClose,\n\tchildren,\n\ttitle,\n\tcloseOnOverlayClick = true,\n\tcloseOnEscape = true,\n\twidth = \"400px\",\n}: ModalProps): React.ReactElement | null {\n\tconst { theme } = useTheme();\n\n\tconst handleEscape = useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tif (closeOnEscape && e.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t},\n\t\t[closeOnEscape, onClose],\n\t);\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\t\tdocument.body.style.overflow = \"hidden\";\n\t\t}\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t\tdocument.body.style.overflow = \"\";\n\t\t};\n\t}, [isOpen, handleEscape]);\n\n\tif (!isOpen) return null;\n\n\tconst handleOverlayClick = (e: React.MouseEvent) => {\n\t\tif (closeOnOverlayClick && e.target === e.currentTarget) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst overlayStyle: React.CSSProperties = {\n\t\tposition: \"fixed\",\n\t\tinset: 0,\n\t\tbackgroundColor: theme.colors.overlay,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tzIndex: 9999,\n\t\tpadding: theme.spacing.md,\n\t};\n\n\tconst modalStyle: React.CSSProperties = {\n\t\tbackgroundColor: theme.colors.surface,\n\t\tborderRadius: theme.borderRadius.xl,\n\t\tboxShadow: theme.shadows.xl,\n\t\tmaxWidth: width,\n\t\twidth: \"100%\",\n\t\tmaxHeight: \"90vh\",\n\t\toverflow: \"auto\",\n\t\tposition: \"relative\",\n\t};\n\n\tconst headerStyle: React.CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"space-between\",\n\t\tpadding: theme.spacing.lg,\n\t\tborderBottom: `1px solid ${theme.colors.border}`,\n\t};\n\n\tconst titleStyle: React.CSSProperties = {\n\t\tfontFamily: theme.typography.fontFamily,\n\t\tfontSize: theme.typography.fontSizeLg,\n\t\tfontWeight: theme.typography.fontWeightSemibold,\n\t\tcolor: theme.colors.text,\n\t\tmargin: 0,\n\t};\n\n\tconst closeButtonStyle: React.CSSProperties = {\n\t\tbackground: \"none\",\n\t\tborder: \"none\",\n\t\tcursor: \"pointer\",\n\t\tpadding: theme.spacing.xs,\n\t\tborderRadius: theme.borderRadius.md,\n\t\tcolor: theme.colors.textMuted,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t};\n\n\tconst contentStyle: React.CSSProperties = {\n\t\tpadding: theme.spacing.lg,\n\t};\n\n\treturn (\n\t\t<div style={overlayStyle} onClick={handleOverlayClick}>\n\t\t\t<div\n\t\t\t\tstyle={modalStyle}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-labelledby={title ? \"modal-title\" : undefined}\n\t\t\t>\n\t\t\t\t{title && (\n\t\t\t\t\t<div style={headerStyle}>\n\t\t\t\t\t\t<h2 id=\"modal-title\" style={titleStyle}>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tstyle={closeButtonStyle}\n\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\taria-label=\"Close modal\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M15 5L5 15M5 5L15 15\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<div style={contentStyle}>{children}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type React from \"react\";\nimport { useState } from \"react\";\nimport type { OAuthProvider } from \"../../nero-sdk\";\nimport { useTheme } from \"../../react/theme\";\nimport { LoginButton } from \"./LoginButton\";\nimport { Modal } from \"./Modal\";\n\nexport interface LoginModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonLogin: (provider: OAuthProvider) => Promise<void>;\n\tproviders?: OAuthProvider[];\n\ttitle?: string;\n\tsubtitle?: string;\n\tlogo?: string;\n}\n\nexport function LoginModal({\n\tisOpen,\n\tonClose,\n\tonLogin,\n\tproviders = [\"google\", \"github\", \"apple\"],\n\ttitle = \"Sign In\",\n\tsubtitle = \"Choose a provider to continue\",\n\tlogo,\n}: LoginModalProps): React.ReactElement {\n\tconst { theme, uiConfig } = useTheme();\n\tconst [loadingProvider, setLoadingProvider] = useState<OAuthProvider | null>(\n\t\tnull,\n\t);\n\n\tconst handleLogin = async (provider: OAuthProvider) => {\n\t\tsetLoadingProvider(provider);\n\t\ttry {\n\t\t\tawait onLogin(provider);\n\t\t} finally {\n\t\t\tsetLoadingProvider(null);\n\t\t}\n\t};\n\n\tconst logoUrl = logo ?? uiConfig.logoLight;\n\n\tconst headerStyle: React.CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\tflexDirection: \"column\",\n\t\talignItems: \"center\",\n\t\tmarginBottom: theme.spacing.lg,\n\t};\n\n\tconst logoStyle: React.CSSProperties = {\n\t\twidth: \"64px\",\n\t\theight: \"64px\",\n\t\tmarginBottom: theme.spacing.md,\n\t\tborderRadius: theme.borderRadius.lg,\n\t};\n\n\tconst titleStyle: React.CSSProperties = {\n\t\tfontFamily: theme.typography.fontFamily,\n\t\tfontSize: theme.typography.fontSizeXl,\n\t\tfontWeight: theme.typography.fontWeightBold,\n\t\tcolor: theme.colors.text,\n\t\tmargin: 0,\n\t\tmarginBottom: theme.spacing.xs,\n\t};\n\n\tconst subtitleStyle: React.CSSProperties = {\n\t\tfontFamily: theme.typography.fontFamily,\n\t\tfontSize: theme.typography.fontSizeSm,\n\t\tcolor: theme.colors.textMuted,\n\t\tmargin: 0,\n\t};\n\n\tconst providersContainerStyle: React.CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\tflexDirection: \"column\",\n\t\tgap: theme.spacing.sm,\n\t};\n\n\tconst footerStyle: React.CSSProperties = {\n\t\tmarginTop: theme.spacing.lg,\n\t\tpaddingTop: theme.spacing.md,\n\t\tborderTop: `1px solid ${theme.colors.border}`,\n\t\ttextAlign: \"center\",\n\t\tfontFamily: theme.typography.fontFamily,\n\t\tfontSize: theme.typography.fontSizeXs,\n\t\tcolor: theme.colors.textMuted,\n\t};\n\n\treturn (\n\t\t<Modal isOpen={isOpen} onClose={onClose}>\n\t\t\t<div style={headerStyle}>\n\t\t\t\t{logoUrl && <img src={logoUrl} alt=\"Logo\" style={logoStyle} />}\n\t\t\t\t<h1 style={titleStyle}>{title}</h1>\n\t\t\t\t<p style={subtitleStyle}>{subtitle}</p>\n\t\t\t</div>\n\n\t\t\t<div style={providersContainerStyle}>\n\t\t\t\t{providers.map((provider) => (\n\t\t\t\t\t<LoginButton\n\t\t\t\t\t\tkey={provider}\n\t\t\t\t\t\tprovider={provider}\n\t\t\t\t\t\tonClick={() => handleLogin(provider)}\n\t\t\t\t\t\tisLoading={loadingProvider === provider}\n\t\t\t\t\t\tdisabled={loadingProvider !== null && loadingProvider !== provider}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t<div style={footerStyle}>\n\t\t\t\tBy continuing, you agree to our Terms of Service and Privacy Policy\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n","import React, { type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { useTheme } from \"../../react/theme\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\tvariant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tisLoading?: boolean;\n\tleftIcon?: ReactNode;\n\trightIcon?: ReactNode;\n\tfullWidth?: boolean;\n}\n\nexport function Button({\n\tchildren,\n\tvariant = \"primary\",\n\tsize = \"md\",\n\tisLoading = false,\n\tleftIcon,\n\trightIcon,\n\tfullWidth = false,\n\tdisabled,\n\tstyle,\n\t...props\n}: ButtonProps): React.ReactElement {\n\tconst { theme } = useTheme();\n\n\tconst getBackgroundColor = () => {\n\t\tswitch (variant) {\n\t\t\tcase \"primary\":\n\t\t\t\treturn theme.colors.primary;\n\t\t\tcase \"secondary\":\n\t\t\t\treturn theme.colors.secondary;\n\t\t\tcase \"outline\":\n\t\t\tcase \"ghost\":\n\t\t\t\treturn \"transparent\";\n\t\t}\n\t};\n\n\tconst getHoverBackgroundColor = () => {\n\t\tswitch (variant) {\n\t\t\tcase \"primary\":\n\t\t\t\treturn theme.colors.primaryHover;\n\t\t\tcase \"secondary\":\n\t\t\t\treturn theme.colors.secondaryHover;\n\t\t\tcase \"outline\":\n\t\t\t\treturn theme.colors.surfaceHover;\n\t\t\tcase \"ghost\":\n\t\t\t\treturn theme.colors.surfaceHover;\n\t\t}\n\t};\n\n\tconst getTextColor = () => {\n\t\tswitch (variant) {\n\t\t\tcase \"primary\":\n\t\t\tcase \"secondary\":\n\t\t\t\treturn \"#ffffff\";\n\t\t\tcase \"outline\":\n\t\t\t\treturn theme.colors.primary;\n\t\t\tcase \"ghost\":\n\t\t\t\treturn theme.colors.text;\n\t\t}\n\t};\n\n\tconst getBorder = () => {\n\t\tswitch (variant) {\n\t\t\tcase \"outline\":\n\t\t\t\treturn `1px solid ${theme.colors.primary}`;\n\t\t\tdefault:\n\t\t\t\treturn \"none\";\n\t\t}\n\t};\n\n\tconst getPadding = () => {\n\t\tswitch (size) {\n\t\t\tcase \"sm\":\n\t\t\t\treturn `${theme.spacing.xs} ${theme.spacing.sm}`;\n\t\t\tcase \"md\":\n\t\t\t\treturn `${theme.spacing.sm} ${theme.spacing.md}`;\n\t\t\tcase \"lg\":\n\t\t\t\treturn `${theme.spacing.md} ${theme.spacing.lg}`;\n\t\t}\n\t};\n\n\tconst getFontSize = () => {\n\t\tswitch (size) {\n\t\t\tcase \"sm\":\n\t\t\t\treturn theme.typography.fontSizeSm;\n\t\t\tcase \"md\":\n\t\t\t\treturn theme.typography.fontSizeMd;\n\t\t\tcase \"lg\":\n\t\t\t\treturn theme.typography.fontSizeLg;\n\t\t}\n\t};\n\n\tconst buttonStyle: React.CSSProperties = {\n\t\tdisplay: \"inline-flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: theme.spacing.sm,\n\t\tbackgroundColor: getBackgroundColor(),\n\t\tcolor: getTextColor(),\n\t\tborder: getBorder(),\n\t\tborderRadius: theme.borderRadius.lg,\n\t\tpadding: getPadding(),\n\t\tfontSize: getFontSize(),\n\t\tfontWeight: theme.typography.fontWeightMedium,\n\t\tfontFamily: theme.typography.fontFamily,\n\t\tcursor: disabled || isLoading ? \"not-allowed\" : \"pointer\",\n\t\topacity: disabled || isLoading ? 0.6 : 1,\n\t\ttransition: \"background-color 0.2s, opacity 0.2s\",\n\t\twidth: fullWidth ? \"100%\" : \"auto\",\n\t\t...style,\n\t};\n\n\treturn (\n\t\t<button\n\t\t\t{...props}\n\t\t\tdisabled={disabled || isLoading}\n\t\t\tstyle={buttonStyle}\n\t\t\tonMouseEnter={(e) => {\n\t\t\t\tif (!disabled && !isLoading) {\n\t\t\t\t\te.currentTarget.style.backgroundColor = getHoverBackgroundColor();\n\t\t\t\t}\n\t\t\t}}\n\t\t\tonMouseLeave={(e) => {\n\t\t\t\tif (!disabled && !isLoading) {\n\t\t\t\t\te.currentTarget.style.backgroundColor = getBackgroundColor();\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t{isLoading ? (\n\t\t\t\t<LoadingSpinner size={size} />\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{leftIcon}\n\t\t\t\t\t{children}\n\t\t\t\t\t{rightIcon}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</button>\n\t);\n}\n\nfunction LoadingSpinner({ size }: { size: \"sm\" | \"md\" | \"lg\" }) {\n\tconst dimensions = size === \"sm\" ? 14 : size === \"md\" ? 16 : 20;\n\n\treturn (\n\t\t<svg\n\t\t\twidth={dimensions}\n\t\t\theight={dimensions}\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstyle={{\n\t\t\t\tanimation: \"spin 1s linear infinite\",\n\t\t\t}}\n\t\t>\n\t\t\t<style>\n\t\t\t\t{\n\t\t\t\t\t\"@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\"\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<circle\n\t\t\t\tcx=\"12\"\n\t\t\t\tcy=\"12\"\n\t\t\t\tr=\"10\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"3\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstrokeDasharray=\"60\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t);\n}\n","import type React from \"react\";\nimport { useState } from \"react\";\nimport { useTheme } from \"../../react/theme\";\nimport type { WalletInfo } from \"../../types\";\nimport { Button } from \"./Button\";\nimport { Modal } from \"./Modal\";\n\nexport interface WalletModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\twalletInfo: WalletInfo | null;\n\tonDisconnect: () => Promise<void>;\n\tonCopyAddress?: (address: string) => void;\n\tonViewExplorer?: (address: string) => void;\n}\n\nexport function WalletModal({\n\tisOpen,\n\tonClose,\n\twalletInfo,\n\tonDisconnect,\n\tonCopyAddress,\n\tonViewExplorer,\n}: WalletModalProps): React.ReactElement {\n\tconst { theme } = useTheme();\n\tconst [isDisconnecting, setIsDisconnecting] = useState(false);\n\tconst [copied, setCopied] = useState(false);\n\n\tif (!walletInfo) {\n\t\treturn (\n\t\t\t<Modal isOpen={isOpen} onClose={onClose} title=\"Wallet\">\n\t\t\t\t<div style={{ textAlign: \"center\", color: theme.colors.textMuted }}>\n\t\t\t\t\tNo wallet connected\n\t\t\t\t</div>\n\t\t\t</Modal>\n\t\t);\n\t}\n\n\tconst handleCopy = async () => {\n\t\tconst address = walletInfo.smartWalletAddress ?? walletInfo.eoaAddress;\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(address);\n\t\t\tsetCopied(true);\n\t\t\tonCopyAddress?.(address);\n\t\t\tsetTimeout(() => setCopied(false), 2000);\n\t\t} catch {\n\t\t\t// Clipboard API not available\n\t\t}\n\t};\n\n\tconst handleDisconnect = async () => {\n\t\tsetIsDisconnecting(true);\n\t\ttry {\n\t\t\tawait onDisconnect();\n\t\t\tonClose();\n\t\t} finally {\n\t\t\tsetIsDisconnecting(false);\n\t\t}\n\t};\n\n\tconst truncateAddress = (address: string) => {\n\t\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n\t};\n\n\tconst containerStyle: React.CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\tflexDirection: \"column\",\n\t\tgap: theme.spacing.lg,\n\t};\n\n\tconst addressContainerStyle: React.CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\tflexDirection: \"column\",\n\t\talignItems: \"center\",\n\t\tpadding: theme.spacing.lg,\n\t\tbackgroundColor: theme.colors.backgroundSecondary,\n\t\tborderRadius: theme.borderRadius.lg,\n\t};\n\n\tconst walletIconStyle: React.CSSProperties = {\n\t\twidth: \"64px\",\n\t\theight: \"64px\",\n\t\tborderRadius: theme.borderRadius.full,\n\t\tbackgroundColor: theme.colors.primary,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tmarginBottom: theme.spacing.md,\n\t\tcolor: \"#ffffff\",\n\t\tfontSize: \"24px\",\n\t\tfontWeight: theme.typography.fontWeightBold,\n\t};\n\n\tconst addressStyle: React.CSSProperties = {\n\t\tfontFamily: theme.typography.fontFamilyMono,\n\t\tfontSize: theme.typography.fontSizeMd,\n\t\tcolor: theme.colors.text,\n\t\tmarginBottom: theme.spacing.xs,\n\t};\n\n\tconst labelStyle: React.CSSProperties = {\n\t\tfontFamily: theme.typography.fontFamily,\n\t\tfontSize: theme.typography.fontSizeXs,\n\t\tcolor: theme.colors.textMuted,\n\t\ttextTransform: \"uppercase\",\n\t\tletterSpacing: \"0.05em\",\n\t};\n\n\tconst actionsStyle: React.CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\tgap: theme.spacing.sm,\n\t};\n\n\tconst infoRowStyle: React.CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\tjustifyContent: \"space-between\",\n\t\talignItems: \"center\",\n\t\tpadding: theme.spacing.sm,\n\t\tbackgroundColor: theme.colors.backgroundSecondary,\n\t\tborderRadius: theme.borderRadius.md,\n\t\tfontFamily: theme.typography.fontFamily,\n\t\tfontSize: theme.typography.fontSizeSm,\n\t};\n\n\tconst displayAddress = walletInfo.smartWalletAddress ?? walletInfo.eoaAddress;\n\n\treturn (\n\t\t<Modal isOpen={isOpen} onClose={onClose} title=\"Wallet\">\n\t\t\t<div style={containerStyle}>\n\t\t\t\t<div style={addressContainerStyle}>\n\t\t\t\t\t<div style={walletIconStyle}>\n\t\t\t\t\t\t{displayAddress.slice(2, 4).toUpperCase()}\n\t\t\t\t\t</div>\n\t\t\t\t\t<span style={labelStyle}>\n\t\t\t\t\t\t{walletInfo.smartWalletAddress ? \"Smart Account\" : \"EOA Address\"}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span style={addressStyle}>{truncateAddress(displayAddress)}</span>\n\t\t\t\t\t<div style={actionsStyle}>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tonClick={handleCopy}\n\t\t\t\t\t\t\tleftIcon={<CopyIcon />}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{copied ? \"Copied!\" : \"Copy\"}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{onViewExplorer && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tonClick={() => onViewExplorer(displayAddress)}\n\t\t\t\t\t\t\t\tleftIcon={<ExternalLinkIcon />}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tExplorer\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{walletInfo.smartWalletAddress && (\n\t\t\t\t\t<div style={infoRowStyle}>\n\t\t\t\t\t\t<span style={{ color: theme.colors.textMuted }}>EOA Address</span>\n\t\t\t\t\t\t<span style={{ fontFamily: theme.typography.fontFamilyMono }}>\n\t\t\t\t\t\t\t{truncateAddress(walletInfo.eoaAddress)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div style={infoRowStyle}>\n\t\t\t\t\t<span style={{ color: theme.colors.textMuted }}>Chain ID</span>\n\t\t\t\t\t<span>{walletInfo.chainId}</span>\n\t\t\t\t</div>\n\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tonClick={handleDisconnect}\n\t\t\t\t\tisLoading={isDisconnecting}\n\t\t\t\t\tfullWidth\n\t\t\t\t>\n\t\t\t\t\tDisconnect\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n\nfunction CopyIcon() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"16\"\n\t\t\theight=\"16\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"2\"\n\t\t>\n\t\t\t<rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n\t\t\t<path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n\t\t</svg>\n\t);\n}\n\nfunction ExternalLinkIcon() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"16\"\n\t\t\theight=\"16\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"2\"\n\t\t>\n\t\t\t<path d=\"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6\" />\n\t\t\t<polyline points=\"15 3 21 3 21 9\" />\n\t\t\t<line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n\t\t</svg>\n\t);\n}\n","import type React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport type { OAuthProvider } from \"../nero-sdk\";\nimport { useNeroMpcAuthContext } from \"../react/context\";\nimport { useTheme } from \"../react/theme\";\nimport { LoginModal } from \"./components/LoginModal\";\nimport { WalletModal } from \"./components/WalletModal\";\n\nexport interface NeroModalProps {\n\tproviders?: OAuthProvider[];\n\tonLoginSuccess?: () => void;\n\tonLoginError?: (error: Error) => void;\n\tonLogout?: () => void;\n\tloginTitle?: string;\n\tloginSubtitle?: string;\n\tlogo?: string;\n\texplorerUrlPattern?: string;\n}\n\nexport function NeroModal({\n\tproviders = [\"google\", \"github\", \"apple\"],\n\tonLoginSuccess,\n\tonLoginError,\n\tonLogout,\n\tloginTitle,\n\tloginSubtitle,\n\tlogo,\n\texplorerUrlPattern,\n}: NeroModalProps): React.ReactElement {\n\tconst { sdk, state } = useNeroMpcAuthContext();\n\tconst { theme } = useTheme();\n\tconst [isLoginOpen, setIsLoginOpen] = useState(false);\n\tconst [isWalletOpen, setIsWalletOpen] = useState(false);\n\n\tconst handleLogin = useCallback(\n\t\tasync (provider: OAuthProvider) => {\n\t\t\tif (!sdk) return;\n\n\t\t\ttry {\n\t\t\t\tswitch (provider) {\n\t\t\t\t\tcase \"google\":\n\t\t\t\t\t\tawait sdk.loginWithGoogle();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"github\":\n\t\t\t\t\t\tawait sdk.loginWithGithub();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"apple\":\n\t\t\t\t\t\tawait sdk.loginWithApple();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tsetIsLoginOpen(false);\n\t\t\t\tonLoginSuccess?.();\n\t\t\t} catch (error) {\n\t\t\t\tonLoginError?.(error as Error);\n\t\t\t}\n\t\t},\n\t\t[sdk, onLoginSuccess, onLoginError],\n\t);\n\n\tconst handleDisconnect = useCallback(async () => {\n\t\tif (!sdk) return;\n\t\tawait sdk.logout();\n\t\tsetIsWalletOpen(false);\n\t\tonLogout?.();\n\t}, [sdk, onLogout]);\n\n\tconst handleViewExplorer = useCallback(\n\t\t(address: string) => {\n\t\t\tlet url: string | null = null;\n\n\t\t\tif (explorerUrlPattern) {\n\t\t\t\turl = explorerUrlPattern.replace(\"{address}\", address);\n\t\t\t} else if (state.walletInfo) {\n\t\t\t\tconst chainId = state.walletInfo.chainId;\n\t\t\t\tlet baseUrl: string;\n\t\t\t\tswitch (chainId) {\n\t\t\t\t\tcase 689:\n\t\t\t\t\t\tbaseUrl = \"https://testnetscan.nerochain.io\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1689:\n\t\t\t\t\t\tbaseUrl = \"https://scan.nerochain.io\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tbaseUrl = \"https://etherscan.io\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 137:\n\t\t\t\t\t\tbaseUrl = \"https://polygonscan.com\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\turl = `${baseUrl}/address/${address}`;\n\t\t\t}\n\n\t\t\tif (url && (url.startsWith(\"https://\") || url.startsWith(\"http://\"))) {\n\t\t\t\twindow.open(url, \"_blank\", \"noopener,noreferrer\");\n\t\t\t}\n\t\t},\n\t\t[explorerUrlPattern, state.walletInfo],\n\t);\n\n\tconst buttonStyle: React.CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tgap: theme.spacing.sm,\n\t\tpadding: `${theme.spacing.sm} ${theme.spacing.md}`,\n\t\tbackgroundColor: theme.colors.primary,\n\t\tcolor: \"#ffffff\",\n\t\tborder: \"none\",\n\t\tborderRadius: theme.borderRadius.lg,\n\t\tcursor: \"pointer\",\n\t\tfontFamily: theme.typography.fontFamily,\n\t\tfontSize: theme.typography.fontSizeSm,\n\t\tfontWeight: theme.typography.fontWeightMedium,\n\t\ttransition: \"background-color 0.2s\",\n\t};\n\n\tconst truncateAddress = (address: string) => {\n\t\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{state.isAuthenticated && state.walletInfo ? (\n\t\t\t\t<button\n\t\t\t\t\tstyle={buttonStyle}\n\t\t\t\t\tonClick={() => setIsWalletOpen(true)}\n\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\te.currentTarget.style.backgroundColor = theme.colors.primaryHover;\n\t\t\t\t\t}}\n\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\te.currentTarget.style.backgroundColor = theme.colors.primary;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<WalletIcon />\n\t\t\t\t\t{truncateAddress(\n\t\t\t\t\t\tstate.walletInfo.smartWalletAddress ?? state.walletInfo.eoaAddress,\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<button\n\t\t\t\t\tstyle={buttonStyle}\n\t\t\t\t\tonClick={() => setIsLoginOpen(true)}\n\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\te.currentTarget.style.backgroundColor = theme.colors.primaryHover;\n\t\t\t\t\t}}\n\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\te.currentTarget.style.backgroundColor = theme.colors.primary;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tConnect Wallet\n\t\t\t\t</button>\n\t\t\t)}\n\n\t\t\t<LoginModal\n\t\t\t\tisOpen={isLoginOpen}\n\t\t\t\tonClose={() => setIsLoginOpen(false)}\n\t\t\t\tonLogin={handleLogin}\n\t\t\t\tproviders={providers}\n\t\t\t\ttitle={loginTitle}\n\t\t\t\tsubtitle={loginSubtitle}\n\t\t\t\tlogo={logo}\n\t\t\t/>\n\n\t\t\t<WalletModal\n\t\t\t\tisOpen={isWalletOpen}\n\t\t\t\tonClose={() => setIsWalletOpen(false)}\n\t\t\t\twalletInfo={state.walletInfo}\n\t\t\t\tonDisconnect={handleDisconnect}\n\t\t\t\tonViewExplorer={handleViewExplorer}\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction WalletIcon() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"16\"\n\t\t\theight=\"16\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"2\"\n\t\t>\n\t\t\t<path d=\"M21 12V7H5a2 2 0 010-4h14v4\" />\n\t\t\t<path d=\"M3 5v14a2 2 0 002 2h16v-5\" />\n\t\t\t<path d=\"M18 12a2 2 0 100 4 2 2 0 000-4z\" />\n\t\t</svg>\n\t);\n}\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","import type React from \"react\";\nimport { type ReactNode, useEffect, useMemo, useState } from \"react\";\nimport { NeroMpcSDK, type NeroSDKState } from \"../nero-sdk\";\nimport type { SDKConfig } from \"../types\";\nimport { NeroMpcAuthContext, type NeroMpcAuthContextValue } from \"./context\";\nimport { type ThemeMode, ThemeProvider } from \"./theme\";\nimport type { UIConfig } from \"./theme/types\";\n\nexport interface NeroMpcAuthProviderProps {\n\tchildren: ReactNode;\n\tconfig: SDKConfig;\n\tautoConnect?: boolean;\n\tuiConfig?: UIConfig;\n\tthemeMode?: ThemeMode;\n}\n\nconst DEFAULT_STATE: NeroSDKState = {\n\tisAuthenticated: false,\n\tisInitialized: false,\n\thasWallet: false,\n\tuser: null,\n\twalletInfo: null,\n\tchainId: 689,\n\tisConnected: false,\n};\n\nexport function NeroMpcAuthProvider({\n\tchildren,\n\tconfig,\n\tautoConnect = true,\n\tuiConfig,\n\tthemeMode = \"auto\",\n}: NeroMpcAuthProviderProps): React.ReactElement {\n\tconst [sdk, setSdk] = useState<NeroMpcSDK | null>(null);\n\tconst [state, setState] = useState<NeroSDKState>(DEFAULT_STATE);\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tuseEffect(() => {\n\t\tconst initializeSDK = async () => {\n\t\t\ttry {\n\t\t\t\tsetIsLoading(true);\n\t\t\t\tsetError(null);\n\n\t\t\t\tconst instance = new NeroMpcSDK(config);\n\t\t\t\tsetSdk(instance);\n\n\t\t\t\tif (autoConnect) {\n\t\t\t\t\tawait instance.initialize();\n\t\t\t\t}\n\n\t\t\t\tsetState(instance.state);\n\t\t\t} catch (err) {\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t} finally {\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t};\n\n\t\tinitializeSDK();\n\t}, [config.backendUrl, config.chainId, autoConnect]);\n\n\tuseEffect(() => {\n\t\tif (sdk) {\n\t\t\tsetState(sdk.state);\n\t\t}\n\t}, [sdk?.isAuthenticated, sdk?.hasWallet, sdk?.user]);\n\n\tconst contextValue = useMemo<NeroMpcAuthContextValue>(\n\t\t() => ({\n\t\t\tsdk,\n\t\t\tstate,\n\t\t\tisLoading,\n\t\t\terror,\n\t\t}),\n\t\t[sdk, state, isLoading, error],\n\t);\n\n\treturn (\n\t\t<ThemeProvider uiConfig={uiConfig} defaultMode={themeMode}>\n\t\t\t<NeroMpcAuthContext.Provider value={contextValue}>\n\t\t\t\t{children}\n\t\t\t</NeroMpcAuthContext.Provider>\n\t\t</ThemeProvider>\n\t);\n}\n","import type { NeroSDKState } from \"../../nero-sdk\";\nimport type { NeroMpcSDK } from \"../../nero-sdk\";\nimport { useNeroMpcAuthContext } from \"../context\";\n\nexport interface UseNeroMpcAuthReturn extends NeroSDKState {\n\tsdk: NeroMpcSDK | null;\n\tisLoading: boolean;\n\terror: Error | null;\n}\n\nexport function useNeroMpcAuth(): UseNeroMpcAuthReturn {\n\tconst { sdk, state, isLoading, error } = useNeroMpcAuthContext();\n\n\treturn {\n\t\t...state,\n\t\tsdk,\n\t\tisLoading,\n\t\terror,\n\t};\n}\n","import { useCallback, useState } from \"react\";\nimport type { OAuthProvider } from \"../../nero-sdk\";\nimport type { User } from \"../../types\";\nimport { useNeroMpcAuthContext } from \"../context\";\n\nexport interface UseNeroConnectReturn {\n\tconnect: (provider: OAuthProvider, redirectUri?: string) => Promise<void>;\n\thandleCallback: (\n\t\tprovider: OAuthProvider,\n\t\tcode: string,\n\t\tstate: string,\n\t) => Promise<{ user: User; requiresDKG: boolean }>;\n\tisConnecting: boolean;\n\terror: Error | null;\n}\n\nexport function useNeroConnect(): UseNeroConnectReturn {\n\tconst { sdk } = useNeroMpcAuthContext();\n\tconst [isConnecting, setIsConnecting] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst connect = useCallback(\n\t\tasync (provider: OAuthProvider, redirectUri?: string) => {\n\t\t\tif (!sdk) {\n\t\t\t\tthrow new Error(\"SDK not initialized\");\n\t\t\t}\n\n\t\t\tsetIsConnecting(true);\n\t\t\tsetError(null);\n\n\t\t\ttry {\n\t\t\t\tswitch (provider) {\n\t\t\t\t\tcase \"google\":\n\t\t\t\t\t\tawait sdk.loginWithGoogle(redirectUri);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"github\":\n\t\t\t\t\t\tawait sdk.loginWithGithub(redirectUri);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"apple\":\n\t\t\t\t\t\tawait sdk.loginWithApple(redirectUri);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(`Unsupported provider: ${provider}`);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\t\tsetError(error);\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tsetIsConnecting(false);\n\t\t\t}\n\t\t},\n\t\t[sdk],\n\t);\n\n\tconst handleCallback = useCallback(\n\t\tasync (provider: OAuthProvider, code: string, state: string) => {\n\t\t\tif (!sdk) {\n\t\t\t\tthrow new Error(\"SDK not initialized\");\n\t\t\t}\n\n\t\t\tsetIsConnecting(true);\n\t\t\tsetError(null);\n\n\t\t\ttry {\n\t\t\t\tconst result = await sdk.handleOAuthCallback(provider, code, state);\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\t\tsetError(error);\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tsetIsConnecting(false);\n\t\t\t}\n\t\t},\n\t\t[sdk],\n\t);\n\n\treturn {\n\t\tconnect,\n\t\thandleCallback,\n\t\tisConnecting,\n\t\terror,\n\t};\n}\n","import { useCallback, useState } from \"react\";\nimport { useNeroMpcAuthContext } from \"../context\";\n\nexport interface UseNeroDisconnectReturn {\n\tdisconnect: () => Promise<void>;\n\tisDisconnecting: boolean;\n\terror: Error | null;\n}\n\nexport function useNeroDisconnect(): UseNeroDisconnectReturn {\n\tconst { sdk } = useNeroMpcAuthContext();\n\tconst [isDisconnecting, setIsDisconnecting] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst disconnect = useCallback(async () => {\n\t\tif (!sdk) {\n\t\t\tthrow new Error(\"SDK not initialized\");\n\t\t}\n\n\t\tsetIsDisconnecting(true);\n\t\tsetError(null);\n\n\t\ttry {\n\t\t\tawait sdk.logout();\n\t\t} catch (err) {\n\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\tsetError(error);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tsetIsDisconnecting(false);\n\t\t}\n\t}, [sdk]);\n\n\treturn {\n\t\tdisconnect,\n\t\tisDisconnecting,\n\t\terror,\n\t};\n}\n","import type { User } from \"../../types\";\nimport { useNeroMpcAuthContext } from \"../context\";\n\nexport interface UseNeroUserReturn {\n\tuser: User | null;\n\tisAuthenticated: boolean;\n}\n\nexport function useNeroUser(): UseNeroUserReturn {\n\tconst { state } = useNeroMpcAuthContext();\n\n\treturn {\n\t\tuser: state.user,\n\t\tisAuthenticated: state.isAuthenticated,\n\t};\n}\n","import { useCallback, useState } from \"react\";\nimport type { Signature, WalletInfo } from \"../../types\";\nimport { useNeroMpcAuthContext } from \"../context\";\n\nexport interface UseNeroWalletReturn {\n\twallet: WalletInfo | null;\n\thasWallet: boolean;\n\tgenerateWallet: () => Promise<WalletInfo>;\n\tsignMessage: (message: string) => Promise<Signature>;\n\tsignTypedData: (\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\tisGenerating: boolean;\n\tisSigning: boolean;\n\terror: Error | null;\n}\n\nexport function useNeroWallet(): UseNeroWalletReturn {\n\tconst { sdk, state } = useNeroMpcAuthContext();\n\tconst [isGenerating, setIsGenerating] = useState(false);\n\tconst [isSigning, setIsSigning] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst generateWallet = useCallback(async (): Promise<WalletInfo> => {\n\t\tif (!sdk) {\n\t\t\tthrow new Error(\"SDK not initialized\");\n\t\t}\n\n\t\tsetIsGenerating(true);\n\t\tsetError(null);\n\n\t\ttry {\n\t\t\tconst walletInfo = await sdk.generateWallet();\n\t\t\treturn walletInfo;\n\t\t} catch (err) {\n\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\tsetError(error);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tsetIsGenerating(false);\n\t\t}\n\t}, [sdk]);\n\n\tconst signMessage = useCallback(\n\t\tasync (message: string): Promise<Signature> => {\n\t\t\tif (!sdk?.wallet) {\n\t\t\t\tthrow new Error(\"Wallet not available\");\n\t\t\t}\n\n\t\t\tsetIsSigning(true);\n\t\t\tsetError(null);\n\n\t\t\ttry {\n\t\t\t\tconst result = await sdk.wallet.signMessage(message);\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\t\tsetError(error);\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tsetIsSigning(false);\n\t\t\t}\n\t\t},\n\t\t[sdk],\n\t);\n\n\tconst signTypedData = useCallback(\n\t\tasync (\n\t\t\tdomain: Record<string, unknown>,\n\t\t\ttypes: Record<string, Array<{ name: string; type: string }>>,\n\t\t\tprimaryType: string,\n\t\t\tvalue: Record<string, unknown>,\n\t\t): Promise<Signature> => {\n\t\t\tif (!sdk?.wallet) {\n\t\t\t\tthrow new Error(\"Wallet not available\");\n\t\t\t}\n\n\t\t\tsetIsSigning(true);\n\t\t\tsetError(null);\n\n\t\t\ttry {\n\t\t\t\tconst result = await sdk.wallet.signTypedData(\n\t\t\t\t\tdomain,\n\t\t\t\t\ttypes,\n\t\t\t\t\tprimaryType,\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t\treturn result;\n\t\t\t} catch (err) {\n\t\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\t\tsetError(error);\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tsetIsSigning(false);\n\t\t\t}\n\t\t},\n\t\t[sdk],\n\t);\n\n\treturn {\n\t\twallet: state.walletInfo,\n\t\thasWallet: state.hasWallet,\n\t\tgenerateWallet,\n\t\tsignMessage,\n\t\tsignTypedData,\n\t\tisGenerating,\n\t\tisSigning,\n\t\terror,\n\t};\n}\n"]}