@userflow-tech/react-native 0.4.4 → 0.4.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/README.md CHANGED
@@ -75,7 +75,10 @@ needed with any package manager.
75
75
  ### Packages
76
76
 
77
77
  ```bash
78
- # Expo (dev build)
78
+ # Expo SDK 56–57 (dev build)
79
+ npx expo install @userflow-tech/react-native @react-native-async-storage/async-storage react-native-webview react-native-view-shot
80
+
81
+ # Expo SDK 55 and older (dev build): pin view-shot, see below
79
82
  npx expo install @userflow-tech/react-native @react-native-async-storage/async-storage react-native-webview react-native-view-shot@^5.0.0
80
83
 
81
84
  # Bare React Native
@@ -88,17 +91,27 @@ majors. `react-native-webview` 14 is outside the peer range, and npm only warns
88
91
  `ERESOLVE overriding peer dependency` and installs it anyway. AsyncStorage 3
89
92
  sits next to the SDK's own 2.x copy, which leaves two copies of one native
90
93
  module. `npx expo install` picks Expo's bundled versions, which fit the ranges
91
- on Expo SDK 53–57.
94
+ on Expo SDK 53–57, except view-shot on Expo SDK 55 and older.
92
95
 
93
96
  `react-native-webview` and `react-native-view-shot` (`^5.0.0`) are **required
94
97
  peers**. npm 7+ and pnpm install them. Yarn 1 and
95
98
  `npm install --legacy-peer-deps` do not, so the commands above install them in
96
99
  the app. Both are native modules — rebuild after install (a Metro reload is not
97
- enough). On Expo SDK 55 and older,
98
- unpinned `npx expo install react-native-view-shot` resolves **4.0.3**, which
99
- does not satisfy the peer. Pin `^5.0.0` as in the command above. If the app
100
- already depends on 4.0.3, that same command is what fixes it: installing the
101
- SDK alone fails with
100
+ enough).
101
+
102
+ On Expo SDK 56 and 57, leave view-shot unpinned. Expo's default there (5.1.0)
103
+ satisfies the peer. A `^5.0.0` pin installs the newest 5.x instead, which
104
+ `expo doctor` reports as a version mismatch. To fix an app that already has the
105
+ pin, remove `"react-native-view-shot"` from `expo.install.exclude` if it is
106
+ there, then run `npx expo install react-native-view-shot`. While the exclude is
107
+ set, Expo installs the latest view-shot instead of 5.1.0, and `expo doctor`
108
+ skips the check. Installed with the SDK, npm keeps view-shot on 5.x; installed
109
+ on its own, it can pull 6.x, outside the peer range.
110
+
111
+ On Expo SDK 55 and older, unpinned `npx expo install react-native-view-shot`
112
+ resolves **4.0.3**, which does not satisfy the peer. Pin `^5.0.0` as in the
113
+ command above. If the app already depends on 4.0.3, that same command is what
114
+ fixes it: installing the SDK alone fails with
102
115
 
103
116
  ```text
104
117
  npm error Found: react-native-view-shot@4.0.3
@@ -107,8 +120,9 @@ npm error peer react-native-view-shot@"^5.0.0" from @userflow-tech/react-native
107
120
 
108
121
  Do not retry with `--force` or `--legacy-peer-deps`. That installs the SDK and
109
122
  leaves 4.0.3 in place. If that already happened, `Userflow.init` warns in
110
- development and names the installed version. If `expo doctor`
111
- reports the `^5.0.0` pin, exclude it from Expo's version check:
123
+ development and names the installed version. On Expo SDK 55 and older, also
124
+ exclude view-shot from Expo's version check. Otherwise `expo doctor` reports
125
+ the pin, and `npx expo install --fix` puts 4.0.3 back:
112
126
 
113
127
  ```json
114
128
  {
@@ -120,6 +134,10 @@ reports the `^5.0.0` pin, exclude it from Expo's version check:
120
134
  }
121
135
  ```
122
136
 
137
+ With the exclude set, always install view-shot as
138
+ `react-native-view-shot@^5.0.0`. Unpinned, Expo skips its version, so npm can
139
+ keep 4.0.3 or pull 6.x.
140
+
123
141
  On a bare React Native app, `expo-secure-store` needs Expo modules installed
124
142
  first (`npx install-expo-modules@latest`), then `npx expo install expo-secure-store`.
125
143
 
@@ -133,12 +151,36 @@ npx expo install react-native-safe-area-context @react-native-community/netinfo
133
151
  npm install 'react-native-safe-area-context@<6' '@react-native-community/netinfo@<13'
134
152
  ```
135
153
 
154
+ ### Babel plugin
155
+
156
+ Add `@userflow-tech/react-native/babel-plugin` to `babel.config.js`. It stamps
157
+ `View`, `Text`, `Pressable`, the Touchables, `TextInput`, and `Image` at build
158
+ time, so elements can be targeted without a `testID`. An Expo app without a
159
+ `babel.config.js` can create one with `npx expo customize babel.config.js`.
160
+
161
+ ```js
162
+ // babel.config.js
163
+ module.exports = function (api) {
164
+ api.cache(true);
165
+ return {
166
+ presets: ['babel-preset-expo'], // or the app's existing preset
167
+ plugins: ['@userflow-tech/react-native/babel-plugin'],
168
+ };
169
+ };
170
+ ```
171
+
172
+ Keep the app's own plugins. If it lists `react-native-reanimated/plugin` or
173
+ `react-native-worklets/plugin`, keep that one last. Start Metro once with a
174
+ cleared cache (`npx expo start -c`) so every file is stamped. Apps with Jest
175
+ should read [Babel plugin and snapshot tests](#babel-plugin-and-snapshot-tests).
176
+
136
177
  ### Install with an AI agent
137
178
 
138
- An Agent Skill that installs this SDK in Cursor, Claude Code, and other agents
139
- will be available soon. It will be `install-react-native-with-ai` in
140
- [userflow/ai-skills-library](https://github.com/userflow/ai-skills-library).
141
- Web apps will use `install-with-ai` from that library.
179
+ The `install-userflow-react-native-sdk-with-ai` Agent Skill installs this SDK
180
+ with Cursor, Claude Code, and other agents. It is in
181
+ [userflow/ai-skills-library](https://github.com/userflow/ai-skills-library),
182
+ whose README explains how to add it to your agent. Web apps use
183
+ `install-with-ai` from that library.
142
184
 
143
185
  ## Quick start
144
186
 
@@ -206,6 +248,9 @@ export default function RootLayout() {
206
248
  }
207
249
  ```
208
250
 
