@rhinestone/1auth 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-X73ALCGW.mjs → chunk-N4BLW5UR.mjs} +6 -8
- package/dist/chunk-N4BLW5UR.mjs.map +1 -0
- package/dist/{client-DKuPEx83.d.mts → client-CHCVV9H3.d.mts} +87 -82
- package/dist/{client-DKuPEx83.d.ts → client-CHCVV9H3.d.ts} +87 -82
- package/dist/index.d.mts +4 -8
- package/dist/index.d.ts +4 -8
- package/dist/index.js +118 -156
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +115 -150
- package/dist/index.mjs.map +1 -1
- package/dist/{provider-Dj5l4bWn.d.ts → provider-B5pLvKo_.d.mts} +2 -8
- package/dist/{provider-CmJarV7y.d.mts → provider-DzxXGyV8.d.ts} +2 -8
- package/dist/react.d.mts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +3 -3
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +3 -3
- package/dist/react.mjs.map +1 -1
- package/dist/server.d.mts +2 -5
- package/dist/server.d.ts +2 -5
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +2 -2
- package/dist/server.mjs.map +1 -1
- package/dist/wagmi.d.mts +2 -2
- package/dist/wagmi.d.ts +2 -2
- package/dist/wagmi.js +5 -6
- package/dist/wagmi.js.map +1 -1
- package/dist/wagmi.mjs +3 -3
- package/dist/wagmi.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-X73ALCGW.mjs.map +0 -1
package/dist/wagmi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/wagmi.ts","../src/provider.ts","../src/registry.ts","../src/walletClient/utils.ts"],"sourcesContent":["import { createConnector, type Connector } from \"@wagmi/core\";\nimport {\n numberToHex,\n type Address,\n type Chain,\n type ProviderConnectInfo,\n} from \"viem\";\nimport { createPasskeyProvider, type PasskeyProvider } from \"./provider\";\nimport type { OneAuthClient } from \"./client\";\nimport type { IntentSigner } from \"./types\";\n\nexport type OneAuthConnectorOptions = {\n client: OneAuthClient;\n chainId?: number;\n storageKey?: string;\n waitForHash?: boolean;\n hashTimeoutMs?: number;\n hashIntervalMs?: number;\n signIntent?: IntentSigner;\n};\n\nexport function oneAuth(options: OneAuthConnectorOptions) {\n type Provider = PasskeyProvider;\n\n return createConnector<Provider>((wagmiConfig) => {\n const chains = (wagmiConfig.chains ?? []) as readonly [Chain, ...Chain[]];\n const initialChainId = options.chainId ?? chains[0]?.id;\n\n let provider: Provider | null = null;\n let accountsChanged: Connector[\"onAccountsChanged\"] | undefined;\n let chainChanged: Connector[\"onChainChanged\"] | undefined;\n let connect: Connector[\"onConnect\"] | undefined;\n let disconnect: Connector[\"onDisconnect\"] | undefined;\n\n return {\n id: \"1auth\",\n name: \"1auth Passkey\",\n type: \"wallet\",\n async connect<withCapabilities extends boolean = false>(\n { chainId, isReconnecting, withCapabilities }:\n | {\n chainId?: number;\n isReconnecting?: boolean;\n withCapabilities?: withCapabilities | boolean;\n }\n | undefined = {}\n ): Promise<{\n accounts: withCapabilities extends true\n ? readonly { address: Address; capabilities: Record<string, unknown> }[]\n : readonly Address[];\n chainId: number;\n }> {\n if (!initialChainId) {\n throw new Error(\"No chain configured for 1auth connector\");\n }\n\n const provider = await this.getProvider({ chainId });\n let accounts: readonly Address[] = [];\n let currentChainId = await this.getChainId();\n\n if (isReconnecting) {\n accounts = await this.getAccounts().catch(() => []);\n }\n\n if (!accounts.length) {\n accounts = (await provider.request({\n method: \"wallet_connect\",\n })) as Address[];\n currentChainId = await this.getChainId();\n }\n\n if (chainId && currentChainId !== chainId) {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n currentChainId = await this.getChainId();\n }\n\n if (connect) {\n provider.removeListener(\"connect\", connect as never);\n connect = undefined;\n }\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on(\"accountsChanged\", accountsChanged as never);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on(\"chainChanged\", chainChanged as never);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on(\"disconnect\", disconnect as never);\n }\n\n const response = withCapabilities\n ? {\n accounts: accounts.map((account) => ({\n address: account,\n capabilities: {},\n })),\n chainId: currentChainId,\n }\n : {\n accounts,\n chainId: currentChainId,\n };\n\n return response as unknown as {\n accounts: withCapabilities extends true\n ? readonly { address: Address; capabilities: Record<string, unknown> }[]\n : readonly Address[];\n chainId: number;\n };\n },\n async disconnect() {\n const provider = await this.getProvider();\n await provider.disconnect();\n if (chainChanged) {\n provider.removeListener(\"chainChanged\", chainChanged as never);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener(\"disconnect\", disconnect as never);\n disconnect = undefined;\n }\n },\n async getAccounts() {\n const provider = await this.getProvider();\n return (await provider.request({\n method: \"eth_accounts\",\n })) as Address[];\n },\n async getChainId() {\n const provider = await this.getProvider();\n const hexChainId = (await provider.request({\n method: \"eth_chainId\",\n })) as string;\n return Number.parseInt(hexChainId, 16);\n },\n async getProvider({ chainId } = {}) {\n if (!provider) {\n if (!initialChainId) {\n throw new Error(\"No chain configured for 1auth connector\");\n }\n provider = createPasskeyProvider({\n client: options.client,\n chainId: initialChainId,\n storageKey: options.storageKey,\n waitForHash: options.waitForHash,\n hashTimeoutMs: options.hashTimeoutMs,\n hashIntervalMs: options.hashIntervalMs,\n signIntent: options.signIntent,\n });\n }\n if (chainId) {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n }\n return provider;\n },\n async setup() {\n const provider = await this.getProvider();\n if (!connect) {\n const onConnect = this.onConnect?.bind(this);\n if (onConnect) {\n connect = onConnect;\n provider.on(\"connect\", connect as never);\n }\n }\n },\n async isAuthorized() {\n try {\n const accounts = await this.getAccounts();\n return accounts.length > 0;\n } catch {\n return false;\n }\n },\n async switchChain({ chainId }) {\n const chain = chains.find((chain) => chain.id === chainId);\n if (!chain) {\n throw new Error(\"Chain not configured\");\n }\n const provider = await this.getProvider();\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n return chain;\n },\n async onConnect(connectInfo: ProviderConnectInfo) {\n const accounts = await this.getAccounts();\n if (!accounts.length) return;\n const chainId = Number(connectInfo.chainId);\n wagmiConfig.emitter.emit(\"connect\", { accounts, chainId });\n },\n onAccountsChanged(accounts: string[]) {\n wagmiConfig.emitter.emit(\"change\", {\n accounts: accounts as Address[],\n });\n },\n onChainChanged(chainId: string) {\n wagmiConfig.emitter.emit(\"change\", {\n chainId: Number(chainId),\n });\n },\n onDisconnect(_error?: Error) {\n wagmiConfig.emitter.emit(\"disconnect\");\n },\n };\n });\n}\n","import {\n hexToString,\n isHex,\n numberToHex,\n type Address,\n type Hex,\n} from \"viem\";\nimport { OneAuthClient } from \"./client\";\nimport { getSupportedChainIds } from \"./registry\";\nimport type { CloseOnStatus, IntentCall, IntentSigner, IntentTokenRequest } from \"./types\";\nimport { encodeWebAuthnSignature } from \"./walletClient/utils\";\n\ntype ProviderRequest = {\n method: string;\n params?: unknown[] | Record<string, unknown>;\n};\n\ntype Listener = (...args: unknown[]) => void;\n\ntype StoredUser = {\n username?: string;\n address: Address;\n};\n\nexport type OneAuthProvider = {\n request: (args: ProviderRequest) => Promise<unknown>;\n on: (event: string, listener: Listener) => void;\n removeListener: (event: string, listener: Listener) => void;\n disconnect: () => Promise<void>;\n};\n\n/** @deprecated Use OneAuthProvider instead */\nexport type PasskeyProvider = OneAuthProvider;\n\nexport type OneAuthProviderOptions = {\n client: OneAuthClient;\n chainId: number;\n storageKey?: string;\n /** When to close the dialog and return success. Defaults to \"preconfirmed\" */\n closeOn?: CloseOnStatus;\n waitForHash?: boolean;\n hashTimeoutMs?: number;\n hashIntervalMs?: number;\n signIntent?: IntentSigner;\n};\n\n/** @deprecated Use OneAuthProviderOptions instead */\nexport type PasskeyProviderOptions = OneAuthProviderOptions;\n\nconst DEFAULT_STORAGE_KEY = \"1auth-user\";\n\nexport function createOneAuthProvider(\n options: OneAuthProviderOptions\n): OneAuthProvider {\n const { client } = options;\n let chainId = options.chainId;\n const storageKey = options.storageKey || DEFAULT_STORAGE_KEY;\n\n const listeners = new Map<string, Set<Listener>>();\n\n const emit = (event: string, ...args: unknown[]) => {\n const set = listeners.get(event);\n if (!set) return;\n for (const listener of set) listener(...args);\n };\n\n const getStoredUser = (): StoredUser | null => {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as StoredUser;\n if (!parsed?.address) return null;\n return parsed;\n } catch {\n return null;\n }\n };\n\n const setStoredUser = (user: StoredUser) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(storageKey, JSON.stringify(user));\n };\n\n const clearStoredUser = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(storageKey);\n };\n\n const resolveAccountAddress = async (username: string): Promise<Address> => {\n const clientId = client.getClientId();\n const response = await fetch(\n `${client.getProviderUrl()}/api/users/${encodeURIComponent(username)}/account`,\n {\n headers: clientId ? { \"x-client-id\": clientId } : {},\n }\n );\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to resolve account address\");\n }\n\n const data = await response.json();\n return data.address as Address;\n };\n\n const connect = async (): Promise<Address[]> => {\n const stored = getStoredUser();\n if (stored) {\n return [stored.address];\n }\n\n // First try the lightweight connect modal\n const connectResult = await client.connectWithModal();\n\n let username: string | undefined;\n let address: Address | undefined;\n\n if (connectResult.success) {\n // Connection successful (user confirmed or auto-connected)\n username = connectResult.username;\n address = connectResult.address as Address | undefined;\n } else if (connectResult.action === \"switch\") {\n // User wants to switch account or no previous user - show auth modal\n const authResult = await client.authWithModal();\n if (!authResult.success) {\n throw new Error(authResult.error?.message || \"Authentication failed\");\n }\n username = authResult.username;\n address = authResult.address as Address | undefined;\n } else {\n // Connection was cancelled\n throw new Error(connectResult.error?.message || \"Connection cancelled\");\n }\n\n // Use address from result directly, or resolve from username\n if (!address && username) {\n address = await resolveAccountAddress(username);\n }\n if (!address) {\n throw new Error(\"No account address available\");\n }\n\n setStoredUser({ username, address });\n emit(\"accountsChanged\", [address]);\n emit(\"connect\", { chainId: numberToHex(chainId) });\n return [address];\n };\n\n const disconnect = async () => {\n clearStoredUser();\n emit(\"accountsChanged\", []);\n emit(\"disconnect\");\n };\n\n const ensureUser = async (): Promise<StoredUser> => {\n const stored = getStoredUser();\n if (stored) return stored;\n const [address] = await connect();\n if (!address) {\n throw new Error(\"Failed to resolve user session\");\n }\n const user = getStoredUser();\n return user || { address };\n };\n\n const parseChainId = (value: unknown): number | undefined => {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") {\n if (value.startsWith(\"0x\")) return Number.parseInt(value, 16);\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n };\n\n const normalizeValue = (value: unknown): string | undefined => {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"bigint\") return value.toString();\n if (typeof value === \"number\") return Math.trunc(value).toString();\n if (typeof value === \"string\") {\n if (value.startsWith(\"0x\")) {\n try {\n return BigInt(value).toString();\n } catch {\n return \"0\";\n }\n }\n return value;\n }\n return undefined;\n };\n\n const normalizeCalls = (calls: unknown[]): IntentCall[] => {\n return calls.map((call) => {\n const c = call as Record<string, unknown>;\n return {\n to: c.to as Address,\n data: (c.data as Hex | undefined) || \"0x\",\n value: normalizeValue(c.value) || \"0\",\n label: c.label as string | undefined,\n sublabel: c.sublabel as string | undefined,\n };\n });\n };\n\n const normalizeTokenRequests = (\n requests: unknown\n ): IntentTokenRequest[] | undefined => {\n if (!Array.isArray(requests)) return undefined;\n return requests.map((r) => {\n const req = r as Record<string, unknown>;\n return {\n token: req.token as string,\n amount:\n typeof req.amount === \"bigint\"\n ? req.amount\n : BigInt(String(req.amount || \"0\")),\n };\n });\n };\n\n const decodeMessage = (value: string) => {\n if (!isHex(value)) return value;\n try {\n return hexToString(value as Hex);\n } catch {\n return value;\n }\n };\n\n const signMessage = async (message: string) => {\n const user = await ensureUser();\n if (!user.username && !user.address) {\n throw new Error(\"Username or address required for signing.\");\n }\n const result = await client.signMessage({\n username: user.username,\n accountAddress: user.address,\n message,\n });\n if (!result.success || !result.signature) {\n throw new Error(result.error?.message || \"Signing failed\");\n }\n return encodeWebAuthnSignature(result.signature);\n };\n\n const signTypedData = async (typedData: unknown) => {\n const user = await ensureUser();\n if (!user.username && !user.address) {\n throw new Error(\"Username or address required for signing.\");\n }\n const data =\n typeof typedData === \"string\" ? JSON.parse(typedData) : typedData;\n const result = await client.signTypedData({\n username: user.username,\n accountAddress: user.address,\n domain: (data as any).domain,\n types: (data as any).types,\n primaryType: (data as any).primaryType,\n message: (data as any).message,\n });\n if (!result.success || !result.signature) {\n throw new Error(result.error?.message || \"Signing failed\");\n }\n return encodeWebAuthnSignature(result.signature);\n };\n\n const resolveIntentPayload = async (payload: {\n username?: string;\n accountAddress: Address;\n targetChain: number;\n calls: IntentCall[];\n tokenRequests?: IntentTokenRequest[];\n }) => {\n if (!options.signIntent) {\n return {\n username: payload.username,\n accountAddress: payload.accountAddress,\n targetChain: payload.targetChain,\n calls: payload.calls,\n tokenRequests: payload.tokenRequests,\n };\n }\n if (!payload.username) {\n throw new Error(\"Username required for signed intents. Set a username first.\");\n }\n const signedIntent = await options.signIntent({\n username: payload.username,\n accountAddress: payload.accountAddress,\n targetChain: payload.targetChain,\n calls: payload.calls,\n tokenRequests: payload.tokenRequests,\n });\n return { signedIntent };\n };\n\n const sendIntent = async (payload: {\n username?: string;\n accountAddress: Address;\n targetChain: number;\n calls: IntentCall[];\n tokenRequests?: IntentTokenRequest[];\n sourceChainId?: number;\n }) => {\n // Use explicit closeOn if provided, otherwise default based on waitForHash\n const closeOn = options.closeOn ?? ((options.waitForHash ?? true) ? \"completed\" : \"preconfirmed\");\n const intentPayload = await resolveIntentPayload(payload);\n const result = await client.sendIntent({\n ...intentPayload,\n tokenRequests: payload.tokenRequests,\n sourceChainId: payload.sourceChainId,\n closeOn,\n waitForHash: options.waitForHash ?? true,\n hashTimeoutMs: options.hashTimeoutMs,\n hashIntervalMs: options.hashIntervalMs,\n });\n\n if (!result.success) {\n throw new Error(result.error?.message || \"Transaction failed\");\n }\n\n // Return intentId as callsId for EIP-5792 compatibility\n return result.intentId;\n };\n\n const request = async ({ method, params }: ProviderRequest) => {\n switch (method) {\n case \"eth_chainId\":\n return numberToHex(chainId);\n case \"eth_accounts\": {\n const stored = getStoredUser();\n return stored ? [stored.address] : [];\n }\n case \"eth_requestAccounts\":\n return connect();\n case \"wallet_connect\":\n return connect();\n case \"wallet_disconnect\":\n await disconnect();\n return true;\n case \"wallet_switchEthereumChain\": {\n const [param] = (params as any[]) || [];\n const next = parseChainId(param?.chainId ?? param);\n if (!next) {\n throw new Error(\"Invalid chainId\");\n }\n chainId = next;\n emit(\"chainChanged\", numberToHex(chainId));\n return null;\n }\n case \"personal_sign\": {\n const paramList = Array.isArray(params) ? params : [];\n const first = paramList[0];\n const second = paramList[1];\n const message =\n typeof first === \"string\" && first.startsWith(\"0x\") && second\n ? typeof second === \"string\" && !second.startsWith(\"0x\")\n ? second\n : decodeMessage(first)\n : typeof first === \"string\"\n ? decodeMessage(first)\n : typeof second === \"string\"\n ? decodeMessage(second)\n : \"\";\n if (!message) throw new Error(\"Invalid personal_sign payload\");\n return signMessage(message);\n }\n case \"eth_sign\": {\n const paramList = Array.isArray(params) ? params : [];\n const message = typeof paramList[1] === \"string\" ? paramList[1] : \"\";\n if (!message) throw new Error(\"Invalid eth_sign payload\");\n return signMessage(decodeMessage(message));\n }\n case \"eth_signTypedData\":\n case \"eth_signTypedData_v4\": {\n const paramList = Array.isArray(params) ? params : [];\n const typedData = paramList[1] ?? paramList[0];\n return signTypedData(typedData);\n }\n case \"eth_sendTransaction\": {\n const paramList = Array.isArray(params) ? params : [];\n const tx = (paramList[0] || {}) as Record<string, unknown>;\n const user = await ensureUser();\n const targetChain = parseChainId(tx.chainId) ?? chainId;\n const calls = normalizeCalls([tx]);\n const tokenRequests = normalizeTokenRequests(tx.tokenRequests);\n const txSourceChainId = parseChainId(tx.sourceChainId);\n return sendIntent({\n username: user.username,\n accountAddress: user.address,\n targetChain,\n calls,\n tokenRequests,\n sourceChainId: txSourceChainId,\n });\n }\n case \"wallet_sendCalls\": {\n const paramList = Array.isArray(params) ? params : [];\n const payload = (paramList[0] || {}) as Record<string, unknown>;\n const user = await ensureUser();\n const targetChain = parseChainId(payload.chainId) ?? chainId;\n const calls = normalizeCalls((payload.calls as unknown[]) || []);\n const tokenRequests = normalizeTokenRequests(payload.tokenRequests);\n const sourceChainId = parseChainId(payload.sourceChainId);\n if (!calls.length) throw new Error(\"No calls provided\");\n return sendIntent({\n username: user.username,\n accountAddress: user.address,\n targetChain,\n calls,\n tokenRequests,\n sourceChainId,\n });\n }\n case \"wallet_getCapabilities\": {\n const paramList = Array.isArray(params) ? params : [];\n // walletAddress is params[0] - we ignore since all accounts have same capabilities\n const requestedChains = paramList[1] as `0x${string}`[] | undefined;\n\n const chainIds = getSupportedChainIds();\n const capabilities: Record<`0x${string}`, Record<string, unknown>> = {};\n\n for (const chainId of chainIds) {\n const hexChainId = `0x${chainId.toString(16)}` as `0x${string}`;\n\n // Filter if specific chains requested\n if (requestedChains && !requestedChains.includes(hexChainId)) {\n continue;\n }\n\n capabilities[hexChainId] = {\n atomic: { status: \"supported\" },\n paymasterService: { supported: true },\n auxiliaryFunds: { supported: true },\n };\n }\n\n return capabilities;\n }\n case \"wallet_getAssets\": {\n const user = await ensureUser();\n if (!user.username) {\n throw new Error(\"Username required to fetch assets. Set a username first.\");\n }\n const clientId = client.getClientId();\n const response = await fetch(\n `${client.getProviderUrl()}/api/users/${encodeURIComponent(user.username)}/portfolio`,\n {\n headers: clientId ? { \"x-client-id\": clientId } : {},\n }\n );\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to get assets\");\n }\n return response.json();\n }\n case \"wallet_getCallsStatus\": {\n const paramList = Array.isArray(params) ? params : [];\n const callsId = paramList[0] as string;\n if (!callsId) {\n throw new Error(\"callsId is required\");\n }\n const statusClientId = client.getClientId();\n const response = await fetch(\n `${client.getProviderUrl()}/api/intent/status/${encodeURIComponent(callsId)}`,\n {\n headers: statusClientId ? { \"x-client-id\": statusClientId } : {},\n }\n );\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to get calls status\");\n }\n const data = await response.json();\n // Map intent status to EIP-5792 format\n const statusMap: Record<string, string> = {\n pending: \"PENDING\",\n preconfirmed: \"PENDING\",\n completed: \"CONFIRMED\",\n failed: \"CONFIRMED\",\n expired: \"CONFIRMED\",\n };\n return {\n status: statusMap[data.status] || \"PENDING\",\n receipts: data.transactionHash\n ? [\n {\n logs: [],\n status: data.status === \"completed\" ? \"0x1\" : \"0x0\",\n blockHash: data.blockHash,\n blockNumber: data.blockNumber,\n transactionHash: data.transactionHash,\n },\n ]\n : [],\n };\n }\n case \"wallet_getCallsHistory\": {\n const paramList = Array.isArray(params) ? params : [];\n const options = (paramList[0] || {}) as {\n limit?: number;\n offset?: number;\n status?: string;\n from?: string;\n to?: string;\n };\n\n const queryParams = new URLSearchParams();\n if (options.limit) queryParams.set(\"limit\", String(options.limit));\n if (options.offset) queryParams.set(\"offset\", String(options.offset));\n if (options.status) queryParams.set(\"status\", options.status);\n if (options.from) queryParams.set(\"from\", options.from);\n if (options.to) queryParams.set(\"to\", options.to);\n\n const url = `${client.getProviderUrl()}/api/intent/history${\n queryParams.toString() ? `?${queryParams}` : \"\"\n }`;\n\n const historyClientId = client.getClientId();\n const response = await fetch(url, {\n headers: historyClientId ? { \"x-client-id\": historyClientId } : {},\n credentials: \"include\",\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to get calls history\");\n }\n\n const data = await response.json();\n\n // Map intent status to EIP-5792 format\n const statusMap: Record<string, string> = {\n pending: \"PENDING\",\n preconfirmed: \"PENDING\",\n completed: \"CONFIRMED\",\n failed: \"CONFIRMED\",\n expired: \"CONFIRMED\",\n };\n\n // intentId IS the orchestrator's ID (used as callsId in EIP-5792)\n return {\n calls: data.intents.map(\n (intent: {\n intentId: string;\n status: string;\n transactionHash?: string;\n targetChain: number;\n }) => ({\n callsId: intent.intentId, // intentId is the orchestrator's ID\n status: statusMap[intent.status] || \"PENDING\",\n receipts: intent.transactionHash\n ? [{ transactionHash: intent.transactionHash }]\n : [],\n chainId: `0x${intent.targetChain.toString(16)}`,\n })\n ),\n total: data.total,\n hasMore: data.hasMore,\n };\n }\n default:\n throw new Error(`Unsupported method: ${method}`);\n }\n };\n\n return {\n request,\n on(event, listener) {\n const set = listeners.get(event) ?? new Set();\n set.add(listener);\n listeners.set(event, set);\n },\n removeListener(event, listener) {\n const set = listeners.get(event);\n if (!set) return;\n set.delete(listener);\n if (set.size === 0) listeners.delete(event);\n },\n disconnect,\n };\n}\n\n/** @deprecated Use createOneAuthProvider instead */\nexport const createPasskeyProvider = createOneAuthProvider;\n","import type { Address, Chain } from \"viem\";\nimport { isAddress } from \"viem\";\nimport * as viemChains from \"viem/chains\";\nimport {\n getAllSupportedChainsAndTokens as getAllSupportedChainsAndTokensRaw,\n getSupportedTokens as getSupportedTokensRaw,\n getTokenAddress,\n getTokenDecimals,\n} from \"@rhinestone/sdk\";\n\nexport type TokenConfig = {\n symbol: string;\n address: Address;\n decimals: number;\n supportsMultichain?: boolean;\n [key: string]: unknown;\n};\n\nexport type ChainFilterOptions = {\n includeTestnets?: boolean;\n chainIds?: number[];\n};\n\nconst env: Record<string, string | undefined> =\n typeof process !== \"undefined\" ? process.env : {};\n\n// Build a chain-ID-to-Chain map from viem, resolving collisions by\n// preferring non-testnet (mainnet) definitions. Viem has duplicate IDs\n// (e.g. zoraTestnet and hyperEvm both use 999) and Map last-write-wins\n// can pick the wrong one.\nconst VIEM_CHAIN_BY_ID = new Map<number, Chain>();\nfor (const value of Object.values(viemChains)) {\n if (typeof value !== \"object\" || value === null || !(\"id\" in value) || !(\"name\" in value)) continue;\n const chain = value as Chain;\n const existing = VIEM_CHAIN_BY_ID.get(chain.id);\n if (!existing || (existing.testnet && !chain.testnet)) {\n VIEM_CHAIN_BY_ID.set(chain.id, chain);\n }\n}\nconst SUPPORTED_CHAIN_IDS = new Set(\n getAllSupportedChainsAndTokensRaw().map((entry) => entry.chainId)\n);\n\nfunction parseBool(value?: string): boolean | undefined {\n if (value === \"true\" || value === \"1\") return true;\n if (value === \"false\" || value === \"0\") return false;\n return undefined;\n}\n\nfunction resolveIncludeTestnets(explicit?: boolean): boolean {\n if (explicit !== undefined) return explicit;\n const envValue =\n parseBool(env.NEXT_PUBLIC_ORCHESTRATOR_USE_TESTNETS) ??\n parseBool(env.ORCHESTRATOR_USE_TESTNETS);\n return envValue ?? false;\n}\n\nfunction applyChainFilters(chainIds: number[], options?: ChainFilterOptions): number[] {\n const includeTestnets = resolveIncludeTestnets(options?.includeTestnets);\n const allowlist = options?.chainIds;\n let filtered = chainIds;\n\n if (!includeTestnets) {\n filtered = filtered.filter((chainId) => !isTestnet(chainId));\n }\n\n if (allowlist && allowlist.length > 0) {\n const allowed = new Set(allowlist);\n filtered = filtered.filter((chainId) => allowed.has(chainId));\n }\n\n return filtered;\n}\n\nexport function getSupportedChainIds(options?: ChainFilterOptions): number[] {\n return applyChainFilters(Array.from(SUPPORTED_CHAIN_IDS), options);\n}\n\nexport function getSupportedChains(options?: ChainFilterOptions): Chain[] {\n return getSupportedChainIds(options)\n .map((chainId) => VIEM_CHAIN_BY_ID.get(chainId))\n .filter((chain): chain is Chain => Boolean(chain));\n}\n\nexport function getAllSupportedChainsAndTokens(options?: ChainFilterOptions): Array<{\n chainId: number;\n tokens: TokenConfig[];\n}> {\n const allowed = new Set(getSupportedChainIds(options));\n return getAllSupportedChainsAndTokensRaw()\n .filter((entry) => allowed.has(entry.chainId))\n .map((entry) => ({\n chainId: entry.chainId,\n tokens: entry.tokens as TokenConfig[],\n }));\n}\n\nexport function getChainById(chainId: number): Chain {\n if (!SUPPORTED_CHAIN_IDS.has(chainId)) {\n throw new Error(`Unsupported chain ID: ${chainId}`);\n }\n const chain = VIEM_CHAIN_BY_ID.get(chainId);\n if (!chain) {\n throw new Error(`Unsupported chain ID: ${chainId}`);\n }\n return chain;\n}\n\nexport function getChainName(chainId: number): string {\n try {\n return getChainById(chainId).name;\n } catch {\n return `Chain ${chainId}`;\n }\n}\n\nexport function getChainExplorerUrl(chainId: number): string | undefined {\n try {\n return getChainById(chainId).blockExplorers?.default?.url;\n } catch {\n return undefined;\n }\n}\n\nexport function getChainRpcUrl(chainId: number): string | undefined {\n try {\n const chain = getChainById(chainId);\n return chain.rpcUrls?.default?.http?.[0] || chain.rpcUrls?.public?.http?.[0];\n } catch {\n return undefined;\n }\n}\n\nexport function getSupportedTokens(chainId: number): TokenConfig[] {\n return getSupportedTokensRaw(chainId) as TokenConfig[];\n}\n\nexport function getSupportedTokenSymbols(chainId: number): string[] {\n return getSupportedTokens(chainId).map((token) => token.symbol);\n}\n\nexport function resolveTokenAddress(token: string, chainId: number): Address {\n if (isAddress(token)) {\n return token;\n }\n // Case-insensitive lookup: find canonical symbol from registry, then resolve\n const match = getSupportedTokens(chainId).find(\n (t) => t.symbol.toUpperCase() === token.toUpperCase()\n );\n if (!match) {\n return getTokenAddress(token as never, chainId);\n }\n return match.address;\n}\n\nexport function isTestnet(chainId: number): boolean {\n try {\n return getChainById(chainId).testnet ?? false;\n } catch {\n return false;\n }\n}\n\nexport function getTokenSymbol(tokenAddress: Address, chainId: number): string {\n const token = getSupportedTokens(chainId).find(\n (entry) => entry.address.toLowerCase() === tokenAddress.toLowerCase()\n );\n if (!token) {\n throw new Error(`Unsupported token: ${tokenAddress} on chain ${chainId}`);\n }\n return token.symbol;\n}\n\nexport function isTokenAddressSupported(tokenAddress: Address, chainId: number): boolean {\n try {\n return getSupportedTokens(chainId).some(\n (entry) => entry.address.toLowerCase() === tokenAddress.toLowerCase()\n );\n } catch {\n return false;\n }\n}\n\nexport { getTokenAddress, getTokenDecimals };\n","import { encodeAbiParameters, keccak256 } from 'viem';\nimport type { Hex } from 'viem';\nimport type { WebAuthnSignature } from '../types';\nimport type { TransactionCall } from './types';\n\n/**\n * P-256 curve order (n)\n * Used for signature malleability normalization\n */\nconst P256_N = BigInt(\n '0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551'\n);\nconst P256_N_DIV_2 = P256_N / 2n;\n\n/**\n * WebAuthnAuth struct type for ABI encoding\n */\nconst WEBAUTHN_AUTH_TYPE = {\n type: 'tuple',\n components: [\n { type: 'bytes', name: 'authenticatorData' },\n { type: 'string', name: 'clientDataJSON' },\n { type: 'uint256', name: 'challengeIndex' },\n { type: 'uint256', name: 'typeIndex' },\n { type: 'uint256', name: 'r' },\n { type: 'uint256', name: 's' },\n ],\n} as const;\n\n/**\n * Encode a WebAuthn signature for ERC-1271 verification on-chain\n *\n * @param sig - The WebAuthn signature from the passkey\n * @returns ABI-encoded signature bytes\n */\nexport function encodeWebAuthnSignature(sig: WebAuthnSignature): Hex {\n // Normalize s to prevent signature malleability\n let s = BigInt(sig.s);\n if (s > P256_N_DIV_2) {\n s = P256_N - s;\n }\n\n return encodeAbiParameters([WEBAUTHN_AUTH_TYPE], [\n {\n authenticatorData: sig.authenticatorData as Hex,\n clientDataJSON: sig.clientDataJSON,\n challengeIndex: BigInt(sig.challengeIndex),\n typeIndex: BigInt(sig.typeIndex),\n r: BigInt(sig.r),\n s,\n },\n ]);\n}\n\n/**\n * Hash an array of transaction calls for signing\n *\n * @param calls - Array of transaction calls\n * @returns keccak256 hash of the encoded calls\n */\nexport function hashCalls(calls: TransactionCall[]): Hex {\n const encoded = encodeAbiParameters(\n [\n {\n type: 'tuple[]',\n components: [\n { type: 'address', name: 'to' },\n { type: 'bytes', name: 'data' },\n { type: 'uint256', name: 'value' },\n ],\n },\n ],\n [\n calls.map((c) => ({\n to: c.to,\n data: c.data || '0x',\n value: c.value || 0n,\n })),\n ]\n );\n return keccak256(encoded);\n}\n\n/**\n * Build transaction review display data from calls\n *\n * @param calls - Array of transaction calls\n * @returns TransactionDetails for the signing modal\n */\nexport function buildTransactionReview(calls: TransactionCall[]) {\n return {\n actions: calls.map((call, i) => ({\n type: 'custom' as const,\n label: call.label || `Contract Call ${i + 1}`,\n sublabel: call.sublabel || `To: ${call.to.slice(0, 10)}...${call.to.slice(-8)}`,\n amount: call.value ? `${call.value} wei` : undefined,\n })),\n };\n}\n"],"mappings":"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","names":["import_viem","import_viem","getAllSupportedChainsAndTokensRaw","import_viem","data","chainId","options","provider","chain"]}
|
|
1
|
+
{"version":3,"sources":["../src/wagmi.ts","../src/provider.ts","../src/registry.ts","../src/walletClient/utils.ts"],"sourcesContent":["import { createConnector, type Connector } from \"@wagmi/core\";\nimport {\n numberToHex,\n type Address,\n type Chain,\n type ProviderConnectInfo,\n} from \"viem\";\nimport { createOneAuthProvider, type OneAuthProvider } from \"./provider\";\nimport type { OneAuthClient } from \"./client\";\nimport type { IntentSigner } from \"./types\";\n\nexport type OneAuthConnectorOptions = {\n client: OneAuthClient;\n chainId?: number;\n storageKey?: string;\n waitForHash?: boolean;\n hashTimeoutMs?: number;\n hashIntervalMs?: number;\n signIntent?: IntentSigner;\n};\n\nexport function oneAuth(options: OneAuthConnectorOptions) {\n type Provider = OneAuthProvider;\n\n return createConnector<Provider>((wagmiConfig) => {\n const chains = (wagmiConfig.chains ?? []) as readonly [Chain, ...Chain[]];\n const initialChainId = options.chainId ?? chains[0]?.id;\n\n let provider: Provider | null = null;\n let accountsChanged: Connector[\"onAccountsChanged\"] | undefined;\n let chainChanged: Connector[\"onChainChanged\"] | undefined;\n let connect: Connector[\"onConnect\"] | undefined;\n let disconnect: Connector[\"onDisconnect\"] | undefined;\n\n return {\n id: \"1auth\",\n name: \"1auth Passkey\",\n type: \"wallet\",\n async connect<withCapabilities extends boolean = false>(\n { chainId, isReconnecting, withCapabilities }:\n | {\n chainId?: number;\n isReconnecting?: boolean;\n withCapabilities?: withCapabilities | boolean;\n }\n | undefined = {}\n ): Promise<{\n accounts: withCapabilities extends true\n ? readonly { address: Address; capabilities: Record<string, unknown> }[]\n : readonly Address[];\n chainId: number;\n }> {\n if (!initialChainId) {\n throw new Error(\"No chain configured for 1auth connector\");\n }\n\n const provider = await this.getProvider({ chainId });\n let accounts: readonly Address[] = [];\n let currentChainId = await this.getChainId();\n\n if (isReconnecting) {\n accounts = await this.getAccounts().catch(() => []);\n }\n\n if (!accounts.length) {\n accounts = (await provider.request({\n method: \"wallet_connect\",\n })) as Address[];\n currentChainId = await this.getChainId();\n }\n\n if (chainId && currentChainId !== chainId) {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n currentChainId = await this.getChainId();\n }\n\n if (connect) {\n provider.removeListener(\"connect\", connect as never);\n connect = undefined;\n }\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on(\"accountsChanged\", accountsChanged as never);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on(\"chainChanged\", chainChanged as never);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on(\"disconnect\", disconnect as never);\n }\n\n const response = withCapabilities\n ? {\n accounts: accounts.map((account) => ({\n address: account,\n capabilities: {},\n })),\n chainId: currentChainId,\n }\n : {\n accounts,\n chainId: currentChainId,\n };\n\n return response as unknown as {\n accounts: withCapabilities extends true\n ? readonly { address: Address; capabilities: Record<string, unknown> }[]\n : readonly Address[];\n chainId: number;\n };\n },\n async disconnect() {\n const provider = await this.getProvider();\n await provider.disconnect();\n if (chainChanged) {\n provider.removeListener(\"chainChanged\", chainChanged as never);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener(\"disconnect\", disconnect as never);\n disconnect = undefined;\n }\n },\n async getAccounts() {\n const provider = await this.getProvider();\n return (await provider.request({\n method: \"eth_accounts\",\n })) as Address[];\n },\n async getChainId() {\n const provider = await this.getProvider();\n const hexChainId = (await provider.request({\n method: \"eth_chainId\",\n })) as string;\n return Number.parseInt(hexChainId, 16);\n },\n async getProvider({ chainId } = {}) {\n if (!provider) {\n if (!initialChainId) {\n throw new Error(\"No chain configured for 1auth connector\");\n }\n provider = createOneAuthProvider({\n client: options.client,\n chainId: initialChainId,\n storageKey: options.storageKey,\n waitForHash: options.waitForHash,\n hashTimeoutMs: options.hashTimeoutMs,\n hashIntervalMs: options.hashIntervalMs,\n signIntent: options.signIntent,\n });\n }\n if (chainId) {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n }\n return provider;\n },\n async setup() {\n const provider = await this.getProvider();\n if (!connect) {\n const onConnect = this.onConnect?.bind(this);\n if (onConnect) {\n connect = onConnect;\n provider.on(\"connect\", connect as never);\n }\n }\n },\n async isAuthorized() {\n try {\n const accounts = await this.getAccounts();\n return accounts.length > 0;\n } catch {\n return false;\n }\n },\n async switchChain({ chainId }) {\n const chain = chains.find((chain) => chain.id === chainId);\n if (!chain) {\n throw new Error(\"Chain not configured\");\n }\n const provider = await this.getProvider();\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n return chain;\n },\n async onConnect(connectInfo: ProviderConnectInfo) {\n const accounts = await this.getAccounts();\n if (!accounts.length) return;\n const chainId = Number(connectInfo.chainId);\n wagmiConfig.emitter.emit(\"connect\", { accounts, chainId });\n },\n onAccountsChanged(accounts: string[]) {\n wagmiConfig.emitter.emit(\"change\", {\n accounts: accounts as Address[],\n });\n },\n onChainChanged(chainId: string) {\n wagmiConfig.emitter.emit(\"change\", {\n chainId: Number(chainId),\n });\n },\n onDisconnect(_error?: Error) {\n wagmiConfig.emitter.emit(\"disconnect\");\n },\n };\n });\n}\n","import {\n hexToString,\n isHex,\n numberToHex,\n type Address,\n type Hex,\n} from \"viem\";\nimport { OneAuthClient } from \"./client\";\nimport { getSupportedChainIds } from \"./registry\";\nimport type { CloseOnStatus, IntentCall, IntentSigner, IntentTokenRequest } from \"./types\";\nimport { encodeWebAuthnSignature } from \"./walletClient/utils\";\n\ntype ProviderRequest = {\n method: string;\n params?: unknown[] | Record<string, unknown>;\n};\n\ntype Listener = (...args: unknown[]) => void;\n\ntype StoredUser = {\n username?: string;\n address: Address;\n};\n\nexport type OneAuthProvider = {\n request: (args: ProviderRequest) => Promise<unknown>;\n on: (event: string, listener: Listener) => void;\n removeListener: (event: string, listener: Listener) => void;\n disconnect: () => Promise<void>;\n};\n\nexport type OneAuthProviderOptions = {\n client: OneAuthClient;\n chainId: number;\n storageKey?: string;\n /** When to close the dialog and return success. Defaults to \"preconfirmed\" */\n closeOn?: CloseOnStatus;\n waitForHash?: boolean;\n hashTimeoutMs?: number;\n hashIntervalMs?: number;\n signIntent?: IntentSigner;\n};\n\nconst DEFAULT_STORAGE_KEY = \"1auth-user\";\n\nexport function createOneAuthProvider(\n options: OneAuthProviderOptions\n): OneAuthProvider {\n const { client } = options;\n let chainId = options.chainId;\n const storageKey = options.storageKey || DEFAULT_STORAGE_KEY;\n\n const listeners = new Map<string, Set<Listener>>();\n\n const emit = (event: string, ...args: unknown[]) => {\n const set = listeners.get(event);\n if (!set) return;\n for (const listener of set) listener(...args);\n };\n\n const getStoredUser = (): StoredUser | null => {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as StoredUser;\n if (!parsed?.address) return null;\n return parsed;\n } catch {\n return null;\n }\n };\n\n const setStoredUser = (user: StoredUser) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(storageKey, JSON.stringify(user));\n };\n\n const clearStoredUser = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(storageKey);\n };\n\n const resolveAccountAddress = async (username: string): Promise<Address> => {\n const clientId = client.getClientId();\n const response = await fetch(\n `${client.getProviderUrl()}/api/users/${encodeURIComponent(username)}/account`,\n {\n headers: clientId ? { \"x-client-id\": clientId } : {},\n }\n );\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to resolve account address\");\n }\n\n const data = await response.json();\n return data.address as Address;\n };\n\n const connect = async (): Promise<Address[]> => {\n const stored = getStoredUser();\n if (stored) {\n return [stored.address];\n }\n\n // First try the lightweight connect modal\n const connectResult = await client.connectWithModal();\n\n let username: string | undefined;\n let address: Address | undefined;\n\n if (connectResult.success) {\n // Connection successful (user confirmed or auto-connected)\n username = connectResult.user?.username;\n address = connectResult.user?.address;\n } else if (connectResult.action === \"switch\") {\n // User wants to switch account or no previous user - show auth modal\n const authResult = await client.authWithModal();\n if (!authResult.success) {\n throw new Error(authResult.error?.message || \"Authentication failed\");\n }\n username = authResult.user?.username;\n address = authResult.user?.address;\n } else {\n // Connection was cancelled\n throw new Error(connectResult.error?.message || \"Connection cancelled\");\n }\n\n // Use address from result directly, or resolve from username\n if (!address && username) {\n address = await resolveAccountAddress(username);\n }\n if (!address) {\n throw new Error(\"No account address available\");\n }\n\n setStoredUser({ username, address });\n emit(\"accountsChanged\", [address]);\n emit(\"connect\", { chainId: numberToHex(chainId) });\n return [address];\n };\n\n const disconnect = async () => {\n clearStoredUser();\n emit(\"accountsChanged\", []);\n emit(\"disconnect\");\n };\n\n const ensureUser = async (): Promise<StoredUser> => {\n const stored = getStoredUser();\n if (stored) return stored;\n const [address] = await connect();\n if (!address) {\n throw new Error(\"Failed to resolve user session\");\n }\n const user = getStoredUser();\n return user || { address };\n };\n\n const parseChainId = (value: unknown): number | undefined => {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") {\n if (value.startsWith(\"0x\")) return Number.parseInt(value, 16);\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n };\n\n const normalizeValue = (value: unknown): string | undefined => {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"bigint\") return value.toString();\n if (typeof value === \"number\") return Math.trunc(value).toString();\n if (typeof value === \"string\") {\n if (value.startsWith(\"0x\")) {\n try {\n return BigInt(value).toString();\n } catch {\n return \"0\";\n }\n }\n return value;\n }\n return undefined;\n };\n\n const normalizeCalls = (calls: unknown[]): IntentCall[] => {\n return calls.map((call) => {\n const c = call as Record<string, unknown>;\n return {\n to: c.to as Address,\n data: (c.data as Hex | undefined) || \"0x\",\n value: normalizeValue(c.value) || \"0\",\n label: c.label as string | undefined,\n sublabel: c.sublabel as string | undefined,\n };\n });\n };\n\n const normalizeTokenRequests = (\n requests: unknown\n ): IntentTokenRequest[] | undefined => {\n if (!Array.isArray(requests)) return undefined;\n return requests.map((r) => {\n const req = r as Record<string, unknown>;\n return {\n token: req.token as string,\n amount:\n typeof req.amount === \"bigint\"\n ? req.amount\n : BigInt(String(req.amount || \"0\")),\n };\n });\n };\n\n const decodeMessage = (value: string) => {\n if (!isHex(value)) return value;\n try {\n return hexToString(value as Hex);\n } catch {\n return value;\n }\n };\n\n const signMessage = async (message: string) => {\n const user = await ensureUser();\n if (!user.username && !user.address) {\n throw new Error(\"Username or address required for signing.\");\n }\n const result = await client.signMessage({\n username: user.username,\n accountAddress: user.address,\n message,\n });\n if (!result.success || !result.signature) {\n throw new Error(result.error?.message || \"Signing failed\");\n }\n return encodeWebAuthnSignature(result.signature);\n };\n\n const signTypedData = async (typedData: unknown) => {\n const user = await ensureUser();\n if (!user.username && !user.address) {\n throw new Error(\"Username or address required for signing.\");\n }\n const data =\n typeof typedData === \"string\" ? JSON.parse(typedData) : typedData;\n const result = await client.signTypedData({\n username: user.username,\n accountAddress: user.address,\n domain: (data as any).domain,\n types: (data as any).types,\n primaryType: (data as any).primaryType,\n message: (data as any).message,\n });\n if (!result.success || !result.signature) {\n throw new Error(result.error?.message || \"Signing failed\");\n }\n return encodeWebAuthnSignature(result.signature);\n };\n\n const resolveIntentPayload = async (payload: {\n username?: string;\n accountAddress: Address;\n targetChain: number;\n calls: IntentCall[];\n tokenRequests?: IntentTokenRequest[];\n }) => {\n if (!options.signIntent) {\n return {\n username: payload.username,\n accountAddress: payload.accountAddress,\n targetChain: payload.targetChain,\n calls: payload.calls,\n tokenRequests: payload.tokenRequests,\n };\n }\n if (!payload.username) {\n throw new Error(\"Username required for signed intents. Set a username first.\");\n }\n const signedIntent = await options.signIntent({\n username: payload.username,\n accountAddress: payload.accountAddress,\n targetChain: payload.targetChain,\n calls: payload.calls,\n tokenRequests: payload.tokenRequests,\n });\n return { signedIntent };\n };\n\n const sendIntent = async (payload: {\n username?: string;\n accountAddress: Address;\n targetChain: number;\n calls: IntentCall[];\n tokenRequests?: IntentTokenRequest[];\n sourceChainId?: number;\n }) => {\n // Use explicit closeOn if provided, otherwise default based on waitForHash\n const closeOn = options.closeOn ?? ((options.waitForHash ?? true) ? \"completed\" : \"preconfirmed\");\n const intentPayload = await resolveIntentPayload(payload);\n const result = await client.sendIntent({\n ...intentPayload,\n tokenRequests: payload.tokenRequests,\n sourceChainId: payload.sourceChainId,\n closeOn,\n waitForHash: options.waitForHash ?? true,\n hashTimeoutMs: options.hashTimeoutMs,\n hashIntervalMs: options.hashIntervalMs,\n });\n\n if (!result.success) {\n throw new Error(result.error?.message || \"Transaction failed\");\n }\n\n // Return intentId as callsId for EIP-5792 compatibility\n return result.intentId;\n };\n\n const request = async ({ method, params }: ProviderRequest) => {\n switch (method) {\n case \"eth_chainId\":\n return numberToHex(chainId);\n case \"eth_accounts\": {\n const stored = getStoredUser();\n return stored ? [stored.address] : [];\n }\n case \"eth_requestAccounts\":\n return connect();\n case \"wallet_connect\":\n return connect();\n case \"wallet_disconnect\":\n await disconnect();\n return true;\n case \"wallet_switchEthereumChain\": {\n const [param] = (params as any[]) || [];\n const next = parseChainId(param?.chainId ?? param);\n if (!next) {\n throw new Error(\"Invalid chainId\");\n }\n chainId = next;\n emit(\"chainChanged\", numberToHex(chainId));\n return null;\n }\n case \"personal_sign\": {\n const paramList = Array.isArray(params) ? params : [];\n const first = paramList[0];\n const second = paramList[1];\n const message =\n typeof first === \"string\" && first.startsWith(\"0x\") && second\n ? typeof second === \"string\" && !second.startsWith(\"0x\")\n ? second\n : decodeMessage(first)\n : typeof first === \"string\"\n ? decodeMessage(first)\n : typeof second === \"string\"\n ? decodeMessage(second)\n : \"\";\n if (!message) throw new Error(\"Invalid personal_sign payload\");\n return signMessage(message);\n }\n case \"eth_sign\": {\n const paramList = Array.isArray(params) ? params : [];\n const message = typeof paramList[1] === \"string\" ? paramList[1] : \"\";\n if (!message) throw new Error(\"Invalid eth_sign payload\");\n return signMessage(decodeMessage(message));\n }\n case \"eth_signTypedData\":\n case \"eth_signTypedData_v4\": {\n const paramList = Array.isArray(params) ? params : [];\n const typedData = paramList[1] ?? paramList[0];\n return signTypedData(typedData);\n }\n case \"eth_sendTransaction\": {\n const paramList = Array.isArray(params) ? params : [];\n const tx = (paramList[0] || {}) as Record<string, unknown>;\n const user = await ensureUser();\n const targetChain = parseChainId(tx.chainId) ?? chainId;\n const calls = normalizeCalls([tx]);\n const tokenRequests = normalizeTokenRequests(tx.tokenRequests);\n const txSourceChainId = parseChainId(tx.sourceChainId);\n return sendIntent({\n username: user.username,\n accountAddress: user.address,\n targetChain,\n calls,\n tokenRequests,\n sourceChainId: txSourceChainId,\n });\n }\n case \"wallet_sendCalls\": {\n const paramList = Array.isArray(params) ? params : [];\n const payload = (paramList[0] || {}) as Record<string, unknown>;\n const user = await ensureUser();\n const targetChain = parseChainId(payload.chainId) ?? chainId;\n const calls = normalizeCalls((payload.calls as unknown[]) || []);\n const tokenRequests = normalizeTokenRequests(payload.tokenRequests);\n const sourceChainId = parseChainId(payload.sourceChainId);\n if (!calls.length) throw new Error(\"No calls provided\");\n return sendIntent({\n username: user.username,\n accountAddress: user.address,\n targetChain,\n calls,\n tokenRequests,\n sourceChainId,\n });\n }\n case \"wallet_getCapabilities\": {\n const paramList = Array.isArray(params) ? params : [];\n // walletAddress is params[0] - we ignore since all accounts have same capabilities\n const requestedChains = paramList[1] as `0x${string}`[] | undefined;\n\n const chainIds = getSupportedChainIds();\n const capabilities: Record<`0x${string}`, Record<string, unknown>> = {};\n\n for (const chainId of chainIds) {\n const hexChainId = `0x${chainId.toString(16)}` as `0x${string}`;\n\n // Filter if specific chains requested\n if (requestedChains && !requestedChains.includes(hexChainId)) {\n continue;\n }\n\n capabilities[hexChainId] = {\n atomic: { status: \"supported\" },\n paymasterService: { supported: true },\n auxiliaryFunds: { supported: true },\n };\n }\n\n return capabilities;\n }\n case \"wallet_getAssets\": {\n const user = await ensureUser();\n if (!user.username) {\n throw new Error(\"Username required to fetch assets. Set a username first.\");\n }\n const clientId = client.getClientId();\n const response = await fetch(\n `${client.getProviderUrl()}/api/users/${encodeURIComponent(user.username)}/portfolio`,\n {\n headers: clientId ? { \"x-client-id\": clientId } : {},\n }\n );\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to get assets\");\n }\n return response.json();\n }\n case \"wallet_getCallsStatus\": {\n const paramList = Array.isArray(params) ? params : [];\n const callsId = paramList[0] as string;\n if (!callsId) {\n throw new Error(\"callsId is required\");\n }\n const statusClientId = client.getClientId();\n const response = await fetch(\n `${client.getProviderUrl()}/api/intent/status/${encodeURIComponent(callsId)}`,\n {\n headers: statusClientId ? { \"x-client-id\": statusClientId } : {},\n }\n );\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to get calls status\");\n }\n const data = await response.json();\n // Map intent status to EIP-5792 format\n const statusMap: Record<string, string> = {\n pending: \"PENDING\",\n preconfirmed: \"PENDING\",\n completed: \"CONFIRMED\",\n failed: \"CONFIRMED\",\n expired: \"CONFIRMED\",\n };\n return {\n status: statusMap[data.status] || \"PENDING\",\n receipts: data.transactionHash\n ? [\n {\n logs: [],\n status: data.status === \"completed\" ? \"0x1\" : \"0x0\",\n blockHash: data.blockHash,\n blockNumber: data.blockNumber,\n transactionHash: data.transactionHash,\n },\n ]\n : [],\n };\n }\n case \"wallet_getCallsHistory\": {\n const paramList = Array.isArray(params) ? params : [];\n const options = (paramList[0] || {}) as {\n limit?: number;\n offset?: number;\n status?: string;\n from?: string;\n to?: string;\n };\n\n const queryParams = new URLSearchParams();\n if (options.limit) queryParams.set(\"limit\", String(options.limit));\n if (options.offset) queryParams.set(\"offset\", String(options.offset));\n if (options.status) queryParams.set(\"status\", options.status);\n if (options.from) queryParams.set(\"from\", options.from);\n if (options.to) queryParams.set(\"to\", options.to);\n\n const url = `${client.getProviderUrl()}/api/intent/history${\n queryParams.toString() ? `?${queryParams}` : \"\"\n }`;\n\n const historyClientId = client.getClientId();\n const response = await fetch(url, {\n headers: historyClientId ? { \"x-client-id\": historyClientId } : {},\n credentials: \"include\",\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to get calls history\");\n }\n\n const data = await response.json();\n\n // Map intent status to EIP-5792 format\n const statusMap: Record<string, string> = {\n pending: \"PENDING\",\n preconfirmed: \"PENDING\",\n completed: \"CONFIRMED\",\n failed: \"CONFIRMED\",\n expired: \"CONFIRMED\",\n };\n\n // intentId IS the orchestrator's ID (used as callsId in EIP-5792)\n return {\n calls: data.intents.map(\n (intent: {\n intentId: string;\n status: string;\n transactionHash?: string;\n targetChain: number;\n }) => ({\n callsId: intent.intentId, // intentId is the orchestrator's ID\n status: statusMap[intent.status] || \"PENDING\",\n receipts: intent.transactionHash\n ? [{ transactionHash: intent.transactionHash }]\n : [],\n chainId: `0x${intent.targetChain.toString(16)}`,\n })\n ),\n total: data.total,\n hasMore: data.hasMore,\n };\n }\n default:\n throw new Error(`Unsupported method: ${method}`);\n }\n };\n\n return {\n request,\n on(event, listener) {\n const set = listeners.get(event) ?? new Set();\n set.add(listener);\n listeners.set(event, set);\n },\n removeListener(event, listener) {\n const set = listeners.get(event);\n if (!set) return;\n set.delete(listener);\n if (set.size === 0) listeners.delete(event);\n },\n disconnect,\n };\n}\n","import type { Address, Chain } from \"viem\";\nimport { isAddress } from \"viem\";\nimport * as viemChains from \"viem/chains\";\nimport {\n getAllSupportedChainsAndTokens as getAllSupportedChainsAndTokensRaw,\n getSupportedTokens as getSupportedTokensRaw,\n getTokenAddress,\n getTokenDecimals,\n} from \"@rhinestone/sdk\";\n\nexport type TokenConfig = {\n symbol: string;\n address: Address;\n decimals: number;\n supportsMultichain?: boolean;\n [key: string]: unknown;\n};\n\nexport type ChainFilterOptions = {\n includeTestnets?: boolean;\n chainIds?: number[];\n};\n\nconst env: Record<string, string | undefined> =\n typeof process !== \"undefined\" ? process.env : {};\n\n// Build a chain-ID-to-Chain map from viem, resolving collisions by\n// preferring non-testnet (mainnet) definitions. Viem has duplicate IDs\n// (e.g. zoraTestnet and hyperEvm both use 999) and Map last-write-wins\n// can pick the wrong one.\nconst VIEM_CHAIN_BY_ID = new Map<number, Chain>();\nfor (const value of Object.values(viemChains)) {\n if (typeof value !== \"object\" || value === null || !(\"id\" in value) || !(\"name\" in value)) continue;\n const chain = value as Chain;\n const existing = VIEM_CHAIN_BY_ID.get(chain.id);\n if (!existing || (existing.testnet && !chain.testnet)) {\n VIEM_CHAIN_BY_ID.set(chain.id, chain);\n }\n}\nconst SUPPORTED_CHAIN_IDS = new Set(\n getAllSupportedChainsAndTokensRaw().map((entry) => entry.chainId)\n);\n\nfunction parseBool(value?: string): boolean | undefined {\n if (value === \"true\" || value === \"1\") return true;\n if (value === \"false\" || value === \"0\") return false;\n return undefined;\n}\n\nfunction resolveIncludeTestnets(explicit?: boolean): boolean {\n if (explicit !== undefined) return explicit;\n const envValue =\n parseBool(env.NEXT_PUBLIC_ORCHESTRATOR_USE_TESTNETS) ??\n parseBool(env.ORCHESTRATOR_USE_TESTNETS);\n return envValue ?? false;\n}\n\nfunction applyChainFilters(chainIds: number[], options?: ChainFilterOptions): number[] {\n const includeTestnets = resolveIncludeTestnets(options?.includeTestnets);\n const allowlist = options?.chainIds;\n let filtered = chainIds;\n\n if (!includeTestnets) {\n filtered = filtered.filter((chainId) => !isTestnet(chainId));\n }\n\n if (allowlist && allowlist.length > 0) {\n const allowed = new Set(allowlist);\n filtered = filtered.filter((chainId) => allowed.has(chainId));\n }\n\n return filtered;\n}\n\nexport function getSupportedChainIds(options?: ChainFilterOptions): number[] {\n return applyChainFilters(Array.from(SUPPORTED_CHAIN_IDS), options);\n}\n\nexport function getSupportedChains(options?: ChainFilterOptions): Chain[] {\n return getSupportedChainIds(options)\n .map((chainId) => VIEM_CHAIN_BY_ID.get(chainId))\n .filter((chain): chain is Chain => Boolean(chain));\n}\n\nexport function getAllSupportedChainsAndTokens(options?: ChainFilterOptions): Array<{\n chainId: number;\n tokens: TokenConfig[];\n}> {\n const allowed = new Set(getSupportedChainIds(options));\n return getAllSupportedChainsAndTokensRaw()\n .filter((entry) => allowed.has(entry.chainId))\n .map((entry) => ({\n chainId: entry.chainId,\n tokens: entry.tokens as TokenConfig[],\n }));\n}\n\nexport function getChainById(chainId: number): Chain {\n if (!SUPPORTED_CHAIN_IDS.has(chainId)) {\n throw new Error(`Unsupported chain ID: ${chainId}`);\n }\n const chain = VIEM_CHAIN_BY_ID.get(chainId);\n if (!chain) {\n throw new Error(`Unsupported chain ID: ${chainId}`);\n }\n return chain;\n}\n\nexport function getChainName(chainId: number): string {\n try {\n return getChainById(chainId).name;\n } catch {\n return `Chain ${chainId}`;\n }\n}\n\nexport function getChainExplorerUrl(chainId: number): string | undefined {\n try {\n return getChainById(chainId).blockExplorers?.default?.url;\n } catch {\n return undefined;\n }\n}\n\nexport function getChainRpcUrl(chainId: number): string | undefined {\n try {\n const chain = getChainById(chainId);\n return chain.rpcUrls?.default?.http?.[0] || chain.rpcUrls?.public?.http?.[0];\n } catch {\n return undefined;\n }\n}\n\nexport function getSupportedTokens(chainId: number): TokenConfig[] {\n return getSupportedTokensRaw(chainId) as TokenConfig[];\n}\n\nexport function getSupportedTokenSymbols(chainId: number): string[] {\n return getSupportedTokens(chainId).map((token) => token.symbol);\n}\n\nexport function resolveTokenAddress(token: string, chainId: number): Address {\n if (isAddress(token)) {\n return token;\n }\n // Case-insensitive lookup: find canonical symbol from registry, then resolve\n const match = getSupportedTokens(chainId).find(\n (t) => t.symbol.toUpperCase() === token.toUpperCase()\n );\n if (!match) {\n return getTokenAddress(token as never, chainId);\n }\n return match.address;\n}\n\nexport function isTestnet(chainId: number): boolean {\n try {\n return getChainById(chainId).testnet ?? false;\n } catch {\n return false;\n }\n}\n\nexport function getTokenSymbol(tokenAddress: Address, chainId: number): string {\n const token = getSupportedTokens(chainId).find(\n (entry) => entry.address.toLowerCase() === tokenAddress.toLowerCase()\n );\n if (!token) {\n throw new Error(`Unsupported token: ${tokenAddress} on chain ${chainId}`);\n }\n return token.symbol;\n}\n\nexport function isTokenAddressSupported(tokenAddress: Address, chainId: number): boolean {\n try {\n return getSupportedTokens(chainId).some(\n (entry) => entry.address.toLowerCase() === tokenAddress.toLowerCase()\n );\n } catch {\n return false;\n }\n}\n\nexport { getTokenAddress, getTokenDecimals };\n","import { encodeAbiParameters, keccak256 } from 'viem';\nimport type { Hex } from 'viem';\nimport type { WebAuthnSignature } from '../types';\nimport type { TransactionCall } from './types';\n\n/**\n * P-256 curve order (n)\n * Used for signature malleability normalization\n */\nconst P256_N = BigInt(\n '0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551'\n);\nconst P256_N_DIV_2 = P256_N / 2n;\n\n/**\n * WebAuthnAuth struct type for ABI encoding\n */\nconst WEBAUTHN_AUTH_TYPE = {\n type: 'tuple',\n components: [\n { type: 'bytes', name: 'authenticatorData' },\n { type: 'string', name: 'clientDataJSON' },\n { type: 'uint256', name: 'challengeIndex' },\n { type: 'uint256', name: 'typeIndex' },\n { type: 'uint256', name: 'r' },\n { type: 'uint256', name: 's' },\n ],\n} as const;\n\n/**\n * Encode a WebAuthn signature for ERC-1271 verification on-chain\n *\n * @param sig - The WebAuthn signature from the passkey\n * @returns ABI-encoded signature bytes\n */\nexport function encodeWebAuthnSignature(sig: WebAuthnSignature): Hex {\n // Normalize s to prevent signature malleability\n let s = BigInt(sig.s);\n if (s > P256_N_DIV_2) {\n s = P256_N - s;\n }\n\n return encodeAbiParameters([WEBAUTHN_AUTH_TYPE], [\n {\n authenticatorData: sig.authenticatorData as Hex,\n clientDataJSON: sig.clientDataJSON,\n challengeIndex: BigInt(sig.challengeIndex),\n typeIndex: BigInt(sig.typeIndex),\n r: BigInt(sig.r),\n s,\n },\n ]);\n}\n\n/**\n * Hash an array of transaction calls for signing\n *\n * @param calls - Array of transaction calls\n * @returns keccak256 hash of the encoded calls\n */\nexport function hashCalls(calls: TransactionCall[]): Hex {\n const encoded = encodeAbiParameters(\n [\n {\n type: 'tuple[]',\n components: [\n { type: 'address', name: 'to' },\n { type: 'bytes', name: 'data' },\n { type: 'uint256', name: 'value' },\n ],\n },\n ],\n [\n calls.map((c) => ({\n to: c.to,\n data: c.data || '0x',\n value: c.value || 0n,\n })),\n ]\n );\n return keccak256(encoded);\n}\n\n/**\n * Build transaction review display data from calls\n *\n * @param calls - Array of transaction calls\n * @returns TransactionDetails for the signing modal\n */\nexport function buildTransactionReview(calls: TransactionCall[]) {\n return {\n actions: calls.map((call, i) => ({\n type: 'custom' as const,\n label: call.label || `Contract Call ${i + 1}`,\n sublabel: call.sublabel || `To: ${call.to.slice(0, 10)}...${call.to.slice(-8)}`,\n amount: call.value ? `${call.value} wei` : undefined,\n })),\n };\n}\n"],"mappings":"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","names":["import_viem","import_viem","getAllSupportedChainsAndTokensRaw","import_viem","data","chainId","options","provider","chain"]}
|
package/dist/wagmi.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
createOneAuthProvider
|
|
3
|
+
} from "./chunk-N4BLW5UR.mjs";
|
|
4
4
|
|
|
5
5
|
// src/wagmi.ts
|
|
6
6
|
import { createConnector } from "@wagmi/core";
|
|
@@ -101,7 +101,7 @@ function oneAuth(options) {
|
|
|
101
101
|
if (!initialChainId) {
|
|
102
102
|
throw new Error("No chain configured for 1auth connector");
|
|
103
103
|
}
|
|
104
|
-
provider =
|
|
104
|
+
provider = createOneAuthProvider({
|
|
105
105
|
client: options.client,
|
|
106
106
|
chainId: initialChainId,
|
|
107
107
|
storageKey: options.storageKey,
|
package/dist/wagmi.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/wagmi.ts"],"sourcesContent":["import { createConnector, type Connector } from \"@wagmi/core\";\nimport {\n numberToHex,\n type Address,\n type Chain,\n type ProviderConnectInfo,\n} from \"viem\";\nimport { createPasskeyProvider, type PasskeyProvider } from \"./provider\";\nimport type { OneAuthClient } from \"./client\";\nimport type { IntentSigner } from \"./types\";\n\nexport type OneAuthConnectorOptions = {\n client: OneAuthClient;\n chainId?: number;\n storageKey?: string;\n waitForHash?: boolean;\n hashTimeoutMs?: number;\n hashIntervalMs?: number;\n signIntent?: IntentSigner;\n};\n\nexport function oneAuth(options: OneAuthConnectorOptions) {\n type Provider = PasskeyProvider;\n\n return createConnector<Provider>((wagmiConfig) => {\n const chains = (wagmiConfig.chains ?? []) as readonly [Chain, ...Chain[]];\n const initialChainId = options.chainId ?? chains[0]?.id;\n\n let provider: Provider | null = null;\n let accountsChanged: Connector[\"onAccountsChanged\"] | undefined;\n let chainChanged: Connector[\"onChainChanged\"] | undefined;\n let connect: Connector[\"onConnect\"] | undefined;\n let disconnect: Connector[\"onDisconnect\"] | undefined;\n\n return {\n id: \"1auth\",\n name: \"1auth Passkey\",\n type: \"wallet\",\n async connect<withCapabilities extends boolean = false>(\n { chainId, isReconnecting, withCapabilities }:\n | {\n chainId?: number;\n isReconnecting?: boolean;\n withCapabilities?: withCapabilities | boolean;\n }\n | undefined = {}\n ): Promise<{\n accounts: withCapabilities extends true\n ? readonly { address: Address; capabilities: Record<string, unknown> }[]\n : readonly Address[];\n chainId: number;\n }> {\n if (!initialChainId) {\n throw new Error(\"No chain configured for 1auth connector\");\n }\n\n const provider = await this.getProvider({ chainId });\n let accounts: readonly Address[] = [];\n let currentChainId = await this.getChainId();\n\n if (isReconnecting) {\n accounts = await this.getAccounts().catch(() => []);\n }\n\n if (!accounts.length) {\n accounts = (await provider.request({\n method: \"wallet_connect\",\n })) as Address[];\n currentChainId = await this.getChainId();\n }\n\n if (chainId && currentChainId !== chainId) {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n currentChainId = await this.getChainId();\n }\n\n if (connect) {\n provider.removeListener(\"connect\", connect as never);\n connect = undefined;\n }\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on(\"accountsChanged\", accountsChanged as never);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on(\"chainChanged\", chainChanged as never);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on(\"disconnect\", disconnect as never);\n }\n\n const response = withCapabilities\n ? {\n accounts: accounts.map((account) => ({\n address: account,\n capabilities: {},\n })),\n chainId: currentChainId,\n }\n : {\n accounts,\n chainId: currentChainId,\n };\n\n return response as unknown as {\n accounts: withCapabilities extends true\n ? readonly { address: Address; capabilities: Record<string, unknown> }[]\n : readonly Address[];\n chainId: number;\n };\n },\n async disconnect() {\n const provider = await this.getProvider();\n await provider.disconnect();\n if (chainChanged) {\n provider.removeListener(\"chainChanged\", chainChanged as never);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener(\"disconnect\", disconnect as never);\n disconnect = undefined;\n }\n },\n async getAccounts() {\n const provider = await this.getProvider();\n return (await provider.request({\n method: \"eth_accounts\",\n })) as Address[];\n },\n async getChainId() {\n const provider = await this.getProvider();\n const hexChainId = (await provider.request({\n method: \"eth_chainId\",\n })) as string;\n return Number.parseInt(hexChainId, 16);\n },\n async getProvider({ chainId } = {}) {\n if (!provider) {\n if (!initialChainId) {\n throw new Error(\"No chain configured for 1auth connector\");\n }\n provider = createPasskeyProvider({\n client: options.client,\n chainId: initialChainId,\n storageKey: options.storageKey,\n waitForHash: options.waitForHash,\n hashTimeoutMs: options.hashTimeoutMs,\n hashIntervalMs: options.hashIntervalMs,\n signIntent: options.signIntent,\n });\n }\n if (chainId) {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n }\n return provider;\n },\n async setup() {\n const provider = await this.getProvider();\n if (!connect) {\n const onConnect = this.onConnect?.bind(this);\n if (onConnect) {\n connect = onConnect;\n provider.on(\"connect\", connect as never);\n }\n }\n },\n async isAuthorized() {\n try {\n const accounts = await this.getAccounts();\n return accounts.length > 0;\n } catch {\n return false;\n }\n },\n async switchChain({ chainId }) {\n const chain = chains.find((chain) => chain.id === chainId);\n if (!chain) {\n throw new Error(\"Chain not configured\");\n }\n const provider = await this.getProvider();\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n return chain;\n },\n async onConnect(connectInfo: ProviderConnectInfo) {\n const accounts = await this.getAccounts();\n if (!accounts.length) return;\n const chainId = Number(connectInfo.chainId);\n wagmiConfig.emitter.emit(\"connect\", { accounts, chainId });\n },\n onAccountsChanged(accounts: string[]) {\n wagmiConfig.emitter.emit(\"change\", {\n accounts: accounts as Address[],\n });\n },\n onChainChanged(chainId: string) {\n wagmiConfig.emitter.emit(\"change\", {\n chainId: Number(chainId),\n });\n },\n onDisconnect(_error?: Error) {\n wagmiConfig.emitter.emit(\"disconnect\");\n },\n };\n });\n}\n"],"mappings":"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","names":["provider","chain"]}
|
|
1
|
+
{"version":3,"sources":["../src/wagmi.ts"],"sourcesContent":["import { createConnector, type Connector } from \"@wagmi/core\";\nimport {\n numberToHex,\n type Address,\n type Chain,\n type ProviderConnectInfo,\n} from \"viem\";\nimport { createOneAuthProvider, type OneAuthProvider } from \"./provider\";\nimport type { OneAuthClient } from \"./client\";\nimport type { IntentSigner } from \"./types\";\n\nexport type OneAuthConnectorOptions = {\n client: OneAuthClient;\n chainId?: number;\n storageKey?: string;\n waitForHash?: boolean;\n hashTimeoutMs?: number;\n hashIntervalMs?: number;\n signIntent?: IntentSigner;\n};\n\nexport function oneAuth(options: OneAuthConnectorOptions) {\n type Provider = OneAuthProvider;\n\n return createConnector<Provider>((wagmiConfig) => {\n const chains = (wagmiConfig.chains ?? []) as readonly [Chain, ...Chain[]];\n const initialChainId = options.chainId ?? chains[0]?.id;\n\n let provider: Provider | null = null;\n let accountsChanged: Connector[\"onAccountsChanged\"] | undefined;\n let chainChanged: Connector[\"onChainChanged\"] | undefined;\n let connect: Connector[\"onConnect\"] | undefined;\n let disconnect: Connector[\"onDisconnect\"] | undefined;\n\n return {\n id: \"1auth\",\n name: \"1auth Passkey\",\n type: \"wallet\",\n async connect<withCapabilities extends boolean = false>(\n { chainId, isReconnecting, withCapabilities }:\n | {\n chainId?: number;\n isReconnecting?: boolean;\n withCapabilities?: withCapabilities | boolean;\n }\n | undefined = {}\n ): Promise<{\n accounts: withCapabilities extends true\n ? readonly { address: Address; capabilities: Record<string, unknown> }[]\n : readonly Address[];\n chainId: number;\n }> {\n if (!initialChainId) {\n throw new Error(\"No chain configured for 1auth connector\");\n }\n\n const provider = await this.getProvider({ chainId });\n let accounts: readonly Address[] = [];\n let currentChainId = await this.getChainId();\n\n if (isReconnecting) {\n accounts = await this.getAccounts().catch(() => []);\n }\n\n if (!accounts.length) {\n accounts = (await provider.request({\n method: \"wallet_connect\",\n })) as Address[];\n currentChainId = await this.getChainId();\n }\n\n if (chainId && currentChainId !== chainId) {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n currentChainId = await this.getChainId();\n }\n\n if (connect) {\n provider.removeListener(\"connect\", connect as never);\n connect = undefined;\n }\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on(\"accountsChanged\", accountsChanged as never);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on(\"chainChanged\", chainChanged as never);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on(\"disconnect\", disconnect as never);\n }\n\n const response = withCapabilities\n ? {\n accounts: accounts.map((account) => ({\n address: account,\n capabilities: {},\n })),\n chainId: currentChainId,\n }\n : {\n accounts,\n chainId: currentChainId,\n };\n\n return response as unknown as {\n accounts: withCapabilities extends true\n ? readonly { address: Address; capabilities: Record<string, unknown> }[]\n : readonly Address[];\n chainId: number;\n };\n },\n async disconnect() {\n const provider = await this.getProvider();\n await provider.disconnect();\n if (chainChanged) {\n provider.removeListener(\"chainChanged\", chainChanged as never);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener(\"disconnect\", disconnect as never);\n disconnect = undefined;\n }\n },\n async getAccounts() {\n const provider = await this.getProvider();\n return (await provider.request({\n method: \"eth_accounts\",\n })) as Address[];\n },\n async getChainId() {\n const provider = await this.getProvider();\n const hexChainId = (await provider.request({\n method: \"eth_chainId\",\n })) as string;\n return Number.parseInt(hexChainId, 16);\n },\n async getProvider({ chainId } = {}) {\n if (!provider) {\n if (!initialChainId) {\n throw new Error(\"No chain configured for 1auth connector\");\n }\n provider = createOneAuthProvider({\n client: options.client,\n chainId: initialChainId,\n storageKey: options.storageKey,\n waitForHash: options.waitForHash,\n hashTimeoutMs: options.hashTimeoutMs,\n hashIntervalMs: options.hashIntervalMs,\n signIntent: options.signIntent,\n });\n }\n if (chainId) {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n }\n return provider;\n },\n async setup() {\n const provider = await this.getProvider();\n if (!connect) {\n const onConnect = this.onConnect?.bind(this);\n if (onConnect) {\n connect = onConnect;\n provider.on(\"connect\", connect as never);\n }\n }\n },\n async isAuthorized() {\n try {\n const accounts = await this.getAccounts();\n return accounts.length > 0;\n } catch {\n return false;\n }\n },\n async switchChain({ chainId }) {\n const chain = chains.find((chain) => chain.id === chainId);\n if (!chain) {\n throw new Error(\"Chain not configured\");\n }\n const provider = await this.getProvider();\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: numberToHex(chainId) }],\n });\n return chain;\n },\n async onConnect(connectInfo: ProviderConnectInfo) {\n const accounts = await this.getAccounts();\n if (!accounts.length) return;\n const chainId = Number(connectInfo.chainId);\n wagmiConfig.emitter.emit(\"connect\", { accounts, chainId });\n },\n onAccountsChanged(accounts: string[]) {\n wagmiConfig.emitter.emit(\"change\", {\n accounts: accounts as Address[],\n });\n },\n onChainChanged(chainId: string) {\n wagmiConfig.emitter.emit(\"change\", {\n chainId: Number(chainId),\n });\n },\n onDisconnect(_error?: Error) {\n wagmiConfig.emitter.emit(\"disconnect\");\n },\n };\n });\n}\n"],"mappings":"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","names":["provider","chain"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registry.ts","../src/walletClient/utils.ts","../src/provider.ts"],"sourcesContent":["import type { Address, Chain } from \"viem\";\nimport { isAddress } from \"viem\";\nimport * as viemChains from \"viem/chains\";\nimport {\n getAllSupportedChainsAndTokens as getAllSupportedChainsAndTokensRaw,\n getSupportedTokens as getSupportedTokensRaw,\n getTokenAddress,\n getTokenDecimals,\n} from \"@rhinestone/sdk\";\n\nexport type TokenConfig = {\n symbol: string;\n address: Address;\n decimals: number;\n supportsMultichain?: boolean;\n [key: string]: unknown;\n};\n\nexport type ChainFilterOptions = {\n includeTestnets?: boolean;\n chainIds?: number[];\n};\n\nconst env: Record<string, string | undefined> =\n typeof process !== \"undefined\" ? process.env : {};\n\n// Build a chain-ID-to-Chain map from viem, resolving collisions by\n// preferring non-testnet (mainnet) definitions. Viem has duplicate IDs\n// (e.g. zoraTestnet and hyperEvm both use 999) and Map last-write-wins\n// can pick the wrong one.\nconst VIEM_CHAIN_BY_ID = new Map<number, Chain>();\nfor (const value of Object.values(viemChains)) {\n if (typeof value !== \"object\" || value === null || !(\"id\" in value) || !(\"name\" in value)) continue;\n const chain = value as Chain;\n const existing = VIEM_CHAIN_BY_ID.get(chain.id);\n if (!existing || (existing.testnet && !chain.testnet)) {\n VIEM_CHAIN_BY_ID.set(chain.id, chain);\n }\n}\nconst SUPPORTED_CHAIN_IDS = new Set(\n getAllSupportedChainsAndTokensRaw().map((entry) => entry.chainId)\n);\n\nfunction parseBool(value?: string): boolean | undefined {\n if (value === \"true\" || value === \"1\") return true;\n if (value === \"false\" || value === \"0\") return false;\n return undefined;\n}\n\nfunction resolveIncludeTestnets(explicit?: boolean): boolean {\n if (explicit !== undefined) return explicit;\n const envValue =\n parseBool(env.NEXT_PUBLIC_ORCHESTRATOR_USE_TESTNETS) ??\n parseBool(env.ORCHESTRATOR_USE_TESTNETS);\n return envValue ?? false;\n}\n\nfunction applyChainFilters(chainIds: number[], options?: ChainFilterOptions): number[] {\n const includeTestnets = resolveIncludeTestnets(options?.includeTestnets);\n const allowlist = options?.chainIds;\n let filtered = chainIds;\n\n if (!includeTestnets) {\n filtered = filtered.filter((chainId) => !isTestnet(chainId));\n }\n\n if (allowlist && allowlist.length > 0) {\n const allowed = new Set(allowlist);\n filtered = filtered.filter((chainId) => allowed.has(chainId));\n }\n\n return filtered;\n}\n\nexport function getSupportedChainIds(options?: ChainFilterOptions): number[] {\n return applyChainFilters(Array.from(SUPPORTED_CHAIN_IDS), options);\n}\n\nexport function getSupportedChains(options?: ChainFilterOptions): Chain[] {\n return getSupportedChainIds(options)\n .map((chainId) => VIEM_CHAIN_BY_ID.get(chainId))\n .filter((chain): chain is Chain => Boolean(chain));\n}\n\nexport function getAllSupportedChainsAndTokens(options?: ChainFilterOptions): Array<{\n chainId: number;\n tokens: TokenConfig[];\n}> {\n const allowed = new Set(getSupportedChainIds(options));\n return getAllSupportedChainsAndTokensRaw()\n .filter((entry) => allowed.has(entry.chainId))\n .map((entry) => ({\n chainId: entry.chainId,\n tokens: entry.tokens as TokenConfig[],\n }));\n}\n\nexport function getChainById(chainId: number): Chain {\n if (!SUPPORTED_CHAIN_IDS.has(chainId)) {\n throw new Error(`Unsupported chain ID: ${chainId}`);\n }\n const chain = VIEM_CHAIN_BY_ID.get(chainId);\n if (!chain) {\n throw new Error(`Unsupported chain ID: ${chainId}`);\n }\n return chain;\n}\n\nexport function getChainName(chainId: number): string {\n try {\n return getChainById(chainId).name;\n } catch {\n return `Chain ${chainId}`;\n }\n}\n\nexport function getChainExplorerUrl(chainId: number): string | undefined {\n try {\n return getChainById(chainId).blockExplorers?.default?.url;\n } catch {\n return undefined;\n }\n}\n\nexport function getChainRpcUrl(chainId: number): string | undefined {\n try {\n const chain = getChainById(chainId);\n return chain.rpcUrls?.default?.http?.[0] || chain.rpcUrls?.public?.http?.[0];\n } catch {\n return undefined;\n }\n}\n\nexport function getSupportedTokens(chainId: number): TokenConfig[] {\n return getSupportedTokensRaw(chainId) as TokenConfig[];\n}\n\nexport function getSupportedTokenSymbols(chainId: number): string[] {\n return getSupportedTokens(chainId).map((token) => token.symbol);\n}\n\nexport function resolveTokenAddress(token: string, chainId: number): Address {\n if (isAddress(token)) {\n return token;\n }\n // Case-insensitive lookup: find canonical symbol from registry, then resolve\n const match = getSupportedTokens(chainId).find(\n (t) => t.symbol.toUpperCase() === token.toUpperCase()\n );\n if (!match) {\n return getTokenAddress(token as never, chainId);\n }\n return match.address;\n}\n\nexport function isTestnet(chainId: number): boolean {\n try {\n return getChainById(chainId).testnet ?? false;\n } catch {\n return false;\n }\n}\n\nexport function getTokenSymbol(tokenAddress: Address, chainId: number): string {\n const token = getSupportedTokens(chainId).find(\n (entry) => entry.address.toLowerCase() === tokenAddress.toLowerCase()\n );\n if (!token) {\n throw new Error(`Unsupported token: ${tokenAddress} on chain ${chainId}`);\n }\n return token.symbol;\n}\n\nexport function isTokenAddressSupported(tokenAddress: Address, chainId: number): boolean {\n try {\n return getSupportedTokens(chainId).some(\n (entry) => entry.address.toLowerCase() === tokenAddress.toLowerCase()\n );\n } catch {\n return false;\n }\n}\n\nexport { getTokenAddress, getTokenDecimals };\n","import { encodeAbiParameters, keccak256 } from 'viem';\nimport type { Hex } from 'viem';\nimport type { WebAuthnSignature } from '../types';\nimport type { TransactionCall } from './types';\n\n/**\n * P-256 curve order (n)\n * Used for signature malleability normalization\n */\nconst P256_N = BigInt(\n '0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551'\n);\nconst P256_N_DIV_2 = P256_N / 2n;\n\n/**\n * WebAuthnAuth struct type for ABI encoding\n */\nconst WEBAUTHN_AUTH_TYPE = {\n type: 'tuple',\n components: [\n { type: 'bytes', name: 'authenticatorData' },\n { type: 'string', name: 'clientDataJSON' },\n { type: 'uint256', name: 'challengeIndex' },\n { type: 'uint256', name: 'typeIndex' },\n { type: 'uint256', name: 'r' },\n { type: 'uint256', name: 's' },\n ],\n} as const;\n\n/**\n * Encode a WebAuthn signature for ERC-1271 verification on-chain\n *\n * @param sig - The WebAuthn signature from the passkey\n * @returns ABI-encoded signature bytes\n */\nexport function encodeWebAuthnSignature(sig: WebAuthnSignature): Hex {\n // Normalize s to prevent signature malleability\n let s = BigInt(sig.s);\n if (s > P256_N_DIV_2) {\n s = P256_N - s;\n }\n\n return encodeAbiParameters([WEBAUTHN_AUTH_TYPE], [\n {\n authenticatorData: sig.authenticatorData as Hex,\n clientDataJSON: sig.clientDataJSON,\n challengeIndex: BigInt(sig.challengeIndex),\n typeIndex: BigInt(sig.typeIndex),\n r: BigInt(sig.r),\n s,\n },\n ]);\n}\n\n/**\n * Hash an array of transaction calls for signing\n *\n * @param calls - Array of transaction calls\n * @returns keccak256 hash of the encoded calls\n */\nexport function hashCalls(calls: TransactionCall[]): Hex {\n const encoded = encodeAbiParameters(\n [\n {\n type: 'tuple[]',\n components: [\n { type: 'address', name: 'to' },\n { type: 'bytes', name: 'data' },\n { type: 'uint256', name: 'value' },\n ],\n },\n ],\n [\n calls.map((c) => ({\n to: c.to,\n data: c.data || '0x',\n value: c.value || 0n,\n })),\n ]\n );\n return keccak256(encoded);\n}\n\n/**\n * Build transaction review display data from calls\n *\n * @param calls - Array of transaction calls\n * @returns TransactionDetails for the signing modal\n */\nexport function buildTransactionReview(calls: TransactionCall[]) {\n return {\n actions: calls.map((call, i) => ({\n type: 'custom' as const,\n label: call.label || `Contract Call ${i + 1}`,\n sublabel: call.sublabel || `To: ${call.to.slice(0, 10)}...${call.to.slice(-8)}`,\n amount: call.value ? `${call.value} wei` : undefined,\n })),\n };\n}\n","import {\n hexToString,\n isHex,\n numberToHex,\n type Address,\n type Hex,\n} from \"viem\";\nimport { OneAuthClient } from \"./client\";\nimport { getSupportedChainIds } from \"./registry\";\nimport type { CloseOnStatus, IntentCall, IntentSigner, IntentTokenRequest } from \"./types\";\nimport { encodeWebAuthnSignature } from \"./walletClient/utils\";\n\ntype ProviderRequest = {\n method: string;\n params?: unknown[] | Record<string, unknown>;\n};\n\ntype Listener = (...args: unknown[]) => void;\n\ntype StoredUser = {\n username?: string;\n address: Address;\n};\n\nexport type OneAuthProvider = {\n request: (args: ProviderRequest) => Promise<unknown>;\n on: (event: string, listener: Listener) => void;\n removeListener: (event: string, listener: Listener) => void;\n disconnect: () => Promise<void>;\n};\n\n/** @deprecated Use OneAuthProvider instead */\nexport type PasskeyProvider = OneAuthProvider;\n\nexport type OneAuthProviderOptions = {\n client: OneAuthClient;\n chainId: number;\n storageKey?: string;\n /** When to close the dialog and return success. Defaults to \"preconfirmed\" */\n closeOn?: CloseOnStatus;\n waitForHash?: boolean;\n hashTimeoutMs?: number;\n hashIntervalMs?: number;\n signIntent?: IntentSigner;\n};\n\n/** @deprecated Use OneAuthProviderOptions instead */\nexport type PasskeyProviderOptions = OneAuthProviderOptions;\n\nconst DEFAULT_STORAGE_KEY = \"1auth-user\";\n\nexport function createOneAuthProvider(\n options: OneAuthProviderOptions\n): OneAuthProvider {\n const { client } = options;\n let chainId = options.chainId;\n const storageKey = options.storageKey || DEFAULT_STORAGE_KEY;\n\n const listeners = new Map<string, Set<Listener>>();\n\n const emit = (event: string, ...args: unknown[]) => {\n const set = listeners.get(event);\n if (!set) return;\n for (const listener of set) listener(...args);\n };\n\n const getStoredUser = (): StoredUser | null => {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as StoredUser;\n if (!parsed?.address) return null;\n return parsed;\n } catch {\n return null;\n }\n };\n\n const setStoredUser = (user: StoredUser) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(storageKey, JSON.stringify(user));\n };\n\n const clearStoredUser = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(storageKey);\n };\n\n const resolveAccountAddress = async (username: string): Promise<Address> => {\n const clientId = client.getClientId();\n const response = await fetch(\n `${client.getProviderUrl()}/api/users/${encodeURIComponent(username)}/account`,\n {\n headers: clientId ? { \"x-client-id\": clientId } : {},\n }\n );\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to resolve account address\");\n }\n\n const data = await response.json();\n return data.address as Address;\n };\n\n const connect = async (): Promise<Address[]> => {\n const stored = getStoredUser();\n if (stored) {\n return [stored.address];\n }\n\n // First try the lightweight connect modal\n const connectResult = await client.connectWithModal();\n\n let username: string | undefined;\n let address: Address | undefined;\n\n if (connectResult.success) {\n // Connection successful (user confirmed or auto-connected)\n username = connectResult.username;\n address = connectResult.address as Address | undefined;\n } else if (connectResult.action === \"switch\") {\n // User wants to switch account or no previous user - show auth modal\n const authResult = await client.authWithModal();\n if (!authResult.success) {\n throw new Error(authResult.error?.message || \"Authentication failed\");\n }\n username = authResult.username;\n address = authResult.address as Address | undefined;\n } else {\n // Connection was cancelled\n throw new Error(connectResult.error?.message || \"Connection cancelled\");\n }\n\n // Use address from result directly, or resolve from username\n if (!address && username) {\n address = await resolveAccountAddress(username);\n }\n if (!address) {\n throw new Error(\"No account address available\");\n }\n\n setStoredUser({ username, address });\n emit(\"accountsChanged\", [address]);\n emit(\"connect\", { chainId: numberToHex(chainId) });\n return [address];\n };\n\n const disconnect = async () => {\n clearStoredUser();\n emit(\"accountsChanged\", []);\n emit(\"disconnect\");\n };\n\n const ensureUser = async (): Promise<StoredUser> => {\n const stored = getStoredUser();\n if (stored) return stored;\n const [address] = await connect();\n if (!address) {\n throw new Error(\"Failed to resolve user session\");\n }\n const user = getStoredUser();\n return user || { address };\n };\n\n const parseChainId = (value: unknown): number | undefined => {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") {\n if (value.startsWith(\"0x\")) return Number.parseInt(value, 16);\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n };\n\n const normalizeValue = (value: unknown): string | undefined => {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"bigint\") return value.toString();\n if (typeof value === \"number\") return Math.trunc(value).toString();\n if (typeof value === \"string\") {\n if (value.startsWith(\"0x\")) {\n try {\n return BigInt(value).toString();\n } catch {\n return \"0\";\n }\n }\n return value;\n }\n return undefined;\n };\n\n const normalizeCalls = (calls: unknown[]): IntentCall[] => {\n return calls.map((call) => {\n const c = call as Record<string, unknown>;\n return {\n to: c.to as Address,\n data: (c.data as Hex | undefined) || \"0x\",\n value: normalizeValue(c.value) || \"0\",\n label: c.label as string | undefined,\n sublabel: c.sublabel as string | undefined,\n };\n });\n };\n\n const normalizeTokenRequests = (\n requests: unknown\n ): IntentTokenRequest[] | undefined => {\n if (!Array.isArray(requests)) return undefined;\n return requests.map((r) => {\n const req = r as Record<string, unknown>;\n return {\n token: req.token as string,\n amount:\n typeof req.amount === \"bigint\"\n ? req.amount\n : BigInt(String(req.amount || \"0\")),\n };\n });\n };\n\n const decodeMessage = (value: string) => {\n if (!isHex(value)) return value;\n try {\n return hexToString(value as Hex);\n } catch {\n return value;\n }\n };\n\n const signMessage = async (message: string) => {\n const user = await ensureUser();\n if (!user.username && !user.address) {\n throw new Error(\"Username or address required for signing.\");\n }\n const result = await client.signMessage({\n username: user.username,\n accountAddress: user.address,\n message,\n });\n if (!result.success || !result.signature) {\n throw new Error(result.error?.message || \"Signing failed\");\n }\n return encodeWebAuthnSignature(result.signature);\n };\n\n const signTypedData = async (typedData: unknown) => {\n const user = await ensureUser();\n if (!user.username && !user.address) {\n throw new Error(\"Username or address required for signing.\");\n }\n const data =\n typeof typedData === \"string\" ? JSON.parse(typedData) : typedData;\n const result = await client.signTypedData({\n username: user.username,\n accountAddress: user.address,\n domain: (data as any).domain,\n types: (data as any).types,\n primaryType: (data as any).primaryType,\n message: (data as any).message,\n });\n if (!result.success || !result.signature) {\n throw new Error(result.error?.message || \"Signing failed\");\n }\n return encodeWebAuthnSignature(result.signature);\n };\n\n const resolveIntentPayload = async (payload: {\n username?: string;\n accountAddress: Address;\n targetChain: number;\n calls: IntentCall[];\n tokenRequests?: IntentTokenRequest[];\n }) => {\n if (!options.signIntent) {\n return {\n username: payload.username,\n accountAddress: payload.accountAddress,\n targetChain: payload.targetChain,\n calls: payload.calls,\n tokenRequests: payload.tokenRequests,\n };\n }\n if (!payload.username) {\n throw new Error(\"Username required for signed intents. Set a username first.\");\n }\n const signedIntent = await options.signIntent({\n username: payload.username,\n accountAddress: payload.accountAddress,\n targetChain: payload.targetChain,\n calls: payload.calls,\n tokenRequests: payload.tokenRequests,\n });\n return { signedIntent };\n };\n\n const sendIntent = async (payload: {\n username?: string;\n accountAddress: Address;\n targetChain: number;\n calls: IntentCall[];\n tokenRequests?: IntentTokenRequest[];\n sourceChainId?: number;\n }) => {\n // Use explicit closeOn if provided, otherwise default based on waitForHash\n const closeOn = options.closeOn ?? ((options.waitForHash ?? true) ? \"completed\" : \"preconfirmed\");\n const intentPayload = await resolveIntentPayload(payload);\n const result = await client.sendIntent({\n ...intentPayload,\n tokenRequests: payload.tokenRequests,\n sourceChainId: payload.sourceChainId,\n closeOn,\n waitForHash: options.waitForHash ?? true,\n hashTimeoutMs: options.hashTimeoutMs,\n hashIntervalMs: options.hashIntervalMs,\n });\n\n if (!result.success) {\n throw new Error(result.error?.message || \"Transaction failed\");\n }\n\n // Return intentId as callsId for EIP-5792 compatibility\n return result.intentId;\n };\n\n const request = async ({ method, params }: ProviderRequest) => {\n switch (method) {\n case \"eth_chainId\":\n return numberToHex(chainId);\n case \"eth_accounts\": {\n const stored = getStoredUser();\n return stored ? [stored.address] : [];\n }\n case \"eth_requestAccounts\":\n return connect();\n case \"wallet_connect\":\n return connect();\n case \"wallet_disconnect\":\n await disconnect();\n return true;\n case \"wallet_switchEthereumChain\": {\n const [param] = (params as any[]) || [];\n const next = parseChainId(param?.chainId ?? param);\n if (!next) {\n throw new Error(\"Invalid chainId\");\n }\n chainId = next;\n emit(\"chainChanged\", numberToHex(chainId));\n return null;\n }\n case \"personal_sign\": {\n const paramList = Array.isArray(params) ? params : [];\n const first = paramList[0];\n const second = paramList[1];\n const message =\n typeof first === \"string\" && first.startsWith(\"0x\") && second\n ? typeof second === \"string\" && !second.startsWith(\"0x\")\n ? second\n : decodeMessage(first)\n : typeof first === \"string\"\n ? decodeMessage(first)\n : typeof second === \"string\"\n ? decodeMessage(second)\n : \"\";\n if (!message) throw new Error(\"Invalid personal_sign payload\");\n return signMessage(message);\n }\n case \"eth_sign\": {\n const paramList = Array.isArray(params) ? params : [];\n const message = typeof paramList[1] === \"string\" ? paramList[1] : \"\";\n if (!message) throw new Error(\"Invalid eth_sign payload\");\n return signMessage(decodeMessage(message));\n }\n case \"eth_signTypedData\":\n case \"eth_signTypedData_v4\": {\n const paramList = Array.isArray(params) ? params : [];\n const typedData = paramList[1] ?? paramList[0];\n return signTypedData(typedData);\n }\n case \"eth_sendTransaction\": {\n const paramList = Array.isArray(params) ? params : [];\n const tx = (paramList[0] || {}) as Record<string, unknown>;\n const user = await ensureUser();\n const targetChain = parseChainId(tx.chainId) ?? chainId;\n const calls = normalizeCalls([tx]);\n const tokenRequests = normalizeTokenRequests(tx.tokenRequests);\n const txSourceChainId = parseChainId(tx.sourceChainId);\n return sendIntent({\n username: user.username,\n accountAddress: user.address,\n targetChain,\n calls,\n tokenRequests,\n sourceChainId: txSourceChainId,\n });\n }\n case \"wallet_sendCalls\": {\n const paramList = Array.isArray(params) ? params : [];\n const payload = (paramList[0] || {}) as Record<string, unknown>;\n const user = await ensureUser();\n const targetChain = parseChainId(payload.chainId) ?? chainId;\n const calls = normalizeCalls((payload.calls as unknown[]) || []);\n const tokenRequests = normalizeTokenRequests(payload.tokenRequests);\n const sourceChainId = parseChainId(payload.sourceChainId);\n if (!calls.length) throw new Error(\"No calls provided\");\n return sendIntent({\n username: user.username,\n accountAddress: user.address,\n targetChain,\n calls,\n tokenRequests,\n sourceChainId,\n });\n }\n case \"wallet_getCapabilities\": {\n const paramList = Array.isArray(params) ? params : [];\n // walletAddress is params[0] - we ignore since all accounts have same capabilities\n const requestedChains = paramList[1] as `0x${string}`[] | undefined;\n\n const chainIds = getSupportedChainIds();\n const capabilities: Record<`0x${string}`, Record<string, unknown>> = {};\n\n for (const chainId of chainIds) {\n const hexChainId = `0x${chainId.toString(16)}` as `0x${string}`;\n\n // Filter if specific chains requested\n if (requestedChains && !requestedChains.includes(hexChainId)) {\n continue;\n }\n\n capabilities[hexChainId] = {\n atomic: { status: \"supported\" },\n paymasterService: { supported: true },\n auxiliaryFunds: { supported: true },\n };\n }\n\n return capabilities;\n }\n case \"wallet_getAssets\": {\n const user = await ensureUser();\n if (!user.username) {\n throw new Error(\"Username required to fetch assets. Set a username first.\");\n }\n const clientId = client.getClientId();\n const response = await fetch(\n `${client.getProviderUrl()}/api/users/${encodeURIComponent(user.username)}/portfolio`,\n {\n headers: clientId ? { \"x-client-id\": clientId } : {},\n }\n );\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to get assets\");\n }\n return response.json();\n }\n case \"wallet_getCallsStatus\": {\n const paramList = Array.isArray(params) ? params : [];\n const callsId = paramList[0] as string;\n if (!callsId) {\n throw new Error(\"callsId is required\");\n }\n const statusClientId = client.getClientId();\n const response = await fetch(\n `${client.getProviderUrl()}/api/intent/status/${encodeURIComponent(callsId)}`,\n {\n headers: statusClientId ? { \"x-client-id\": statusClientId } : {},\n }\n );\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to get calls status\");\n }\n const data = await response.json();\n // Map intent status to EIP-5792 format\n const statusMap: Record<string, string> = {\n pending: \"PENDING\",\n preconfirmed: \"PENDING\",\n completed: \"CONFIRMED\",\n failed: \"CONFIRMED\",\n expired: \"CONFIRMED\",\n };\n return {\n status: statusMap[data.status] || \"PENDING\",\n receipts: data.transactionHash\n ? [\n {\n logs: [],\n status: data.status === \"completed\" ? \"0x1\" : \"0x0\",\n blockHash: data.blockHash,\n blockNumber: data.blockNumber,\n transactionHash: data.transactionHash,\n },\n ]\n : [],\n };\n }\n case \"wallet_getCallsHistory\": {\n const paramList = Array.isArray(params) ? params : [];\n const options = (paramList[0] || {}) as {\n limit?: number;\n offset?: number;\n status?: string;\n from?: string;\n to?: string;\n };\n\n const queryParams = new URLSearchParams();\n if (options.limit) queryParams.set(\"limit\", String(options.limit));\n if (options.offset) queryParams.set(\"offset\", String(options.offset));\n if (options.status) queryParams.set(\"status\", options.status);\n if (options.from) queryParams.set(\"from\", options.from);\n if (options.to) queryParams.set(\"to\", options.to);\n\n const url = `${client.getProviderUrl()}/api/intent/history${\n queryParams.toString() ? `?${queryParams}` : \"\"\n }`;\n\n const historyClientId = client.getClientId();\n const response = await fetch(url, {\n headers: historyClientId ? { \"x-client-id\": historyClientId } : {},\n credentials: \"include\",\n });\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}));\n throw new Error(data.error || \"Failed to get calls history\");\n }\n\n const data = await response.json();\n\n // Map intent status to EIP-5792 format\n const statusMap: Record<string, string> = {\n pending: \"PENDING\",\n preconfirmed: \"PENDING\",\n completed: \"CONFIRMED\",\n failed: \"CONFIRMED\",\n expired: \"CONFIRMED\",\n };\n\n // intentId IS the orchestrator's ID (used as callsId in EIP-5792)\n return {\n calls: data.intents.map(\n (intent: {\n intentId: string;\n status: string;\n transactionHash?: string;\n targetChain: number;\n }) => ({\n callsId: intent.intentId, // intentId is the orchestrator's ID\n status: statusMap[intent.status] || \"PENDING\",\n receipts: intent.transactionHash\n ? [{ transactionHash: intent.transactionHash }]\n : [],\n chainId: `0x${intent.targetChain.toString(16)}`,\n })\n ),\n total: data.total,\n hasMore: data.hasMore,\n };\n }\n default:\n throw new Error(`Unsupported method: ${method}`);\n }\n };\n\n return {\n request,\n on(event, listener) {\n const set = listeners.get(event) ?? new Set();\n set.add(listener);\n listeners.set(event, set);\n },\n removeListener(event, listener) {\n const set = listeners.get(event);\n if (!set) return;\n set.delete(listener);\n if (set.size === 0) listeners.delete(event);\n },\n disconnect,\n };\n}\n\n/** @deprecated Use createOneAuthProvider instead */\nexport const createPasskeyProvider = createOneAuthProvider;\n"],"mappings":"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","names":["data","chainId","options"]}
|