@rhinestone/1auth 0.7.4 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/{chunk-IHBVEU33.mjs → chunk-6AHEN3FA.mjs} +1 -1
  2. package/dist/chunk-6AHEN3FA.mjs.map +1 -0
  3. package/dist/{chunk-UXBBB7AV.mjs → chunk-E4YZS7FZ.mjs} +68 -32
  4. package/dist/chunk-E4YZS7FZ.mjs.map +1 -0
  5. package/dist/{client-D4HVy1KF.d.mts → client-C8QSA1th.d.mts} +22 -17
  6. package/dist/{client-CuASptX3.d.ts → client-Dn6mL7BZ.d.ts} +22 -17
  7. package/dist/headless.d.mts +2 -2
  8. package/dist/headless.d.ts +2 -2
  9. package/dist/headless.js +4 -6
  10. package/dist/headless.js.map +1 -1
  11. package/dist/headless.mjs +4 -6
  12. package/dist/headless.mjs.map +1 -1
  13. package/dist/index.d.mts +163 -22
  14. package/dist/index.d.ts +163 -22
  15. package/dist/index.js +210 -116
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.mjs +143 -86
  18. package/dist/index.mjs.map +1 -1
  19. package/dist/{provider-6JoziYDq.d.ts → provider-BsVmPgkQ.d.ts} +22 -3
  20. package/dist/{provider-CAQT7Gqx.d.mts → provider-CJv38fIK.d.mts} +22 -3
  21. package/dist/react.d.mts +9 -4
  22. package/dist/react.d.ts +9 -4
  23. package/dist/react.js +4 -7
  24. package/dist/react.js.map +1 -1
  25. package/dist/react.mjs +4 -7
  26. package/dist/react.mjs.map +1 -1
  27. package/dist/server.d.mts +2 -2
  28. package/dist/server.d.ts +2 -2
  29. package/dist/server.js.map +1 -1
  30. package/dist/server.mjs +1 -1
  31. package/dist/{types-C0jKNT_t.d.mts → types-Dzm5lZK-.d.mts} +33 -51
  32. package/dist/{types-C0jKNT_t.d.ts → types-Dzm5lZK-.d.ts} +33 -51
  33. package/dist/{verify-CnOwPq78.d.ts → verify-0VXQpQBJ.d.mts} +4 -6
  34. package/dist/{verify-aWdi5O2z.d.mts → verify-9UgxLSdo.d.ts} +4 -6
  35. package/dist/wagmi.d.mts +3 -3
  36. package/dist/wagmi.d.ts +3 -3
  37. package/dist/wagmi.js +67 -31
  38. package/dist/wagmi.js.map +1 -1
  39. package/dist/wagmi.mjs +1 -1
  40. package/package.json +1 -1
  41. package/dist/chunk-IHBVEU33.mjs.map +0 -1
  42. package/dist/chunk-UXBBB7AV.mjs.map +0 -1
@@ -17,4 +17,4 @@ export {
17
17
  hashMessage,
18
18
  verifyMessageHash
19
19
  };