251
+ Expo Router apps also add `app/+native-intent.ts`, so Builder pairing links do
252
+ not navigate. See [Builder preview & pairing](#builder-preview--pairing).
253
+
209
254
  React Navigation:
210
255
 
211
256
  ```tsx
@@ -404,10 +449,12 @@ To preview draft flows from the Userflow builder onto a device (QR / deep link):
404
449
  `userflow-v7twv2fw2ja2jaco7kesvowmem` — **not** the env UUID) with the
405
450
  `@userflow-tech/react-native` config plugin, then **rebuild native**
406
451
  (`npx expo prebuild` / a new development client). Metro reload is not enough.
407
- 2. Call `Userflow.init` and wrap the tree in `UserflowProvider`.
408
- 3. Open the builder Preview dialog → **Pair a device** → scan/open the QR. The
452
+ 2. Expo Router only: add `app/+native-intent.ts` (below) so pairing and preview
453
+ links do not navigate.
454
+ 3. Call `Userflow.init` and wrap the tree in `UserflowProvider`.
455
+ 4. Open the builder Preview dialog → **Pair a device** → scan/open the QR. The
409
456
  app should show a **Preview mode** top bar.
410
- 4. Hit **Preview** in the builder. The draft flow lands on that paired device.
457
+ 5. Hit **Preview** in the builder. The draft flow lands on that paired device.
411
458
 
412
459
  ```json
413
460
  {
@@ -422,8 +469,20 @@ To preview draft flows from the Userflow builder onto a device (QR / deep link):
422
469
  `schemeId` is the env's `scheme_id` from the dashboard, copied exactly. It is
423
470
  `userflow-` followed by an opaque id. Do not rely on its shape. Preview links
424
471
  (`…://?token=…`) and pairing links (`…://?pairing_token=…`) both ride that one
425
- scheme. Expo Router needs no extra host files for these root-form URLs, and
426
- pairing works in every build, including release.
472
+ scheme. Pairing works in every build, including release.
473
+
474
+ Expo Router treats these root-form URLs as `/`, so without
475
+ `app/+native-intent.ts` it navigates when a link arrives: the app jumps to its
476
+ home route, or element selection fails with "Can't select this element".
477
+ Re-export the SDK's handler to keep the current screen:
478
+
479
+ ```ts
480
+ // app/+native-intent.ts
481
+ export { redirectSystemPath } from '@userflow-tech/react-native/expo-router';
482
+ ```
483
+
484
+ If the app already has a `+native-intent.ts`, wrap it instead. See
485
+ [docs/deep-linking.md](https://unpkg.com/@userflow-tech/react-native/docs/deep-linking.md).
427
486
 
428
487
  Deep-link / pairing helpers:
429
488
 
@@ -537,10 +596,10 @@ and forwards URLs itself.
537
596
 
538
597
  ### Subpath exports
539
598
 
540
- | Import | Provides |
541
- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------- |
542
- | `@userflow-tech/react-native/navigation` | `WithUserflowReactNavigation` |
543
- | `@userflow-tech/react-native/expo-router` | `UserflowExpoRouterScreenTracker`, `useUserflowExpoRouter`, `redirectSystemPath` (for `+native-intent`) |
599
+ | Import | Provides |
600
+ | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
601
+ | `@userflow-tech/react-native/navigation` | `WithUserflowReactNavigation` |
602
+ | `@userflow-tech/react-native/expo-router` | `UserflowExpoRouterScreenTracker`, `useUserflowExpoRouter`, `redirectSystemPath` and `createRedirectSystemPath` (for `+native-intent`), `isUserflowLinkPath`, type `RedirectSystemPathOptions` |
544
603
 
545
604
  ## Guides in this package
546
605
 
@@ -568,17 +627,16 @@ These guides also ship in the package, under
568
627
  - Client conditions — `ELEMENT` PRESENT / NOT_PRESENT on manual anchors and
569
628
  AUTO selectors (guarded: weak evidence stays unknown)
570
629
  - Connection lifecycle — suspend/resume, reconnect, optional NetInfo
630
+ - Build-time stamping with `@userflow-tech/react-native/babel-plugin`
631
+ (`stampOnly: true` stamps `nativeID` only; full mode is the default). Jest
632
+ runs the plugin too, which changes snapshots; see
633
+ [Babel plugin and snapshot tests](#babel-plugin-and-snapshot-tests).
571
634
 
572
635
  ### Experimental
573
636
 
574
637
  - AUTO / codeless element targeting (exact-id fast path + scored matcher;
575
638
  scored path needs Babel full mode to populate the auto-anchor registry).
576
639
  See [docs/anchoring.md](https://unpkg.com/@userflow-tech/react-native/docs/anchoring.md).
577
- - Build-time stamping with `@userflow-tech/react-native/babel-plugin`
578
- (`stampOnly: true` stamps `nativeID` only; full mode is the default). Jest
579
- runs the plugin too, which changes snapshots. Read
580
- [Babel plugin and snapshot tests](#babel-plugin-and-snapshot-tests) before
581
- enabling it.
582
640
 
583
641
  ### Not available yet
584
642
 
@@ -602,7 +660,7 @@ missing lines are included):
602
660
  ```text
603
661
  [Userflow] Native setup is incomplete. Flows may not run until you fix the following, then rebuild the app (a Metro reload is not enough):
604
662
  - @react-native-async-storage/async-storage is not linked. Anonymous users and Builder pairing will not persist. Add it to the app package.json (npx expo install @react-native-async-storage/async-storage), run pod install on iOS, and rebuild.
605
- - react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install react-native-view-shot@^5.0.0 and rebuild. On Expo SDK 54, pin ^5.0.0; an unpinned npx expo install resolves 4.0.3.
663
+ - react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install it and rebuild. On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it. Otherwise install react-native-view-shot@^5.0.0; on Expo SDK 55 and older, an unpinned npx expo install resolves 4.0.3.
606
664
  - react-native-webview is not linked. Evaluate JavaScript and WebView banners will not run. Install it (npx expo install react-native-webview) and rebuild.
607
665
  - react-native-device-info is not linked, so app_version and app_build are not sent. npm install react-native-device-info, then rebuild.
608
666
  See node_modules/@userflow-tech/react-native/docs/troubleshooting.md.
@@ -666,6 +724,28 @@ jest.mock('@userflow-tech/react-native/navigation', () => ({
666
724
  In a JavaScript setup file, drop the `ReactNode` import and the type
667
725
  annotations.
668
726
 
727
+ If `app/+native-intent.ts` imports `redirectSystemPath` or
728
+ `createRedirectSystemPath`, replace the `@userflow-tech/react-native/expo-router`
729
+ mock above with the one below (in a JavaScript setup file, drop its type
730
+ annotations too). Two `jest.mock` calls for one path do not merge; the later
731
+ one wins. Expo Router loads `+native-intent.ts` when a test renders the
732
+ router, and the mock replaces the whole module, so an export it leaves out is
733
+ `undefined`. A `+native-intent.ts` that calls `createRedirectSystemPath()` then
734
+ fails the suite with `createRedirectSystemPath is not a function`. These stubs
735
+ pass every URL through, as the real handlers do for links that are not Userflow
736
+ links:
737
+
738
+ ```ts
739
+ jest.mock('@userflow-tech/react-native/expo-router', () => ({
740
+ UserflowExpoRouterScreenTracker: () => null,
741
+ redirectSystemPath: ({ path }: { path: string }) => path,
742
+ createRedirectSystemPath:
743
+ ({ next }: { next?: (event: { path: string }) => unknown } = {}) =>
744
+ (event: { path: string }) =>
745
+ next ? next(event) : event.path,
746
+ }));
747
+ ```
748
+
669
749
  A custom Metro config that does not extend `getDefaultConfig` from `expo/metro-config`
670
750
  or `@react-native/metro-config` leaves `allowOptionalDependencies` off. Optional
671
751
  peers that this package loads inside `try/catch` then fail the bundle with
@@ -673,8 +753,8 @@ peers that this package loads inside `try/catch` then fail the bundle with
673
753
 
674
754
  ### Babel plugin and snapshot tests
675
755
 
676
- If you add the optional `@userflow-tech/react-native/babel-plugin` to
677
- `babel.config.js`, Jest runs it too, because `babel-jest` reads the same config.
756
+ With `@userflow-tech/react-native/babel-plugin` in `babel.config.js`, Jest
757
+ runs it too, because `babel-jest` reads the same config.
678
758
  The plugin adds props to `View`, `Text`, `Pressable`, the Touchables,
679
759
  `TextInput`, and `Image`, and React Native's Jest mocks render them, so they
680
760
  appear in snapshots:
@@ -705,7 +785,8 @@ or moving or renaming a file changes them again. The plugin also imports this
705
785
  package into every stamped file, so any test that renders a stamped component
706
786
  loads the SDK. Keep the mock above in the Jest setup file.
707
787
 
708
- Skip the plugin under Jest:
788
+ Skip the plugin under Jest, and keep the app's own plugins in every
789
+ environment:
709
790
 
710
791
  ```js
711
792
  // babel.config.js
@@ -713,7 +794,11 @@ module.exports = function (api) {
713
794
  const isTest = api.env('test');
714
795
  return {
715
796
  presets: ['babel-preset-expo'],
716
- plugins: isTest ? [] : ['@userflow-tech/react-native/babel-plugin'],
797
+ plugins: [
798
+ // ...the app's own plugins
799
+ ...(isTest ? [] : ['@userflow-tech/react-native/babel-plugin']),
800
+ // react-native-reanimated/plugin or react-native-worklets/plugin, if listed, stays last
801
+ ],
717
802
  };
718
803
  };
719
804
  ```
@@ -78,6 +78,32 @@ export const redirectSystemPath = createRedirectSystemPath({
78
78
  });
79
79
  ```
80
80
 
81
+ `next` runs only for links that are not Userflow links. A pairing or preview
82
+ link returns `null` before `next` is called, so host code inside `next` (logging
83
+ incoming URLs, for example) never sees it. If the host must see every URL, run
84
+ its code first, then return the SDK handler's result:
85
+
86
+ ```ts
87
+ import {
88
+ createRedirectSystemPath,
89
+ type RedirectSystemPathOptions,
90
+ } from '@userflow-tech/react-native/expo-router';
91
+
92
+ const userflowRedirectSystemPath = createRedirectSystemPath({
93
+ next: (event) => event.path, // the host's handling of non-Userflow links
94
+ });
95
+
96
+ export function redirectSystemPath(event: RedirectSystemPathOptions) {
97
+ try {
98
+ // Runs for every URL, Userflow links included. Use the app's own logger here.
99
+ console.log('[app] incoming URL', event.path);
100
+ } catch {
101
+ // Expo warns that throwing here can crash the app.
102
+ }
103
+ return userflowRedirectSystemPath(event);
104
+ }
105
+ ```
106
+
81
107
  Bare React Native / React Navigation apps need nothing beyond scheme
82
108
  registration.
83
109
 
@@ -7,23 +7,23 @@ Messages are quoted exactly so you can search logs for them.
7
7
 
8
8
  | Symptom / log message | Likely cause | Fix |
9
9
  | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
10
- | `expo doctor` reports `react-native-view-shot` | The app pins `^5.0.0` and Expo SDK 55 and older expect 4.0.3. | Keep the pin. Add `"react-native-view-shot"` to `expo.install.exclude`. |
10
+ | `expo doctor` reports `react-native-view-shot` | The app pins `^5.0.0`. Expo SDK 55 and older expect 4.0.3. Expo SDK 56 and 57 expect 5.1.0, and the pin installed a newer 5.x. | Expo SDK 55 and older: keep the pin and add `"react-native-view-shot"` to `expo.install.exclude`. Expo SDK 56 and 57: drop the pin, remove `"react-native-view-shot"` from `expo.install.exclude` if it is there, and reinstall with `npx expo install react-native-view-shot`. |
11
11
  | `Unable to resolve module` for an optional peer (`netinfo`, `expo-secure-store`, `expo-router`, safe-area, navigation) | A custom Metro config does not extend `getDefaultConfig`, so `allowOptionalDependencies` is off. | Extend `getDefaultConfig` from `expo/metro-config` or `@react-native/metro-config`. |
12
12
  | `ERESOLVE` while installing `@userflow-tech/react-native` | The app already has a version outside a peer range: view-shot 4.0.3 (what unpinned `npx expo install` installs on Expo SDK 55 and older), NetInfo 9.x, safe-area-context 3.x, WebView 13.6.x or 14.x, or React Native older than 0.76. | Move that package into the range in the package README. For view-shot, npm prints `Found: react-native-view-shot@4.0.3` and `peer react-native-view-shot@"^5.0.0" from @userflow-tech/react-native`. Install the SDK and `react-native-view-shot@^5.0.0` in one command, then add `"react-native-view-shot"` to `expo.install.exclude` on Expo SDK 55 and older. Do not retry with `--force` or `--legacy-peer-deps`; that leaves 4.0.3 installed. Raise React Native to 0.76 or later when that is the conflict. |
13
13
  | `npm warn ERESOLVE overriding peer dependency` naming `react-native-webview`, or `npm ls` lists two versions of `@react-native-async-storage/async-storage` | An unpinned bare install picked WebView 14 (outside `>=13.8.0 <14`) or AsyncStorage 3 (the SDK keeps its own 2.x copy). npm only warns and installs the invalid tree. | Reinstall with the ranges from the bare command in the package README: `'@react-native-async-storage/async-storage@^2'` and `'react-native-webview@>=13.8.0 <14'`. Then run `pod install` and rebuild. |
14
- | Yarn 1 or `npm install --legacy-peer-deps` succeeded, but `react-native-webview` or `react-native-view-shot` is not installed | Those installs do not fetch peers. WebView and view-shot are required peers, not dependencies. | Install `react-native-webview` and `react-native-view-shot@^5.0.0` in the app, then rebuild native. |
14
+ | Yarn 1 or `npm install --legacy-peer-deps` succeeded, but `react-native-webview` or `react-native-view-shot` is not installed | Those installs do not fetch peers. WebView and view-shot are required peers, not dependencies. | Install `react-native-webview` and `react-native-view-shot` in the app (on Expo SDK 56 and 57, `npx expo install react-native-view-shot` unpinned; otherwise `react-native-view-shot@^5.0.0`), then rebuild native. |
15
15
  | Banners, flow cards, or Builder bars draw under the status bar, notch, or home indicator. Development logs `[Userflow] react-native-safe-area-context is not installed, so banners, flow cards, and Builder bars draw under the status bar and home indicator. Install it (npx expo install react-native-safe-area-context) and wrap the app in <SafeAreaProvider>.` | `react-native-safe-area-context` is not installed, so insets are zero. | Install the package and wrap the tree in `<SafeAreaProvider>`. |
16
16
  | `Uncaught Error` / `NativeModule.RNCNetInfo is null` as soon as `Userflow.init` runs | On SDK 0.3.1 and earlier, NetInfo's JavaScript was loaded while its native module was not in the binary. Debug builds show a red screen. Dismissing it leaves the app running; a release build can crash. | Link `@react-native-community/netinfo` and rebuild, or remove it. Current versions skip NetInfo when `RNCNetInfo` is not registered and log one dev warning instead. |
17
17
  | `[@userflow-tech/react-native] schemeId "…" looks like an environment id. Pass the scheme_id value that starts with userflow- (an opaque id from the dashboard), not the environment UUID.` | The config plugin received the environment UUID. | Pass the `scheme_id` (`userflow-…`) from the dashboard. |
18
18
  | `No schemeId was passed, so the plugin left the native config unchanged. Builder preview and pairing links will not open this app. Pass the environment scheme_id (userflow-...) from the Userflow dashboard as the plugin schemeId.` | `expo prebuild` ran the plugin without `schemeId`. | Add `{ "schemeId": "userflow-…" }` and rebuild native. |
19
- | react-native-view-shot is not a direct dependency. Builder element selection needs >=5.0.0. On Expo SDK 54, an unpinned `npx expo install react-native-view-shot` resolves 4.0.3. Pin ^5.0.0. If expo doctor reports a version mismatch, add "react-native-view-shot" to expo.install.exclude. | Prebuild did not find view-shot in the app `package.json`. | `npx expo install react-native-view-shot@^5.0.0` and rebuild. |
19
+ | react-native-view-shot is not a direct dependency. Builder element selection needs >=5.0.0. On Expo SDK 56 and 57, run `npx expo install react-native-view-shot` unpinned, with no expo.install.exclude entry for it. On Expo SDK 55 and older, an unpinned install resolves 4.0.3, so pin ^5.0.0 and add "react-native-view-shot" to expo.install.exclude. | Prebuild did not find view-shot in the app `package.json`. | Expo SDK 56 and 57: `npx expo install react-native-view-shot` (unpinned). Expo SDK 55 and older: `npx expo install react-native-view-shot@^5.0.0` and add `"react-native-view-shot"` to `expo.install.exclude`. Then rebuild. |
20
20
  | `react-native-safe-area-context is not listed in the app package.json. Expo SDK 53 does not autolink native modules that the app only receives indirectly. Without the native module, banners, flow cards, and Builder bars draw under the status bar and home indicator. Install it in the app (npx expo install react-native-safe-area-context) and wrap the app in <SafeAreaProvider>.` | Expo SDK older than 54, and safe-area-context is not a direct dependency, so its native module is not autolinked. | `npx expo install react-native-safe-area-context` and wrap the tree in `<SafeAreaProvider>`. |
21
- | `[Userflow] react-native-view-shot@4.0.3 is older than 5.0.0, so Builder element selection may not get a screenshot.` The installed version is filled in. The warning also says not to retry with `--force` or `--legacy-peer-deps`. | view-shot 4.x is installed, usually because an `ERESOLVE` was retried with `--force` or `--legacy-peer-deps`, or the 4.0.3 default on Expo SDK 55 and older was left in place. | Install `react-native-view-shot@^5.0.0` in the same command as the SDK and rebuild. On Expo SDK 55 and older, add `"react-native-view-shot"` to `expo.install.exclude`. |
22
- | `react-native-view-shot@4.0.3 is older than 5.0.0. Expo SDK 54's default is 4.0.3, which does not work with this SDK. Pin ^5.0.0 and add "react-native-view-shot" to expo.install.exclude if expo doctor complains.` | The app has view-shot 4.x. | Pin `^5.0.0` and rebuild. |
21
+ | `[Userflow] react-native-view-shot@4.0.3 is older than 5.0.0, so Builder element selection may not get a screenshot.` The installed version is filled in. The warning also says not to retry with `--force` or `--legacy-peer-deps`. | view-shot 4.x is installed, usually because an `ERESOLVE` was retried with `--force` or `--legacy-peer-deps`, or the 4.0.3 default on Expo SDK 55 and older was left in place. | Expo SDK 56 and 57: remove any view-shot entry from `expo.install.exclude`, run `npx expo install react-native-view-shot` unpinned, and rebuild. Otherwise install `react-native-view-shot@^5.0.0` in the same command as the SDK and rebuild; on Expo SDK 55 and older, also add `"react-native-view-shot"` to `expo.install.exclude`. |
22
+ | `react-native-view-shot@4.0.3 is older than 5.0.0, which does not work with this SDK. On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it. Expo SDK 55 and older default to 4.0.3: pin ^5.0.0 and add "react-native-view-shot" to expo.install.exclude.` | The app has view-shot 4.x. | Expo SDK 56 and 57: `npx expo install react-native-view-shot` (unpinned), then rebuild. Expo SDK 55 and older: pin `^5.0.0`, add the exclude, and rebuild. |
23
23
  | `@react-native-async-storage/async-storage is not listed in the app package.json. Expo SDK 53 does not autolink native modules that the app only receives indirectly. Install it in the app (npx expo install @react-native-async-storage/async-storage) and rebuild.` | Expo SDK older than 54, and AsyncStorage is only a transitive dependency. The WebView line is the same shape with `react-native-webview`. | Install that package in the app and rebuild. |
24
24
  | `[Userflow] Native setup is incomplete. Flows may not run until you fix the following, then rebuild the app (a Metro reload is not enough):` | Dev-only check on the first `Userflow.init`. Following lines name each missing native module. A missing safe-area package is a separate warning, because flows still run. | Install the named packages and rebuild. The footer is `See node_modules/@userflow-tech/react-native/docs/troubleshooting.md.` |
25
25
  | `- @react-native-async-storage/async-storage is not linked. Anonymous users and Builder pairing will not persist. Add it to the app package.json (npx expo install @react-native-async-storage/async-storage), run pod install on iOS, and rebuild.` | AsyncStorage's native module is not in this binary. | Add it to the app `package.json`, run `pod install` on iOS, and rebuild. |
26
- | `- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install react-native-view-shot@^5.0.0 and rebuild. On Expo SDK 54, pin ^5.0.0; an unpinned npx expo install resolves 4.0.3.` | `RNViewShot` is not registered. | Install `react-native-view-shot@^5.0.0` and rebuild. |
26
+ | `- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install it and rebuild. On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it. Otherwise install react-native-view-shot@^5.0.0; on Expo SDK 55 and older, an unpinned npx expo install resolves 4.0.3.` | `RNViewShot` is not registered. | Expo SDK 56 and 57: `npx expo install react-native-view-shot` (unpinned). Otherwise install `react-native-view-shot@^5.0.0`. Then rebuild. |
27
27
  | `- react-native-webview is not linked. Evaluate JavaScript and WebView banners will not run. Install it (npx expo install react-native-webview) and rebuild.` | The WebView native module is not registered. | Install `react-native-webview` and rebuild. |
28
28
  | `- react-native-device-info is not linked, so app_version and app_build are not sent. npm install react-native-device-info, then rebuild.` | Bare React Native, and `RNDeviceInfo` is not registered. Expo apps that have `expo-constants` do not log this line. | `npm install react-native-device-info` and rebuild. |
29
29
  | `[Userflow] This app is running in Expo Go, which cannot load the SDK native modules. Builder preview links will not open the app. Use a development build (npx expo run:ios / npx expo run:android).` | The app is the Expo Go store client. | Use a development build. |
@@ -114,18 +114,18 @@ Id matching: dashboard `#invite-teammates` ↔ `userflowId="invite-teammates"`,
114
114
 
115
115
  Full setup: [deep-linking.md](deep-linking.md). Pairing is available in all builds (including release).
116
116
 
117
- | Symptom | Likely cause | Fix |
118
- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
119
- | Deep link opens the app but nothing happens | Scheme added in config but **no native rebuild** | `npx expo prebuild` / new development client; Metro reload is not enough |
120
- | Deep link opens the app but nothing happens, and no **Preview mode** top bar appears | `Userflow.init()` rejected, so there is no session to preview into | Check the logs for `[Userflow] Builder pairing link received, but Userflow.init() failed` — fix that error (usually `clientToken`) and re-open the link |
121
- | Killed app opens from a pairing link with no banner, or Preview returns on the wrong step | Pairing did not resume, or the install joined as a new device while the old presence was still on the topic | Install `expo-secure-store` so a relaunch can resume. A cold start should show **Connecting to Builder…** immediately, then **Preview mode**, with the flow at step 1. `exitPreview()` or an expired token ends resume |
122
- | Deep link opens the app and the router shows **Unmatched Route** / "page could not be found" | Deep link is not the root form from the QR; **or** the link was rebuilt with the app's own scheme instead of `scheme_id` | Open the QR unmodified (`userflow-<id>://?pairing_token=…`). If the log says `a scheme Userflow does not own`, do not substitute your app scheme |
123
- | "Can't select this element" right after pairing, or the app jumps to home when pairing | Expo Router navigated on the pairing link | Add `app/+native-intent.ts` exporting `redirectSystemPath` from `@userflow-tech/react-native/expo-router` (see [deep-linking.md](deep-linking.md#expo-router-hosts)) |
124
- | Pairing deep link ignored (preview URL may still work) | Scheme is `userflow-*` but the id after it is empty or has stray hyphens | Use the env's `scheme_id` from the dashboard exactly (e.g. `userflow-v7twv2fw2ja2jaco7kesvowmem`), not the env UUID |
125
- | Builder says “A device was paired earlier…” and Preview closes immediately after a brief spinner | Stale pairing session still present; a ghost device acks | Pair again on the device you are watching, or clear the env's pairing session and re-QR |
126
- | Preview succeeds on the server but the phone stays idle | App is not the paired instance (no **Preview mode** top bar) | Confirm the top bar before hitting Preview; re-open the pairing QR on this install |
127
- | QR / `https://…/pair/<jwt>` does nothing in the app | SDK only parses the **scheme** form after the backend redirect | Open via the OS (scan QR) or forward `{schemeId}://?pairing_token=…` with `handlePairingUrl` |
128
- | Builder selector has no screenshot after Confirm | Missing / unlinked `react-native-view-shot`, or 4.0.3 from Expo SDK 55 and older | Install `react-native-view-shot@^5.0.0` and **rebuild native**. At init, look for `- react-native-view-shot is not linked, so Builder element selection gets no screenshot`. When confirming a pick, look for `[Userflow] Required peer react-native-view-shot is not installed; skipping picker screenshot.` |
117
+ | Symptom | Likely cause | Fix |
118
+ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
119
+ | Deep link opens the app but nothing happens | Scheme added in config but **no native rebuild** | `npx expo prebuild` / new development client; Metro reload is not enough |
120
+ | Deep link opens the app but nothing happens, and no **Preview mode** top bar appears | `Userflow.init()` rejected, so there is no session to preview into | Check the logs for `[Userflow] Builder pairing link received, but Userflow.init() failed` — fix that error (usually `clientToken`) and re-open the link |
121
+ | Killed app opens from a pairing link with no banner, or Preview returns on the wrong step | Pairing did not resume, or the install joined as a new device while the old presence was still on the topic | Install `expo-secure-store` so a relaunch can resume. A cold start should show **Connecting to Builder…** immediately, then **Preview mode**, with the flow at step 1. `exitPreview()` or an expired token ends resume |
122
+ | Deep link opens the app and the router shows **Unmatched Route** / "page could not be found" | Deep link is not the root form from the QR; **or** the link was rebuilt with the app's own scheme instead of `scheme_id` | Open the QR unmodified (`userflow-<id>://?pairing_token=…`). If the log says `a scheme Userflow does not own`, do not substitute your app scheme |
123
+ | "Can't select this element" right after pairing, or the app jumps to home when pairing | Expo Router navigated on the pairing link | Add `app/+native-intent.ts` exporting `redirectSystemPath` from `@userflow-tech/react-native/expo-router` (see [deep-linking.md](deep-linking.md#expo-router-hosts)) |
124
+ | Pairing deep link ignored (preview URL may still work) | Scheme is `userflow-*` but the id after it is empty or has stray hyphens | Use the env's `scheme_id` from the dashboard exactly (e.g. `userflow-v7twv2fw2ja2jaco7kesvowmem`), not the env UUID |
125
+ | Builder says “A device was paired earlier…” and Preview closes immediately after a brief spinner | Stale pairing session still present; a ghost device acks | Pair again on the device you are watching, or clear the env's pairing session and re-QR |
126
+ | Preview succeeds on the server but the phone stays idle | App is not the paired instance (no **Preview mode** top bar) | Confirm the top bar before hitting Preview; re-open the pairing QR on this install |
127
+ | QR / `https://…/pair/<jwt>` does nothing in the app | SDK only parses the **scheme** form after the backend redirect | Open via the OS (scan QR) or forward `{schemeId}://?pairing_token=…` with `handlePairingUrl` |
128
+ | Builder selector has no screenshot after Confirm | Missing / unlinked `react-native-view-shot`, or 4.0.3 from Expo SDK 55 and older | Install view-shot (on Expo SDK 56 and 57, `npx expo install react-native-view-shot` unpinned; otherwise `react-native-view-shot@^5.0.0`) and **rebuild native**. At init, look for `- react-native-view-shot is not linked, so Builder element selection gets no screenshot`. When confirming a pick, look for `[Userflow] Required peer react-native-view-shot is not installed; skipping picker screenshot.` |
129
129
 
130
130
  ## Expo
131
131
 
@@ -137,11 +137,12 @@ Full setup: [deep-linking.md](deep-linking.md). Pairing is available in all buil
137
137
 
138
138
  ## Jest
139
139
 
140
- | Symptom | Likely cause | Fix |
141
- | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
142
- | Snapshots gain `nativeID="uf_…"`, `collapsable={false}`, `__ufid`, or `__ufManual` props, and keep changing after unrelated JSX edits | The Babel plugin runs under Jest, because `babel-jest` reads `babel.config.js`. Its ids depend on file path, component name, sibling order, and static labels. | Skip the plugin when `api.env('test')` is true. See the README section "Babel plugin and snapshot tests". |
143
- | `Caching has already been configured with .never or .forever()` after adding `api.env('test')` | `babel.config.js` still calls `api.cache(true)` before `api.env`. | Remove `api.cache(true)`. `api.env` already caches per environment. |
144
- | Component tests load the SDK after enabling the Babel plugin | Full mode imports `@userflow-tech/react-native` into every stamped file. | Mock the SDK in the Jest setup file, or skip the plugin in tests. |
140
+ | Symptom | Likely cause | Fix |
141
+ | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
142
+ | `Jest encountered an unexpected token` in a test that loads `@userflow-tech/react-native` or one of its subpaths | The package's `react-native` entry is TypeScript source, and the app's `transformIgnorePatterns` does not include `@userflow-tech`, so Jest reads that source untransformed. | Add the README's Jest mock to the setup file, with a mock for each subpath the app imports. See the README section "Jest". |
143
+ | Snapshots gain `nativeID="uf_…"`, `collapsable={false}`, `__ufid`, or `__ufManual` props, and keep changing after unrelated JSX edits | The Babel plugin runs under Jest, because `babel-jest` reads `babel.config.js`. Its ids depend on file path, component name, sibling order, and static labels. | Skip the plugin when `api.env('test')` is true. See the README section "Babel plugin and snapshot tests". |
144
+ | `Caching has already been configured with .never or .forever()` after adding `api.env('test')` | `babel.config.js` still calls `api.cache(true)` before `api.env`. | Remove `api.cache(true)`. `api.env` already caches per environment. |
145
+ | Component tests load the SDK after enabling the Babel plugin | Full mode imports `@userflow-tech/react-native` into every stamped file. | Mock the SDK in the Jest setup file, or skip the plugin in tests. |
145
146
 
146
147
  ## Still stuck?
147
148
 
@@ -7,10 +7,12 @@ export interface HostDependencyWarning {
7
7
  /**
8
8
  * Prebuild checks that do not change the native config.
9
9
  *
10
- * `react-native-view-shot` must be at least 5. Expo SDK 54's unpinned install
11
- * resolves 4.0.3. Expo SDK 53 and older only autolink native modules listed in
12
- * the app's own package.json, so AsyncStorage, WebView, and safe-area-context
13
- * have to be direct dependencies there. Expo SDK 54 and later autolink
10
+ * `react-native-view-shot` must be at least 5. On Expo SDK 55 and older an
11
+ * unpinned install resolves 4.0.3; Expo SDK 56 and 57 bundle 5.1.0, so a
12
+ * `^5.0.0` pin there only adds a version mismatch. Expo SDK 53 and older only
13
+ * autolink native modules listed in the app's own package.json, so
14
+ * AsyncStorage, WebView, and safe-area-context have to be direct dependencies
15
+ * there. Expo SDK 54 and later autolink
14
16
  * safe-area-context when Expo Router or React Navigation brought it in, so
15
17
  * prebuild does not warn about it on those SDKs. `Userflow.init` warns when
16
18
  * the package itself cannot be loaded.
@@ -1 +1 @@
1
- {"version":3,"file":"hostDependencyWarnings.d.ts","sourceRoot":"","sources":["../plugin/hostDependencyWarnings.ts"],"names":[],"mappings":"AAKA,kFAAkF;AAClF,eAAO,MAAM,sBAAsB,wOACoM,CAAC;AAExO,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,qBAAqB,EAAE,CA+CzB;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,KAAK,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAaN"}
1
+ {"version":3,"file":"hostDependencyWarnings.d.ts","sourceRoot":"","sources":["../plugin/hostDependencyWarnings.ts"],"names":[],"mappings":"AAKA,kFAAkF;AAClF,eAAO,MAAM,sBAAsB,wOACoM,CAAC;AAExO,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,qBAAqB,EAAE,CA+CzB;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,KAAK,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAaN"}
@@ -17,10 +17,12 @@ const TRANSITIVE_NATIVE_MODULES = [
17
17
  /**
18
18
  * Prebuild checks that do not change the native config.
19
19
  *
20
- * `react-native-view-shot` must be at least 5. Expo SDK 54's unpinned install
21
- * resolves 4.0.3. Expo SDK 53 and older only autolink native modules listed in
22
- * the app's own package.json, so AsyncStorage, WebView, and safe-area-context
23
- * have to be direct dependencies there. Expo SDK 54 and later autolink
20
+ * `react-native-view-shot` must be at least 5. On Expo SDK 55 and older an
21
+ * unpinned install resolves 4.0.3; Expo SDK 56 and 57 bundle 5.1.0, so a
22
+ * `^5.0.0` pin there only adds a version mismatch. Expo SDK 53 and older only
23
+ * autolink native modules listed in the app's own package.json, so
24
+ * AsyncStorage, WebView, and safe-area-context have to be direct dependencies
25
+ * there. Expo SDK 54 and later autolink
24
26
  * safe-area-context when Expo Router or React Navigation brought it in, so
25
27
  * prebuild does not warn about it on those SDKs. `Userflow.init` warns when
26
28
  * the package itself cannot be loaded.
@@ -38,7 +40,7 @@ function hostDependencyWarnings(projectRoot, sdkVersion) {
38
40
  if (!viewShot) {
39
41
  warnings.push({
40
42
  property: VIEW_SHOT,
41
- message: 'react-native-view-shot is not a direct dependency. Builder element selection needs >=5.0.0. On Expo SDK 54, an unpinned `npx expo install react-native-view-shot` resolves 4.0.3. Pin ^5.0.0. If expo doctor reports a version mismatch, add "react-native-view-shot" to expo.install.exclude.',
43
+ message: 'react-native-view-shot is not a direct dependency. Builder element selection needs >=5.0.0. On Expo SDK 56 and 57, run `npx expo install react-native-view-shot` unpinned, with no expo.install.exclude entry for it. On Expo SDK 55 and older, an unpinned install resolves 4.0.3, so pin ^5.0.0 and add "react-native-view-shot" to expo.install.exclude.',
42
44
  });
43
45
  }
44
46
  else {
@@ -46,7 +48,7 @@ function hostDependencyWarnings(projectRoot, sdkVersion) {
46
48
  if (major != null && major < 5) {
47
49
  warnings.push({
48
50
  property: VIEW_SHOT,
49
- message: `react-native-view-shot@${viewShot} is older than 5.0.0. Expo SDK 54's default is 4.0.3, which does not work with this SDK. Pin ^5.0.0 and add "react-native-view-shot" to expo.install.exclude if expo doctor complains.`,
51
+ message: `react-native-view-shot@${viewShot} is older than 5.0.0, which does not work with this SDK. On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it. Expo SDK 55 and older default to 4.0.3: pin ^5.0.0 and add "react-native-view-shot" to expo.install.exclude.`,
50
52
  });
51
53
  }
52
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hostDependencyWarnings.js","sourceRoot":"","sources":["../plugin/hostDependencyWarnings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hostDependencyWarnings.js","sourceRoot":"","sources":["../plugin/hostDependencyWarnings.ts"],"names":[],"mappings":";;;AAuCA,wDAkDC;AAGD,sDAiBC;AA7GD,qCAAuC;AACvC,yCAAiC;AAEjC,yDAAyD;AAEzD,kFAAkF;AACrE,QAAA,sBAAsB,GACjC,qOAAqO,CAAC;AAYxO,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAC3C,MAAM,SAAS,GAAG,gCAAgC,CAAC;AACnD,MAAM,yBAAyB,GAAG;IAChC,2CAA2C;IAC3C,sBAAsB;CACd,CAAC;AAEX;;;;;;;;;;;;GAYG;AACH,SAAgB,sBAAsB,CACpC,WAA+B,EAC/B,UAAqC;IAErC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,SAAS;YACnB,OAAO,EACL,6VAA6V;SAChW,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,0BAA0B,QAAQ,+RAA+R;aAC3U,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,kFAAkF,QAAQ,ySAAyS;aAC7Y,CAAC,CAAC;QACL,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,yBAAyB,EAAE,CAAC;YAC7C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,GAAG,IAAI,oDAAoD,QAAQ,oHAAoH,IAAI,gBAAgB;iBACrN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0FAA0F;AAC1F,SAAgB,qBAAqB,CACnC,MAAc,EACd,QAA2B,EAC3B,QAAuB;IAEvB,MAAM,MAAM,GAAG,MAGd,CAAC;IACF,MAAM,GAAG,GACP,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,kCAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,kCAAiB,CAAC,iBAAiB,CAAC;IAC7F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,UAAU,EAAE,8BAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/F,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,WAAmB;IACjD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;QAC3C,OAAO,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,SAAS,YAAY,CAAC,SAAiB;IACrC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC"}
@@ -20,7 +20,7 @@ var _asyncStorage = require("./storage/asyncStorage.js");
20
20
  var _safeArea = require("./surfaces/safeArea.js");
21
21
  const INSTALL_CHECK_HEADER = exports.INSTALL_CHECK_HEADER = '[Userflow] Native setup is incomplete. Flows may not run until you fix the following, then rebuild the app (a Metro reload is not enough):';
22
22
  const INSTALL_ASYNC_STORAGE_LINE = exports.INSTALL_ASYNC_STORAGE_LINE = '- @react-native-async-storage/async-storage is not linked. Anonymous users and Builder pairing will not persist. Add it to the app package.json (npx expo install @react-native-async-storage/async-storage), run pod install on iOS, and rebuild.';
23
- const INSTALL_VIEW_SHOT_LINE = exports.INSTALL_VIEW_SHOT_LINE = '- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install react-native-view-shot@^5.0.0 and rebuild. On Expo SDK 54, pin ^5.0.0; an unpinned npx expo install resolves 4.0.3.';
23
+ const INSTALL_VIEW_SHOT_LINE = exports.INSTALL_VIEW_SHOT_LINE = '- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install it and rebuild. On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it. Otherwise install react-native-view-shot@^5.0.0; on Expo SDK 55 and older, an unpinned npx expo install resolves 4.0.3.';
24
24
  const INSTALL_WEBVIEW_LINE = exports.INSTALL_WEBVIEW_LINE = '- react-native-webview is not linked. Evaluate JavaScript and WebView banners will not run. Install it (npx expo install react-native-webview) and rebuild.';
25
25
  const INSTALL_DEVICE_INFO_LINE = exports.INSTALL_DEVICE_INFO_LINE = '- react-native-device-info is not linked, so app_version and app_build are not sent. npm install react-native-device-info, then rebuild.';
26
26
  const INSTALL_CHECK_FOOTER = exports.INSTALL_CHECK_FOOTER = 'See node_modules/@userflow-tech/react-native/docs/troubleshooting.md.';
@@ -36,7 +36,7 @@ const INSTALL_SAFE_AREA_WARNING = exports.INSTALL_SAFE_AREA_WARNING = '[Userflow
36
36
  * Builder screenshots may not. The installed version is interpolated.
37
37
  */
38
38
  function formatViewShotVersionWarning(version) {
39
- return `[Userflow] react-native-view-shot@${version} is older than 5.0.0, so Builder element selection may not get a screenshot. ` + 'Install react-native-view-shot@^5.0.0 in the same command as the SDK and rebuild. ' + 'Do not retry the install with --force or --legacy-peer-deps; that leaves this version in place. ' + 'On Expo SDK 54, pin ^5.0.0 and add "react-native-view-shot" to expo.install.exclude.\n' + INSTALL_CHECK_FOOTER;
39
+ return `[Userflow] react-native-view-shot@${version} is older than 5.0.0, so Builder element selection may not get a screenshot. ` + 'On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it, and rebuild. ' + 'Otherwise install react-native-view-shot@^5.0.0 in the same command as the SDK and rebuild; on Expo SDK 55 and older, also add "react-native-view-shot" to expo.install.exclude. ' + 'Do not retry the install with --force or --legacy-peer-deps; that leaves this version in place.\n' + INSTALL_CHECK_FOOTER;
40
40
  }
41
41
  const EXPO_GO_WARNING = exports.EXPO_GO_WARNING = '[Userflow] This app is running in Expo Go, which cannot load the SDK native modules. Builder preview links will not open the app. Use a development build (npx expo run:ios / npx expo run:android).';
42
42
  const INIT_OPTIONS_IGNORED_WARNING = exports.INIT_OPTIONS_IGNORED_WARNING = '[Userflow] Userflow.init() already ran with different options. The new clientToken, serverEndpoint, and pairingEndpoint are ignored because init runs once per process. Userflow.reset() does not apply new credentials. Restart the app to change them.';
@@ -1 +1 @@
1
- {"version":3,"names":["_getWebView","require","_nativeModules","_asyncStorage","_safeArea","INSTALL_CHECK_HEADER","exports","INSTALL_ASYNC_STORAGE_LINE","INSTALL_VIEW_SHOT_LINE","INSTALL_WEBVIEW_LINE","INSTALL_DEVICE_INFO_LINE","INSTALL_CHECK_FOOTER","INSTALL_SAFE_AREA_WARNING","formatViewShotVersionWarning","version","EXPO_GO_WARNING","INIT_OPTIONS_IGNORED_WARNING","VIEW_SHOT_MODULE","DEVICE_INFO_MODULE","didWarn","readExpoConstants","mod","record","default","executionEnvironment","readViewShotVersion","pkg","length","viewShotVersionWarning","match","major","Number","collectInstallFindings","findings","isAsyncStorageLinked","push","isNativeModuleLinked","isEvalJsWebViewNativeLinked","expoGoWarning","constants","environment","formatInstallWarning","join","warnIfInstallIncomplete","__DEV__","console","warn","isSafeAreaContextInstalled","oldViewShot","expoGo","resetInstallCheckForTests","recordedInitOptions","initOptionsCommitted","recordInitOptions","config","clientToken","serverEndpoint","pairingEndpoint","warnIfInitOptionsIgnored","next","commitInitOptions","releaseFailedInitOptions"],"sourceRoot":"../../src","sources":["installCheck.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_getWebView","require","_nativeModules","_asyncStorage","_safeArea","INSTALL_CHECK_HEADER","exports","INSTALL_ASYNC_STORAGE_LINE","INSTALL_VIEW_SHOT_LINE","INSTALL_WEBVIEW_LINE","INSTALL_DEVICE_INFO_LINE","INSTALL_CHECK_FOOTER","INSTALL_SAFE_AREA_WARNING","formatViewShotVersionWarning","version","EXPO_GO_WARNING","INIT_OPTIONS_IGNORED_WARNING","VIEW_SHOT_MODULE","DEVICE_INFO_MODULE","didWarn","readExpoConstants","mod","record","default","executionEnvironment","readViewShotVersion","pkg","length","viewShotVersionWarning","match","major","Number","collectInstallFindings","findings","isAsyncStorageLinked","push","isNativeModuleLinked","isEvalJsWebViewNativeLinked","expoGoWarning","constants","environment","formatInstallWarning","join","warnIfInstallIncomplete","__DEV__","console","warn","isSafeAreaContextInstalled","oldViewShot","expoGo","resetInstallCheckForTests","recordedInitOptions","initOptionsCommitted","recordInitOptions","config","clientToken","serverEndpoint","pairingEndpoint","warnIfInitOptionsIgnored","next","commitInitOptions","releaseFailedInitOptions"],"sourceRoot":"../../src","sources":["installCheck.ts"],"mappings":"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","ignoreList":[]}
@@ -5,5 +5,5 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.SDK_VERSION = void 0;
7
7
  /** Generated by scripts/write-version.mjs — do not edit. */
8
- const SDK_VERSION = exports.SDK_VERSION = '0.4.4';
8
+ const SDK_VERSION = exports.SDK_VERSION = '0.4.5';
9
9
  //# sourceMappingURL=version.js.map
@@ -6,7 +6,7 @@ import { isAsyncStorageLinked } from "./storage/asyncStorage.js";
6
6
  import { isSafeAreaContextInstalled } from "./surfaces/safeArea.js";
7
7
  export const INSTALL_CHECK_HEADER = '[Userflow] Native setup is incomplete. Flows may not run until you fix the following, then rebuild the app (a Metro reload is not enough):';
8
8
  export const INSTALL_ASYNC_STORAGE_LINE = '- @react-native-async-storage/async-storage is not linked. Anonymous users and Builder pairing will not persist. Add it to the app package.json (npx expo install @react-native-async-storage/async-storage), run pod install on iOS, and rebuild.';
9
- export const INSTALL_VIEW_SHOT_LINE = '- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install react-native-view-shot@^5.0.0 and rebuild. On Expo SDK 54, pin ^5.0.0; an unpinned npx expo install resolves 4.0.3.';
9
+ export const INSTALL_VIEW_SHOT_LINE = '- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install it and rebuild. On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it. Otherwise install react-native-view-shot@^5.0.0; on Expo SDK 55 and older, an unpinned npx expo install resolves 4.0.3.';
10
10
  export const INSTALL_WEBVIEW_LINE = '- react-native-webview is not linked. Evaluate JavaScript and WebView banners will not run. Install it (npx expo install react-native-webview) and rebuild.';
11
11
  export const INSTALL_DEVICE_INFO_LINE = '- react-native-device-info is not linked, so app_version and app_build are not sent. npm install react-native-device-info, then rebuild.';
12
12
  export const INSTALL_CHECK_FOOTER = 'See node_modules/@userflow-tech/react-native/docs/troubleshooting.md.';
@@ -22,7 +22,7 @@ export const INSTALL_SAFE_AREA_WARNING = '[Userflow] react-native-safe-area-cont
22
22
  * Builder screenshots may not. The installed version is interpolated.
23
23
  */
24
24
  export function formatViewShotVersionWarning(version) {
25
- return `[Userflow] react-native-view-shot@${version} is older than 5.0.0, so Builder element selection may not get a screenshot. ` + 'Install react-native-view-shot@^5.0.0 in the same command as the SDK and rebuild. ' + 'Do not retry the install with --force or --legacy-peer-deps; that leaves this version in place. ' + 'On Expo SDK 54, pin ^5.0.0 and add "react-native-view-shot" to expo.install.exclude.\n' + INSTALL_CHECK_FOOTER;
25
+ return `[Userflow] react-native-view-shot@${version} is older than 5.0.0, so Builder element selection may not get a screenshot. ` + 'On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it, and rebuild. ' + 'Otherwise install react-native-view-shot@^5.0.0 in the same command as the SDK and rebuild; on Expo SDK 55 and older, also add "react-native-view-shot" to expo.install.exclude. ' + 'Do not retry the install with --force or --legacy-peer-deps; that leaves this version in place.\n' + INSTALL_CHECK_FOOTER;
26
26
  }
27
27
  export const EXPO_GO_WARNING = '[Userflow] This app is running in Expo Go, which cannot load the SDK native modules. Builder preview links will not open the app. Use a development build (npx expo run:ios / npx expo run:android).';
28
28
  export const INIT_OPTIONS_IGNORED_WARNING = '[Userflow] Userflow.init() already ran with different options. The new clientToken, serverEndpoint, and pairingEndpoint are ignored because init runs once per process. Userflow.reset() does not apply new credentials. Restart the app to change them.';
@@ -1 +1 @@
1
- {"version":3,"names":["isEvalJsWebViewNativeLinked","isNativeModuleLinked","isAsyncStorageLinked","isSafeAreaContextInstalled","INSTALL_CHECK_HEADER","INSTALL_ASYNC_STORAGE_LINE","INSTALL_VIEW_SHOT_LINE","INSTALL_WEBVIEW_LINE","INSTALL_DEVICE_INFO_LINE","INSTALL_CHECK_FOOTER","INSTALL_SAFE_AREA_WARNING","formatViewShotVersionWarning","version","EXPO_GO_WARNING","INIT_OPTIONS_IGNORED_WARNING","VIEW_SHOT_MODULE","DEVICE_INFO_MODULE","didWarn","readExpoConstants","mod","require","record","default","executionEnvironment","readViewShotVersion","pkg","length","viewShotVersionWarning","match","major","Number","collectInstallFindings","findings","push","expoGoWarning","constants","environment","formatInstallWarning","join","warnIfInstallIncomplete","__DEV__","console","warn","oldViewShot","expoGo","resetInstallCheckForTests","recordedInitOptions","initOptionsCommitted","recordInitOptions","config","clientToken","serverEndpoint","pairingEndpoint","warnIfInitOptionsIgnored","next","commitInitOptions","releaseFailedInitOptions"],"sourceRoot":"../../src","sources":["installCheck.ts"],"mappings":";;AAAA,SAASA,2BAA2B,QAAQ,wBAAqB;AACjE,SAASC,oBAAoB,QAAQ,oBAAiB;AACtD,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,0BAA0B,QAAQ,wBAAqB;AAEhE,OAAO,MAAMC,oBAAoB,GAC/B,4IAA4I;AAE9I,OAAO,MAAMC,0BAA0B,GACrC,oPAAoP;AAEtP,OAAO,MAAMC,sBAAsB,GACjC,sNAAsN;AAExN,OAAO,MAAMC,oBAAoB,GAC/B,6JAA6J;AAE/J,OAAO,MAAMC,wBAAwB,GACnC,0IAA0I;AAE5I,OAAO,MAAMC,oBAAoB,GAC/B,uEAAuE;;AAEzE;AACA;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GACpC,2PAA2P,GAC3PD,oBAAoB;;AAEtB;AACA;AACA;AACA;AACA,OAAO,SAASE,4BAA4BA,CAACC,OAAe,EAAU;EACpE,OACE,qCAAqCA,OAAO,+EAA+E,GAC3H,oFAAoF,GACpF,kGAAkG,GAClG,wFAAwF,GACxFH,oBAAoB;AAExB;AAEA,OAAO,MAAMI,eAAe,GAC1B,sMAAsM;AAExM,OAAO,MAAMC,4BAA4B,GACvC,0PAA0P;AAE5P,MAAMC,gBAAgB,GAAG,YAAY;AACrC,MAAMC,kBAAkB,GAAG,cAAc;AAOzC,IAAIC,OAAO,GAAG,KAAK;AAEnB,SAASC,iBAAiBA,CAAA,EAA+B;EACvD,IAAI;IACF;IACA;IACA,MAAMC,GAAG,GAAGC,OAAO,CAAC,gBAAgB,CAAwB;IAC5D,MAAMC,MAAM,GAAGF,GAAG,EAAEG,OAAO,IAAIH,GAAG;IAClC,IAAIE,MAAM,IAAI,IAAI,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE,OAAO,IAAI;IAC7D;IACA,KAAKA,MAAM,CAACE,oBAAoB;IAChC,OAAOF,MAAM;EACf,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASG,mBAAmBA,CAAA,EAAkB;EAC5C,IAAI;IACF;IACA,MAAMC,GAAG,GAAGL,OAAO,CAAC,qCAAqC,CAA0B;IACnF,OAAO,OAAOK,GAAG,CAACb,OAAO,KAAK,QAAQ,IAAIa,GAAG,CAACb,OAAO,CAACc,MAAM,GAAG,CAAC,GAAGD,GAAG,CAACb,OAAO,GAAG,IAAI;EACvF,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;;AAEA;AACA,OAAO,SAASe,sBAAsBA,CAAA,EAAkB;EACtD,MAAMf,OAAO,GAAGY,mBAAmB,CAAC,CAAC;EACrC,IAAI,CAACZ,OAAO,EAAE,OAAO,IAAI;EACzB,MAAMgB,KAAK,GAAGhB,OAAO,CAACgB,KAAK,CAAC,KAAK,CAAC;EAClC,MAAMC,KAAK,GAAGD,KAAK,GAAGE,MAAM,CAACF,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;EAC7C,IAAIC,KAAK,IAAI,IAAI,IAAIA,KAAK,IAAI,CAAC,EAAE,OAAO,IAAI;EAC5C,OAAOlB,4BAA4B,CAACC,OAAO,CAAC;AAC9C;;AAEA;AACA,OAAO,SAASmB,sBAAsBA,CAAA,EAAa;EACjD,MAAMC,QAAkB,GAAG,EAAE;EAC7B,IAAI,CAAC9B,oBAAoB,CAAC,CAAC,EAAE8B,QAAQ,CAACC,IAAI,CAAC5B,0BAA0B,CAAC;EACtE,IAAI,CAACJ,oBAAoB,CAACc,gBAAgB,CAAC,EAAEiB,QAAQ,CAACC,IAAI,CAAC3B,sBAAsB,CAAC;EAClF,IAAI,CAACN,2BAA2B,CAAC,CAAC,EAAEgC,QAAQ,CAACC,IAAI,CAAC1B,oBAAoB,CAAC;EACvE;EACA;EACA,IAAIW,iBAAiB,CAAC,CAAC,IAAI,IAAI,IAAI,CAACjB,oBAAoB,CAACe,kBAAkB,CAAC,EAAE;IAC5EgB,QAAQ,CAACC,IAAI,CAACzB,wBAAwB,CAAC;EACzC;EACA,OAAOwB,QAAQ;AACjB;AAEA,OAAO,SAASE,aAAaA,CAAA,EAAkB;EAC7C,MAAMC,SAAS,GAAGjB,iBAAiB,CAAC,CAAC;EACrC,MAAMkB,WAAW,GAAGD,SAAS,EAAEZ,oBAAoB;EACnD,OAAOa,WAAW,KAAK,aAAa,GAAGvB,eAAe,GAAG,IAAI;AAC/D;AAEA,OAAO,SAASwB,oBAAoBA,CAACL,QAA2B,EAAU;EACxE,OAAO,CAAC5B,oBAAoB,EAAE,GAAG4B,QAAQ,EAAEvB,oBAAoB,CAAC,CAAC6B,IAAI,CAAC,IAAI,CAAC;AAC7E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAAA,EAAS;EAC9C,IAAI,CAACC,OAAO,IAAIvB,OAAO,EAAE;EACzBA,OAAO,GAAG,IAAI;EAEd,MAAMe,QAAQ,GAAGD,sBAAsB,CAAC,CAAC;EACzC,IAAIC,QAAQ,CAACN,MAAM,GAAG,CAAC,EAAE;IACvB;IACAe,OAAO,CAACC,IAAI,CAACL,oBAAoB,CAACL,QAAQ,CAAC,CAAC;EAC9C;EAEA,IAAI,CAAC7B,0BAA0B,CAAC,CAAC,EAAE;IACjC;IACAsC,OAAO,CAACC,IAAI,CAAChC,yBAAyB,CAAC;EACzC;EAEA,MAAMiC,WAAW,GAAGhB,sBAAsB,CAAC,CAAC;EAC5C,IAAIgB,WAAW,EAAE;IACf;IACAF,OAAO,CAACC,IAAI,CAACC,WAAW,CAAC;EAC3B;EAEA,MAAMC,MAAM,GAAGV,aAAa,CAAC,CAAC;EAC9B,IAAIU,MAAM,EAAE;IACV;IACAH,OAAO,CAACC,IAAI,CAACE,MAAM,CAAC;EACtB;AACF;;AAEA;AACA,OAAO,SAASC,yBAAyBA,CAAA,EAAS;EAChD5B,OAAO,GAAG,KAAK;EACf6B,mBAAmB,GAAG,IAAI;EAC1BC,oBAAoB,GAAG,KAAK;AAC9B;AAQA,IAAID,mBAA+C,GAAG,IAAI;AAC1D;AACA,IAAIC,oBAAoB,GAAG,KAAK;AAEhC,SAASC,iBAAiBA,CAACC,MAI1B,EAAuB;EACtB,OAAO;IACLC,WAAW,EAAED,MAAM,CAACC,WAAW;IAC/BC,cAAc,EAAEF,MAAM,CAACE,cAAc,IAAI,EAAE;IAC3CC,eAAe,EAAEH,MAAM,CAACG,eAAe,IAAI;EAC7C,CAAC;AACH;AAEA,OAAO,SAASC,wBAAwBA,CAACJ,MAIxC,EAAQ;EACP,MAAMK,IAAI,GAAGN,iBAAiB,CAACC,MAAM,CAAC;EACtC,IAAI,CAACH,mBAAmB,EAAE;IACxBA,mBAAmB,GAAGQ,IAAI;IAC1B;EACF;EACA,IACER,mBAAmB,CAACI,WAAW,KAAKI,IAAI,CAACJ,WAAW,IACpDJ,mBAAmB,CAACK,cAAc,KAAKG,IAAI,CAACH,cAAc,IAC1DL,mBAAmB,CAACM,eAAe,KAAKE,IAAI,CAACF,eAAe,EAC5D;IACA;EACF;EACA,IAAI,CAACZ,OAAO,EAAE;EACd;EACAC,OAAO,CAACC,IAAI,CAAC5B,4BAA4B,CAAC;AAC5C;;AAEA;AACA,OAAO,SAASyC,iBAAiBA,CAAA,EAAS;EACxCR,oBAAoB,GAAG,IAAI;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASS,wBAAwBA,CAAA,EAAS;EAC/C,IAAIT,oBAAoB,EAAE;EAC1BD,mBAAmB,GAAG,IAAI;AAC5B","ignoreList":[]}
1
+ {"version":3,"names":["isEvalJsWebViewNativeLinked","isNativeModuleLinked","isAsyncStorageLinked","isSafeAreaContextInstalled","INSTALL_CHECK_HEADER","INSTALL_ASYNC_STORAGE_LINE","INSTALL_VIEW_SHOT_LINE","INSTALL_WEBVIEW_LINE","INSTALL_DEVICE_INFO_LINE","INSTALL_CHECK_FOOTER","INSTALL_SAFE_AREA_WARNING","formatViewShotVersionWarning","version","EXPO_GO_WARNING","INIT_OPTIONS_IGNORED_WARNING","VIEW_SHOT_MODULE","DEVICE_INFO_MODULE","didWarn","readExpoConstants","mod","require","record","default","executionEnvironment","readViewShotVersion","pkg","length","viewShotVersionWarning","match","major","Number","collectInstallFindings","findings","push","expoGoWarning","constants","environment","formatInstallWarning","join","warnIfInstallIncomplete","__DEV__","console","warn","oldViewShot","expoGo","resetInstallCheckForTests","recordedInitOptions","initOptionsCommitted","recordInitOptions","config","clientToken","serverEndpoint","pairingEndpoint","warnIfInitOptionsIgnored","next","commitInitOptions","releaseFailedInitOptions"],"sourceRoot":"../../src","sources":["installCheck.ts"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
 
3
3
  /** Generated by scripts/write-version.mjs — do not edit. */
4
- export const SDK_VERSION = '0.4.4';
4
+ export const SDK_VERSION = '0.4.5';
5
5
  //# sourceMappingURL=version.js.map
@@ -1,6 +1,6 @@
1
1
  export declare const INSTALL_CHECK_HEADER = "[Userflow] Native setup is incomplete. Flows may not run until you fix the following, then rebuild the app (a Metro reload is not enough):";
2
2
  export declare const INSTALL_ASYNC_STORAGE_LINE = "- @react-native-async-storage/async-storage is not linked. Anonymous users and Builder pairing will not persist. Add it to the app package.json (npx expo install @react-native-async-storage/async-storage), run pod install on iOS, and rebuild.";
3
- export declare const INSTALL_VIEW_SHOT_LINE = "- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install react-native-view-shot@^5.0.0 and rebuild. On Expo SDK 54, pin ^5.0.0; an unpinned npx expo install resolves 4.0.3.";
3
+ export declare const INSTALL_VIEW_SHOT_LINE = "- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install it and rebuild. On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it. Otherwise install react-native-view-shot@^5.0.0; on Expo SDK 55 and older, an unpinned npx expo install resolves 4.0.3.";
4
4
  export declare const INSTALL_WEBVIEW_LINE = "- react-native-webview is not linked. Evaluate JavaScript and WebView banners will not run. Install it (npx expo install react-native-webview) and rebuild.";
5
5
  export declare const INSTALL_DEVICE_INFO_LINE = "- react-native-device-info is not linked, so app_version and app_build are not sent. npm install react-native-device-info, then rebuild.";
6
6
  export declare const INSTALL_CHECK_FOOTER = "See node_modules/@userflow-tech/react-native/docs/troubleshooting.md.";
@@ -1 +1 @@
1
- {"version":3,"file":"installCheck.d.ts","sourceRoot":"","sources":["../../../../src/installCheck.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,+IAC6G,CAAC;AAE/I,eAAO,MAAM,0BAA0B,uPAC+M,CAAC;AAEvP,eAAO,MAAM,sBAAsB,yNACqL,CAAC;AAEzN,eAAO,MAAM,oBAAoB,gKAC8H,CAAC;AAEhK,eAAO,MAAM,wBAAwB,6IACuG,CAAC;AAE7I,eAAO,MAAM,oBAAoB,0EACwC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAEhB,CAAC;AAEvB;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED,eAAO,MAAM,eAAe,yMAC4K,CAAC;AAEzM,eAAO,MAAM,4BAA4B,6PACmN,CAAC;AA0C7P,qFAAqF;AACrF,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAOtD;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAWjD;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CA0B9C;AAED,gBAAgB;AAChB,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD;AAwBD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAgBP;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C"}
1
+ {"version":3,"file":"installCheck.d.ts","sourceRoot":"","sources":["../../../../src/installCheck.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,+IAC6G,CAAC;AAE/I,eAAO,MAAM,0BAA0B,uPAC+M,CAAC;AAEvP,eAAO,MAAM,sBAAsB,qWACiU,CAAC;AAErW,eAAO,MAAM,oBAAoB,gKAC8H,CAAC;AAEhK,eAAO,MAAM,wBAAwB,6IACuG,CAAC;AAE7I,eAAO,MAAM,oBAAoB,0EACwC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAEhB,CAAC;AAEvB;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED,eAAO,MAAM,eAAe,yMAC4K,CAAC;AAEzM,eAAO,MAAM,4BAA4B,6PACmN,CAAC;AA0C7P,qFAAqF;AACrF,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAOtD;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAWjD;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CA0B9C;AAED,gBAAgB;AAChB,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD;AAwBD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAgBP;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C"}
@@ -1,3 +1,3 @@
1
1
  /** Generated by scripts/write-version.mjs — do not edit. */
2
- export declare const SDK_VERSION = "0.4.4";
2
+ export declare const SDK_VERSION = "0.4.5";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1,6 +1,6 @@
1
1
  export declare const INSTALL_CHECK_HEADER = "[Userflow] Native setup is incomplete. Flows may not run until you fix the following, then rebuild the app (a Metro reload is not enough):";
2
2
  export declare const INSTALL_ASYNC_STORAGE_LINE = "- @react-native-async-storage/async-storage is not linked. Anonymous users and Builder pairing will not persist. Add it to the app package.json (npx expo install @react-native-async-storage/async-storage), run pod install on iOS, and rebuild.";
3
- export declare const INSTALL_VIEW_SHOT_LINE = "- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install react-native-view-shot@^5.0.0 and rebuild. On Expo SDK 54, pin ^5.0.0; an unpinned npx expo install resolves 4.0.3.";
3
+ export declare const INSTALL_VIEW_SHOT_LINE = "- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install it and rebuild. On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it. Otherwise install react-native-view-shot@^5.0.0; on Expo SDK 55 and older, an unpinned npx expo install resolves 4.0.3.";
4
4
  export declare const INSTALL_WEBVIEW_LINE = "- react-native-webview is not linked. Evaluate JavaScript and WebView banners will not run. Install it (npx expo install react-native-webview) and rebuild.";
5
5
  export declare const INSTALL_DEVICE_INFO_LINE = "- react-native-device-info is not linked, so app_version and app_build are not sent. npm install react-native-device-info, then rebuild.";
6
6
  export declare const INSTALL_CHECK_FOOTER = "See node_modules/@userflow-tech/react-native/docs/troubleshooting.md.";
@@ -1 +1 @@
1
- {"version":3,"file":"installCheck.d.ts","sourceRoot":"","sources":["../../../../src/installCheck.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,+IAC6G,CAAC;AAE/I,eAAO,MAAM,0BAA0B,uPAC+M,CAAC;AAEvP,eAAO,MAAM,sBAAsB,yNACqL,CAAC;AAEzN,eAAO,MAAM,oBAAoB,gKAC8H,CAAC;AAEhK,eAAO,MAAM,wBAAwB,6IACuG,CAAC;AAE7I,eAAO,MAAM,oBAAoB,0EACwC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAEhB,CAAC;AAEvB;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED,eAAO,MAAM,eAAe,yMAC4K,CAAC;AAEzM,eAAO,MAAM,4BAA4B,6PACmN,CAAC;AA0C7P,qFAAqF;AACrF,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAOtD;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAWjD;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CA0B9C;AAED,gBAAgB;AAChB,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD;AAwBD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAgBP;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C"}
1
+ {"version":3,"file":"installCheck.d.ts","sourceRoot":"","sources":["../../../../src/installCheck.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,+IAC6G,CAAC;AAE/I,eAAO,MAAM,0BAA0B,uPAC+M,CAAC;AAEvP,eAAO,MAAM,sBAAsB,qWACiU,CAAC;AAErW,eAAO,MAAM,oBAAoB,gKAC8H,CAAC;AAEhK,eAAO,MAAM,wBAAwB,6IACuG,CAAC;AAE7I,eAAO,MAAM,oBAAoB,0EACwC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAEhB,CAAC;AAEvB;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED,eAAO,MAAM,eAAe,yMAC4K,CAAC;AAEzM,eAAO,MAAM,4BAA4B,6PACmN,CAAC;AA0C7P,qFAAqF;AACrF,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAOtD;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAWjD;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CA0B9C;AAED,gBAAgB;AAChB,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD;AAwBD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAgBP;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C"}
@@ -1,3 +1,3 @@
1
1
  /** Generated by scripts/write-version.mjs — do not edit. */
2
- export declare const SDK_VERSION = "0.4.4";
2
+ export declare const SDK_VERSION = "0.4.5";
3
3
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@userflow-tech/react-native",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "Userflow SDK for React Native — onboarding flows, tooltips, and modals.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "main": "./lib/commonjs/index.js",
@@ -10,7 +10,7 @@ export const INSTALL_ASYNC_STORAGE_LINE =
10
10
  '- @react-native-async-storage/async-storage is not linked. Anonymous users and Builder pairing will not persist. Add it to the app package.json (npx expo install @react-native-async-storage/async-storage), run pod install on iOS, and rebuild.';
11
11
 
12
12
  export const INSTALL_VIEW_SHOT_LINE =
13
- '- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install react-native-view-shot@^5.0.0 and rebuild. On Expo SDK 54, pin ^5.0.0; an unpinned npx expo install resolves 4.0.3.';
13
+ '- react-native-view-shot is not linked, so Builder element selection gets no screenshot. Install it and rebuild. On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it. Otherwise install react-native-view-shot@^5.0.0; on Expo SDK 55 and older, an unpinned npx expo install resolves 4.0.3.';
14
14
 
15
15
  export const INSTALL_WEBVIEW_LINE =
16
16
  '- react-native-webview is not linked. Evaluate JavaScript and WebView banners will not run. Install it (npx expo install react-native-webview) and rebuild.';
@@ -36,9 +36,9 @@ export const INSTALL_SAFE_AREA_WARNING =
36
36
  export function formatViewShotVersionWarning(version: string): string {
37
37
  return (
38
38
  `[Userflow] react-native-view-shot@${version} is older than 5.0.0, so Builder element selection may not get a screenshot. ` +
39
- 'Install react-native-view-shot@^5.0.0 in the same command as the SDK and rebuild. ' +
40
- 'Do not retry the install with --force or --legacy-peer-deps; that leaves this version in place. ' +
41
- 'On Expo SDK 54, pin ^5.0.0 and add "react-native-view-shot" to expo.install.exclude.\n' +
39
+ 'On Expo SDK 56 and 57, run npx expo install react-native-view-shot unpinned, with no expo.install.exclude entry for it, and rebuild. ' +
40
+ 'Otherwise install react-native-view-shot@^5.0.0 in the same command as the SDK and rebuild; on Expo SDK 55 and older, also add "react-native-view-shot" to expo.install.exclude. ' +
41
+ 'Do not retry the install with --force or --legacy-peer-deps; that leaves this version in place.\n' +
42
42
  INSTALL_CHECK_FOOTER
43
43
  );
44
44
  }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** Generated by scripts/write-version.mjs — do not edit. */
2
- export const SDK_VERSION = '0.4.4';
2
+ export const SDK_VERSION = '0.4.5';
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@userflow-tech/core",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "Userflow React Native SDK core — platform-agnostic engine and protocol client.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@userflow-tech/protocol",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "Userflow React Native SDK protocol — wire contracts and shared types.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",