@swype-org/react-sdk 0.2.1-betatest.d455d11 → 0.2.24

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/index.d.cts CHANGED
@@ -94,7 +94,7 @@ interface Amount {
94
94
  /** Transfer destination in a response */
95
95
  interface TransferDestination {
96
96
  id: string;
97
- chainId: string;
97
+ chainId: number;
98
98
  address: string;
99
99
  token: {
100
100
  address: string;
@@ -118,6 +118,8 @@ interface TransferSignPayload {
118
118
  /** Transfer object returned by the API */
119
119
  interface Transfer {
120
120
  id: string;
121
+ /** `guest` for guest checkout; `standard` for Privy + smart account flows. */
122
+ type?: 'standard' | 'guest';
121
123
  status: string;
122
124
  sources: Array<{
123
125
  id: string;
@@ -167,7 +169,7 @@ interface SourceSelection {
167
169
  }
168
170
  /** Destination input provided by the host app */
169
171
  interface Destination {
170
- chainId: string;
172
+ chainId: number;
171
173
  address: string;
172
174
  token: {
173
175
  address: string;
@@ -207,34 +209,6 @@ interface UserConfig {
207
209
  }
208
210
  /** Theme mode */
209
211
  type ThemeMode = 'light' | 'dark';
210
- /** A token available on a source chain for guest transfers */
211
- interface GuestSourceToken {
212
- symbol: string;
213
- address: string;
214
- decimals: number;
215
- }
216
- /** A source chain + its available tokens for guest transfers */
217
- interface GuestSourceChain {
218
- chainName: string;
219
- chainId: number;
220
- tokens: GuestSourceToken[];
221
- }
222
- /** Relay deposit step returned by the guest quote endpoint */
223
- interface RelayDepositStep {
224
- to: string;
225
- data: string;
226
- value: string;
227
- chainId: number;
228
- }
229
- /** Guest quote response from the API */
230
- interface GuestQuote {
231
- requestId: string;
232
- estimatedFeeUsd: string;
233
- estimatedOutput: string;
234
- steps: RelayDepositStep[];
235
- }
236
- /** Steps in the payment flow */
237
- type PaymentStep = 'guest-deposit' | 'guest-select-source' | 'guest-connecting' | 'guest-fetching-quote' | 'guest-approving' | 'guest-signing' | 'login' | 'otp-verify' | 'create-passkey' | 'verify-passkey' | 'wallet-picker' | 'open-wallet' | 'setup-status' | 'setup' | 'confirm-sign' | 'deposit' | 'low-balance' | 'processing' | 'select-source' | 'token-picker' | 'success' | 'offer-setup' | 'setup-complete';
238
212
  /** User-selected advanced settings for chain/asset override */
239
213
  interface AdvancedSettings {
240
214
  /** Override asset (e.g. 'USDC', 'USDT'). Null = let backend decide. */
@@ -242,6 +216,37 @@ interface AdvancedSettings {
242
216
  /** Override chain name (e.g. 'Base', 'Ethereum'). Null = let backend decide. */
243
217
  chain: string | null;
244
218
  }
219
+ /** Decimal-string money amount (avoids JSON floating-point for fees). */
220
+ interface PreciseMoney {
221
+ value: string;
222
+ currency: string;
223
+ }
224
+ /** Guest fee projection from PUT /sender probe or POST /v1/transfers/{id}/quotes. */
225
+ interface GuestTransferFee {
226
+ quote: PreciseMoney | null;
227
+ actual: PreciseMoney | null;
228
+ }
229
+ /** Server-ranked default source from PUT /sender probe (guest checkout). */
230
+ interface RecommendedGuestSource {
231
+ sourceChainId: number;
232
+ tokenAddress: string;
233
+ chainName: string;
234
+ tokenSymbol: string;
235
+ }
236
+ /** Balance row inside PUT /sender probe `source.balances`. */
237
+ interface GuestTransferBalanceItem extends SourceOption {
238
+ sourceChainId: number;
239
+ }
240
+ /** Envelope returned by PUT /v1/transfers/{id}/sender (probe or commit). */
241
+ interface SetTransferSenderResponse {
242
+ transfer: Transfer;
243
+ source?: {
244
+ balances: GuestTransferBalanceItem[];
245
+ recommended: RecommendedGuestSource;
246
+ };
247
+ /** Present on probe only. */
248
+ fee?: GuestTransferFee;
249
+ }
245
250
 
246
251
  interface ThemeTokens {
247
252
  bg: string;
@@ -274,61 +279,67 @@ declare const darkTheme: ThemeTokens;
274
279
  declare const lightTheme: ThemeTokens;
275
280
  declare function getTheme(mode: ThemeMode): ThemeTokens;
276
281
 
277
- interface SwypeConfig {
282
+ interface BlinkConfig {
278
283
  apiBaseUrl: string;
279
284
  theme: ThemeMode;
280
285
  tokens: ThemeTokens;
281
- /** Pre-set deposit amount (controlled by host app via useSwypeDepositAmount) */
286
+ /** Pre-set deposit amount (controlled by host app via useBlinkDepositAmount) */
282
287
  depositAmount: number | null;
283
288
  /** Update the deposit amount from a host-app component */
284
289
  setDepositAmount: (amount: number | null) => void;
285
290
  }
286
- interface SwypeProviderProps {
287
- /** Base URL for the Swype API (e.g. "http://localhost:3000") */
291
+ interface BlinkProviderProps {
292
+ /** Base URL for the Blink API (e.g. "http://localhost:3000") */
288
293
  apiBaseUrl: string;
289
294
  /** Light or dark mode */
290
295
  theme?: ThemeMode;
296
+ /**
297
+ * Override the Privy App ID used for authentication.
298
+ * @internal Blink-internal only — used for dev/test environments (e.g. smokebox).
299
+ * Not intended for merchant integrations.
300
+ */
301
+ privyAppId?: string;
291
302
  children: React.ReactNode;
292
303
  }
293
304
  /**
294
- * Provides Swype SDK configuration and all required infrastructure
305
+ * Provides Blink SDK configuration and all required infrastructure
295
306
  * (Privy auth, wagmi, React Query) to child components.
296
307
  *
297
- * Must wrap any `<SwypePayment>` usage. The integrator does **not** need
308
+ * Must wrap any `<BlinkPayment>` usage. The integrator does **not** need
298
309
  * to set up Privy, wagmi, or React Query — this provider handles it all.
299
310
  *
300
311
  * @example
301
312
  * ```tsx
302
- * <SwypeProvider apiBaseUrl="https://api.swype.com">
303
- * <SwypePayment destination={dest} onComplete={handler} />
304
- * </SwypeProvider>
313
+ * <BlinkProvider apiBaseUrl="https://api.blink.com">
314
+ * <BlinkPayment destination={dest} onComplete={handler} />
315
+ * </BlinkProvider>
305
316
  * ```
306
317
  */
307
- declare function SwypeProvider({ apiBaseUrl, theme, children, }: SwypeProviderProps): react_jsx_runtime.JSX.Element;
308
- /** Access the Swype SDK configuration. Throws if used outside SwypeProvider. */
309
- declare function useSwypeConfig(): SwypeConfig;
318
+ declare function BlinkProvider({ apiBaseUrl, theme, privyAppId, children, }: BlinkProviderProps): react_jsx_runtime.JSX.Element;
319
+ /** Access the Blink SDK configuration. Throws if used outside BlinkProvider. */
320
+ declare function useBlinkConfig(): BlinkConfig;
310
321
  /**
311
322
  * Hook for host apps to pre-set the deposit amount before showing the
312
- * payment widget. When set, the amount field in SwypePayment is
323
+ * payment widget. When set, the amount field in BlinkPayment is
313
324
  * auto-populated.
314
325
  *
315
326
  * @example
316
327
  * ```tsx
317
328
  * function ProductPage() {
318
- * const { setAmount } = useSwypeDepositAmount();
329
+ * const { setAmount } = useBlinkDepositAmount();
319
330
  * useEffect(() => { setAmount(25.00); }, []);
320
- * return <SwypePayment destination={dest} />;
331
+ * return <BlinkPayment destination={dest} />;
321
332
  * }
322
333
  * ```
323
334
  */
324
- declare function useSwypeDepositAmount(): {
335
+ declare function useBlinkDepositAmount(): {
325
336
  /** Current deposit amount, or null if not set */
326
337
  amount: number | null;
327
338
  /** Set the deposit amount (pass null to clear) */
328
339
  setAmount: (amount: number | null) => void;
329
340
  };
330
341
 
331
- declare function fetchProviders(apiBaseUrl: string, token: string): Promise<Provider[]>;
342
+ declare function fetchProviders(apiBaseUrl: string, token?: string | null): Promise<Provider[]>;
332
343
  declare function fetchChains(apiBaseUrl: string, token: string): Promise<Chain[]>;
333
344
  declare function fetchAccounts(apiBaseUrl: string, token: string, credentialId: string): Promise<Account[]>;
334
345
  declare function fetchAccount(apiBaseUrl: string, token: string, accountId: string, credentialId: string): Promise<Account>;
@@ -362,8 +373,24 @@ interface CreateTransferParams {
362
373
  destination: Destination;
363
374
  amount: number;
364
375
  currency?: string;
376
+ /** Pre-transfer fee quote ID for advisory linkage. */
377
+ quoteId?: string;
365
378
  }
366
379
  declare function createTransfer(apiBaseUrl: string, token: string, params: CreateTransferParams): Promise<Transfer>;
380
+ interface TransferQuote {
381
+ id: string;
382
+ fee: PreciseMoney;
383
+ expiresAt: string;
384
+ }
385
+ declare function postTransferQuote(apiBaseUrl: string, bearerToken: string, params: {
386
+ walletId: string;
387
+ sourceTokenAddress?: string;
388
+ destination: Destination;
389
+ amount: {
390
+ amount: number;
391
+ currency: string;
392
+ };
393
+ }): Promise<TransferQuote>;
367
394
  declare function fetchMerchantPublicKey(apiBaseUrl: string, merchantId: string): Promise<MerchantPublicKey>;
368
395
  declare function fetchTransfer(apiBaseUrl: string, token: string, transferId: string, authorizationSessionToken?: string): Promise<Transfer>;
369
396
  /**
@@ -372,6 +399,7 @@ declare function fetchTransfer(apiBaseUrl: string, token: string, transferId: st
372
399
  */
373
400
  declare function signTransfer(apiBaseUrl: string, token: string, transferId: string, signedUserOp: Record<string, unknown>, authorizationSessionToken?: string): Promise<Transfer>;
374
401
  declare function fetchAuthorizationSession(apiBaseUrl: string, sessionId: string): Promise<AuthorizationSessionDetail>;
402
+ declare function fetchAuthorizationSessionByToken(apiBaseUrl: string, token: string): Promise<AuthorizationSessionDetail>;
375
403
  /**
376
404
  * Registers a WebAuthn passkey for the authenticated user.
377
405
  * POST /v1/users/config/passkey
@@ -396,82 +424,145 @@ declare function updateUserConfig(apiBaseUrl: string, token: string, config: {
396
424
  defaultAllowance: number;
397
425
  }): Promise<void>;
398
426
  /**
399
- * Updates the user's default allowance, authenticated by session ID.
427
+ * Updates default allowance for the authorization session.
400
428
  * PATCH /v1/authorization-sessions/{id}/user-config
401
429
  *
402
- * This does not require a bearer token — the session ID itself serves
403
- * as proof of authorization.
430
+ * No bearer token — the session ID is the credential. When the session has no
431
+ * linked user yet (e.g. guest account setup), config is stored on the session
432
+ * and used as the account allowance until the user is claimed.
404
433
  */
405
434
  declare function updateUserConfigBySession(apiBaseUrl: string, sessionId: string, config: {
406
435
  defaultAllowance: number;
407
436
  }): Promise<void>;
408
- declare function reportActionCompletion(apiBaseUrl: string, actionId: string, result: Record<string, unknown>): Promise<AuthorizationSessionDetail>;
409
- declare function fetchGuestSourceOptions(apiBaseUrl: string): Promise<GuestSourceChain[]>;
410
- interface GuestQuoteParams {
437
+ interface CreateGuestTransferParams {
438
+ id?: string;
411
439
  merchantAuthorization: MerchantAuthorization;
412
- sourceAddress: string;
413
- sourceChainId: number;
414
- sourceToken: string;
415
- destinationChainId: number;
416
- destinationAddress: string;
417
- destinationToken: string;
418
- amount: string;
440
+ destinations: Array<{
441
+ chainId: number;
442
+ token: {
443
+ address: string;
444
+ };
445
+ address: string;
446
+ }>;
447
+ amount: number;
448
+ currency?: string;
449
+ providerId: string;
419
450
  }
420
- declare function fetchGuestQuote(apiBaseUrl: string, params: GuestQuoteParams): Promise<GuestQuote>;
421
- interface CreateGuestTransferParams {
451
+ interface GuestTransferResult {
422
452
  id: string;
423
- merchantAuthorization: MerchantAuthorization;
424
- requestId: string;
425
- originTxHash: string;
426
- sourceChainId: number;
427
- sourceAddress: string;
428
- destinationChainId: number;
429
- destinationAddress: string;
430
- destinationToken: string;
453
+ status: string;
454
+ guestSessionToken: string;
455
+ uri: string | null;
456
+ expiresAt: string | null;
431
457
  amount: {
432
458
  amount: number;
433
459
  currency: string;
434
460
  };
461
+ destinations: Transfer['destinations'];
462
+ sources: Transfer['sources'];
463
+ createDate: string;
464
+ updateDate: string;
435
465
  }
436
- declare function createGuestTransfer(apiBaseUrl: string, params: CreateGuestTransferParams): Promise<{
437
- id: string;
438
- status: string;
466
+ /**
467
+ * Create a guest transfer (no Privy auth required).
468
+ * POST /v1/transfers with type=guest
469
+ */
470
+ declare function createGuestTransfer(apiBaseUrl: string, params: CreateGuestTransferParams): Promise<GuestTransferResult>;
471
+ /**
472
+ * Look up a guest transfer by session token.
473
+ * GET /v1/transfers?guestToken=...
474
+ */
475
+ declare function getTransferByGuestToken(apiBaseUrl: string, guestToken: string): Promise<Transfer>;
476
+ /**
477
+ * Set the sender's wallet address and selected source token on a guest transfer.
478
+ * PUT /v1/transfers/:id/sender
479
+ */
480
+ /**
481
+ * Guest fee preview before PUT /sender (non-recommended token or refresh).
482
+ * POST /v1/transfers/:id/quotes
483
+ */
484
+ declare function postGuestTransferFeeQuote(apiBaseUrl: string, transferId: string, guestSessionToken: string, senderAddress: string, sourceChainId: number, sourceToken: string): Promise<GuestTransferFee>;
485
+ /**
486
+ * PUT /v1/transfers/:id/sender — guest probe (`senderAddress` only) or commit (full body).
487
+ */
488
+ declare function putGuestTransferSender(apiBaseUrl: string, transferId: string, guestSessionToken: string, body: {
489
+ senderAddress: string;
490
+ sourceChainId?: number;
491
+ sourceToken?: string;
492
+ }): Promise<SetTransferSenderResponse>;
493
+ declare function setTransferSender(apiBaseUrl: string, transferId: string, guestSessionToken: string, senderAddress: string, sourceChainId: number, sourceToken: string): Promise<SetTransferSenderResponse>;
494
+ /**
495
+ * Submit the origin chain tx hash for a guest transfer.
496
+ * PATCH /v1/transfers/:id with { originTxHash }
497
+ */
498
+ declare function signGuestTransfer(apiBaseUrl: string, transferId: string, guestSessionToken: string, originTxHash: string): Promise<Transfer>;
499
+ /**
500
+ * Poll a guest transfer by ID using the guest session token.
501
+ * GET /v1/transfers/:id with x-guest-session-token header
502
+ */
503
+ declare function getGuestTransfer(apiBaseUrl: string, transferId: string, guestSessionToken: string): Promise<Transfer>;
504
+ /** @alias GuestTransferBalanceItem */
505
+ type GuestBalanceOption = GuestTransferBalanceItem;
506
+ declare function fetchGuestAccount(apiBaseUrl: string, guestToken: string): Promise<{
507
+ accountId: string;
508
+ hasPasskey: boolean;
509
+ walletAddress: string | null;
510
+ } | null>;
511
+ declare function createGuestAccount(apiBaseUrl: string, guestSessionToken: string, providerId: string, name: string): Promise<{
512
+ accountId: string;
513
+ sessionToken: string;
514
+ sessionUri: string;
439
515
  }>;
440
- declare function fetchGuestTransfer(apiBaseUrl: string, transferId: string): Promise<{
441
- id: string;
442
- status: string;
516
+ declare function setAccountOwner(apiBaseUrl: string, accessToken: string, accountId: string, guestSessionToken: string, body: {
517
+ credentialId: string;
518
+ publicKey: string;
519
+ }): Promise<{
520
+ accountId: string;
521
+ smartAccountAddress: string;
522
+ userOpHash: string;
443
523
  }>;
524
+ declare function reportActionCompletion(apiBaseUrl: string, actionId: string, result: Record<string, unknown>): Promise<AuthorizationSessionDetail>;
444
525
 
445
526
  type api_CreateAccountParams = CreateAccountParams;
446
527
  type api_CreateGuestTransferParams = CreateGuestTransferParams;
447
528
  type api_CreateTransferParams = CreateTransferParams;
448
- type api_GuestQuoteParams = GuestQuoteParams;
529
+ type api_GuestBalanceOption = GuestBalanceOption;
530
+ type api_GuestTransferResult = GuestTransferResult;
531
+ type api_TransferQuote = TransferQuote;
449
532
  declare const api_createAccount: typeof createAccount;
450
533
  declare const api_createAccountAuthorizationSession: typeof createAccountAuthorizationSession;
534
+ declare const api_createGuestAccount: typeof createGuestAccount;
451
535
  declare const api_createGuestTransfer: typeof createGuestTransfer;
452
536
  declare const api_createTransfer: typeof createTransfer;
453
537
  declare const api_fetchAccount: typeof fetchAccount;
454
538
  declare const api_fetchAccounts: typeof fetchAccounts;
455
539
  declare const api_fetchAuthorizationSession: typeof fetchAuthorizationSession;
540
+ declare const api_fetchAuthorizationSessionByToken: typeof fetchAuthorizationSessionByToken;
456
541
  declare const api_fetchChains: typeof fetchChains;
457
- declare const api_fetchGuestQuote: typeof fetchGuestQuote;
458
- declare const api_fetchGuestSourceOptions: typeof fetchGuestSourceOptions;
459
- declare const api_fetchGuestTransfer: typeof fetchGuestTransfer;
542
+ declare const api_fetchGuestAccount: typeof fetchGuestAccount;
460
543
  declare const api_fetchMerchantPublicKey: typeof fetchMerchantPublicKey;
461
544
  declare const api_fetchProviders: typeof fetchProviders;
462
545
  declare const api_fetchTransfer: typeof fetchTransfer;
463
546
  declare const api_fetchUserConfig: typeof fetchUserConfig;
547
+ declare const api_getGuestTransfer: typeof getGuestTransfer;
548
+ declare const api_getTransferByGuestToken: typeof getTransferByGuestToken;
549
+ declare const api_postGuestTransferFeeQuote: typeof postGuestTransferFeeQuote;
550
+ declare const api_postTransferQuote: typeof postTransferQuote;
551
+ declare const api_putGuestTransferSender: typeof putGuestTransferSender;
464
552
  declare const api_registerPasskey: typeof registerPasskey;
465
553
  declare const api_reportActionCompletion: typeof reportActionCompletion;
466
554
  declare const api_reportPasskeyActivity: typeof reportPasskeyActivity;
555
+ declare const api_setAccountOwner: typeof setAccountOwner;
556
+ declare const api_setTransferSender: typeof setTransferSender;
557
+ declare const api_signGuestTransfer: typeof signGuestTransfer;
467
558
  declare const api_signTransfer: typeof signTransfer;
468
559
  declare const api_updateUserConfig: typeof updateUserConfig;
469
560
  declare const api_updateUserConfigBySession: typeof updateUserConfigBySession;
470
561
  declare namespace api {
471
- export { type api_CreateAccountParams as CreateAccountParams, type api_CreateGuestTransferParams as CreateGuestTransferParams, type api_CreateTransferParams as CreateTransferParams, type api_GuestQuoteParams as GuestQuoteParams, api_createAccount as createAccount, api_createAccountAuthorizationSession as createAccountAuthorizationSession, api_createGuestTransfer as createGuestTransfer, api_createTransfer as createTransfer, api_fetchAccount as fetchAccount, api_fetchAccounts as fetchAccounts, api_fetchAuthorizationSession as fetchAuthorizationSession, api_fetchChains as fetchChains, api_fetchGuestQuote as fetchGuestQuote, api_fetchGuestSourceOptions as fetchGuestSourceOptions, api_fetchGuestTransfer as fetchGuestTransfer, api_fetchMerchantPublicKey as fetchMerchantPublicKey, api_fetchProviders as fetchProviders, api_fetchTransfer as fetchTransfer, api_fetchUserConfig as fetchUserConfig, api_registerPasskey as registerPasskey, api_reportActionCompletion as reportActionCompletion, api_reportPasskeyActivity as reportPasskeyActivity, api_signTransfer as signTransfer, api_updateUserConfig as updateUserConfig, api_updateUserConfigBySession as updateUserConfigBySession };
562
+ export { type api_CreateAccountParams as CreateAccountParams, type api_CreateGuestTransferParams as CreateGuestTransferParams, type api_CreateTransferParams as CreateTransferParams, type api_GuestBalanceOption as GuestBalanceOption, type api_GuestTransferResult as GuestTransferResult, type api_TransferQuote as TransferQuote, api_createAccount as createAccount, api_createAccountAuthorizationSession as createAccountAuthorizationSession, api_createGuestAccount as createGuestAccount, api_createGuestTransfer as createGuestTransfer, api_createTransfer as createTransfer, api_fetchAccount as fetchAccount, api_fetchAccounts as fetchAccounts, api_fetchAuthorizationSession as fetchAuthorizationSession, api_fetchAuthorizationSessionByToken as fetchAuthorizationSessionByToken, api_fetchChains as fetchChains, api_fetchGuestAccount as fetchGuestAccount, api_fetchMerchantPublicKey as fetchMerchantPublicKey, api_fetchProviders as fetchProviders, api_fetchTransfer as fetchTransfer, api_fetchUserConfig as fetchUserConfig, api_getGuestTransfer as getGuestTransfer, api_getTransferByGuestToken as getTransferByGuestToken, api_postGuestTransferFeeQuote as postGuestTransferFeeQuote, api_postTransferQuote as postTransferQuote, api_putGuestTransferSender as putGuestTransferSender, api_registerPasskey as registerPasskey, api_reportActionCompletion as reportActionCompletion, api_reportPasskeyActivity as reportPasskeyActivity, api_setAccountOwner as setAccountOwner, api_setTransferSender as setTransferSender, api_signGuestTransfer as signGuestTransfer, api_signTransfer as signTransfer, api_updateUserConfig as updateUserConfig, api_updateUserConfigBySession as updateUserConfigBySession };
472
563
  }
473
564
 
474
- interface SwypePaymentProps {
565
+ interface BlinkPaymentProps {
475
566
  destination: Destination;
476
567
  onComplete?: (transfer: Transfer) => void;
477
568
  onError?: (error: string) => void;
@@ -481,76 +572,25 @@ interface SwypePaymentProps {
481
572
  merchantName?: string;
482
573
  onBack?: () => void;
483
574
  onDismiss?: () => void;
484
- autoCloseSeconds?: number;
485
- /** EVM numeric chain ID for the source chain (guest flow). */
486
- sourceChainId?: number;
487
- /** Source token contract address (guest flow). */
488
- sourceToken?: string;
489
- /** Destination EVM numeric chain ID (guest flow). */
490
- destinationChainId?: number;
491
575
  }
492
- declare function SwypePayment(props: SwypePaymentProps): react_jsx_runtime.JSX.Element;
576
+ declare function BlinkPayment(props: BlinkPaymentProps): react_jsx_runtime.JSX.Element;
493
577
 
494
578
  /**
495
579
  * Cross-origin iframe passkey helpers.
496
580
  *
497
581
  * When the webview-app runs inside a cross-origin iframe, WebAuthn
498
582
  * ceremonies cannot execute from within the iframe on Safari. For passkey
499
- * creation, we first attempt a direct `navigator.credentials.create()`
500
- * call (works in Chrome/Firefox with the iframe permissions policy). If
501
- * that fails (Safari), we open a same-origin pop-up window on the Swype
502
- * domain to perform the ceremony. The popup writes the result to the
503
- * server with a verification token, and the opener reads from the server
504
- * after the popup closes.
583
+ * verification (signing) and signup (credential creation), we open a
584
+ * same-origin pop-up window on the Blink domain to perform the ceremony.
505
585
  */
506
586
  /**
507
587
  * Thrown when `navigator.credentials.create()` fails inside a
508
588
  * cross-origin iframe (Safari). The UI layer should catch this and
509
- * offer the user a button that opens the Swype passkey pop-up.
589
+ * offer the user a button that opens the Blink passkey pop-up.
510
590
  */
511
591
  declare class PasskeyIframeBlockedError extends Error {
512
592
  constructor(message?: string);
513
593
  }
514
- interface PasskeyPopupOptions {
515
- challenge: string;
516
- rpId: string;
517
- rpName: string;
518
- userId: string;
519
- userName: string;
520
- userDisplayName: string;
521
- pubKeyCredParams: Array<{
522
- alg: number;
523
- type: string;
524
- }>;
525
- authenticatorSelection?: {
526
- authenticatorAttachment?: string;
527
- residentKey?: string;
528
- userVerification?: string;
529
- };
530
- timeout?: number;
531
- /** Populated by `createPasskeyViaPopup`; not set by callers. */
532
- verificationToken?: string;
533
- /** Privy JWT so the popup can register the passkey server-side. */
534
- authToken?: string;
535
- /** Core API base URL for server-side passkey registration. */
536
- apiBaseUrl?: string;
537
- }
538
- /**
539
- * Opens a same-origin pop-up window on the Swype domain to perform
540
- * passkey creation. Used as a fallback when Safari blocks
541
- * `navigator.credentials.create()` inside a cross-origin iframe.
542
- *
543
- * The popup registers the passkey with the server using a verification
544
- * token. After the popup closes, this function checks the server for
545
- * the passkey matching the token.
546
- *
547
- * Must be called from a user-gesture handler (e.g. button click) to
548
- * avoid the browser's pop-up blocker.
549
- */
550
- declare function createPasskeyViaPopup(options: PasskeyPopupOptions): Promise<{
551
- credentialId: string;
552
- publicKey: string;
553
- }>;
554
594
  interface PasskeyVerifyPopupOptions {
555
595
  credentialIds: string[];
556
596
  rpId: string;
@@ -562,17 +602,13 @@ interface PasskeyVerifyPopupOptions {
562
602
  apiBaseUrl?: string;
563
603
  }
564
604
  /**
565
- * Opens a same-origin pop-up window on the Swype domain to check whether
605
+ * Opens a same-origin pop-up window on the Blink domain to check whether
566
606
  * any of the given passkey credential IDs exist on this device.
567
607
  *
568
608
  * Used as a fallback when Safari blocks `navigator.credentials.get()`
569
- * inside a cross-origin iframe. The popup runs on the Swype domain where
609
+ * inside a cross-origin iframe. The popup runs on the Blink domain where
570
610
  * the rpId matches, so WebAuthn works.
571
611
  *
572
- * The popup writes a verification token to the server. After the popup
573
- * closes, the opener checks the server for the matching token to determine
574
- * which credential was verified.
575
- *
576
612
  * Must be called from a user-gesture handler (e.g. button click) to
577
613
  * avoid the browser's pop-up blocker.
578
614
  *
@@ -581,41 +617,13 @@ interface PasskeyVerifyPopupOptions {
581
617
  */
582
618
  declare function findDevicePasskeyViaPopup(options: PasskeyVerifyPopupOptions): Promise<string | null>;
583
619
 
584
- type AccessTokenGetter = () => Promise<string | null | undefined>;
585
- declare function resolvePasskeyRpId(): string;
586
- /**
587
- * Creates a WebAuthn passkey credential.
588
- * Used for upfront passkey registration before the authorization flow.
589
- *
590
- * @param params.userId - Globally unique user identifier (e.g. Privy DID).
591
- * Used as the WebAuthn `user.id` handle so each user gets a distinct
592
- * credential slot on the authenticator.
593
- * @param params.displayName - Human-readable label shown in the OS passkey
594
- * prompt (e.g. the user's email address or name).
595
- * @returns The base64-encoded credentialId and publicKey.
596
- */
597
- declare function createPasskeyCredential(params: {
598
- userId: string;
599
- displayName: string;
600
- }): Promise<{
601
- credentialId: string;
602
- publicKey: string;
603
- }>;
604
620
  /**
605
- * Builds the {@link PasskeyPopupOptions} for a user. Called by the UI
606
- * layer when it needs to open the passkey creation pop-up after
607
- * `createPasskeyCredential` throws {@link PasskeyIframeBlockedError}.
608
- *
609
- * @param params.authToken - Privy JWT so the popup can register the
610
- * passkey server-side (Safari fallback when BroadcastChannel is blocked).
611
- * @param params.apiBaseUrl - Core API base URL for server-side registration.
621
+ * Decodes a WebAuthn credential id from the same base64 (or base64url) encoding
622
+ * used when registering passkeys and returned by the API as `passkeyCredentialId`.
612
623
  */
613
- declare function buildPasskeyPopupOptions(params: {
614
- userId: string;
615
- displayName: string;
616
- authToken?: string;
617
- apiBaseUrl?: string;
618
- }): PasskeyPopupOptions;
624
+ declare function credentialIdBase64ToBytes(value: string): Uint8Array<ArrayBuffer>;
625
+
626
+ declare function resolvePasskeyRpId(): string;
619
627
  /**
620
628
  * @deprecated Use {@link findDevicePasskey} instead, which checks all
621
629
  * credentials in a single WebAuthn call.
@@ -631,6 +639,7 @@ declare function deviceHasPasskey(credentialId: string): Promise<boolean>;
631
639
  * @returns The matching credential ID, or `null` if none are on this device.
632
640
  */
633
641
  declare function findDevicePasskey(credentialIds: string[]): Promise<string | null>;
642
+
634
643
  interface UseTransferPollingResult {
635
644
  transfer: Transfer | null;
636
645
  error: string | null;
@@ -642,7 +651,22 @@ interface UseTransferPollingResult {
642
651
  * Polls GET /v1/transfers/{id} every `intervalMs` until status is
643
652
  * COMPLETED or FAILED.
644
653
  */
645
- declare function useTransferPolling(intervalMs?: number): UseTransferPollingResult;
654
+ declare function useTransferPolling(intervalMs?: number, overrideGetAccessToken?: () => Promise<string | null>): UseTransferPollingResult;
655
+
656
+ /** Thrown when `cancelPendingExecution()` rejects an in-flight session (user left funding UI). */
657
+ declare class AuthorizationSessionCancelledError extends Error {
658
+ constructor();
659
+ }
660
+ /** True for client cancel or duplicate bundle copies where `instanceof` may fail. */
661
+ declare function isAuthorizationSessionCancelled(err: unknown): boolean;
662
+ /**
663
+ * Backend / wallet may surface user-dismissal with this wording; treat like cancel so deposit
664
+ * does not keep a red banner after backing out of setup.
665
+ */
666
+ declare function isUserDismissedAuthorizationError(err: unknown): boolean;
667
+ /** True when the error represents any expected user-initiated cancellation of an authorization flow. */
668
+ declare function isExpectedAuthorizationCancellation(err: unknown): boolean;
669
+
646
670
  interface UseAuthorizationExecutorResult {
647
671
  executing: boolean;
648
672
  results: ActionExecutionResult[];
@@ -657,11 +681,19 @@ interface UseAuthorizationExecutorResult {
657
681
  pendingOneTapSetup: AuthorizationAction | null;
658
682
  /** Call this from the UI after the user has set their One-Tap limit. */
659
683
  resolveOneTapSetup: () => void;
660
- /** Execute authorization by session id. */
661
- executeSessionById: (sessionId: string) => Promise<void>;
684
+ /** Execute authorization by session id. Returns `false` if the user cancelled. */
685
+ executeSessionById: (sessionId: string) => Promise<boolean>;
686
+ /**
687
+ * Number of nested `executeSessionById` runs on the stack (1 = single session).
688
+ * Used to show OpenWallet during token reauthorization while the parent session is paused
689
+ * on the One-Tap limit step (`pendingOneTapSetup`).
690
+ */
691
+ authorizationSessionStackDepth: number;
692
+ /** Reject paused SELECT_SOURCE / One-Tap waits and reset executor flags (e.g. user backed to deposit). */
693
+ cancelPendingExecution: () => void;
662
694
  }
663
695
  interface UseAuthorizationExecutorOptions {
664
- /** Optional API base URL override when used outside SwypeProvider. */
696
+ /** Optional API base URL override when used outside BlinkProvider. */
665
697
  apiBaseUrl?: string;
666
698
  }
667
699
  /**
@@ -682,6 +714,8 @@ interface UseAuthorizationExecutorOptions {
682
714
  * `useTransferSigning()` after the authorization flow completes.
683
715
  */
684
716
  declare function useAuthorizationExecutor(options?: UseAuthorizationExecutorOptions): UseAuthorizationExecutorResult;
717
+
718
+ type AccessTokenGetter = () => Promise<string | null | undefined>;
685
719
  interface UseTransferSigningResult {
686
720
  signing: boolean;
687
721
  signPayload: TransferSignPayload | null;
@@ -695,7 +729,7 @@ interface UseTransferSigningResult {
695
729
  signTransfer: (transferId: string) => Promise<Transfer>;
696
730
  }
697
731
  interface UseTransferSigningOptions {
698
- /** Optional API base URL override when used outside SwypeProvider. */
732
+ /** Optional API base URL override when used outside BlinkProvider. */
699
733
  apiBaseUrl?: string;
700
734
  /** Optional access-token getter override (e.g. deeplink query token). */
701
735
  getAccessToken?: AccessTokenGetter;
@@ -712,6 +746,47 @@ interface UseTransferSigningOptions {
712
746
  */
713
747
  declare function useTransferSigning(pollIntervalMs?: number, options?: UseTransferSigningOptions): UseTransferSigningResult;
714
748
 
749
+ interface GuestTokenEntry {
750
+ chainId: string;
751
+ /** Standard EVM numeric chain ID — used in PUT /sender sourceChainId. */
752
+ sourceChainId: number;
753
+ chainName: string;
754
+ tokenSymbol: string;
755
+ tokenAddress: string;
756
+ balance: number;
757
+ decimals: number;
758
+ rawBalance: string;
759
+ }
760
+ interface GuestBalanceOptionInput {
761
+ chainId: string;
762
+ sourceChainId: number;
763
+ chainName: string;
764
+ tokenSymbol: string;
765
+ tokenAddress: string;
766
+ decimals: number;
767
+ rawBalance: string;
768
+ }
769
+ /**
770
+ * Picker list: positive balances first (by amount); if none, show zero-balance
771
+ * rows so the user can still choose a catalog token.
772
+ */
773
+ declare function mapGuestPickerEntries(options: GuestBalanceOptionInput[]): GuestTokenEntry[];
774
+ declare function guestEntryMatchingRecommended(balances: GuestBalanceOptionInput[], recommended: {
775
+ sourceChainId: number;
776
+ tokenAddress: string;
777
+ }): GuestTokenEntry | null;
778
+
779
+ /**
780
+ * Best-effort UI label for device biometrics (Face ID, Touch ID, Windows Hello, etc.).
781
+ * The web platform does not expose the exact modality; this uses coarse `userAgent`
782
+ * detection only — synchronous so it can run during render with no effects.
783
+ */
784
+ /**
785
+ * Returns short copy for passkey / biometric prompts based on the current environment.
786
+ * Does not call WebAuthn (no async); suitable for direct use in render.
787
+ */
788
+ declare function getDeviceBiometricUnlockText(): string;
789
+
715
790
  interface ScreenLayoutProps {
716
791
  children: ReactNode;
717
792
  /** Content pinned to the bottom of the screen (buttons, footer) */
@@ -740,10 +815,18 @@ interface PrimaryButtonProps {
740
815
  onClick?: () => void;
741
816
  disabled?: boolean;
742
817
  loading?: boolean;
818
+ /** Override the default "Please wait..." text shown while loading. */
819
+ loadingText?: string;
743
820
  /** Optional icon element rendered left of the label */
744
821
  icon?: ReactNode;
745
- }
746
- declare function PrimaryButton({ children, onClick, disabled, loading, icon }: PrimaryButtonProps): react_jsx_runtime.JSX.Element;
822
+ /** 0-1 fractional progress. When set, the button renders in progress mode with a fill bar. */
823
+ progress?: number;
824
+ /** Text shown during progress mode (overrides children and loadingText). */
825
+ progressText?: string;
826
+ /** When true, the fill bar pulses to signal the user needs to take action (e.g. confirm in wallet). */
827
+ progressPaused?: boolean;
828
+ }
829
+ declare function PrimaryButton({ children, onClick, disabled, loading, loadingText, icon, progress, progressText, progressPaused, }: PrimaryButtonProps): react_jsx_runtime.JSX.Element;
747
830
 
748
831
  interface OutlineButtonProps {
749
832
  children: ReactNode;
@@ -789,7 +872,36 @@ interface SpinnerProps {
789
872
  }
790
873
  declare function Spinner({ size, label }: SpinnerProps): react_jsx_runtime.JSX.Element;
791
874
 
792
- declare function SwypeLoadingScreen(): react_jsx_runtime.JSX.Element;
875
+ declare function BlinkLoadingScreen(): react_jsx_runtime.JSX.Element;
876
+
877
+ interface LoginScreenProps {
878
+ onLoginWithPasskey: () => void;
879
+ onSignupWithPasskey: () => void;
880
+ loading: boolean;
881
+ error: string | null;
882
+ onBack?: () => void;
883
+ merchantInitials?: string;
884
+ /** Overrides default hero heading (e.g. guest preauth flow). */
885
+ heroTitle?: string;
886
+ /** Optional line below the hero heading. */
887
+ heroSubtitle?: string;
888
+ /** When true, signup is the primary action (guest preauth flow). */
889
+ preferSignup?: boolean;
890
+ }
891
+ declare function LoginScreen({ onLoginWithPasskey, onSignupWithPasskey, loading, error, onBack, merchantInitials, heroTitle, heroSubtitle, preferSignup, }: LoginScreenProps): react_jsx_runtime.JSX.Element;
892
+
893
+ interface OtpVerifyScreenProps {
894
+ /** Masked identifier displayed to the user (e.g. "user@email.com") */
895
+ maskedIdentifier: string;
896
+ otpCode: string;
897
+ onOtpChange: (code: string) => void;
898
+ onVerify: () => void;
899
+ onResend: () => void;
900
+ onBack: () => void;
901
+ verifying: boolean;
902
+ error: string | null;
903
+ }
904
+ declare function OtpVerifyScreen({ maskedIdentifier, otpCode, onOtpChange, onVerify, onResend, onBack, verifying, error, }: OtpVerifyScreenProps): react_jsx_runtime.JSX.Element;
793
905
 
794
906
  interface PasskeyScreenProps {
795
907
  onCreatePasskey: () => void;
@@ -799,11 +911,113 @@ interface PasskeyScreenProps {
799
911
  error: string | null;
800
912
  /** When true, direct passkey creation failed (Safari iframe restriction). */
801
913
  popupFallback?: boolean;
802
- /** Opens a pop-up window on the Swype domain for passkey registration. */
914
+ /** Opens a pop-up window on the Blink domain for passkey registration. */
803
915
  onCreatePasskeyViaPopup?: () => void;
916
+ /** Creates a brand-new passkey on this device (for users who already have one on another device). */
917
+ onCreateNewPasskey?: () => void;
918
+ /** Popup fallback variant of onCreateNewPasskey. */
919
+ onCreateNewPasskeyViaPopup?: () => void;
920
+ /** When set, overrides `popupFallback` for the create-new link only. */
921
+ createNewPopupFallback?: boolean;
922
+ /** Loading state while a new passkey is being created. */
923
+ creatingNewPasskey?: boolean;
924
+ }
925
+ declare function PasskeyScreen({ onCreatePasskey, onBack, onLogout, creating, error, popupFallback, onCreatePasskeyViaPopup, onCreateNewPasskey, onCreateNewPasskeyViaPopup, createNewPopupFallback, creatingNewPasskey, }: PasskeyScreenProps): react_jsx_runtime.JSX.Element;
926
+
927
+ interface VerifyPasskeyScreenProps {
928
+ onVerify: () => void;
929
+ onBack?: () => void;
930
+ verifying: boolean;
931
+ error: string | null;
932
+ /** Override the default subtitle text (useful when rendering inside a popup). */
933
+ subtitle?: string;
934
+ }
935
+ declare function VerifyPasskeyScreen({ onVerify, onBack, verifying, error, subtitle, }: VerifyPasskeyScreenProps): react_jsx_runtime.JSX.Element;
936
+
937
+ type ScreenName = 'loading' | 'login' | 'success' | 'processing' | 'confirm-sign' | 'select-source' | 'setup' | 'open-wallet' | 'setup-status' | 'guest-token-picker' | 'wallet-picker' | 'token-picker' | 'deposit' | 'guest-setup-complete' | 'guest-preauth-linking';
938
+ interface MobileFlowState {
939
+ deeplinkUri: string;
940
+ providerId: string | null;
941
+ }
942
+ type PaymentPhase = {
943
+ step: 'initializing';
944
+ } | {
945
+ step: 'login';
946
+ } | {
947
+ step: 'data-loading';
948
+ } | {
949
+ step: 'wallet-picker';
950
+ reason: 'link' | 'switch' | 'entry' | 'guest-entry';
951
+ } | {
952
+ step: 'wallet-setup';
953
+ mobile: MobileFlowState | null;
954
+ accountId: string | null;
955
+ /** Desktop: use OpenWalletScreen (extension popups) instead of SetupStatusScreen. */
956
+ guestDesktopExtension?: boolean;
957
+ } | {
958
+ step: 'select-source';
959
+ action: AuthorizationAction;
960
+ isDesktop: boolean;
961
+ } | {
962
+ step: 'one-tap-setup';
963
+ action: AuthorizationAction | null;
964
+ } | {
965
+ step: 'guest-token-picker';
966
+ } | {
967
+ step: 'token-picker';
968
+ } | {
969
+ step: 'deposit';
970
+ } | {
971
+ step: 'processing';
972
+ transfer: Transfer | null;
973
+ } | {
974
+ step: 'confirm-sign';
975
+ transfer: Transfer;
976
+ } | {
977
+ step: 'completed';
978
+ transfer: Transfer;
979
+ } | {
980
+ step: 'failed';
981
+ transfer: Transfer;
982
+ error: string;
983
+ } | {
984
+ step: 'guest-setup-complete';
985
+ } | {
986
+ step: 'guest-preauth-linking';
987
+ };
988
+ declare function screenForPhase(phase: PaymentPhase): ScreenName;
989
+
990
+ interface PreparedSession {
991
+ accountId: string;
992
+ sessionId: string;
993
+ uri: string;
804
994
  }
805
- declare function PasskeyScreen({ onCreatePasskey, onBack, onLogout, creating, error, popupFallback, onCreatePasskeyViaPopup, }: PasskeyScreenProps): react_jsx_runtime.JSX.Element;
806
995
 
996
+ interface WalletPickerScreenProps {
997
+ providers: Provider[];
998
+ pendingConnections?: Account[];
999
+ loading?: boolean;
1000
+ useDeeplink?: boolean;
1001
+ onPrepareProvider: (providerId: string) => Promise<PreparedSession | null>;
1002
+ onSelectProvider: (providerId: string, preparedSession?: PreparedSession) => Promise<void>;
1003
+ onContinueConnection?: (accountId: string) => void;
1004
+ onBack?: () => void;
1005
+ onLogout?: () => void;
1006
+ onLogin?: () => void;
1007
+ showLoginOption?: boolean;
1008
+ isDesktop?: boolean;
1009
+ }
1010
+ declare function WalletPickerScreen({ providers, pendingConnections, loading, useDeeplink, onPrepareProvider, onSelectProvider, onContinueConnection, onBack, onLogout, onLogin, showLoginOption, isDesktop, }: WalletPickerScreenProps): react_jsx_runtime.JSX.Element;
1011
+
1012
+ interface SetupTokenOption {
1013
+ symbol: string;
1014
+ chainName: string;
1015
+ balance?: number;
1016
+ walletId?: string;
1017
+ status?: string;
1018
+ tokenAddress?: string;
1019
+ chainId?: number;
1020
+ }
807
1021
  interface SetupScreenProps {
808
1022
  availableBalance: number;
809
1023
  /** Number of tokens/chains available */
@@ -813,7 +1027,7 @@ interface SetupScreenProps {
813
1027
  onSetupOneTap: (limit: number) => void;
814
1028
  onBack: () => void;
815
1029
  onLogout: () => void;
816
- /** Navigate to the advanced source picker. */
1030
+ /** Navigate to the advanced source picker (fallback when no tokenOptions). */
817
1031
  onAdvanced?: () => void;
818
1032
  /** Human-readable label for the currently selected source (e.g. "USDC on Base"). */
819
1033
  selectedSourceLabel?: string;
@@ -821,8 +1035,103 @@ interface SetupScreenProps {
821
1035
  error: string | null;
822
1036
  /** Token symbol for the selected source, e.g. "USDC" or "USDT" */
823
1037
  selectedTokenSymbol?: string;
1038
+ /** Chain name for the selected source, used alongside selectedTokenSymbol to disambiguate same-symbol tokens on different chains. */
1039
+ selectedChainName?: string;
1040
+ /** Available tokens for the inline dropdown. When provided, the token row opens a dropdown instead of navigating. */
1041
+ tokenOptions?: SetupTokenOption[];
1042
+ /** Called when the user picks a token from the inline dropdown. */
1043
+ onSelectToken?: (symbol: string, chainName: string, walletId?: string) => void;
1044
+ }
1045
+ declare function SetupScreen({ availableBalance, onSetupOneTap, onBack, onLogout, onAdvanced, loading, error, selectedTokenSymbol, selectedChainName, tokenOptions, onSelectToken, }: SetupScreenProps): react_jsx_runtime.JSX.Element;
1046
+
1047
+ interface SetupStatusScreenProps {
1048
+ /** Whether setup has completed */
1049
+ complete: boolean;
1050
+ /** The approved One-Tap limit */
1051
+ limit: number;
1052
+ /** Number of tokens approved */
1053
+ tokensApproved: number;
1054
+ /** Merchant name for the "Return to ..." button */
1055
+ merchantName?: string;
1056
+ /** Called when user taps the primary action on the complete screen */
1057
+ onContinue: () => void;
1058
+ onLogout: () => void;
1059
+ error: string | null;
824
1060
  }
825
- declare function SetupScreen({ availableBalance, onSetupOneTap, onBack, onLogout, onAdvanced, loading, error, selectedTokenSymbol, }: SetupScreenProps): react_jsx_runtime.JSX.Element;
1061
+ declare function SetupStatusScreen({ complete, onContinue, onLogout, error, }: SetupStatusScreenProps): react_jsx_runtime.JSX.Element;
1062
+
1063
+ interface DepositScreenProps {
1064
+ merchantName?: string;
1065
+ /** Total available balance from source */
1066
+ availableBalance: number;
1067
+ /** Remaining One-Tap allowance from the API, or null when not configured */
1068
+ remainingLimit: number | null;
1069
+ /** Number of tokens/chains available */
1070
+ tokenCount: number;
1071
+ /** Pre-populated amount */
1072
+ initialAmount: number;
1073
+ /** Pre-transfer fee estimate from POST /v1/transfers/quotes */
1074
+ quoteFee?: PreciseMoney | null;
1075
+ /** Whether a fee quote is being fetched */
1076
+ quoteLoading?: boolean;
1077
+ /** User-facing error when the fee quote fails (e.g. amount too low) */
1078
+ quoteError?: string | null;
1079
+ /** Whether the deposit is currently processing */
1080
+ processing?: boolean;
1081
+ error: string | null;
1082
+ onDeposit: (amount: number) => void;
1083
+ onSwitchWallet: () => void;
1084
+ onBack: () => void;
1085
+ onLogout: () => void;
1086
+ /** Called when the user taps "Increase Limit" to re-authorize via wallet deeplink */
1087
+ onIncreaseLimit?: () => void;
1088
+ /** Whether a limit-increase flow is currently in progress */
1089
+ increasingLimit?: boolean;
1090
+ /** All user accounts for the source dropdown */
1091
+ accounts?: Account[];
1092
+ /** Currently selected account ID */
1093
+ selectedAccountId?: string | null;
1094
+ /** Called when an active account is selected from the dropdown */
1095
+ onSelectAccount?: (accountId: string) => void;
1096
+ /** Called when an inactive account is clicked (to authorize it) */
1097
+ onAuthorizeAccount?: (accountId: string) => void;
1098
+ /** Called when "+ Add Provider" is clicked in the dropdown */
1099
+ onAddProvider?: () => void;
1100
+ /** Fallback: navigate to the full-page token picker when no inline options. */
1101
+ onSelectToken?: () => void;
1102
+ /** Available tokens for the inline dropdown. When provided, the token badge opens a dropdown instead of navigating. */
1103
+ tokenOptions?: SetupTokenOption[];
1104
+ /** Called when the user picks a token from the inline dropdown. */
1105
+ onPickToken?: (symbol: string, chainName: string, walletId?: string) => void;
1106
+ /** Label for the selected chain/token, e.g. "USDC on Base" */
1107
+ selectedSourceLabel?: string;
1108
+ /** Token symbol for the selected source, e.g. "USDC" or "USDT" */
1109
+ selectedTokenSymbol?: string;
1110
+ /** Chain name for the selected source, used to disambiguate same-symbol tokens on different chains. */
1111
+ selectedChainName?: string;
1112
+ /**
1113
+ * Minimum USD amount required for One-Tap on this screen. When the host sets
1114
+ * `depositAmount`, this should match it; otherwise the default floor ($0.25)
1115
+ * applies (see StepRenderer).
1116
+ */
1117
+ minDepositFloor: number;
1118
+ }
1119
+ declare function DepositScreen({ merchantName, availableBalance, remainingLimit, tokenCount, initialAmount, minDepositFloor, quoteFee, quoteLoading, quoteError, processing, error, onDeposit, onSwitchWallet, onBack, onLogout, onIncreaseLimit, increasingLimit, accounts, selectedAccountId, onSelectAccount, onAuthorizeAccount, onAddProvider, onSelectToken, tokenOptions, onPickToken, selectedSourceLabel, selectedTokenSymbol, selectedChainName, }: DepositScreenProps): react_jsx_runtime.JSX.Element;
1120
+
1121
+ interface SuccessScreenProps {
1122
+ amount: number;
1123
+ currency: string;
1124
+ succeeded: boolean;
1125
+ error?: string | null;
1126
+ merchantName?: string;
1127
+ sourceName?: string;
1128
+ remainingLimit?: number | null;
1129
+ onDone?: () => void;
1130
+ onLogout?: () => void;
1131
+ onIncreaseLimits?: () => void;
1132
+ onManageAccount?: () => void;
1133
+ }
1134
+ declare function SuccessScreen({ amount, currency: _currency, succeeded, error, merchantName, sourceName, remainingLimit, onDone, onLogout, onIncreaseLimits, onManageAccount, }: SuccessScreenProps): react_jsx_runtime.JSX.Element;
826
1135
 
827
1136
  interface ChainChoice$1 {
828
1137
  chainName: string;
@@ -843,10 +1152,12 @@ interface SelectSourceScreenProps {
843
1152
  onChainChange: (chainName: string) => void;
844
1153
  onTokenChange: (tokenSymbol: string) => void;
845
1154
  onConfirm: () => void;
1155
+ /** Primary footer button label (default: "Confirm source"). */
1156
+ confirmLabel?: string;
846
1157
  onBack?: () => void;
847
1158
  onLogout: () => void;
848
1159
  }
849
- declare function SelectSourceScreen({ choices, selectedChainName, selectedTokenSymbol, recommended, onChainChange, onTokenChange, onConfirm, onBack, onLogout, }: SelectSourceScreenProps): react_jsx_runtime.JSX.Element;
1160
+ declare function SelectSourceScreen({ choices, selectedChainName, selectedTokenSymbol, recommended, onChainChange, onTokenChange, onConfirm, confirmLabel, onBack, onLogout, }: SelectSourceScreenProps): react_jsx_runtime.JSX.Element;
850
1161
 
851
1162
  interface ChainChoice {
852
1163
  chainName: string;
@@ -865,6 +1176,46 @@ interface AdvancedSourceScreenProps {
865
1176
  }
866
1177
  declare function AdvancedSourceScreen({ choices, selectedChainName, selectedTokenSymbol, onSelectSource, onBack, }: AdvancedSourceScreenProps): react_jsx_runtime.JSX.Element;
867
1178
 
1179
+ type TransferPhase = 'creating' | 'verifying' | 'sent';
1180
+ interface TransferStatusScreenProps {
1181
+ phase: TransferPhase;
1182
+ error: string | null;
1183
+ onLogout: () => void;
1184
+ }
1185
+ declare function TransferStatusScreen({ phase, error, onLogout, }: TransferStatusScreenProps): react_jsx_runtime.JSX.Element;
1186
+
1187
+ interface OpenWalletScreenProps {
1188
+ walletName: string | null;
1189
+ deeplinkUri: string;
1190
+ loading: boolean;
1191
+ /** When true (mobile), auto-opens deeplinks and shows the "Open wallet" button.
1192
+ * When false (desktop), shows inline authorization progress instead. */
1193
+ useDeeplink?: boolean;
1194
+ error?: string | null;
1195
+ onRetryStatus?: () => void;
1196
+ onBack?: () => void;
1197
+ onLogout: () => void;
1198
+ }
1199
+ /**
1200
+ * Wallet authorization screen. On mobile, provides a user-tappable button
1201
+ * that triggers the deeplink via window.open. On desktop, shows inline
1202
+ * authorization progress while wallet extension popups handle the flow.
1203
+ */
1204
+ declare function OpenWalletScreen({ walletName, deeplinkUri, loading, useDeeplink, error, onRetryStatus, onBack, onLogout, }: OpenWalletScreenProps): react_jsx_runtime.JSX.Element;
1205
+
1206
+ interface ConfirmSignScreenProps {
1207
+ walletName: string | null;
1208
+ signing: boolean;
1209
+ error: string | null;
1210
+ onSign: () => void;
1211
+ onLogout: () => void;
1212
+ }
1213
+ /**
1214
+ * Shown after the user returns from wallet authorization. Requires an explicit
1215
+ * button tap to initiate passkey signing (FaceID) rather than auto-triggering.
1216
+ */
1217
+ declare function ConfirmSignScreen({ walletName, signing, error, onSign, onLogout, }: ConfirmSignScreenProps): react_jsx_runtime.JSX.Element;
1218
+
868
1219
  interface TokenPickerScreenProps {
869
1220
  account: Account;
870
1221
  chains: Array<{
@@ -885,54 +1236,58 @@ interface TokenPickerScreenProps {
885
1236
  }
886
1237
  declare function TokenPickerScreen({ account, chains, onSelectAuthorized, onAuthorizeToken, onBack, onLogout, depositAmount, selectedTokenSymbol, selectedWalletId, }: TokenPickerScreenProps): react_jsx_runtime.JSX.Element;
887
1238
 
888
- interface GuestDepositScreenProps {
889
- amount: number;
890
- currency: string;
891
- merchantName?: string;
892
- onConnect: () => void;
893
- onSignIn: () => void;
894
- onBack?: () => void;
895
- loading?: boolean;
896
- error?: string | null;
897
- }
898
- declare function GuestDepositScreen({ amount, currency, merchantName, onConnect, onSignIn, onBack, loading, error, }: GuestDepositScreenProps): react_jsx_runtime.JSX.Element;
1239
+ type GuestBridgePhase = 'preparing' | 'building' | 'wallet' | 'sending' | 'completing' | 'done';
899
1240
 
900
- type GuestWalletPhase = 'connecting' | 'fetching-quote' | 'approving' | 'signing' | 'submitting';
901
- interface GuestWalletScreenProps {
902
- phase: GuestWalletPhase;
903
- amount: number;
904
- currency: string;
905
- onBack?: () => void;
1241
+ interface GuestTokenPickerScreenProps {
1242
+ entries: GuestTokenEntry[];
1243
+ loading: boolean;
1244
+ depositAmount?: number;
906
1245
  error?: string | null;
907
- onRetry?: () => void;
908
- }
909
- declare function GuestWalletScreen({ phase, amount, currency, onBack, error, onRetry, }: GuestWalletScreenProps): react_jsx_runtime.JSX.Element;
910
-
911
- interface OfferSetupScreenProps {
912
- amount: number;
913
- currency: string;
914
- onSetup: () => void;
915
- onDone: () => void;
916
- }
917
- declare function OfferSetupScreen({ amount, currency, onSetup, onDone, }: OfferSetupScreenProps): react_jsx_runtime.JSX.Element;
1246
+ pendingEntry: GuestTokenEntry | null;
1247
+ quoteFee: PreciseMoney | null;
1248
+ quoteLoading: boolean;
1249
+ onSelect: (entry: GuestTokenEntry) => void;
1250
+ onConfirm: () => void | Promise<void>;
1251
+ onBack: () => void;
1252
+ /** For gallery capture: start with the token list expanded (A06). */
1253
+ defaultTokenListExpanded?: boolean;
1254
+ /** Wallet provider name for the CTA (e.g. "MetaMask"). */
1255
+ providerName?: string;
1256
+ /** Whether the user has opted in to one-tap deposits. */
1257
+ oneTapEnabled: boolean;
1258
+ /** Toggle one-tap opt-in. */
1259
+ onToggleOneTap: (enabled: boolean) => void;
1260
+ /** Per-deposit limit (USD) for one-tap. */
1261
+ oneTapLimit: number;
1262
+ /** Update the per-deposit limit. */
1263
+ onSetOneTapLimit: (limit: number) => void;
1264
+ /** Shared screen mode for guest deposit or auth setup. */
1265
+ variant?: 'guest-deposit' | 'auth-setup';
1266
+ /** Override the primary CTA label. */
1267
+ confirmLabel?: string;
1268
+ /** Override the token card label. */
1269
+ selectionLabel?: string;
1270
+ /** Require a fee quote before enabling the primary CTA. */
1271
+ requireQuoteForConfirm?: boolean;
1272
+ /** Close the token list immediately after selection. */
1273
+ closeListOnSelect?: boolean;
1274
+ /** Override the empty-state copy below the picker. */
1275
+ emptyMessage?: string;
1276
+ /** Current bridge execution phase. When set, the CTA renders as a progress bar. */
1277
+ bridgePhase?: GuestBridgePhase | null;
1278
+ }
1279
+ declare function GuestTokenPickerScreen({ entries, loading, depositAmount, error, pendingEntry, quoteFee, quoteLoading, onSelect, onConfirm, onBack, defaultTokenListExpanded, providerName, oneTapEnabled, onToggleOneTap, oneTapLimit, onSetOneTapLimit, variant, confirmLabel, selectionLabel, requireQuoteForConfirm, closeListOnSelect, emptyMessage, bridgePhase, }: GuestTokenPickerScreenProps): react_jsx_runtime.JSX.Element;
918
1280
 
919
- interface SetupCompleteScreenProps {
920
- onDone: () => void;
1281
+ interface GuestPreauthSetupCompleteScreenProps {
1282
+ onClose: () => void;
1283
+ onLogout: () => void;
921
1284
  }
922
- declare function SetupCompleteScreen({ onDone }: SetupCompleteScreenProps): react_jsx_runtime.JSX.Element;
1285
+ declare function GuestPreauthSetupCompleteScreen({ onClose, onLogout, }: GuestPreauthSetupCompleteScreenProps): react_jsx_runtime.JSX.Element;
923
1286
 
924
- interface GuestSelectSourceScreenProps {
925
- chains: GuestSourceChain[];
926
- selectedChainName: string | null;
927
- selectedTokenSymbol: string | null;
928
- /** Keyed by `${chainId}:${tokenAddress}` → formatted balance string. */
929
- balances: Record<string, string>;
930
- onChainChange: (chainName: string, chainId: number) => void;
931
- onTokenChange: (tokenSymbol: string, tokenAddress: string, decimals: number) => void;
932
- onConfirm: () => void;
933
- onBack: () => void;
1287
+ interface GuestPreauthLinkingScreenProps {
1288
+ onLogout: () => void;
934
1289
  }
935
- declare function GuestSelectSourceScreen({ chains, selectedChainName, selectedTokenSymbol, balances, onChainChange, onTokenChange, onConfirm, onBack, }: GuestSelectSourceScreenProps): react_jsx_runtime.JSX.Element;
1290
+ declare function GuestPreauthLinkingScreen({ onLogout }: GuestPreauthLinkingScreenProps): react_jsx_runtime.JSX.Element;
936
1291
 
937
1292
  type FlowPhase = 'link' | 'deposit';
938
1293
 
@@ -941,8 +1296,8 @@ declare function FlowPhaseProvider({ phase, children, }: {
941
1296
  children: ReactNode;
942
1297
  }): react_jsx_runtime.JSX.Element;
943
1298
 
944
- declare const SWYPE_LOGO: string;
945
- /** @deprecated Use SWYPE_LOGO instead. Kept for backward compatibility. */
946
- declare const SWYPE_MASCOT: string;
1299
+ declare const BLINK_LOGO: string;
1300
+ /** @deprecated Use BLINK_LOGO instead. Kept for backward compatibility. */
1301
+ declare const BLINK_MASCOT: string;
947
1302
 
948
- export { type Account, type ActionExecutionResult, type AdvancedSettings, AdvancedSourceScreen, type Amount, type AuthorizationAction, type AuthorizationSession, type AuthorizationSessionDetail, type Chain, type Destination, type ErrorResponse, type FlowPhase, FlowPhaseProvider, GuestDepositScreen, type GuestQuote, GuestSelectSourceScreen, type GuestSourceChain, type GuestSourceToken, GuestWalletScreen, IconCircle, InfoBanner, type ListResponse, type MerchantAuthorization, type MerchantPublicKey, OfferSetupScreen, OutlineButton, PasskeyIframeBlockedError, PasskeyScreen, type PaymentStep, PoweredByFooter, PrimaryButton, type Provider, type RelayDepositStep, SWYPE_LOGO, SWYPE_MASCOT, ScreenHeader, ScreenLayout, SelectSourceScreen, SettingsMenu, SetupCompleteScreen, SetupScreen, type SourceOption, type SourceSelection, type SourceType, Spinner, type StepItem, StepList, SwypeLoadingScreen, SwypePayment, type SwypePaymentProps, SwypeProvider, type SwypeProviderProps, type ThemeMode, type ThemeTokens, type TokenBalance, TokenPickerScreen, type Transfer, type TransferDestination, type UserConfig, type Wallet, type WalletSource, type WalletToken, buildPasskeyPopupOptions, createPasskeyCredential, createPasskeyViaPopup, darkTheme, deviceHasPasskey, findDevicePasskey, findDevicePasskeyViaPopup, getTheme, lightTheme, resolvePasskeyRpId, api as swypeApi, useAuthorizationExecutor, useSwypeConfig, useSwypeDepositAmount, useTransferPolling, useTransferSigning };
1303
+ export { type Account, type ActionExecutionResult, type AdvancedSettings, AdvancedSourceScreen, type Amount, type AuthorizationAction, type AuthorizationSession, AuthorizationSessionCancelledError, type AuthorizationSessionDetail, BLINK_LOGO, BLINK_MASCOT, BlinkLoadingScreen, BlinkPayment, type BlinkPaymentProps, BlinkProvider, type BlinkProviderProps, type Chain, ConfirmSignScreen, DepositScreen, type Destination, type ErrorResponse, type FlowPhase, FlowPhaseProvider, type GuestBalanceOptionInput, type GuestBridgePhase, GuestPreauthLinkingScreen, GuestPreauthSetupCompleteScreen, type GuestTokenEntry, GuestTokenPickerScreen, type GuestTransferFee, IconCircle, InfoBanner, type ListResponse, LoginScreen, type MerchantAuthorization, type MerchantPublicKey, type MobileFlowState, OpenWalletScreen, OtpVerifyScreen, OutlineButton, PasskeyIframeBlockedError, PasskeyScreen, type PaymentPhase, PoweredByFooter, type PreciseMoney, PrimaryButton, type Provider, ScreenHeader, ScreenLayout, type ScreenName, SelectSourceScreen, SettingsMenu, SetupScreen, SetupStatusScreen, type SetupTokenOption, type SourceOption, type SourceSelection, type SourceType, Spinner, type StepItem, StepList, SuccessScreen, type ThemeMode, type ThemeTokens, type TokenBalance, TokenPickerScreen, type Transfer, type TransferDestination, type TransferPhase, TransferStatusScreen, type UserConfig, VerifyPasskeyScreen, type Wallet, WalletPickerScreen, type WalletSource, type WalletToken, api as blinkApi, credentialIdBase64ToBytes, darkTheme, deviceHasPasskey, findDevicePasskey, findDevicePasskeyViaPopup, getDeviceBiometricUnlockText, getTheme, guestEntryMatchingRecommended, isAuthorizationSessionCancelled, isExpectedAuthorizationCancellation, isUserDismissedAuthorizationError, lightTheme, mapGuestPickerEntries, resolvePasskeyRpId, screenForPhase, useAuthorizationExecutor, useBlinkConfig, useBlinkDepositAmount, useTransferPolling, useTransferSigning };