20
- //# sourceMappingURL=chunk-IHBVEU33.mjs.map
20
+ //# sourceMappingURL=chunk-6AHEN3FA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/verify.ts"],"sourcesContent":["import { keccak256, toBytes } from \"viem\";\n\n/**\n * The EIP-191 prefix used for personal message signing.\n * This is the standard Ethereum message prefix for `personal_sign`.\n */\nexport const ETHEREUM_MESSAGE_PREFIX = \"\\x19Ethereum Signed Message:\\n\";\n\n/**\n * Hash a message with the EIP-191 Ethereum prefix.\n *\n * This is the same hashing function used by the passkey sign dialog.\n * Use this to verify that the `signedHash` returned from `signMessage()`\n * matches your original message.\n *\n * Format: keccak256(\"\\x19Ethereum Signed Message:\\n\" + len + message)\n *\n * @example\n * ```typescript\n * const message = \"Sign in to MyApp\\nTimestamp: 1234567890\";\n * const result = await client.signMessage({ accountAddress: '0x...', message });\n *\n * // Verify the hash matches\n * const expectedHash = hashMessage(message);\n * if (result.signedHash === expectedHash) {\n * console.log('Hash matches - signature is for this message');\n * }\n * ```\n */\nexport function hashMessage(message: string): `0x${string}` {\n const messageBytes = toBytes(message);\n const prefixed = ETHEREUM_MESSAGE_PREFIX + messageBytes.length.toString() + message;\n return keccak256(toBytes(prefixed));\n}\n\n/**\n * Verify that a signedHash matches the expected message.\n *\n * This is a convenience wrapper around `hashMessage()` that returns\n * a boolean. For full cryptographic verification of the P256 signature,\n * use on-chain verification via the WebAuthn.sol contract.\n *\n * @example\n * ```typescript\n * const result = await client.signMessage({ accountAddress: '0x...', message });\n *\n * if (result.success && verifyMessageHash(message, result.signedHash)) {\n * // The signature is for this exact message\n * // For full verification, verify the P256 signature on-chain or server-side\n * }\n * ```\n */\nexport function verifyMessageHash(\n message: string,\n signedHash: string | undefined\n): boolean {\n if (!signedHash) return false;\n const expectedHash = hashMessage(message);\n return expectedHash.toLowerCase() === signedHash.toLowerCase();\n}\n"],"mappings":";AAAA,SAAS,WAAW,eAAe;AAM5B,IAAM,0BAA0B;AAuBhC,SAAS,YAAY,SAAgC;AAC1D,QAAM,eAAe,QAAQ,OAAO;AACpC,QAAM,WAAW,0BAA0B,aAAa,OAAO,SAAS,IAAI;AAC5E,SAAO,UAAU,QAAQ,QAAQ,CAAC;AACpC;AAmBO,SAAS,kBACd,SACA,YACS;AACT,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,eAAe,YAAY,OAAO;AACxC,SAAO,aAAa,YAAY,MAAM,WAAW,YAAY;AAC/D;","names":[]}
@@ -17,12 +17,14 @@ function createOneAuthProvider(options) {
17
17
  let chainId = options.chainId;
18
18
  const storageKey = options.storageKey || DEFAULT_STORAGE_KEY;
19
19
  const listeners = /* @__PURE__ */ new Map();
20
+ let sessionOverride;
20
21
  const emit = (event, ...args) => {
21
22
  const set = listeners.get(event);
22
23
  if (!set) return;
23
24
  for (const listener of set) listener(...args);
24
25
  };
25
26
  const getStoredUser = () => {
27
+ if (sessionOverride !== void 0) return sessionOverride;
26
28
  if (typeof window === "undefined") return null;
27
29
  try {
28
30
  const raw = localStorage.getItem(storageKey);
@@ -42,21 +44,6 @@ function createOneAuthProvider(options) {
42
44
  if (typeof window === "undefined") return;
43
45
  localStorage.removeItem(storageKey);
44
46
  };
45
- const resolveAccountAddress = async (username) => {
46
- const clientId = client.getClientId();
47
- const response = await fetch(
48
- `${client.getProviderUrl()}/api/users/${encodeURIComponent(username)}/account`,
49
- {
50
- headers: clientId ? { "x-client-id": clientId } : {}
51
- }
52
- );
53
- if (!response.ok) {
54
- const data2 = await response.json().catch(() => ({}));
55
- throw new Error(data2.error || "Failed to resolve account address");
56
- }
57
- const data = await response.json();
58
- return data.address;
59
- };
60
47
  const connect = async () => {
61
48
  const stored = getStoredUser();
62
49
  if (stored) {
@@ -66,25 +53,39 @@ function createOneAuthProvider(options) {
66
53
  if (!authResult.success) {
67
54
  throw new Error(authResult.error?.message || "Authentication failed");
68
55
  }
69
- const username = authResult.user?.username;
70
- let address = authResult.user?.address;
56
+ const address = authResult.user?.address;
71
57
  const signerType = authResult.signerType;
72
- if (!address && username) {
73
- address = await resolveAccountAddress(username);
74
- }
75
58
  if (!address) {
76
59
  throw new Error("No account address available");
77
60
  }
78
- setStoredUser({ username, address, signerType });
61
+ setStoredUser({ address, signerType });
79
62
  emit("accountsChanged", [address]);
80
63
  emit("connect", { chainId: numberToHex(chainId) });
81
64
  return [address];
82
65
  };
83
66
  const disconnect = async () => {
67
+ sessionOverride = void 0;
84
68
  clearStoredUser();
85
69
  emit("accountsChanged", []);
86
70
  emit("disconnect");
87
71
  };
72
+ const setSession = (session) => {
73
+ if (!session) {
74
+ sessionOverride = void 0;
75
+ clearStoredUser();
76
+ emit("accountsChanged", []);
77
+ emit("disconnect");
78
+ return;
79
+ }
80
+ sessionOverride = {
81
+ address: session.address,
82
+ signerType: session.signerType,
83
+ connectorId: session.connectorId
84
+ };
85
+ setStoredUser(sessionOverride);
86
+ emit("accountsChanged", [session.address]);
87
+ emit("connect", { chainId: numberToHex(chainId) });
88
+ };
88
89
  const ensureUser = async () => {
89
90
  const stored = getStoredUser();
90
91
  if (stored) return stored;
@@ -189,11 +190,10 @@ function createOneAuthProvider(options) {
189
190
  ]);
190
191
  const signMessage = async (message) => {
191
192
  const user = await ensureUser();
192
- if (!user.username && !user.address) {
193
- throw new Error("Username or address required for signing.");
193
+ if (!user.address) {
194
+ throw new Error("Account address required for signing.");
194
195
  }
195
196
  const result = await client.signMessage({
196
- username: user.username || void 0,
197
197
  accountAddress: user.address,
198
198
  message
199
199
  });
@@ -204,12 +204,11 @@ function createOneAuthProvider(options) {
204
204
  };
205
205
  const signTypedData = async (typedData) => {
206
206
  const user = await ensureUser();
207
- if (!user.username && !user.address) {
208
- throw new Error("Username or address required for signing.");
207
+ if (!user.address) {
208
+ throw new Error("Account address required for signing.");
209
209
  }
210
210
  const data = typeof typedData === "string" ? JSON.parse(typedData) : typedData;
211
211
  const result = await client.signTypedData({
212
- username: user.username || void 0,
213
212
  accountAddress: user.address,
214
213
  domain: data.domain,
215
214
  types: data.types,
@@ -222,7 +221,6 @@ function createOneAuthProvider(options) {
222
221
  return encodeWebAuthnSignature(result.signature);
223
222
  };
224
223
  const resolveIntentPayload = (payload) => ({
225
- username: payload.username,
226
224
  accountAddress: payload.accountAddress,
227
225
  targetChain: payload.targetChain,
228
226
  calls: payload.calls,
@@ -297,10 +295,49 @@ function createOneAuthProvider(options) {
297
295
  }
298
296
  return list;
299
297
  };
298
+ const eoaBatches = /* @__PURE__ */ new Map();
299
+ const sendCallsEoa = async (params, address) => {
300
+ const validated = injectEoaSigner("wallet_sendCalls", params, address);
301
+ const payload = Array.isArray(validated) ? validated[0] : {};
302
+ const calls = Array.isArray(payload.calls) ? payload.calls : [];
303
+ if (!calls.length) throw new Error("No calls provided");
304
+ const batchChainId = payload.chainId;
305
+ const hashes = [];
306
+ for (const raw of calls) {
307
+ const call = raw || {};
308
+ const tx = { from: address, to: call.to };
309
+ if (call.data !== void 0) tx.data = call.data;
310
+ if (call.value !== void 0) tx.value = call.value;
311
+ const callChain = call.chainId ?? batchChainId;
312
+ if (callChain !== void 0) tx.chainId = callChain;
313
+ const hash = await forwardToWallet("eth_sendTransaction", [tx], address);
314
+ hashes.push(String(hash));
315
+ }
316
+ const id = hashes[hashes.length - 1];
317
+ eoaBatches.set(id, hashes);
318
+ return id;
319
+ };
320
+ const getCallsStatusEoa = (callsId) => {
321
+ if (!callsId || typeof callsId !== "string") {
322
+ throw new Error("callsId is required");
323
+ }
324
+ const hashes = eoaBatches.get(callsId) ?? [callsId];
325
+ return {
326
+ status: "CONFIRMED",
327
+ receipts: hashes.map((transactionHash) => ({ transactionHash }))
328
+ };
329
+ };
300
330
  const request = async ({ method, params }) => {
301
331
  if (EOA_FORWARDED_METHODS.has(method)) {
302
332
  const user = await ensureUser();
303
333
  if (user.signerType === "eoa") {
334
+ if (method === "wallet_sendCalls") {
335
+ return sendCallsEoa(params, user.address);
336
+ }
337
+ if (method === "wallet_getCallsStatus") {
338
+ const list = Array.isArray(params) ? params : [];
339
+ return getCallsStatusEoa(list[0]);
340
+ }
304
341
  return forwardToWallet(
305
342
  method,
306
343
  injectEoaSigner(method, params, user.address),
@@ -365,7 +402,6 @@ function createOneAuthProvider(options) {
365
402
  const tokenRequests = normalizeTokenRequests(tx.tokenRequests);
366
403
  const txSourceChainId = parseChainId(tx.sourceChainId);
367
404
  return sendIntent({
368
- username: user.username || void 0,
369
405
  accountAddress: user.address,
370
406
  targetChain,
371
407
  calls,
@@ -383,7 +419,6 @@ function createOneAuthProvider(options) {
383
419
  const sourceChainId = parseChainId(payload.sourceChainId);
384
420
  if (!calls.length) throw new Error("No calls provided");
385
421
  return sendIntent({
386
- username: user.username || void 0,
387
422
  accountAddress: user.address,
388
423
  targetChain,
389
424
  calls,
@@ -519,11 +554,12 @@ function createOneAuthProvider(options) {
519
554
  set.delete(listener);
520
555
  if (set.size === 0) listeners.delete(event);
521
556
  },
522
- disconnect
557
+ disconnect,
558
+ setSession
523
559
  };
524
560
  }
525
561
 
526
562
  export {
527
563
  createOneAuthProvider
528
564
  };
529
- //# sourceMappingURL=chunk-UXBBB7AV.mjs.map
565
+ //# sourceMappingURL=chunk-E4YZS7FZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider.ts"],"sourcesContent":["/**\n * EIP-1193 JSON-RPC provider factory for the 1auth passkey authentication system.\n *\n * Creates a browser-side provider object that implements the EIP-1193 standard so any\n * Ethereum library (ethers, viem, wagmi) can use 1auth passkey signing and cross-chain\n * intent execution without modification. All transaction signing is delegated to the\n * passkey service rather than holding private keys in the browser.\n *\n * Supported RPC methods:\n * - eth_chainId, eth_accounts, eth_requestAccounts\n * - personal_sign, eth_sign, eth_signTypedData, eth_signTypedData_v4\n * - eth_sendTransaction\n * - wallet_connect, wallet_disconnect, wallet_switchEthereumChain\n * - wallet_sendCalls, wallet_getCallsStatus, wallet_getCallsHistory (EIP-5792)\n * - wallet_getCapabilities, wallet_getAssets\n *\n * @module\n */\n\nimport {\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, IntentTokenRequest, SignerType } 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 address: Address;\n /** Absent = legacy passkey user; populated on new sessions. */\n signerType?: SignerType;\n /** Wagmi connector id for EOA sessions. Iframe-side lookup uses this. */\n connectorId?: string;\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 * Bind the active session in-memory and persist it to `localStorage`.\n *\n * Used by {@link createOneAuthConnection} to hand a freshly connected session\n * to the provider the instant `connect()` resolves — before the app has\n * written `1auth-user` itself. This closes a race where a provider built right\n * after connect would read stale/empty storage and default an EOA session to\n * passkey intents. Passing `null` clears the session (same effect as\n * `disconnect()` minus the events).\n *\n * Existing `createOneAuthProvider` consumers never call this, so their\n * behavior is unchanged: `getStoredUser` falls back to the localStorage read.\n */\n setSession: (\n session:\n | { address: Address; signerType?: SignerType; connectorId?: string }\n | null,\n ) => 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};\n\nconst DEFAULT_STORAGE_KEY = \"1auth-user\";\n\n/**\n * Creates an EIP-1193 compatible JSON-RPC provider backed by 1auth passkey authentication.\n *\n * The returned provider object can be used anywhere a standard Ethereum provider is\n * accepted (e.g. passed to `createWalletClient` in viem, used as `window.ethereum`, or\n * supplied to ethers.js `BrowserProvider`). Connection state (the account address) is\n * persisted in `localStorage` under the configured `storageKey`.\n *\n * @param options - Provider configuration\n * @param options.client - Configured `OneAuthClient` instance used to open auth/sign dialogs\n * @param options.chainId - Default chain ID the provider reports via `eth_chainId`\n * @param options.storageKey - localStorage key for persisting the connected user.\n * Defaults to `\"1auth-user\"`. Override to support multiple concurrent connections.\n * @param options.closeOn - Controls when the signing dialog closes and shows the \"Done\" button.\n * `\"preconfirmed\"` (default) closes as soon as the intent is confirmed by the orchestrator.\n * The `waitForHash` option independently controls whether the SDK continues polling for\n * a transaction hash after the dialog closes.\n * @param options.waitForHash - When true, polls the intent status until a transaction hash\n * is available before resolving `eth_sendTransaction` / `wallet_sendCalls`. Defaults to true.\n * @param options.hashTimeoutMs - Maximum milliseconds to wait for a transaction hash.\n * Passed directly to the passkey service intent submission.\n * @param options.hashIntervalMs - Polling interval in milliseconds when waiting for a hash.\n * Passed directly to the passkey service intent submission.\n * @returns An EIP-1193 provider with `request`, `on`, `removeListener`, and `disconnect`.\n *\n * @example\n * ```typescript\n * import { OneAuthClient } from \"@rhinestone/1auth\";\n * import { createOneAuthProvider } from \"@rhinestone/1auth\";\n *\n * const client = new OneAuthClient({ clientId: \"my-app\" });\n * const provider = createOneAuthProvider({ client, chainId: 8453 }); // Base\n *\n * // Use with viem\n * import { createWalletClient, custom } from \"viem\";\n * import { base } from \"viem/chains\";\n * const walletClient = createWalletClient({ chain: base, transport: custom(provider) });\n *\n * // Standard EIP-1193 usage\n * const accounts = await provider.request({ method: \"eth_requestAccounts\" });\n * provider.on(\"accountsChanged\", (accounts) => console.log(accounts));\n * ```\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 // In-memory session override. When set (via setSession), it takes precedence\n // over the localStorage read so a just-connected provider immediately knows\n // whether it's driving an EOA (forward to wallet, no intents) or a passkey\n // (intents). `undefined` = not bound → fall back to localStorage.\n //\n // Cleared to `undefined` (never pinned to a \"signed out\" sentinel) on\n // disconnect/setSession(null): those also wipe localStorage, so falling back\n // to the (now empty) storage yields null anyway — and it lets the built-in\n // connect() path repopulate via setStoredUser without a stale override\n // shadowing it. Pinning it null here would break reconnect for plain\n // createOneAuthProvider consumers.\n let sessionOverride: StoredUser | undefined;\n\n /**\n * Dispatches an event to all registered listeners for the given event name.\n *\n * @param event - EIP-1193 event name (e.g. \"accountsChanged\", \"chainChanged\")\n * @param args - Arguments forwarded to each listener callback\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 /**\n * Reads the connected user from localStorage.\n *\n * Returns null in non-browser environments (SSR) and when no user has been\n * persisted yet, or when the stored value is malformed.\n *\n * @returns The stored user object, or null if unavailable\n */\n const getStoredUser = (): StoredUser | null => {\n // A set in-memory binding wins over storage (so a just-connected session\n // routes correctly before the app persists it). `undefined` = unbound, so\n // read from storage — this is also the state after disconnect, letting the\n // built-in connect() repopulate storage and be seen on the next call.\n if (sessionOverride !== undefined) return sessionOverride;\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 /**\n * Persists the connected user to localStorage.\n *\n * No-ops in non-browser (SSR) environments.\n *\n * @param user - User object with at minimum an `address` field\n */\n const setStoredUser = (user: StoredUser) => {\n if (typeof window === \"undefined\") return;\n localStorage.setItem(storageKey, JSON.stringify(user));\n };\n\n /**\n * Removes the connected user from localStorage, effectively logging them out\n * from the provider's perspective.\n *\n * No-ops in non-browser (SSR) environments.\n */\n const clearStoredUser = () => {\n if (typeof window === \"undefined\") return;\n localStorage.removeItem(storageKey);\n };\n\n /**\n * Connects the user by returning a cached address or opening the auth flow.\n *\n * Returns the dapp-side cached address immediately when present. Otherwise\n * opens the auth modal (`/dialog/auth`) directly — the iframe-side\n * returning-user UX lives inside that flow now. On success the address is\n * stored in localStorage and `accountsChanged` / `connect` events are emitted.\n *\n * @returns Array containing the single connected account address\n * @throws If the user cancels or authentication fails\n */\n const connect = async (): Promise<Address[]> => {\n const stored = getStoredUser();\n if (stored) {\n return [stored.address];\n }\n\n const authResult = await client.authWithModal();\n if (!authResult.success) {\n throw new Error(authResult.error?.message || \"Authentication failed\");\n }\n const address = authResult.user?.address;\n const signerType = authResult.signerType;\n\n if (!address) {\n throw new Error(\"No account address available\");\n }\n\n setStoredUser({ address, signerType });\n emit(\"accountsChanged\", [address]);\n emit(\"connect\", { chainId: numberToHex(chainId) });\n return [address];\n };\n\n /**\n * Disconnects the current user by clearing persisted state and emitting events.\n *\n * Emits `accountsChanged` with an empty array and `disconnect` so that consumers\n * (e.g. wagmi) can update their state accordingly.\n */\n const disconnect = async () => {\n sessionOverride = undefined;\n clearStoredUser();\n emit(\"accountsChanged\", []);\n emit(\"disconnect\");\n };\n\n /**\n * Bind (or clear) the active session in memory and mirror it to localStorage.\n * See {@link OneAuthProvider.setSession}.\n */\n const setSession = (\n session:\n | { address: Address; signerType?: SignerType; connectorId?: string }\n | null,\n ) => {\n if (!session) {\n sessionOverride = undefined;\n clearStoredUser();\n emit(\"accountsChanged\", []);\n emit(\"disconnect\");\n return;\n }\n sessionOverride = {\n address: session.address,\n signerType: session.signerType,\n connectorId: session.connectorId,\n };\n setStoredUser(sessionOverride);\n emit(\"accountsChanged\", [session.address]);\n emit(\"connect\", { chainId: numberToHex(chainId) });\n };\n\n /**\n * Returns the currently connected user, triggering the connect flow if needed.\n *\n * Used internally by methods that require an authenticated session (e.g. signing,\n * sending transactions) to guarantee a user is available before proceeding.\n *\n * @returns The stored user object with at minimum an `address` field\n * @throws If connecting fails and no address can be resolved\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 /**\n * Read an optional wallet_getAssets account address override from RPC params.\n */\n const getAssetsAccountAddress = (\n assetsParams?: unknown[] | Record<string, unknown>,\n ): string | undefined => {\n const raw = Array.isArray(assetsParams) ? assetsParams[0] : assetsParams;\n if (typeof raw === \"string\" && raw.trim()) return raw.trim();\n if (!raw || typeof raw !== \"object\") return undefined;\n\n const request = raw as Record<string, unknown>;\n const candidates = [\n request.accountAddress,\n request.address,\n ];\n for (const candidate of candidates) {\n if (typeof candidate === \"string\" && candidate.trim()) {\n return candidate.trim();\n }\n }\n return undefined;\n };\n\n /**\n * Parses a chain ID value that may arrive as a hex string, decimal string, or number.\n *\n * Handles both `\"0x1\"` (hex) and `\"1\"` / `1` (decimal) representations that are\n * commonly mixed across different wallet_switchEthereumChain implementations.\n *\n * @param value - The raw chain ID value from RPC params\n * @returns The numeric chain ID, or undefined if the value cannot be parsed\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 /**\n * Normalizes a transaction value to a decimal string expected by the intent service.\n *\n * Handles the various formats callers may provide: `bigint`, `number`, hex strings\n * (e.g. `\"0x38d7ea4c68000\"`), or plain decimal strings. Returns undefined for null\n * or unsupported types, allowing callers to fall back to `\"0\"`.\n *\n * @param value - Raw value from an RPC transaction param\n * @returns Decimal string representation, or undefined if the input is not usable\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 return BigInt(value).toString();\n }\n return value;\n }\n return undefined;\n };\n\n /**\n * Converts raw EIP-1193 call objects into the strongly-typed `IntentCall` format\n * expected by the passkey service.\n *\n * Fills in missing `data` with `\"0x\"` and missing `value` with `\"0\"` so the\n * intent service never receives undefined fields.\n *\n * @param calls - Raw call objects from `wallet_sendCalls` or `eth_sendTransaction` params\n * @returns Array of normalized `IntentCall` objects\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 icon: c.icon as string | undefined,\n abi: c.abi as readonly unknown[] | undefined,\n };\n });\n };\n\n /**\n * Converts raw token request objects into the typed `IntentTokenRequest` format.\n *\n * Token requests allow callers to specify which tokens and amounts should be sourced\n * when funding a cross-chain intent (e.g. \"bridge 10 USDC from Optimism to Base\").\n * Accepts bigint or string/numeric amounts and normalizes them to bigint.\n *\n * @param requests - Raw token request array from RPC params, or a non-array value\n * @returns Array of typed token requests, or undefined if input is not an array\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 /**\n * Decodes a message that may be hex-encoded into a human-readable string.\n *\n * Some signers (e.g. MetaMask) encode plain-text messages as hex before passing them\n * to `personal_sign`. This helper reverses that encoding so users see the original\n * text in the signing dialog rather than a raw hex string.\n *\n * @param value - A plain string or hex-encoded string (`\"0x...\"`)\n * @returns The decoded UTF-8 string, or the original value if decoding fails\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 /**\n * Forwards a raw EIP-1193 request to the iframe at `/dialog/sign-eoa`, which\n * delegates to the active wagmi connector. The wallet's own prompt is the\n * review screen — no in-dialog review step for EOA sessions.\n */\n const forwardToWallet = async (\n method: string,\n params?: unknown[] | Record<string, unknown>,\n expectedAddress?: Address,\n ): Promise<unknown> => {\n const result = await client.requestWithWallet({\n method,\n params,\n expectedAddress,\n });\n if (!result.success) {\n const err = new Error(result.error.message);\n (err as Error & { code?: string }).code = result.error.code;\n throw err;\n }\n return result.result;\n };\n\n /**\n * EIP-1193 methods forwarded verbatim to the EOA connector. All other methods\n * (eth_accounts, eth_chainId, wallet_connect, wallet_disconnect,\n * wallet_switchEthereumChain, wallet_getCapabilities/Assets) are handled\n * locally against the stored session even for EOA sessions.\n */\n const EOA_FORWARDED_METHODS = new Set([\n \"personal_sign\",\n \"eth_sign\",\n \"eth_signTypedData\",\n \"eth_signTypedData_v3\",\n \"eth_signTypedData_v4\",\n \"eth_sendTransaction\",\n \"wallet_sendCalls\",\n \"wallet_getCallsStatus\",\n ]);\n\n /**\n * Signs an arbitrary string message via the passkey service.\n *\n * Ensures a user session exists before delegating to `OneAuthClient.signMessage`.\n * The raw WebAuthn signature components are ABI-encoded for ERC-1271 on-chain\n * verification before being returned.\n *\n * @param message - Plain-text message to sign\n * @returns ABI-encoded WebAuthn signature as a hex string\n * @throws If no user session is available or the signing dialog is cancelled\n */\n const signMessage = async (message: string) => {\n const user = await ensureUser();\n if (!user.address) {\n throw new Error(\"Account address required for signing.\");\n }\n const result = await client.signMessage({\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 /**\n * Signs EIP-712 typed data via the passkey service.\n *\n * Accepts either a parsed typed-data object or a JSON string (as some libraries\n * serialize the payload before passing it through the provider). The raw WebAuthn\n * signature is ABI-encoded for ERC-1271 on-chain verification.\n *\n * @param typedData - EIP-712 typed data object or its JSON string representation\n * @returns ABI-encoded WebAuthn signature as a hex string\n * @throws If no user session is available or the signing dialog is cancelled\n */\n const signTypedData = async (typedData: unknown) => {\n const user = await ensureUser();\n if (!user.address) {\n throw new Error(\"Account address required for signing.\");\n }\n const data =\n typeof typedData === \"string\" ? JSON.parse(typedData) : typedData;\n const result = await client.signTypedData({\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 /**\n * Extracts the fields required by `OneAuthClient.sendIntent` from a richer payload.\n *\n * This thin wrapper makes it explicit which fields travel to the intent service and\n * which are local concerns (e.g. `sourceChainId` is handled at the call site).\n *\n * @param payload - Full intent payload including user identity and transaction data\n * @returns Subset of fields forwarded to the intent service\n */\n const resolveIntentPayload = (payload: {\n accountAddress: Address;\n targetChain: number;\n calls: IntentCall[];\n tokenRequests?: IntentTokenRequest[];\n }) => ({\n accountAddress: payload.accountAddress,\n targetChain: payload.targetChain,\n calls: payload.calls,\n tokenRequests: payload.tokenRequests,\n });\n\n /**\n * Submits a cross-chain intent through the passkey service and returns the intent ID.\n *\n * Opens the signing dialog, waits for user confirmation, then polls the orchestrator\n * until a transaction hash is available (controlled by `waitForHash` and the timeout\n * options). The returned intent ID is used as the `callsId` in EIP-5792 responses.\n *\n * The dialog closes based on `closeOn` (defaults to `\"preconfirmed\"`). The `waitForHash`\n * option independently polls for a transaction hash after the dialog closes.\n *\n * @param payload - Intent details including target chain, calls, token requests, and\n * an optional `sourceChainId` for cross-chain bridging\n * @returns The orchestrator intent ID string\n * @throws If the user rejects the signing dialog or the intent fails\n */\n const sendIntent = async (payload: {\n accountAddress: Address;\n targetChain: number;\n calls: IntentCall[];\n tokenRequests?: IntentTokenRequest[];\n sourceChainId?: number;\n }) => {\n const intentPayload = resolveIntentPayload(payload);\n const result = await client.sendIntent({\n ...intentPayload,\n tokenRequests: payload.tokenRequests,\n sourceChainId: payload.sourceChainId,\n closeOn: options.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 accountMismatchError = (): Error & { code?: string } => {\n const err = new Error(\n \"Requested signer does not match the active wallet connection.\",\n ) as Error & { code?: string };\n err.code = \"ACCOUNT_MISMATCH\";\n return err;\n };\n\n const sameAddress = (a: unknown, b: string): boolean =>\n typeof a === \"string\" && a.toLowerCase() === b.toLowerCase();\n\n /**\n * Some wallets (MetaMask, Rabby) reject `eth_sendTransaction` /\n * `wallet_sendCalls` / `personal_sign` / `eth_signTypedData_v4` when the\n * signer address is missing. The dapp doesn't know the EOA address, so the\n * SDK fills it in from the stored session.\n *\n * If the caller supplies a `from` (or address arg) that differs from the\n * connected EOA, we throw `ACCOUNT_MISMATCH` rather than letting the\n * caller's value win. A dapp asking the wallet to sign on behalf of a\n * different account than the user connected is a trust-boundary violation\n * — the user reviewed and approved exactly one address, not whatever the\n * dapp later substitutes.\n */\n const injectEoaSigner = (\n method: string,\n params: unknown[] | Record<string, unknown> | undefined,\n address: Address,\n ): unknown[] | Record<string, unknown> | undefined => {\n const list = Array.isArray(params) ? params.slice() : params;\n if (!Array.isArray(list)) return params;\n\n if (method === \"eth_sendTransaction\") {\n const first = (list[0] || {}) as Record<string, unknown>;\n if (first.from !== undefined && !sameAddress(first.from, address)) {\n throw accountMismatchError();\n }\n list[0] = { ...first, from: address };\n return list;\n }\n if (method === \"wallet_sendCalls\") {\n const first = (list[0] || {}) as Record<string, unknown>;\n if (first.from !== undefined && !sameAddress(first.from, address)) {\n throw accountMismatchError();\n }\n // EIP-5792 lets each call carry its own `from`. Validate every one —\n // a single mismatched call would otherwise sneak through unchecked.\n const calls = first.calls;\n if (Array.isArray(calls)) {\n for (const call of calls) {\n if (!call || typeof call !== \"object\") continue;\n const callFrom = (call as Record<string, unknown>).from;\n if (callFrom !== undefined && !sameAddress(callFrom, address)) {\n throw accountMismatchError();\n }\n }\n }\n list[0] = { ...first, from: address };\n return list;\n }\n if (method === \"personal_sign\") {\n // personal_sign(message, address) — fill address if absent.\n if (list[1] !== undefined && !sameAddress(list[1], address)) {\n throw accountMismatchError();\n }\n if (list[0] && list[1] === undefined) list[1] = address;\n return list;\n }\n if (\n method === \"eth_sign\" ||\n method === \"eth_signTypedData\" ||\n method === \"eth_signTypedData_v3\" ||\n method === \"eth_signTypedData_v4\"\n ) {\n // signTypedData(address, typedData) — fill address if absent.\n if (list[0] !== undefined && !sameAddress(list[0], address)) {\n throw accountMismatchError();\n }\n if (list[0] === undefined && list[1] !== undefined) list[0] = address;\n return list;\n }\n return list;\n };\n\n // EIP-5792 batches submitted on EOA sessions, keyed by the returned id so\n // wallet_getCallsStatus can answer without hitting the wallet (most EOA\n // wallets don't implement 5792). Lost on reload — getCallsStatus tolerates a\n // miss. ponytail: in-memory is fine; the id IS the last tx hash, so a caller\n // that lost the map can still fetch the receipt itself.\n const eoaBatches = new Map<string, string[]>();\n\n /**\n * EOA `wallet_sendCalls`: most EOA wallets don't implement EIP-5792, and an\n * EOA can't batch atomically anyway, so send each call as a sequential\n * `eth_sendTransaction` (the standard wagmi/RainbowKit fallback). Returns the\n * last tx hash as the batch id — matching the string-id shape the passkey\n * path returns.\n */\n const sendCallsEoa = async (\n params: unknown[] | Record<string, unknown> | undefined,\n address: Address,\n ): Promise<string> => {\n // Reuse injectEoaSigner for the account-mismatch validation, then decompose.\n const validated = injectEoaSigner(\"wallet_sendCalls\", params, address);\n const payload = (Array.isArray(validated) ? validated[0] : {}) as Record<string, unknown>;\n const calls = Array.isArray(payload.calls) ? payload.calls : [];\n if (!calls.length) throw new Error(\"No calls provided\");\n const batchChainId = payload.chainId;\n const hashes: string[] = [];\n for (const raw of calls) {\n const call = (raw || {}) as Record<string, unknown>;\n const tx: Record<string, unknown> = { from: address, to: call.to };\n if (call.data !== undefined) tx.data = call.data;\n if (call.value !== undefined) tx.value = call.value;\n const callChain = call.chainId ?? batchChainId;\n if (callChain !== undefined) tx.chainId = callChain;\n const hash = await forwardToWallet(\"eth_sendTransaction\", [tx], address);\n hashes.push(String(hash));\n }\n const id = hashes[hashes.length - 1];\n eoaBatches.set(id, hashes);\n return id;\n };\n\n /** EOA `wallet_getCallsStatus`: answer from the submitted hashes. */\n const getCallsStatusEoa = (callsId: unknown) => {\n if (!callsId || typeof callsId !== \"string\") {\n throw new Error(\"callsId is required\");\n }\n const hashes = eoaBatches.get(callsId) ?? [callsId];\n // CONFIRMED is submission-optimistic — eth_sendTransaction resolves on\n // submission, and we don't re-poll the chain here. Receipts carry the real\n // hashes; a caller wanting finality can watch them. ponytail: no receipt\n // watcher — the EOA's own wallet already showed the confirmation UI.\n return {\n status: \"CONFIRMED\",\n receipts: hashes.map((transactionHash) => ({ transactionHash })),\n };\n };\n\n const request = async ({ method, params }: ProviderRequest) => {\n // For sign/tx methods, resolve the user first — this opens the auth modal\n // on the very first call so we know the signerType before deciding\n // between the passkey path and forwarding to the wagmi connector. Local-\n // only methods (eth_accounts, eth_chainId, wallet_switchEthereumChain,\n // etc.) fall through to the switch below and read stored state directly.\n if (EOA_FORWARDED_METHODS.has(method)) {\n const user = await ensureUser();\n if (user.signerType === \"eoa\") {\n // EIP-5792 isn't universally supported by EOA wallets — handle the\n // batch methods locally instead of forwarding them blindly.\n if (method === \"wallet_sendCalls\") {\n return sendCallsEoa(params, user.address);\n }\n if (method === \"wallet_getCallsStatus\") {\n const list = Array.isArray(params) ? params : [];\n return getCallsStatusEoa(list[0]);\n }\n return forwardToWallet(\n method,\n injectEoaSigner(method, params, user.address),\n user.address,\n );\n }\n }\n\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 const stored = getStoredUser();\n if (stored?.signerType === \"eoa\") {\n await forwardToWallet(method, params, stored.address);\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 // personal_sign param order varies: some callers send [message, address],\n // others send [hexEncodedMessage, address]. When the first param is hex and\n // the second is a non-hex string we treat the second as the plain message\n // (MetaMask-style). Otherwise we always decode the first param.\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 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 accountAddress: user.address,\n targetChain,\n calls,\n tokenRequests,\n sourceChainId,\n });\n }\n case \"wallet_getCapabilities\": {\n const stored = getStoredUser();\n if (stored?.signerType === \"eoa\") {\n return {};\n }\n\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 // All supported chains advertise atomic batching, gasless transactions via\n // paymasters, and cross-chain auxiliary funds (EIP-5792 capability keys).\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 explicitAccountAddress = getAssetsAccountAddress(params);\n const user = explicitAccountAddress ? null : await ensureUser();\n // The portfolio endpoint resolves identifiers via resolveUserWhere,\n // and the current SDK account model is address-first. Explicit params\n // let app-level verified sessions query balances without relying on\n // the provider's localStorage cache, while connected EIP-1193 consumers\n // still work with no params.\n const accountAddress = explicitAccountAddress || user?.address;\n if (!accountAddress) {\n throw new Error(\"wallet_getAssets requires accountAddress or a connected account\");\n }\n return client.getAssets({ accountAddress: accountAddress as Address });\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 status strings.\n // Both \"failed\" and \"expired\" map to \"CONFIRMED\" because EIP-5792 uses receipts\n // (and a 0x0 status code) to communicate failure — there is no \"FAILED\" state.\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 // 0x1 = success, 0x0 = reverted/failed — mirrors EVM receipt status\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 setSession,\n };\n}\n"],"mappings":"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","names":["request","chainId","data","options"]}
@@ -1,4 +1,4 @@
1
- import { P as PasskeyProviderConfig, S as SponsorshipConfig, aa as ThemeConfig, a6 as GetAssetsOptions, a9 as AssetsResponse, v as AuthWithModalOptions, A as AuthResult, L as LoginWithModalOptions, w as CreateAccountWithModalOptions, y as ConnectResult, ad as CheckConsentOptions, ae as CheckConsentResult, af as RequestConsentOptions, ag as RequestConsentResult, ah as GrantPermissionsOptions, ai as GrantPermissionsResult, aj as ListSessionGrantsOptions, ak as ListSessionGrantsResult, z as AuthenticateOptions, B as AuthenticateResult, m as SigningRequestOptions, n as SigningResult, Y as SendIntentOptions, i as SendIntentResult, aq as SendBatchIntentOptions, ar as SendBatchIntentResult, a3 as IntentHistoryOptions, a5 as IntentHistoryResult, F as SignMessageOptions, G as SignMessageResult, J as SignTypedDataOptions, K as SignTypedDataResult, E as EmbedOptions, t as PasskeyCredential } from './types-C0jKNT_t.mjs';
1
+ import { P as PasskeyProviderConfig, S as SponsorshipConfig, T as ThemeConfig, a7 as GetAssetsOptions, aa as AssetsResponse, x as AuthWithModalOptions, A as AuthResult, L as LoginWithModalOptions, y as CreateAccountWithModalOptions, z as ConnectResult, ad as CheckConsentOptions, ae as CheckConsentResult, af as RequestConsentOptions, ag as RequestConsentResult, ah as GrantPermissionsOptions, ai as GrantPermissionsResult, aj as ListSessionGrantsOptions, ak as ListSessionGrantsResult, B as AuthenticateOptions, D as AuthenticateResult, o as SigningRequestOptions, p as SigningResult, _ as SendIntentOptions, j as SendIntentResult, aq as SendBatchIntentOptions, ar as SendBatchIntentResult, a4 as IntentHistoryOptions, a6 as IntentHistoryResult, G as SignMessageOptions, J as SignMessageResult, K as SignTypedDataOptions, M as SignTypedDataResult, E as EmbedOptions, v as PasskeyCredential } from './types-Dzm5lZK-.mjs';
2
2
 
3
3
  declare class OneAuthClient {
4
4
  private config;
@@ -179,7 +179,6 @@ declare class OneAuthClient {
179
179
  * call — the modal shows the appropriate flow based on whether the user
180
180
  * has a passkey registered.
181
181
  *
182
- * @param options.username - Pre-fill the username field
183
182
  * @param options.theme - Override the theme for this modal invocation
184
183
  * @param options.oauthEnabled - Set to false to hide OAuth sign-in buttons
185
184
  * @param options.flow - Force the login or account-creation route instead
@@ -191,7 +190,7 @@ declare class OneAuthClient {
191
190
  * const result = await client.authWithModal();
192
191
  *
193
192
  * if (result.success) {
194
- * console.log('Signed in as:', result.user?.username);
193
+ * console.log('Signed in as:', result.user?.address);
195
194
  * console.log('Address:', result.user?.address); // typed `0x${string}`
196
195
  * } else if (result.error?.code === 'USER_CANCELLED') {
197
196
  * // User closed the modal
@@ -207,7 +206,6 @@ declare class OneAuthClient {
207
206
  * is creating a login session, for example after an app-level "Log in"
208
207
  * button. The result intentionally matches {@link authWithModal}.
209
208
  *
210
- * @param options.username - Optional account hint for the sign-in ceremony
211
209
  * @param options.theme - Override the theme for this modal invocation
212
210
  * @returns {@link AuthResult} with user details and typed address
213
211
  */
@@ -259,7 +257,7 @@ declare class OneAuthClient {
259
257
  * const result = await client.connectWithModal();
260
258
  *
261
259
  * if (result.success) {
262
- * console.log('Connected as:', result.user?.username);
260
+ * console.log('Connected as:', result.user?.address);
263
261
  * } else if (result.action === 'switch') {
264
262
  * // User needs to sign in first
265
263
  * const authResult = await client.authWithModal();
@@ -289,21 +287,25 @@ declare class OneAuthClient {
289
287
  * `{ success: false, action: "cancel", error: { code: "USER_CANCELLED", … } }`.
290
288
  *
291
289
  * @param options - Forwarded to whichever underlying modal is shown.
292
- * `username` and `oauthEnabled` only apply to the auth-modal fallback path.
290
+ * `oauthEnabled` only applies to the auth-modal fallback path.
293
291
  * @returns A {@link ConnectResult} discriminated union.
294
292
  *
295
293
  * @example
296
294
  * ```typescript
297
295
  * const result = await client.connect();
298
296
  * if (result.success) {
299
- * console.log("Connected as", result.user?.username ?? result.user?.address);
297
+ * console.log("Connected as", result.user?.address);
300
298
  * }
301
299
  * ```
302
300
  */
303
301
  connect(options?: {
304
- username?: string;
305
302
  theme?: ThemeConfig;
306
303
  oauthEnabled?: boolean;
304
+ /**
305
+ * Opt into "wallet as signer" mode for the auth-modal fallback — see
306
+ * {@link AuthWithModalOptions.eoaConnect}. Set by {@link createOneAuthConnection}.
307
+ */
308
+ eoaConnect?: boolean;
307
309
  }): Promise<ConnectResult>;
308
310
  /**
309
311
  * Open the account management dialog.
@@ -396,7 +398,7 @@ declare class OneAuthClient {
396
398
  * if (result.success && result.challenge) {
397
399
  * // Verify signature server-side
398
400
  * const isValid = await verifyOnServer(
399
- * result.user?.username,
401
+ * result.user?.address,
400
402
  * result.challenge.signature,
401
403
  * result.challenge.signedHash
402
404
  * );
@@ -424,7 +426,7 @@ declare class OneAuthClient {
424
426
  * @example
425
427
  * ```typescript
426
428
  * const result = await client.sendIntent({
427
- * username: 'alice',
429
+ * accountAddress: '0x...',
428
430
  * targetChain: 8453, // Base
429
431
  * calls: [
430
432
  * {
@@ -451,7 +453,7 @@ declare class OneAuthClient {
451
453
  * @example
452
454
  * ```typescript
453
455
  * const result = await client.sendBatchIntent({
454
- * username: 'alice',
456
+ * accountAddress: '0x...',
455
457
  * intents: [
456
458
  * {
457
459
  * targetChain: 8453, // Base
@@ -775,7 +777,7 @@ declare class OneAuthClient {
775
777
  * ```typescript
776
778
  * // Sign a login challenge
777
779
  * const result = await client.signMessage({
778
- * username: 'alice',
780
+ * accountAddress: '0x...',
779
781
  * message: `Sign in to MyApp\nTimestamp: ${Date.now()}\nNonce: ${crypto.randomUUID()}`,
780
782
  * description: 'Verify your identity to continue',
781
783
  * });
@@ -803,7 +805,7 @@ declare class OneAuthClient {
803
805
  * ```typescript
804
806
  * // Sign an ERC-2612 Permit
805
807
  * const result = await client.signTypedData({
806
- * username: 'alice',
808
+ * accountAddress: '0x...',
807
809
  * domain: {
808
810
  * name: 'Dai Stablecoin',
809
811
  * version: '1',
@@ -886,9 +888,12 @@ declare class OneAuthClient {
886
888
  removeEmbed(requestId: string): void;
887
889
  handleRedirectCallback(): Promise<SigningResult>;
888
890
  /**
889
- * Fetch passkeys for a user from the auth provider
891
+ * Fetch passkeys for a user from the auth provider.
892
+ *
893
+ * The account address is the sole identity; the backend `resolveUserWhere`
894
+ * accepts an address as a globally-unique path identifier.
890
895
  */
891
- getPasskeys(username: string): Promise<PasskeyCredential[]>;
896
+ getPasskeys(accountAddress: string): Promise<PasskeyCredential[]>;
892
897
  /**
893
898
  * Register a signing request with the passkey service and receive a
894
899
  * short-lived `requestId`.
@@ -898,7 +903,7 @@ declare class OneAuthClient {
898
903
  * them by `requestId` without relying on URL parameters alone. This avoids
899
904
  * exposing potentially large challenge payloads in query strings.
900
905
  *
901
- * @param options - The signing options (challenge, username, description, etc.).
906
+ * @param options - The signing options (challenge, accountAddress, description, etc.).
902
907
  * @param mode - How the dialog will be opened (`"popup"`, `"redirect"`, or `"embed"`).
903
908
  * @param redirectUrl - Only required for `"redirect"` mode; the URL the dialog
904
909
  * will navigate back to after signing.
@@ -1006,7 +1011,7 @@ declare class OneAuthClient {
1006
1011
  *
1007
1012
  * The connect flow is a lightweight "are you still you?" confirmation that
1008
1013
  * does not require a new passkey ceremony. On success, the dialog returns the
1009
- * user's username, address, and an `autoConnected` flag indicating whether the
1014
+ * user's address and an `autoConnected` flag indicating whether the
1010
1015
  * user had previously enabled auto-connect (in which case no UI was shown).
1011
1016
  *
1012
1017
  * On failure with `action: "switch"`, the caller should redirect to the full
@@ -1,4 +1,4 @@
1
- import { P as PasskeyProviderConfig, S as SponsorshipConfig, aa as ThemeConfig, a6 as GetAssetsOptions, a9 as AssetsResponse, v as AuthWithModalOptions, A as AuthResult, L as LoginWithModalOptions, w as CreateAccountWithModalOptions, y as ConnectResult, ad as CheckConsentOptions, ae as CheckConsentResult, af as RequestConsentOptions, ag as RequestConsentResult, ah as GrantPermissionsOptions, ai as GrantPermissionsResult, aj as ListSessionGrantsOptions, ak as ListSessionGrantsResult, z as AuthenticateOptions, B as AuthenticateResult, m as SigningRequestOptions, n as SigningResult, Y as SendIntentOptions, i as SendIntentResult, aq as SendBatchIntentOptions, ar as SendBatchIntentResult, a3 as IntentHistoryOptions, a5 as IntentHistoryResult, F as SignMessageOptions, G as SignMessageResult, J as SignTypedDataOptions, K as SignTypedDataResult, E as EmbedOptions, t as PasskeyCredential } from './types-C0jKNT_t.js';
1
+ import { P as PasskeyProviderConfig, S as SponsorshipConfig, T as ThemeConfig, a7 as GetAssetsOptions, aa as AssetsResponse, x as AuthWithModalOptions, A as AuthResult, L as LoginWithModalOptions, y as CreateAccountWithModalOptions, z as ConnectResult, ad as CheckConsentOptions, ae as CheckConsentResult, af as RequestConsentOptions, ag as RequestConsentResult, ah as GrantPermissionsOptions, ai as GrantPermissionsResult, aj as ListSessionGrantsOptions, ak as ListSessionGrantsResult, B as AuthenticateOptions, D as AuthenticateResult, o as SigningRequestOptions, p as SigningResult, _ as SendIntentOptions, j as SendIntentResult, aq as SendBatchIntentOptions, ar as SendBatchIntentResult, a4 as IntentHistoryOptions, a6 as IntentHistoryResult, G as SignMessageOptions, J as SignMessageResult, K as SignTypedDataOptions, M as SignTypedDataResult, E as EmbedOptions, v as PasskeyCredential } from './types-Dzm5lZK-.js';
2
2
 
3
3
  declare class OneAuthClient {
4
4
  private config;
@@ -179,7 +179,6 @@ declare class OneAuthClient {
179
179
  * call — the modal shows the appropriate flow based on whether the user
180
180
  * has a passkey registered.
181
181
  *
182
- * @param options.username - Pre-fill the username field
183
182
  * @param options.theme - Override the theme for this modal invocation
184
183
  * @param options.oauthEnabled - Set to false to hide OAuth sign-in buttons
185
184
  * @param options.flow - Force the login or account-creation route instead
@@ -191,7 +190,7 @@ declare class OneAuthClient {
191
190
  * const result = await client.authWithModal();
192
191
  *
193
192
  * if (result.success) {
194
- * console.log('Signed in as:', result.user?.username);
193
+ * console.log('Signed in as:', result.user?.address);
195
194
  * console.log('Address:', result.user?.address); // typed `0x${string}`
196
195
  * } else if (result.error?.code === 'USER_CANCELLED') {
197
196
  * // User closed the modal
@@ -207,7 +206,6 @@ declare class OneAuthClient {
207
206
  * is creating a login session, for example after an app-level "Log in"
208
207
  * button. The result intentionally matches {@link authWithModal}.
209
208
  *
210
- * @param options.username - Optional account hint for the sign-in ceremony
211
209
  * @param options.theme - Override the theme for this modal invocation
212
210
  * @returns {@link AuthResult} with user details and typed address
213
211
  */
@@ -259,7 +257,7 @@ declare class OneAuthClient {
259
257
  * const result = await client.connectWithModal();
260
258
  *
261
259
  * if (result.success) {
262
- * console.log('Connected as:', result.user?.username);
260
+ * console.log('Connected as:', result.user?.address);
263
261
  * } else if (result.action === 'switch') {
264
262
  * // User needs to sign in first
265
263
  * const authResult = await client.authWithModal();
@@ -289,21 +287,25 @@ declare class OneAuthClient {
289
287
  * `{ success: false, action: "cancel", error: { code: "USER_CANCELLED", … } }`.
290
288
  *
291
289
  * @param options - Forwarded to whichever underlying modal is shown.
292
- * `username` and `oauthEnabled` only apply to the auth-modal fallback path.
290
+ * `oauthEnabled` only applies to the auth-modal fallback path.
293
291
  * @returns A {@link ConnectResult} discriminated union.
294
292
  *
295
293
  * @example
296
294
  * ```typescript
297
295
  * const result = await client.connect();
298
296
  * if (result.success) {
299
- * console.log("Connected as", result.user?.username ?? result.user?.address);
297
+ * console.log("Connected as", result.user?.address);
300
298
  * }
301
299
  * ```
302
300
  */
303
301
  connect(options?: {
304
- username?: string;
305
302
  theme?: ThemeConfig;
306
303
  oauthEnabled?: boolean;
304
+ /**
305
+ * Opt into "wallet as signer" mode for the auth-modal fallback — see
306
+ * {@link AuthWithModalOptions.eoaConnect}. Set by {@link createOneAuthConnection}.
307
+ */
308
+ eoaConnect?: boolean;
307
309
  }): Promise<ConnectResult>;
308
310
  /**
309
311
  * Open the account management dialog.
@@ -396,7 +398,7 @@ declare class OneAuthClient {
396
398
  * if (result.success && result.challenge) {
397
399
  * // Verify signature server-side
398
400
  * const isValid = await verifyOnServer(
399
- * result.user?.username,
401
+ * result.user?.address,
400
402
  * result.challenge.signature,
401
403
  * result.challenge.signedHash
402
404
  * );
@@ -424,7 +426,7 @@ declare class OneAuthClient {
424
426
  * @example
425
427
  * ```typescript
426
428
  * const result = await client.sendIntent({
427
- * username: 'alice',
429
+ * accountAddress: '0x...',
428
430
  * targetChain: 8453, // Base
429
431
  * calls: [
430
432
  * {
@@ -451,7 +453,7 @@ declare class OneAuthClient {
451
453
  * @example
452
454
  * ```typescript
453
455
  * const result = await client.sendBatchIntent({
454
- * username: 'alice',
456
+ * accountAddress: '0x...',
455
457
  * intents: [
456
458
  * {
457
459
  * targetChain: 8453, // Base
@@ -775,7 +777,7 @@ declare class OneAuthClient {
775
777
  * ```typescript
776
778
  * // Sign a login challenge
777
779
  * const result = await client.signMessage({
778
- * username: 'alice',
780
+ * accountAddress: '0x...',
779
781
  * message: `Sign in to MyApp\nTimestamp: ${Date.now()}\nNonce: ${crypto.randomUUID()}`,
780
782
  * description: 'Verify your identity to continue',
781
783
  * });
@@ -803,7 +805,7 @@ declare class OneAuthClient {
803
805
  * ```typescript
804
806
  * // Sign an ERC-2612 Permit
805
807
  * const result = await client.signTypedData({
806
- * username: 'alice',
808
+ * accountAddress: '0x...',
807
809
  * domain: {
808
810
  * name: 'Dai Stablecoin',
809
811
  * version: '1',
@@ -886,9 +888,12 @@ declare class OneAuthClient {
886
888
  removeEmbed(requestId: string): void;
887
889
  handleRedirectCallback(): Promise<SigningResult>;
888
890
  /**
889
- * Fetch passkeys for a user from the auth provider
891
+ * Fetch passkeys for a user from the auth provider.
892
+ *
893
+ * The account address is the sole identity; the backend `resolveUserWhere`
894
+ * accepts an address as a globally-unique path identifier.
890
895
  */
891
- getPasskeys(username: string): Promise<PasskeyCredential[]>;
896
+ getPasskeys(accountAddress: string): Promise<PasskeyCredential[]>;
892
897
  /**
893
898
  * Register a signing request with the passkey service and receive a
894
899
  * short-lived `requestId`.
@@ -898,7 +903,7 @@ declare class OneAuthClient {
898
903
  * them by `requestId` without relying on URL parameters alone. This avoids
899
904
  * exposing potentially large challenge payloads in query strings.
900
905
  *
901
- * @param options - The signing options (challenge, username, description, etc.).
906
+ * @param options - The signing options (challenge, accountAddress, description, etc.).
902
907
  * @param mode - How the dialog will be opened (`"popup"`, `"redirect"`, or `"embed"`).
903
908
  * @param redirectUrl - Only required for `"redirect"` mode; the URL the dialog
904
909
  * will navigate back to after signing.
@@ -1006,7 +1011,7 @@ declare class OneAuthClient {
1006
1011
  *
1007
1012
  * The connect flow is a lightweight "are you still you?" confirmation that
1008
1013
  * does not require a new passkey ceremony. On success, the dialog returns the
1009
- * user's username, address, and an `autoConnected` flag indicating whether the
1014
+ * user's address and an `autoConnected` flag indicating whether the
1010
1015
  * user had previously enabled auto-connect (in which case no UI was shown).
1011
1016
  *
1012
1017
  * On failure with `action: "switch"`, the caller should redirect to the full
@@ -1,5 +1,5 @@
1
- import { P as PasskeyProviderConfig, S as SponsorshipConfig, H as HeadlessIntentOptions, a as HeadlessPrepareResult, b as HeadlessSubmitOptions, c as HeadlessSubmitResult, d as HeadlessIntentStatusResult, I as InstallSmartSessionOptions, e as InstallSmartSessionResult, f as SessionKeyHandle } from './types-C0jKNT_t.mjs';
2
- export { g as SmartSessionEnableRequest } from './types-C0jKNT_t.mjs';
1
+ import { P as PasskeyProviderConfig, S as SponsorshipConfig, H as HeadlessIntentOptions, a as HeadlessPrepareResult, b as HeadlessSubmitOptions, c as HeadlessSubmitResult, d as HeadlessIntentStatusResult, I as InstallSmartSessionOptions, e as InstallSmartSessionResult, f as SessionKeyHandle } from './types-Dzm5lZK-.mjs';
2
+ export { g as SmartSessionEnableRequest } from './types-Dzm5lZK-.mjs';
3
3
  import * as _rhinestone_sdk from '@rhinestone/sdk';
4
4
  import { Hex, Address } from 'viem';
5
5