@unifold/connect-react-native 0.1.51 → 0.1.53

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/README.md CHANGED
@@ -36,7 +36,7 @@ Link Pay uses `@stripe/stripe-react-native`, which includes **native** code (App
36
36
 
37
37
  Importing `@unifold/connect-react-native` loads the Stripe UI registration in the same JS bundle as the provider. Ensure the peer dependencies in **Installation** above are installed so Metro does not duplicate native modules.
38
38
 
39
- **`expo-constants`** is a **dependency** of `@unifold/connect-react-native`. The prebuilt bundle uses a **static** `import` from `expo-constants` (in the Stripe helper that reads the Expo plugin) so Metro always links the module. (A runtime `require("expo-constants")` in that path was still emitted inside the bundle and could trigger “unknown module” in Metro.) You can still set **`config.stripeMerchantIdentifier`** on `UnifoldProvider` to override or skip reading the plugin from constants.
39
+ The Apple Pay **`merchantIdentifier`** in `app.json` is still required for the **native entitlement** at build time. The value used at runtime for `initStripe`, however, comes **only** from the Unifold dashboard (via the Stripe config endpoint) the SDK no longer reads it from a prop or `app.json`, so make sure the dashboard value matches the id compiled into your build.
40
40
 
41
41
  #### Expo Go vs development build vs prebuild
42
42
 
@@ -50,7 +50,7 @@ Importing `@unifold/connect-react-native` loads the Stripe UI registration in th
50
50
  1. **Peer dependencies** — Install everything in **Installation** (or `expo install …`). Missing peers often show up as duplicate native modules or Metro resolution errors.
51
51
  2. **`react-native-gesture-handler`** — In bare React Native, import it at the **entry file** first (see [React Navigation](https://reactnavigation.org/docs/getting-started/#installing-dependencies-into-a-bare-react-native-project)); Expo Router projects usually already satisfy this.
52
52
  3. **`UnifoldProvider` placement** — Wrap near the root so `beginDeposit` and theme context are available app-wide. Call `setDevApiUrl` **before** the provider if you use staging in development (see example app).
53
- 4. **Stripe Link Pay** — Requires a **development / EAS build** on Expo (not Expo Go), the Stripe **config plugin** in `app.json`, and `config.enableStripeLinkPay: true`. Apple Pay needs a matching `merchantIdentifier` (plugin and/or `config.stripeMerchantIdentifier`; Expo apps can rely on plugin + `expo-constants` auto-read in `StripeOnramp`).
53
+ 4. **Stripe Link Pay** — Requires a **development / EAS build** on Expo (not Expo Go), the Stripe **config plugin** in `app.json`, and `config.enableStripeLink: true`. Apple Pay's `merchantIdentifier` must be set in the `app.json` plugin (native entitlement); the runtime value is sourced from the Unifold dashboard (Stripe config endpoint), so keep the two in sync.
54
54
  5. **Theme** — `UnifoldProvider` applies `ThemeProvider` to **all** children. If you use another theme system, nest it inside or outside deliberately so `useTheme` resolves as you expect.
55
55
 
56
56
  ## Quick Start
@@ -192,8 +192,9 @@ await beginDeposit({
192
192
  | `config.fonts` | `FontConfig` | No | Granular font weight configuration |
193
193
  | `config.components` | `ComponentConfig` | No | Component-specific token overrides |
194
194
  | `config.sheetBorderRadius` | `SheetBorderRadius` | No | Border radius configuration for all bottom sheets (see below) |
195
- | `config.enableStripeLinkPay` | `boolean` | No | Show Pay with Link (Stripe) in the deposit menu (default: omit / falsy hides it). Stripe is bundled with Connect. |
196
- | `config.stripeMerchantIdentifier` | `string` | No | Apple Pay merchant id for Link Pay. Must match the Stripe Expo plugin in app.json. On Expo, omit if the id is only in the plugin (read from `expo-constants`). |
195
+ | `config.enableStripeLink` | `boolean` | No | Show Pay with Link (Stripe) in the deposit menu (default: omit / falsy hides it). Stripe is bundled with Connect. |
196
+
197
+ > **Apple Pay merchant id:** there is no longer an SDK config for this. The runtime value comes solely from the Unifold dashboard (Stripe config endpoint). Keep it in sync with the `merchantIdentifier` in your `app.json` Stripe plugin, which is still required for the native entitlement.
197
198
 
198
199
  ### SheetBorderRadius
199
200
 
@@ -251,8 +252,7 @@ const { beginDeposit, closeDeposit, publishableKey } = useUnifold();
251
252
  | `destinationTokenAddress` | `string` | No | Target token contract address |
252
253
  | `destinationTokenSymbol` | `string` | No | Target token symbol (e.g., `'USDC'`) |
253
254
  | `recipientAddress` | `string` | No | Wallet address to receive funds |
254
- | `stripeOnrampEmail` | `string` | No | Pre-fills Stripe Link Pay email when user opens Pay with Stripe Link from the deposit menu |
255
- | `stripeOnrampPhone` | `string` | No | Pre-fills Stripe Link Pay phone (use with `stripeOnrampEmail` per Stripe’s flow) |
255
+ | `user` | `{ email?: string; phone?: string }` | No | Host-app-supplied user identity. Pre-fills supported flows — currently Stripe Link Pay uses `user.email` / `user.phone` (with both set, Stripe may skip verify steps). |
256
256
  | `defaultChainType` | `'ethereum' \| 'solana' \| 'bitcoin'` | No | Pre-select source network type |
257
257
  | `defaultChainId` | `string` | No | Pre-select source chain ID |
258
258
  | `defaultTokenAddress` | `string` | No | Pre-select source token address |
@@ -308,7 +308,6 @@ import type {
308
308
  | react-native-gesture-handler | >= 2.14.0 |
309
309
  | react-native-svg | >= 13.0.0 |
310
310
  | react-native-webview | >= 13.0.0 |
311
- | expo-constants | Installed with Connect (>= 14) — mirrors `merchantIdentifier` from the Stripe Expo plugin into JS; optional override via `config.stripeMerchantIdentifier` |
312
311
 
313
312
  ## Support
314
313
 
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import React$1, { ReactNode } from 'react';
2
- export { AmountScreen, CreateSessionParams, CustomerVerification, KYCData, KYCWizardScreen, OnrampConfig, OnrampCustomer, OnrampError, OnrampErrorCode, OnrampScreen, OnrampSession, OnrampSessionTransactionDetails, OnrampStep, OnrampTransaction, StripeOnramp, StripeOnrampHook, StripeOnrampPreconfigure, StripeOnrampProps, getStripePublishableKey, setStripeOnrampApiUrl, setStripeOnrampPublishableKey, useStripeOnramp } from '@unifold/ui-react-native/stripe';
2
+ export { AmountScreen, CreateSessionParams, CustomerVerification, KYCData, KYCWizardScreen, OnrampConfig, OnrampCustomer, OnrampError, OnrampErrorCode, OnrampScreen, OnrampSession, OnrampSessionTransactionDetails, OnrampStep, OnrampTransaction, StripeOnramp, StripeOnrampConfig, StripeOnrampHook, StripeOnrampPreconfigure, StripeOnrampProps, getStripeConfig, getStripePublishableKey, setStripeOnrampApiUrl, setStripeOnrampPublishableKey, useStripeOnramp } from '@unifold/ui-react-native/stripe';
3
3
 
4
4
  /**
5
5
  * Unifold color palette for React Native
@@ -362,6 +362,21 @@ interface SupportedDestinationTokensResponse {
362
362
  */
363
363
  declare function getSupportedDestinationTokens(publishableKey?: string): Promise<SupportedDestinationTokensResponse>;
364
364
 
365
+ /**
366
+ * Host-app-supplied user identity, shared across deposit flows. An object (not a
367
+ * bare string) so more fields can be added later without churning the public API.
368
+ * - Coinbase Apple Pay: a valid `email` skips the email-entry/OTP steps (the user
369
+ * only verifies their phone; Coinbase's 60-day phone-freshness rule still applies).
370
+ * - Stripe Link Pay: `email`/`phone` pre-fill; with both set, Stripe may skip its
371
+ * verify steps.
372
+ */
373
+ interface UnifoldUser {
374
+ /** Host-trusted email. Coinbase skips its email steps when set & valid; Stripe pre-fills. */
375
+ email?: string;
376
+ /** User phone (Stripe Link pre-fill; with `email`, Stripe may skip verify steps). */
377
+ phone?: string;
378
+ }
379
+
365
380
  interface BorderRadiusConfig {
366
381
  borderTopLeftRadius?: number;
367
382
  borderTopRightRadius?: number;
@@ -405,7 +420,7 @@ type TransferInputVariant = "single_input" | "double_input" | "compact";
405
420
  */
406
421
  type DepositMenuDisplay = "stacked" | "tabs";
407
422
  /** Controls which screen opens first when the deposit modal is shown */
408
- type DepositInitialScreen = "main" | "transfer" | "card" | "tracker" | "cashapp" | "wallet";
423
+ type DepositInitialScreen = "main" | "transfer" | "card" | "tracker" | "cashapp" | "wallet" | "applepay";
409
424
  interface DepositModalProps {
410
425
  /** Whether the modal is visible */
411
426
  visible: boolean;
@@ -420,6 +435,12 @@ interface DepositModalProps {
420
435
  publishableKey: string;
421
436
  /** Custom modal title */
422
437
  modalTitle?: string;
438
+ /**
439
+ * Host-app-supplied user identity, set via `beginDeposit({ user })`. Consumed by:
440
+ * - Coinbase Apple Pay — a valid `user.email` skips the email-entry/OTP steps.
441
+ * - Stripe Link Pay — `user.email` / `user.phone` pre-fill (both may skip verify steps).
442
+ */
443
+ user?: UnifoldUser;
423
444
  /** Target token symbol (e.g., "USDC") */
424
445
  destinationTokenSymbol?: string;
425
446
  /** Recipient wallet address */
@@ -446,22 +467,14 @@ interface DepositModalProps {
446
467
  enableCashApp?: boolean;
447
468
  /** Enable "Connect Wallet" option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
448
469
  enableConnectWallet?: boolean;
470
+ /** Enable "Pay with Apple Pay" (Coinbase headless onramp) option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
471
+ enableCoinbaseApplePay?: boolean;
449
472
  /** Enable "Deposit with Card" (fiat on-ramp) option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? true. */
450
473
  enableFiatOnramp?: boolean;
451
474
  /** Show "Pay with Link" (Stripe) option in the deposit menu */
452
- enableStripeLinkPay?: boolean;
453
- /** Registered Stripe onramp component (Connect sets this from `enableStripeLinkPay`) */
475
+ enableStripeLink?: boolean;
476
+ /** Registered Stripe onramp component (Connect sets this from `enableStripeLink`) */
454
477
  StripeOnrampComponent?: React$1.ComponentType<any>;
455
- /** Pre-fills Stripe Link Pay email — set via `beginDeposit({ stripeOnrampEmail })` (forwarded as `email` on `StripeOnramp`) */
456
- stripeOnrampEmail?: string;
457
- /** Pre-fills Stripe Link Pay phone — set via `beginDeposit({ stripeOnrampPhone })` (forwarded as `phone` on `StripeOnramp`) */
458
- stripeOnrampPhone?: string;
459
- /**
460
- * Apple Pay merchant id for Stripe Link Pay. Forwarded to `StripeOnramp` as `merchantIdentifier`.
461
- * On Expo, you can omit this if the same value is set on the `@stripe/stripe-react-native` plugin
462
- * in app.json (the UI reads it via `expo-constants`).
463
- */
464
- stripeMerchantIdentifier?: string;
465
478
  /** Where to render the Stripe payment method selector: "header" or "inline". Default: "header" */
466
479
  stripePaymentSelectorPosition?: "header" | "inline";
467
480
  /** Skip the success confirmation screen and fire onComplete immediately. Default: false */
@@ -529,9 +542,11 @@ interface DepositModalProps {
529
542
  /** Price impact & slippage info sheet */
530
543
  infoSheet?: BorderRadiusConfig;
531
544
  /** Stripe Link Pay sheet */
532
- stripeLinkPay?: BorderRadiusConfig;
545
+ stripeLink?: BorderRadiusConfig;
533
546
  /** Cash App sheet */
534
547
  cashApp?: BorderRadiusConfig;
548
+ /** Coinbase Apple Pay sheet */
549
+ coinbaseApplePay?: BorderRadiusConfig;
535
550
  /** Connect Wallet sheet */
536
551
  connectWallet?: BorderRadiusConfig;
537
552
  /** WebView sheet (inside buy with card) */
@@ -636,26 +651,24 @@ interface UnifoldConnectProviderConfig {
636
651
  * Show "Pay with Link" (Stripe) option in the deposit menu.
637
652
  * Stripe onramp is bundled with Connect; set to false to hide the option.
638
653
  */
639
- enableStripeLinkPay?: boolean;
654
+ enableStripeLink?: boolean;
640
655
  /** Enable "Transfer Crypto" option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? true. */
641
656
  enableTransferCrypto?: boolean;
642
657
  /** Enable "Pay with Cash App" option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
643
658
  enableCashApp?: boolean;
644
659
  /** Enable "Connect Wallet" option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
645
660
  enableConnectWallet?: boolean;
661
+ /** Enable "Pay with Apple Pay" (Coinbase headless onramp) option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
662
+ enableCoinbaseApplePay?: boolean;
646
663
  /** Enable "Deposit with Card" (fiat on-ramp) option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? true. */
647
664
  enableFiatOnramp?: boolean;
648
- /**
649
- * Apple Pay merchant id (`merchant.com...`) for Stripe Link Pay. Must match the
650
- * `merchantIdentifier` in the `@stripe/stripe-react-native` Expo plugin (app.json).
651
- * On Expo you can omit this if it is only set in the plugin — `StripeOnramp` reads it from
652
- * `expo-constants`. Use this for bare React Native or to override.
653
- */
654
- stripeMerchantIdentifier?: string;
655
- /** Where to render the Stripe payment method selector: "header" (above amount) or "inline" (below). Default: "header" */
656
- stripePaymentSelectorPosition?: "header" | "inline";
657
- /** Skip the success confirmation screen and fire onComplete immediately. Default: false */
658
- stripeSkipSuccessConfirmation?: boolean;
665
+ /** Stripe Link Pay tuning options (only applies when `enableStripeLink` is true). */
666
+ stripeLink?: {
667
+ /** Where to render the Stripe payment method selector: "header" (above amount) or "inline" (below). Default: "header" */
668
+ paymentSelectorPosition?: "header" | "inline";
669
+ /** Skip the success confirmation screen and fire onComplete immediately. Default: false */
670
+ skipSuccessConfirmation?: boolean;
671
+ };
659
672
  };
660
673
  }
661
674
  interface DepositResult {
@@ -679,10 +692,15 @@ interface DepositConfig {
679
692
  defaultChainId?: string;
680
693
  defaultTokenAddress?: string;
681
694
  showBalance?: boolean;
682
- /** Pre-fills Stripe Link Pay email (`beginDeposit` only — not provider config) */
683
- stripeOnrampEmail?: string;
684
- /** Pre-fills Stripe Link Pay phone; with `stripeOnrampEmail`, Stripe may skip verify steps */
685
- stripeOnrampPhone?: string;
695
+ /**
696
+ * Host-app-supplied user identity (`beginDeposit` only — not provider config).
697
+ * Pre-fills supported flows and is kept as an object so more fields can be
698
+ * added later without new top-level params. Consumed by:
699
+ * - Coinbase Apple Pay — a valid `user.email` skips the email-entry/OTP steps.
700
+ * - Stripe Link Pay — `user.email` / `user.phone` (with both set, Stripe may
701
+ * skip verify steps).
702
+ */
703
+ user?: UnifoldUser;
686
704
  /**
687
705
  * How deposit confirmation and waiting behavior is handled.
688
706
  * - auto_ui (default): Automatically show "Processing deposit" UI and start polling after 10s. No "I've deposited" button.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import React$1, { ReactNode } from 'react';
2
- export { AmountScreen, CreateSessionParams, CustomerVerification, KYCData, KYCWizardScreen, OnrampConfig, OnrampCustomer, OnrampError, OnrampErrorCode, OnrampScreen, OnrampSession, OnrampSessionTransactionDetails, OnrampStep, OnrampTransaction, StripeOnramp, StripeOnrampHook, StripeOnrampPreconfigure, StripeOnrampProps, getStripePublishableKey, setStripeOnrampApiUrl, setStripeOnrampPublishableKey, useStripeOnramp } from '@unifold/ui-react-native/stripe';
2
+ export { AmountScreen, CreateSessionParams, CustomerVerification, KYCData, KYCWizardScreen, OnrampConfig, OnrampCustomer, OnrampError, OnrampErrorCode, OnrampScreen, OnrampSession, OnrampSessionTransactionDetails, OnrampStep, OnrampTransaction, StripeOnramp, StripeOnrampConfig, StripeOnrampHook, StripeOnrampPreconfigure, StripeOnrampProps, getStripeConfig, getStripePublishableKey, setStripeOnrampApiUrl, setStripeOnrampPublishableKey, useStripeOnramp } from '@unifold/ui-react-native/stripe';
3
3
 
4
4
  /**
5
5
  * Unifold color palette for React Native
@@ -362,6 +362,21 @@ interface SupportedDestinationTokensResponse {
362
362
  */
363
363
  declare function getSupportedDestinationTokens(publishableKey?: string): Promise<SupportedDestinationTokensResponse>;
364
364
 
365
+ /**
366
+ * Host-app-supplied user identity, shared across deposit flows. An object (not a
367
+ * bare string) so more fields can be added later without churning the public API.
368
+ * - Coinbase Apple Pay: a valid `email` skips the email-entry/OTP steps (the user
369
+ * only verifies their phone; Coinbase's 60-day phone-freshness rule still applies).
370
+ * - Stripe Link Pay: `email`/`phone` pre-fill; with both set, Stripe may skip its
371
+ * verify steps.
372
+ */
373
+ interface UnifoldUser {
374
+ /** Host-trusted email. Coinbase skips its email steps when set & valid; Stripe pre-fills. */
375
+ email?: string;
376
+ /** User phone (Stripe Link pre-fill; with `email`, Stripe may skip verify steps). */
377
+ phone?: string;
378
+ }
379
+
365
380
  interface BorderRadiusConfig {
366
381
  borderTopLeftRadius?: number;
367
382
  borderTopRightRadius?: number;
@@ -405,7 +420,7 @@ type TransferInputVariant = "single_input" | "double_input" | "compact";
405
420
  */
406
421
  type DepositMenuDisplay = "stacked" | "tabs";
407
422
  /** Controls which screen opens first when the deposit modal is shown */
408
- type DepositInitialScreen = "main" | "transfer" | "card" | "tracker" | "cashapp" | "wallet";
423
+ type DepositInitialScreen = "main" | "transfer" | "card" | "tracker" | "cashapp" | "wallet" | "applepay";
409
424
  interface DepositModalProps {
410
425
  /** Whether the modal is visible */
411
426
  visible: boolean;
@@ -420,6 +435,12 @@ interface DepositModalProps {
420
435
  publishableKey: string;
421
436
  /** Custom modal title */
422
437
  modalTitle?: string;
438
+ /**
439
+ * Host-app-supplied user identity, set via `beginDeposit({ user })`. Consumed by:
440
+ * - Coinbase Apple Pay — a valid `user.email` skips the email-entry/OTP steps.
441
+ * - Stripe Link Pay — `user.email` / `user.phone` pre-fill (both may skip verify steps).
442
+ */
443
+ user?: UnifoldUser;
423
444
  /** Target token symbol (e.g., "USDC") */
424
445
  destinationTokenSymbol?: string;
425
446
  /** Recipient wallet address */
@@ -446,22 +467,14 @@ interface DepositModalProps {
446
467
  enableCashApp?: boolean;
447
468
  /** Enable "Connect Wallet" option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
448
469
  enableConnectWallet?: boolean;
470
+ /** Enable "Pay with Apple Pay" (Coinbase headless onramp) option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
471
+ enableCoinbaseApplePay?: boolean;
449
472
  /** Enable "Deposit with Card" (fiat on-ramp) option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? true. */
450
473
  enableFiatOnramp?: boolean;
451
474
  /** Show "Pay with Link" (Stripe) option in the deposit menu */
452
- enableStripeLinkPay?: boolean;
453
- /** Registered Stripe onramp component (Connect sets this from `enableStripeLinkPay`) */
475
+ enableStripeLink?: boolean;
476
+ /** Registered Stripe onramp component (Connect sets this from `enableStripeLink`) */
454
477
  StripeOnrampComponent?: React$1.ComponentType<any>;
455
- /** Pre-fills Stripe Link Pay email — set via `beginDeposit({ stripeOnrampEmail })` (forwarded as `email` on `StripeOnramp`) */
456
- stripeOnrampEmail?: string;
457
- /** Pre-fills Stripe Link Pay phone — set via `beginDeposit({ stripeOnrampPhone })` (forwarded as `phone` on `StripeOnramp`) */
458
- stripeOnrampPhone?: string;
459
- /**
460
- * Apple Pay merchant id for Stripe Link Pay. Forwarded to `StripeOnramp` as `merchantIdentifier`.
461
- * On Expo, you can omit this if the same value is set on the `@stripe/stripe-react-native` plugin
462
- * in app.json (the UI reads it via `expo-constants`).
463
- */
464
- stripeMerchantIdentifier?: string;
465
478
  /** Where to render the Stripe payment method selector: "header" or "inline". Default: "header" */
466
479
  stripePaymentSelectorPosition?: "header" | "inline";
467
480
  /** Skip the success confirmation screen and fire onComplete immediately. Default: false */
@@ -529,9 +542,11 @@ interface DepositModalProps {
529
542
  /** Price impact & slippage info sheet */
530
543
  infoSheet?: BorderRadiusConfig;
531
544
  /** Stripe Link Pay sheet */
532
- stripeLinkPay?: BorderRadiusConfig;
545
+ stripeLink?: BorderRadiusConfig;
533
546
  /** Cash App sheet */
534
547
  cashApp?: BorderRadiusConfig;
548
+ /** Coinbase Apple Pay sheet */
549
+ coinbaseApplePay?: BorderRadiusConfig;
535
550
  /** Connect Wallet sheet */
536
551
  connectWallet?: BorderRadiusConfig;
537
552
  /** WebView sheet (inside buy with card) */
@@ -636,26 +651,24 @@ interface UnifoldConnectProviderConfig {
636
651
  * Show "Pay with Link" (Stripe) option in the deposit menu.
637
652
  * Stripe onramp is bundled with Connect; set to false to hide the option.
638
653
  */
639
- enableStripeLinkPay?: boolean;
654
+ enableStripeLink?: boolean;
640
655
  /** Enable "Transfer Crypto" option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? true. */
641
656
  enableTransferCrypto?: boolean;
642
657
  /** Enable "Pay with Cash App" option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
643
658
  enableCashApp?: boolean;
644
659
  /** Enable "Connect Wallet" option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
645
660
  enableConnectWallet?: boolean;
661
+ /** Enable "Pay with Apple Pay" (Coinbase headless onramp) option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? false. */
662
+ enableCoinbaseApplePay?: boolean;
646
663
  /** Enable "Deposit with Card" (fiat on-ramp) option. Overrides dashboard default. Resolves as flag ?? dashboard value ?? true. */
647
664
  enableFiatOnramp?: boolean;
648
- /**
649
- * Apple Pay merchant id (`merchant.com...`) for Stripe Link Pay. Must match the
650
- * `merchantIdentifier` in the `@stripe/stripe-react-native` Expo plugin (app.json).
651
- * On Expo you can omit this if it is only set in the plugin — `StripeOnramp` reads it from
652
- * `expo-constants`. Use this for bare React Native or to override.
653
- */
654
- stripeMerchantIdentifier?: string;
655
- /** Where to render the Stripe payment method selector: "header" (above amount) or "inline" (below). Default: "header" */
656
- stripePaymentSelectorPosition?: "header" | "inline";
657
- /** Skip the success confirmation screen and fire onComplete immediately. Default: false */
658
- stripeSkipSuccessConfirmation?: boolean;
665
+ /** Stripe Link Pay tuning options (only applies when `enableStripeLink` is true). */
666
+ stripeLink?: {
667
+ /** Where to render the Stripe payment method selector: "header" (above amount) or "inline" (below). Default: "header" */
668
+ paymentSelectorPosition?: "header" | "inline";
669
+ /** Skip the success confirmation screen and fire onComplete immediately. Default: false */
670
+ skipSuccessConfirmation?: boolean;
671
+ };
659
672
  };
660
673
  }
661
674
  interface DepositResult {
@@ -679,10 +692,15 @@ interface DepositConfig {
679
692
  defaultChainId?: string;
680
693
  defaultTokenAddress?: string;
681
694
  showBalance?: boolean;
682
- /** Pre-fills Stripe Link Pay email (`beginDeposit` only — not provider config) */
683
- stripeOnrampEmail?: string;
684
- /** Pre-fills Stripe Link Pay phone; with `stripeOnrampEmail`, Stripe may skip verify steps */
685
- stripeOnrampPhone?: string;
695
+ /**
696
+ * Host-app-supplied user identity (`beginDeposit` only — not provider config).
697
+ * Pre-fills supported flows and is kept as an object so more fields can be
698
+ * added later without new top-level params. Consumed by:
699
+ * - Coinbase Apple Pay — a valid `user.email` skips the email-entry/OTP steps.
700
+ * - Stripe Link Pay — `user.email` / `user.phone` (with both set, Stripe may
701
+ * skip verify steps).
702
+ */
703
+ user?: UnifoldUser;
686
704
  /**
687
705
  * How deposit confirmation and waiting behavior is handled.
688
706
  * - auto_ui (default): Automatically show "Processing deposit" UI and start polling after 10s. No "I've deposited" button.