@rhinestone/1auth 0.7.4 → 0.7.5
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-IHBVEU33.mjs → chunk-6AHEN3FA.mjs} +1 -1
- package/dist/chunk-6AHEN3FA.mjs.map +1 -0
- package/dist/{chunk-UXBBB7AV.mjs → chunk-6MUQKHAT.mjs} +7 -31
- package/dist/chunk-6MUQKHAT.mjs.map +1 -0
- package/dist/{client-CuASptX3.d.ts → client-BqKAd2RZ.d.mts} +17 -17
- package/dist/{client-D4HVy1KF.d.mts → client-C9mcj5jN.d.ts} +17 -17
- package/dist/headless.d.mts +2 -2
- package/dist/headless.d.ts +2 -2
- package/dist/headless.js +4 -6
- package/dist/headless.js.map +1 -1
- package/dist/headless.mjs +4 -6
- package/dist/headless.mjs.map +1 -1
- package/dist/index.d.mts +12 -21
- package/dist/index.d.ts +12 -21
- package/dist/index.js +44 -99
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +40 -71
- package/dist/index.mjs.map +1 -1
- package/dist/{provider-6JoziYDq.d.ts → provider-CCyUBseo.d.ts} +3 -3
- package/dist/{provider-CAQT7Gqx.d.mts → provider-CRhZVLg8.d.mts} +3 -3
- package/dist/react.d.mts +9 -4
- package/dist/react.d.ts +9 -4
- package/dist/react.js +4 -7
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +4 -7
- package/dist/react.mjs.map +1 -1
- package/dist/server.d.mts +2 -2
- package/dist/server.d.ts +2 -2
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +1 -1
- package/dist/{types-C0jKNT_t.d.mts → types-CbhPRY5s.d.mts} +23 -50
- package/dist/{types-C0jKNT_t.d.ts → types-CbhPRY5s.d.ts} +23 -50
- package/dist/{verify-CnOwPq78.d.ts → verify-DPJR_foR.d.ts} +4 -6
- package/dist/{verify-aWdi5O2z.d.mts → verify-DVYDJgOS.d.mts} +4 -6
- package/dist/wagmi.d.mts +3 -3
- package/dist/wagmi.d.ts +3 -3
- package/dist/wagmi.js +6 -30
- package/dist/wagmi.js.map +1 -1
- package/dist/wagmi.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-IHBVEU33.mjs.map +0 -1
- package/dist/chunk-UXBBB7AV.mjs.map +0 -1
|
@@ -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":[]}
|
|
@@ -42,21 +42,6 @@ function createOneAuthProvider(options) {
|
|
|
42
42
|
if (typeof window === "undefined") return;
|
|
43
43
|
localStorage.removeItem(storageKey);
|
|
44
44
|
};
|
|
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
45
|
const connect = async () => {
|
|
61
46
|
const stored = getStoredUser();
|
|
62
47
|
if (stored) {
|
|
@@ -66,16 +51,12 @@ function createOneAuthProvider(options) {
|
|
|
66
51
|
if (!authResult.success) {
|
|
67
52
|
throw new Error(authResult.error?.message || "Authentication failed");
|
|
68
53
|
}
|
|
69
|
-
const
|
|
70
|
-
let address = authResult.user?.address;
|
|
54
|
+
const address = authResult.user?.address;
|
|
71
55
|
const signerType = authResult.signerType;
|
|
72
|
-
if (!address && username) {
|
|
73
|
-
address = await resolveAccountAddress(username);
|
|
74
|
-
}
|
|
75
56
|
if (!address) {
|
|
76
57
|
throw new Error("No account address available");
|
|
77
58
|
}
|
|
78
|
-
setStoredUser({
|
|
59
|
+
setStoredUser({ address, signerType });
|
|
79
60
|
emit("accountsChanged", [address]);
|
|
80
61
|
emit("connect", { chainId: numberToHex(chainId) });
|
|
81
62
|
return [address];
|
|
@@ -189,11 +170,10 @@ function createOneAuthProvider(options) {
|
|
|
189
170
|
]);
|
|
190
171
|
const signMessage = async (message) => {
|
|
191
172
|
const user = await ensureUser();
|
|
192
|
-
if (!user.
|
|
193
|
-
throw new Error("
|
|
173
|
+
if (!user.address) {
|
|
174
|
+
throw new Error("Account address required for signing.");
|
|
194
175
|
}
|
|
195
176
|
const result = await client.signMessage({
|
|
196
|
-
username: user.username || void 0,
|
|
197
177
|
accountAddress: user.address,
|
|
198
178
|
message
|
|
199
179
|
});
|
|
@@ -204,12 +184,11 @@ function createOneAuthProvider(options) {
|
|
|
204
184
|
};
|
|
205
185
|
const signTypedData = async (typedData) => {
|
|
206
186
|
const user = await ensureUser();
|
|
207
|
-
if (!user.
|
|
208
|
-
throw new Error("
|
|
187
|
+
if (!user.address) {
|
|
188
|
+
throw new Error("Account address required for signing.");
|
|
209
189
|
}
|
|
210
190
|
const data = typeof typedData === "string" ? JSON.parse(typedData) : typedData;
|
|
211
191
|
const result = await client.signTypedData({
|
|
212
|
-
username: user.username || void 0,
|
|
213
192
|
accountAddress: user.address,
|
|
214
193
|
domain: data.domain,
|
|
215
194
|
types: data.types,
|
|
@@ -222,7 +201,6 @@ function createOneAuthProvider(options) {
|
|
|
222
201
|
return encodeWebAuthnSignature(result.signature);
|
|
223
202
|
};
|
|
224
203
|
const resolveIntentPayload = (payload) => ({
|
|
225
|
-
username: payload.username,
|
|
226
204
|
accountAddress: payload.accountAddress,
|
|
227
205
|
targetChain: payload.targetChain,
|
|
228
206
|
calls: payload.calls,
|
|
@@ -365,7 +343,6 @@ function createOneAuthProvider(options) {
|
|
|
365
343
|
const tokenRequests = normalizeTokenRequests(tx.tokenRequests);
|
|
366
344
|
const txSourceChainId = parseChainId(tx.sourceChainId);
|
|
367
345
|
return sendIntent({
|
|
368
|
-
username: user.username || void 0,
|
|
369
346
|
accountAddress: user.address,
|
|
370
347
|
targetChain,
|
|
371
348
|
calls,
|
|
@@ -383,7 +360,6 @@ function createOneAuthProvider(options) {
|
|
|
383
360
|
const sourceChainId = parseChainId(payload.sourceChainId);
|
|
384
361
|
if (!calls.length) throw new Error("No calls provided");
|
|
385
362
|
return sendIntent({
|
|
386
|
-
username: user.username || void 0,
|
|
387
363
|
accountAddress: user.address,
|
|
388
364
|
targetChain,
|
|
389
365
|
calls,
|
|
@@ -526,4 +502,4 @@ function createOneAuthProvider(options) {
|
|
|
526
502
|
export {
|
|
527
503
|
createOneAuthProvider
|
|
528
504
|
};
|
|
529
|
-
//# sourceMappingURL=chunk-
|
|
505
|
+
//# sourceMappingURL=chunk-6MUQKHAT.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\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 /**\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 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 clearStoredUser();\n emit(\"accountsChanged\", []);\n emit(\"disconnect\");\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 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 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 };\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-
|
|
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-CbhPRY5s.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?.
|
|
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?.
|
|
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,19 +287,18 @@ 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
|
-
* `
|
|
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?.
|
|
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;
|
|
307
304
|
}): Promise<ConnectResult>;
|
|
@@ -396,7 +393,7 @@ declare class OneAuthClient {
|
|
|
396
393
|
* if (result.success && result.challenge) {
|
|
397
394
|
* // Verify signature server-side
|
|
398
395
|
* const isValid = await verifyOnServer(
|
|
399
|
-
* result.user?.
|
|
396
|
+
* result.user?.address,
|
|
400
397
|
* result.challenge.signature,
|
|
401
398
|
* result.challenge.signedHash
|
|
402
399
|
* );
|
|
@@ -424,7 +421,7 @@ declare class OneAuthClient {
|
|
|
424
421
|
* @example
|
|
425
422
|
* ```typescript
|
|
426
423
|
* const result = await client.sendIntent({
|
|
427
|
-
*
|
|
424
|
+
* accountAddress: '0x...',
|
|
428
425
|
* targetChain: 8453, // Base
|
|
429
426
|
* calls: [
|
|
430
427
|
* {
|
|
@@ -451,7 +448,7 @@ declare class OneAuthClient {
|
|
|
451
448
|
* @example
|
|
452
449
|
* ```typescript
|
|
453
450
|
* const result = await client.sendBatchIntent({
|
|
454
|
-
*
|
|
451
|
+
* accountAddress: '0x...',
|
|
455
452
|
* intents: [
|
|
456
453
|
* {
|
|
457
454
|
* targetChain: 8453, // Base
|
|
@@ -775,7 +772,7 @@ declare class OneAuthClient {
|
|
|
775
772
|
* ```typescript
|
|
776
773
|
* // Sign a login challenge
|
|
777
774
|
* const result = await client.signMessage({
|
|
778
|
-
*
|
|
775
|
+
* accountAddress: '0x...',
|
|
779
776
|
* message: `Sign in to MyApp\nTimestamp: ${Date.now()}\nNonce: ${crypto.randomUUID()}`,
|
|
780
777
|
* description: 'Verify your identity to continue',
|
|
781
778
|
* });
|
|
@@ -803,7 +800,7 @@ declare class OneAuthClient {
|
|
|
803
800
|
* ```typescript
|
|
804
801
|
* // Sign an ERC-2612 Permit
|
|
805
802
|
* const result = await client.signTypedData({
|
|
806
|
-
*
|
|
803
|
+
* accountAddress: '0x...',
|
|
807
804
|
* domain: {
|
|
808
805
|
* name: 'Dai Stablecoin',
|
|
809
806
|
* version: '1',
|
|
@@ -886,9 +883,12 @@ declare class OneAuthClient {
|
|
|
886
883
|
removeEmbed(requestId: string): void;
|
|
887
884
|
handleRedirectCallback(): Promise<SigningResult>;
|
|
888
885
|
/**
|
|
889
|
-
* Fetch passkeys for a user from the auth provider
|
|
886
|
+
* Fetch passkeys for a user from the auth provider.
|
|
887
|
+
*
|
|
888
|
+
* The account address is the sole identity; the backend `resolveUserWhere`
|
|
889
|
+
* accepts an address as a globally-unique path identifier.
|
|
890
890
|
*/
|
|
891
|
-
getPasskeys(
|
|
891
|
+
getPasskeys(accountAddress: string): Promise<PasskeyCredential[]>;
|
|
892
892
|
/**
|
|
893
893
|
* Register a signing request with the passkey service and receive a
|
|
894
894
|
* short-lived `requestId`.
|
|
@@ -898,7 +898,7 @@ declare class OneAuthClient {
|
|
|
898
898
|
* them by `requestId` without relying on URL parameters alone. This avoids
|
|
899
899
|
* exposing potentially large challenge payloads in query strings.
|
|
900
900
|
*
|
|
901
|
-
* @param options - The signing options (challenge,
|
|
901
|
+
* @param options - The signing options (challenge, accountAddress, description, etc.).
|
|
902
902
|
* @param mode - How the dialog will be opened (`"popup"`, `"redirect"`, or `"embed"`).
|
|
903
903
|
* @param redirectUrl - Only required for `"redirect"` mode; the URL the dialog
|
|
904
904
|
* will navigate back to after signing.
|
|
@@ -1006,7 +1006,7 @@ declare class OneAuthClient {
|
|
|
1006
1006
|
*
|
|
1007
1007
|
* The connect flow is a lightweight "are you still you?" confirmation that
|
|
1008
1008
|
* does not require a new passkey ceremony. On success, the dialog returns the
|
|
1009
|
-
* user's
|
|
1009
|
+
* user's address and an `autoConnected` flag indicating whether the
|
|
1010
1010
|
* user had previously enabled auto-connect (in which case no UI was shown).
|
|
1011
1011
|
*
|
|
1012
1012
|
* 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-
|
|
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-CbhPRY5s.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?.
|
|
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?.
|
|
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,19 +287,18 @@ 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
|
-
* `
|
|
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?.
|
|
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;
|
|
307
304
|
}): Promise<ConnectResult>;
|
|
@@ -396,7 +393,7 @@ declare class OneAuthClient {
|
|
|
396
393
|
* if (result.success && result.challenge) {
|
|
397
394
|
* // Verify signature server-side
|
|
398
395
|
* const isValid = await verifyOnServer(
|
|
399
|
-
* result.user?.
|
|
396
|
+
* result.user?.address,
|
|
400
397
|
* result.challenge.signature,
|
|
401
398
|
* result.challenge.signedHash
|
|
402
399
|
* );
|
|
@@ -424,7 +421,7 @@ declare class OneAuthClient {
|
|
|
424
421
|
* @example
|
|
425
422
|
* ```typescript
|
|
426
423
|
* const result = await client.sendIntent({
|
|
427
|
-
*
|
|
424
|
+
* accountAddress: '0x...',
|
|
428
425
|
* targetChain: 8453, // Base
|
|
429
426
|
* calls: [
|
|
430
427
|
* {
|
|
@@ -451,7 +448,7 @@ declare class OneAuthClient {
|
|
|
451
448
|
* @example
|
|
452
449
|
* ```typescript
|
|
453
450
|
* const result = await client.sendBatchIntent({
|
|
454
|
-
*
|
|
451
|
+
* accountAddress: '0x...',
|
|
455
452
|
* intents: [
|
|
456
453
|
* {
|
|
457
454
|
* targetChain: 8453, // Base
|
|
@@ -775,7 +772,7 @@ declare class OneAuthClient {
|
|
|
775
772
|
* ```typescript
|
|
776
773
|
* // Sign a login challenge
|
|
777
774
|
* const result = await client.signMessage({
|
|
778
|
-
*
|
|
775
|
+
* accountAddress: '0x...',
|
|
779
776
|
* message: `Sign in to MyApp\nTimestamp: ${Date.now()}\nNonce: ${crypto.randomUUID()}`,
|
|
780
777
|
* description: 'Verify your identity to continue',
|
|
781
778
|
* });
|
|
@@ -803,7 +800,7 @@ declare class OneAuthClient {
|
|
|
803
800
|
* ```typescript
|
|
804
801
|
* // Sign an ERC-2612 Permit
|
|
805
802
|
* const result = await client.signTypedData({
|
|
806
|
-
*
|
|
803
|
+
* accountAddress: '0x...',
|
|
807
804
|
* domain: {
|
|
808
805
|
* name: 'Dai Stablecoin',
|
|
809
806
|
* version: '1',
|
|
@@ -886,9 +883,12 @@ declare class OneAuthClient {
|
|
|
886
883
|
removeEmbed(requestId: string): void;
|
|
887
884
|
handleRedirectCallback(): Promise<SigningResult>;
|
|
888
885
|
/**
|
|
889
|
-
* Fetch passkeys for a user from the auth provider
|
|
886
|
+
* Fetch passkeys for a user from the auth provider.
|
|
887
|
+
*
|
|
888
|
+
* The account address is the sole identity; the backend `resolveUserWhere`
|
|
889
|
+
* accepts an address as a globally-unique path identifier.
|
|
890
890
|
*/
|
|
891
|
-
getPasskeys(
|
|
891
|
+
getPasskeys(accountAddress: string): Promise<PasskeyCredential[]>;
|
|
892
892
|
/**
|
|
893
893
|
* Register a signing request with the passkey service and receive a
|
|
894
894
|
* short-lived `requestId`.
|
|
@@ -898,7 +898,7 @@ declare class OneAuthClient {
|
|
|
898
898
|
* them by `requestId` without relying on URL parameters alone. This avoids
|
|
899
899
|
* exposing potentially large challenge payloads in query strings.
|
|
900
900
|
*
|
|
901
|
-
* @param options - The signing options (challenge,
|
|
901
|
+
* @param options - The signing options (challenge, accountAddress, description, etc.).
|
|
902
902
|
* @param mode - How the dialog will be opened (`"popup"`, `"redirect"`, or `"embed"`).
|
|
903
903
|
* @param redirectUrl - Only required for `"redirect"` mode; the URL the dialog
|
|
904
904
|
* will navigate back to after signing.
|
|
@@ -1006,7 +1006,7 @@ declare class OneAuthClient {
|
|
|
1006
1006
|
*
|
|
1007
1007
|
* The connect flow is a lightweight "are you still you?" confirmation that
|
|
1008
1008
|
* does not require a new passkey ceremony. On success, the dialog returns the
|
|
1009
|
-
* user's
|
|
1009
|
+
* user's address and an `autoConnected` flag indicating whether the
|
|
1010
1010
|
* user had previously enabled auto-connect (in which case no UI was shown).
|
|
1011
1011
|
*
|
|
1012
1012
|
* On failure with `action: "switch"`, the caller should redirect to the full
|
package/dist/headless.d.mts
CHANGED
|
@@ -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-
|
|
2
|
-
export { g as SmartSessionEnableRequest } from './types-
|
|
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-CbhPRY5s.mjs';
|
|
2
|
+
export { g as SmartSessionEnableRequest } from './types-CbhPRY5s.mjs';
|
|
3
3
|
import * as _rhinestone_sdk from '@rhinestone/sdk';
|
|
4
4
|
import { Hex, Address } from 'viem';
|
|
5
5
|
|
package/dist/headless.d.ts
CHANGED
|
@@ -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-
|
|
2
|
-
export { g as SmartSessionEnableRequest } from './types-
|
|
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-CbhPRY5s.js';
|
|
2
|
+
export { g as SmartSessionEnableRequest } from './types-CbhPRY5s.js';
|
|
3
3
|
import * as _rhinestone_sdk from '@rhinestone/sdk';
|
|
4
4
|
import { Hex, Address } from 'viem';
|
|
5
5
|
|
package/dist/headless.js
CHANGED
|
@@ -153,8 +153,8 @@ var OneAuthHeadlessClient = class {
|
|
|
153
153
|
* encoding signatures and submitting via {@link submitIntent}.
|
|
154
154
|
*/
|
|
155
155
|
async prepareIntent(options) {
|
|
156
|
-
if (!options.
|
|
157
|
-
throw new Error("prepareIntent requires
|
|
156
|
+
if (!options.accountAddress) {
|
|
157
|
+
throw new Error("prepareIntent requires `accountAddress`");
|
|
158
158
|
}
|
|
159
159
|
const accessTokenResult = await this.fetchAccessToken();
|
|
160
160
|
if (!accessTokenResult.ok) {
|
|
@@ -165,7 +165,6 @@ var OneAuthHeadlessClient = class {
|
|
|
165
165
|
amount: tr.amount.toString()
|
|
166
166
|
}));
|
|
167
167
|
const body = {
|
|
168
|
-
username: options.username,
|
|
169
168
|
accountAddress: options.accountAddress,
|
|
170
169
|
targetChain: options.targetChain,
|
|
171
170
|
calls: options.calls,
|
|
@@ -295,9 +294,9 @@ var OneAuthHeadlessClient = class {
|
|
|
295
294
|
* ENABLE-mode signature wrapping (see follow-up).
|
|
296
295
|
*/
|
|
297
296
|
async installSmartSession(options) {
|
|
298
|
-
if (!options.
|
|
297
|
+
if (!options.accountAddress) {
|
|
299
298
|
throw new Error(
|
|
300
|
-
"installSmartSession requires
|
|
299
|
+
"installSmartSession requires `accountAddress`"
|
|
301
300
|
);
|
|
302
301
|
}
|
|
303
302
|
const accessTokenResult = await this.fetchAccessToken();
|
|
@@ -307,7 +306,6 @@ var OneAuthHeadlessClient = class {
|
|
|
307
306
|
);
|
|
308
307
|
}
|
|
309
308
|
const body = {
|
|
310
|
-
username: options.username,
|
|
311
309
|
accountAddress: options.accountAddress,
|
|
312
310
|
targetChain: options.targetChain,
|
|
313
311
|
sessionKeyAddress: options.sessionKeyAddress,
|