@tfcorp/consumer-app-react-native-sdk 2.0.6 → 2.0.7

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
@@ -56,8 +56,73 @@ export function ProductFitRecommendation() {
56
56
  | `storeKey` | `string` | Required |
57
57
  | `storeStyle` | `string` | Required |
58
58
  | `uiLocale` | `string` | Not set |
59
+ | `userToken` | `string` | Not set; one-time token used to bootstrap the native WebView cookie store |
59
60
  | `scriptUrl` | `string` | — (overrides `environment`; a full built-bundle URL. Raw Vite `.ts` dev entries are **not** supported) |
60
61
 
62
+ ## Legacy Expo SecureStore migration
63
+
64
+ The SDK can migrate a legacy user token supplied by the host application
65
+ without depending on `expo-secure-store`. Pass storage callbacks through
66
+ `legacyUserMigration`; omit the prop in applications that do not need the
67
+ migration.
68
+
69
+ ```tsx
70
+ import * as SecureStore from 'expo-secure-store';
71
+
72
+ import { TrueFitRecommendationView } from 'consumer-app-react-native-sdk';
73
+
74
+ const LEGACY_USER_TOKEN_KEY = 'TF-TOKEN';
75
+ const MIGRATION_COMPLETE_KEY = 'truefit-user-migration-complete';
76
+
77
+ const legacyUserMigration = {
78
+ readLegacyUserToken: async () => {
79
+ const migrationComplete = await SecureStore.getItemAsync(MIGRATION_COMPLETE_KEY);
80
+ if (migrationComplete === 'true') return null;
81
+ return await SecureStore.getItemAsync(LEGACY_USER_TOKEN_KEY);
82
+ },
83
+ completeLegacyUserMigration: async (migratedValue: string | null) => {
84
+ const storedToken = await SecureStore.getItemAsync(LEGACY_USER_TOKEN_KEY);
85
+ if (migratedValue && storedToken === migratedValue) {
86
+ await SecureStore.deleteItemAsync(LEGACY_USER_TOKEN_KEY);
87
+ }
88
+ await SecureStore.setItemAsync(MIGRATION_COMPLETE_KEY, 'true');
89
+ },
90
+ onLegacyUserMigrationError: (error: Error) => {
91
+ reportError(error);
92
+ },
93
+ };
94
+
95
+ export const ProductFitRecommendation = () => (
96
+ <TrueFitRecommendationView
97
+ config={{ storeKey: 'nda', storeStyle: '7093242789933' }}
98
+ legacyUserMigration={legacyUserMigration}
99
+ />
100
+ );
101
+ ```
102
+
103
+ `readLegacyUserToken` must return the raw SecureStore value. The SDK parses and
104
+ validates its serialized JSON shape:
105
+
106
+ ```json
107
+ {
108
+ "token": "<opaque token string>",
109
+ "creationTime": 0,
110
+ "maxAge": 63072000000
111
+ }
112
+ ```
113
+
114
+ Before mounting the native view, the SDK discards expired records and calls
115
+ `POST /api/experiments?forceMigrate=true` for valid tokens. On success it passes
116
+ the token returned in `x-tf-user-token` to the native SDK once, then calls
117
+ `completeLegacyUserMigration` with the original serialized value. The native
118
+ WebView cookie store owns subsequent JWT rotation.
119
+
120
+ The completion callback also runs when the reader returns no token or the
121
+ stored token is expired, allowing the host application to persist its marker
122
+ and avoid future legacy-token reads. It does not run after storage, network,
123
+ validation, or migration failures, so those failures remain retryable. While
124
+ the first migration check is pending, the recommendation view is not rendered.
125
+
61
126
  ### `options`
62
127
 
63
128
  | Name | Type | Default |
@@ -1,11 +1,13 @@
1
1
  package com.truefit.reactnative
2
2
 
3
3
  import android.util.Log
4
+ import com.facebook.react.bridge.Promise
4
5
  import com.facebook.react.bridge.ReactApplicationContext
5
6
  import com.facebook.react.bridge.ReactContextBaseJavaModule
6
7
  import com.facebook.react.bridge.ReactMethod
7
8
  import com.facebook.react.bridge.ReadableMap
8
9
  import com.facebook.react.bridge.ReadableType
10
+ import com.truefit.recommendation.TrueFit
9
11
  import com.truefit.recommendation.TrueFitApi
10
12
 
11
13
  /**
@@ -18,6 +20,11 @@ class TrueFitOrderModule(reactContext: ReactApplicationContext) : ReactContextBa
18
20
 
19
21
  override fun getName() = NAME
20
22
 
23
+ @ReactMethod
24
+ fun getToken(promise: Promise) {
25
+ promise.resolve(TrueFit.getToken())
26
+ }
27
+
21
28
  @ReactMethod
22
29
  fun trackOrder(arguments: ReadableMap) {
23
30
  val storeKey = arguments.nonBlankString("storeKey")
@@ -3,5 +3,7 @@
3
3
  @interface RCT_EXTERN_MODULE(TrueFitOrderModule, NSObject)
4
4
 
5
5
  RCT_EXTERN_METHOD(trackOrder:(NSDictionary *)arguments)
6
+ RCT_EXTERN_METHOD(getToken:(RCTPromiseResolveBlock)resolve
7
+ rejecter:(RCTPromiseRejectBlock)reject)
6
8
 
7
9
  @end
@@ -38,6 +38,15 @@ final class TrueFitOrderModule: NSObject {
38
38
  )
39
39
  }
40
40
 
41
+ @objc func getToken(
42
+ _ resolve: @escaping RCTPromiseResolveBlock,
43
+ rejecter _: @escaping RCTPromiseRejectBlock
44
+ ) {
45
+ TFTokenManager.getToken { token in
46
+ resolve(token)
47
+ }
48
+ }
49
+
41
50
  // MARK: - Argument mapping
42
51
 
43
52
  private static func products(from value: Any?) -> [TFTrackOrderProduct]? {
@@ -3,12 +3,38 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TrueFitRecommendationView = TrueFitRecommendationView;
7
- exports.trackOrder = exports.default = void 0;
6
+ exports.trackOrder = exports.getToken = exports.default = exports.TrueFitRecommendationView = void 0;
8
7
  var _react = _interopRequireWildcard(require("react"));
9
8
  var _reactNative = require("react-native");
9
+ var _zod = require("zod");
10
10
  var _jsxRuntime = require("react/jsx-runtime");
11
11
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
+ const DEVELOPMENT_BASE_URL = 'https://consumer-dev.truefitcorp.com';
13
+ const PRODUCTION_BASE_URL = 'https://consumer-v2.truefitcorp.com';
14
+ const LEGACY_USER_TOKEN_HEADER = 'x-tf-usertoken';
15
+ const USER_TOKEN_HEADER = 'x-tf-user-token';
16
+ const legacyUserMigrationSchema = _zod.z.object({
17
+ readLegacyUserToken: _zod.z.custom(value => typeof value === 'function'),
18
+ completeLegacyUserMigration: _zod.z.custom(value => typeof value === 'function'),
19
+ onLegacyUserMigrationError: _zod.z.custom(value => typeof value === 'function').optional()
20
+ });
21
+ const legacyUserTokenRecordSchema = _zod.z.object({
22
+ token: _zod.z.string().min(1),
23
+ creationTime: _zod.z.number().int().nonnegative(),
24
+ maxAge: _zod.z.number().int().nonnegative()
25
+ });
26
+ const migrationResponseSchema = _zod.z.object({
27
+ migrated: _zod.z.boolean()
28
+ });
29
+ const legacyUserMigrationStateSchema = _zod.z.discriminatedUnion('status', [_zod.z.object({
30
+ status: _zod.z.literal('pending'),
31
+ migrationKey: _zod.z.string()
32
+ }), _zod.z.object({
33
+ status: _zod.z.literal('ready'),
34
+ migrationKey: _zod.z.string().nullable(),
35
+ userToken: _zod.z.string().nullable()
36
+ })]);
37
+
12
38
  /**
13
39
  * Which True Fit environment to point at. The native SDKs resolve the widget
14
40
  * script URL from this internally; consumers never pass raw URLs.
@@ -24,15 +50,205 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
24
50
 
25
51
  const NativeTrueFitRecommendationView = (0, _reactNative.requireNativeComponent)('TrueFitRecommendationView');
26
52
  const DEFAULT_MIN_HEIGHT = 86;
27
- function TrueFitRecommendationView({
28
- config,
29
- options,
30
- style,
31
- onPresentationModeChange,
32
- onHeightChange,
33
- onWidgetResult,
34
- onAutoSizeSelect
35
- }) {
53
+ const pendingLegacyUserMigrations = new Map();
54
+ const resolveApiBaseUrl = args => {
55
+ const {
56
+ config
57
+ } = args;
58
+ if (config.scriptUrl) return new URL(config.scriptUrl).origin;
59
+ if (config.environment === 'development') return DEVELOPMENT_BASE_URL;
60
+ return PRODUCTION_BASE_URL;
61
+ };
62
+ const parseLegacyUserTokenRecord = storedValue => legacyUserTokenRecordSchema.parse(JSON.parse(storedValue));
63
+ const isLegacyUserTokenExpired = args => {
64
+ const {
65
+ creationTime,
66
+ maxAge
67
+ } = args;
68
+ return Date.now() >= creationTime + maxAge;
69
+ };
70
+ const migrateLegacyUser = async args => {
71
+ const {
72
+ config,
73
+ legacyUserMigration
74
+ } = args;
75
+ const {
76
+ completeLegacyUserMigration,
77
+ readLegacyUserToken
78
+ } = legacyUserMigration;
79
+ const storedValue = await readLegacyUserToken();
80
+ if (!storedValue) {
81
+ try {
82
+ await completeLegacyUserMigration(null);
83
+ } catch (value) {
84
+ legacyUserMigration.onLegacyUserMigrationError?.(getError(value));
85
+ }
86
+ return null;
87
+ }
88
+ const legacyUserTokenRecord = parseLegacyUserTokenRecord(storedValue);
89
+ if (isLegacyUserTokenExpired(legacyUserTokenRecord)) {
90
+ try {
91
+ await completeLegacyUserMigration(storedValue);
92
+ } catch (value) {
93
+ legacyUserMigration.onLegacyUserMigrationError?.(getError(value));
94
+ }
95
+ return null;
96
+ }
97
+ const apiBaseUrl = resolveApiBaseUrl({
98
+ config
99
+ });
100
+ const migrationUrl = `${apiBaseUrl}/api/experiments?storeKey=${encodeURIComponent(config.storeKey ?? '')}&forceMigrate=true`;
101
+ const response = await fetch(migrationUrl, {
102
+ method: 'POST',
103
+ credentials: 'include',
104
+ headers: {
105
+ [LEGACY_USER_TOKEN_HEADER]: legacyUserTokenRecord.token
106
+ }
107
+ });
108
+ if (!response.ok) {
109
+ throw new Error(`Legacy user migration failed with status ${response.status}`);
110
+ }
111
+ const migrationResponse = migrationResponseSchema.parse(await response.json());
112
+ if (!migrationResponse.migrated) return null;
113
+ const migratedUserToken = response.headers.get(USER_TOKEN_HEADER)?.trim();
114
+ if (!migratedUserToken) {
115
+ throw new Error('Legacy user migration did not return a user token');
116
+ }
117
+ try {
118
+ await completeLegacyUserMigration(storedValue);
119
+ } catch (value) {
120
+ legacyUserMigration.onLegacyUserMigrationError?.(getError(value));
121
+ }
122
+ return migratedUserToken;
123
+ };
124
+ const getError = value => value instanceof Error ? value : new Error(String(value));
125
+ const getLegacyUserMigration = args => {
126
+ const {
127
+ config,
128
+ legacyUserMigration,
129
+ migrationKey
130
+ } = args;
131
+ const pendingMigration = pendingLegacyUserMigrations.get(migrationKey);
132
+ if (pendingMigration) return pendingMigration;
133
+ const migration = migrateLegacyUser({
134
+ config,
135
+ legacyUserMigration
136
+ });
137
+ pendingLegacyUserMigrations.set(migrationKey, migration);
138
+ const clearPendingMigration = () => {
139
+ if (pendingLegacyUserMigrations.get(migrationKey) === migration) {
140
+ pendingLegacyUserMigrations.delete(migrationKey);
141
+ }
142
+ };
143
+ void migration.then(clearPendingMigration, clearPendingMigration);
144
+ return migration;
145
+ };
146
+ const useLegacyUserMigration = args => {
147
+ const {
148
+ config,
149
+ legacyUserMigration
150
+ } = args;
151
+ const legacyUserMigrationRef = (0, _react.useRef)(legacyUserMigration);
152
+ legacyUserMigrationRef.current = legacyUserMigration;
153
+ const environment = config?.environment;
154
+ const scriptUrl = config?.scriptUrl;
155
+ const storeKey = config?.storeKey;
156
+ const configuredUserToken = config?.userToken;
157
+ const hasLegacyUserMigration = Boolean(legacyUserMigration);
158
+ const shouldMigrate = Boolean(hasLegacyUserMigration && storeKey && !configuredUserToken);
159
+ const migrationKey = JSON.stringify([environment, scriptUrl, storeKey]);
160
+ const [migrationState, setMigrationState] = (0, _react.useState)(() => {
161
+ if (shouldMigrate) return {
162
+ status: 'pending',
163
+ migrationKey
164
+ };
165
+ return {
166
+ status: 'ready',
167
+ migrationKey: null,
168
+ userToken: null
169
+ };
170
+ });
171
+ (0, _react.useEffect)(() => {
172
+ const currentLegacyUserMigration = legacyUserMigrationRef.current;
173
+ if (!currentLegacyUserMigration || !storeKey || configuredUserToken) {
174
+ setMigrationState({
175
+ status: 'ready',
176
+ migrationKey: null,
177
+ userToken: null
178
+ });
179
+ return;
180
+ }
181
+ const parsedLegacyUserMigration = legacyUserMigrationSchema.parse(currentLegacyUserMigration);
182
+ const migrationConfig = {
183
+ environment,
184
+ scriptUrl,
185
+ storeKey
186
+ };
187
+ let isActive = true;
188
+ setMigrationState({
189
+ status: 'pending',
190
+ migrationKey
191
+ });
192
+ const migrate = async () => {
193
+ try {
194
+ const userToken = await getLegacyUserMigration({
195
+ config: migrationConfig,
196
+ legacyUserMigration: parsedLegacyUserMigration,
197
+ migrationKey
198
+ });
199
+ if (isActive) {
200
+ setMigrationState({
201
+ status: 'ready',
202
+ migrationKey,
203
+ userToken
204
+ });
205
+ }
206
+ } catch (value) {
207
+ parsedLegacyUserMigration.onLegacyUserMigrationError?.(getError(value));
208
+ if (isActive) {
209
+ setMigrationState({
210
+ status: 'ready',
211
+ migrationKey,
212
+ userToken: null
213
+ });
214
+ }
215
+ }
216
+ };
217
+ void migrate();
218
+ return () => {
219
+ isActive = false;
220
+ };
221
+ }, [configuredUserToken, environment, hasLegacyUserMigration, scriptUrl, storeKey]);
222
+ if (!shouldMigrate) {
223
+ return {
224
+ status: 'ready',
225
+ migrationKey: null,
226
+ userToken: null
227
+ };
228
+ }
229
+ if (migrationState.migrationKey !== migrationKey) {
230
+ return {
231
+ status: 'pending',
232
+ migrationKey
233
+ };
234
+ }
235
+ return migrationState;
236
+ };
237
+ const TrueFitRecommendationView = args => {
238
+ const {
239
+ config,
240
+ legacyUserMigration,
241
+ options,
242
+ style,
243
+ onPresentationModeChange,
244
+ onHeightChange,
245
+ onWidgetResult,
246
+ onAutoSizeSelect
247
+ } = args;
248
+ const migrationState = useLegacyUserMigration({
249
+ config,
250
+ legacyUserMigration
251
+ });
36
252
  const minHeight = options?.minWidgetHeight ?? DEFAULT_MIN_HEIGHT;
37
253
  const [measuredHeight, setMeasuredHeight] = (0, _react.useState)(minHeight);
38
254
  const [presentationMode, setPresentationMode] = (0, _react.useState)('widget');
@@ -58,11 +274,16 @@ function TrueFitRecommendationView({
58
274
  zIndex: presentationMode === 'modal' ? 1000 : undefined,
59
275
  elevation: presentationMode === 'modal' ? 16 : undefined
60
276
  }], [measuredHeight, minHeight, presentationMode, style]);
277
+ if (migrationState.status === 'pending') return null;
278
+ const resolvedConfig = migrationState.userToken ? {
279
+ ...config,
280
+ userToken: migrationState.userToken
281
+ } : config;
61
282
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
62
283
  style: containerStyle,
63
284
  collapsable: false,
64
285
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(NativeTrueFitRecommendationView, {
65
- config: config,
286
+ config: resolvedConfig,
66
287
  options: options,
67
288
  style: styles.nativeView,
68
289
  onHeightChange: handleHeightChange,
@@ -71,7 +292,8 @@ function TrueFitRecommendationView({
71
292
  onAutoSizeSelect: handleAutoSizeSelect
72
293
  })
73
294
  });
74
- }
295
+ };
296
+ exports.TrueFitRecommendationView = TrueFitRecommendationView;
75
297
  const styles = _reactNative.StyleSheet.create({
76
298
  container: {
77
299
  width: '100%',
@@ -83,13 +305,22 @@ const styles = _reactNative.StyleSheet.create({
83
305
  height: '100%'
84
306
  }
85
307
  });
86
- const orderModule = _reactNative.NativeModules.TrueFitOrderModule;
308
+ const trueFitNativeModule = _reactNative.NativeModules.TrueFitOrderModule;
309
+
310
+ /** Returns the current True Fit user token from the native WebView cookie store. */
311
+ const getToken = async () => {
312
+ if (!trueFitNativeModule) {
313
+ throw new Error("True Fit token access is unavailable because the native module is not linked. Rebuild the app after installing 'consumer-app-react-native-sdk' (on iOS, run pod install first).");
314
+ }
315
+ return trueFitNativeModule.getToken();
316
+ };
87
317
 
88
318
  /**
89
319
  * Reports a completed order to True Fit, for the order confirmation screen.
90
320
  * Forwards straight to the native SDKs' order API, which posts in the
91
321
  * background and never reports delivery back — so there is nothing to await.
92
322
  */
323
+ exports.getToken = getToken;
93
324
  const trackOrder = args => {
94
325
  const {
95
326
  storeKey,
@@ -98,10 +329,10 @@ const trackOrder = args => {
98
329
  environment = 'prod',
99
330
  locale
100
331
  } = args;
101
- if (!orderModule) {
332
+ if (!trueFitNativeModule) {
102
333
  throw new Error("True Fit order tracking is unavailable because the native module is not linked. Rebuild the app after installing 'consumer-app-react-native-sdk' (on iOS, run pod install first).");
103
334
  }
104
- orderModule.trackOrder({
335
+ trueFitNativeModule.trackOrder({
105
336
  storeKey,
106
337
  orderId,
107
338
  products,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NativeTrueFitRecommendationView","requireNativeComponent","DEFAULT_MIN_HEIGHT","TrueFitRecommendationView","config","options","style","onPresentationModeChange","onHeightChange","onWidgetResult","onAutoSizeSelect","minHeight","minWidgetHeight","measuredHeight","setMeasuredHeight","useState","presentationMode","setPresentationMode","handleHeightChange","useCallback","event","nextHeight","Math","max","nativeEvent","height","handlePresentationModeChange","nextMode","mode","styleId","handleWidgetResult","handleAutoSizeSelect","containerStyle","useMemo","styles","container","zIndex","undefined","elevation","jsx","View","collapsable","children","nativeView","StyleSheet","create","width","overflow","position","orderModule","NativeModules","TrueFitOrderModule","trackOrder","args","storeKey","orderId","products","environment","locale","Error","exports","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_zod","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEVELOPMENT_BASE_URL","PRODUCTION_BASE_URL","LEGACY_USER_TOKEN_HEADER","USER_TOKEN_HEADER","legacyUserMigrationSchema","z","object","readLegacyUserToken","custom","value","completeLegacyUserMigration","onLegacyUserMigrationError","optional","legacyUserTokenRecordSchema","token","string","min","creationTime","number","int","nonnegative","maxAge","migrationResponseSchema","migrated","boolean","legacyUserMigrationStateSchema","discriminatedUnion","status","literal","migrationKey","nullable","userToken","NativeTrueFitRecommendationView","requireNativeComponent","DEFAULT_MIN_HEIGHT","pendingLegacyUserMigrations","Map","resolveApiBaseUrl","args","config","scriptUrl","URL","origin","environment","parseLegacyUserTokenRecord","storedValue","parse","JSON","isLegacyUserTokenExpired","Date","now","migrateLegacyUser","legacyUserMigration","getError","legacyUserTokenRecord","apiBaseUrl","migrationUrl","encodeURIComponent","storeKey","response","fetch","method","credentials","headers","ok","Error","migrationResponse","json","migratedUserToken","trim","String","getLegacyUserMigration","pendingMigration","migration","clearPendingMigration","delete","then","useLegacyUserMigration","legacyUserMigrationRef","useRef","current","configuredUserToken","hasLegacyUserMigration","Boolean","shouldMigrate","stringify","migrationState","setMigrationState","useState","useEffect","currentLegacyUserMigration","parsedLegacyUserMigration","migrationConfig","isActive","migrate","TrueFitRecommendationView","options","style","onPresentationModeChange","onHeightChange","onWidgetResult","onAutoSizeSelect","minHeight","minWidgetHeight","measuredHeight","setMeasuredHeight","presentationMode","setPresentationMode","handleHeightChange","useCallback","event","nextHeight","Math","max","nativeEvent","height","handlePresentationModeChange","nextMode","mode","styleId","handleWidgetResult","handleAutoSizeSelect","containerStyle","useMemo","styles","container","zIndex","undefined","elevation","resolvedConfig","jsx","View","collapsable","children","nativeView","exports","StyleSheet","create","width","overflow","position","trueFitNativeModule","NativeModules","TrueFitOrderModule","getToken","trackOrder","orderId","products","locale","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,34 @@
1
1
  "use strict";
2
2
 
3
- import React, { useCallback, useMemo, useState } from 'react';
3
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { NativeModules, requireNativeComponent, StyleSheet, View } from 'react-native';
5
+ import { z } from 'zod';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ const DEVELOPMENT_BASE_URL = 'https://consumer-dev.truefitcorp.com';
8
+ const PRODUCTION_BASE_URL = 'https://consumer-v2.truefitcorp.com';
9
+ const LEGACY_USER_TOKEN_HEADER = 'x-tf-usertoken';
10
+ const USER_TOKEN_HEADER = 'x-tf-user-token';
11
+ const legacyUserMigrationSchema = z.object({
12
+ readLegacyUserToken: z.custom(value => typeof value === 'function'),
13
+ completeLegacyUserMigration: z.custom(value => typeof value === 'function'),
14
+ onLegacyUserMigrationError: z.custom(value => typeof value === 'function').optional()
15
+ });
16
+ const legacyUserTokenRecordSchema = z.object({
17
+ token: z.string().min(1),
18
+ creationTime: z.number().int().nonnegative(),
19
+ maxAge: z.number().int().nonnegative()
20
+ });
21
+ const migrationResponseSchema = z.object({
22
+ migrated: z.boolean()
23
+ });
24
+ const legacyUserMigrationStateSchema = z.discriminatedUnion('status', [z.object({
25
+ status: z.literal('pending'),
26
+ migrationKey: z.string()
27
+ }), z.object({
28
+ status: z.literal('ready'),
29
+ migrationKey: z.string().nullable(),
30
+ userToken: z.string().nullable()
31
+ })]);
5
32
 
6
33
  /**
7
34
  * Which True Fit environment to point at. The native SDKs resolve the widget
@@ -15,18 +42,208 @@ import { NativeModules, requireNativeComponent, StyleSheet, View } from 'react-n
15
42
  */
16
43
 
17
44
  /** One line item in a completed order, reported through {@link trackOrder}. */
18
- import { jsx as _jsx } from "react/jsx-runtime";
45
+
19
46
  const NativeTrueFitRecommendationView = requireNativeComponent('TrueFitRecommendationView');
20
47
  const DEFAULT_MIN_HEIGHT = 86;
21
- export function TrueFitRecommendationView({
22
- config,
23
- options,
24
- style,
25
- onPresentationModeChange,
26
- onHeightChange,
27
- onWidgetResult,
28
- onAutoSizeSelect
29
- }) {
48
+ const pendingLegacyUserMigrations = new Map();
49
+ const resolveApiBaseUrl = args => {
50
+ const {
51
+ config
52
+ } = args;
53
+ if (config.scriptUrl) return new URL(config.scriptUrl).origin;
54
+ if (config.environment === 'development') return DEVELOPMENT_BASE_URL;
55
+ return PRODUCTION_BASE_URL;
56
+ };
57
+ const parseLegacyUserTokenRecord = storedValue => legacyUserTokenRecordSchema.parse(JSON.parse(storedValue));
58
+ const isLegacyUserTokenExpired = args => {
59
+ const {
60
+ creationTime,
61
+ maxAge
62
+ } = args;
63
+ return Date.now() >= creationTime + maxAge;
64
+ };
65
+ const migrateLegacyUser = async args => {
66
+ const {
67
+ config,
68
+ legacyUserMigration
69
+ } = args;
70
+ const {
71
+ completeLegacyUserMigration,
72
+ readLegacyUserToken
73
+ } = legacyUserMigration;
74
+ const storedValue = await readLegacyUserToken();
75
+ if (!storedValue) {
76
+ try {
77
+ await completeLegacyUserMigration(null);
78
+ } catch (value) {
79
+ legacyUserMigration.onLegacyUserMigrationError?.(getError(value));
80
+ }
81
+ return null;
82
+ }
83
+ const legacyUserTokenRecord = parseLegacyUserTokenRecord(storedValue);
84
+ if (isLegacyUserTokenExpired(legacyUserTokenRecord)) {
85
+ try {
86
+ await completeLegacyUserMigration(storedValue);
87
+ } catch (value) {
88
+ legacyUserMigration.onLegacyUserMigrationError?.(getError(value));
89
+ }
90
+ return null;
91
+ }
92
+ const apiBaseUrl = resolveApiBaseUrl({
93
+ config
94
+ });
95
+ const migrationUrl = `${apiBaseUrl}/api/experiments?storeKey=${encodeURIComponent(config.storeKey ?? '')}&forceMigrate=true`;
96
+ const response = await fetch(migrationUrl, {
97
+ method: 'POST',
98
+ credentials: 'include',
99
+ headers: {
100
+ [LEGACY_USER_TOKEN_HEADER]: legacyUserTokenRecord.token
101
+ }
102
+ });
103
+ if (!response.ok) {
104
+ throw new Error(`Legacy user migration failed with status ${response.status}`);
105
+ }
106
+ const migrationResponse = migrationResponseSchema.parse(await response.json());
107
+ if (!migrationResponse.migrated) return null;
108
+ const migratedUserToken = response.headers.get(USER_TOKEN_HEADER)?.trim();
109
+ if (!migratedUserToken) {
110
+ throw new Error('Legacy user migration did not return a user token');
111
+ }
112
+ try {
113
+ await completeLegacyUserMigration(storedValue);
114
+ } catch (value) {
115
+ legacyUserMigration.onLegacyUserMigrationError?.(getError(value));
116
+ }
117
+ return migratedUserToken;
118
+ };
119
+ const getError = value => value instanceof Error ? value : new Error(String(value));
120
+ const getLegacyUserMigration = args => {
121
+ const {
122
+ config,
123
+ legacyUserMigration,
124
+ migrationKey
125
+ } = args;
126
+ const pendingMigration = pendingLegacyUserMigrations.get(migrationKey);
127
+ if (pendingMigration) return pendingMigration;
128
+ const migration = migrateLegacyUser({
129
+ config,
130
+ legacyUserMigration
131
+ });
132
+ pendingLegacyUserMigrations.set(migrationKey, migration);
133
+ const clearPendingMigration = () => {
134
+ if (pendingLegacyUserMigrations.get(migrationKey) === migration) {
135
+ pendingLegacyUserMigrations.delete(migrationKey);
136
+ }
137
+ };
138
+ void migration.then(clearPendingMigration, clearPendingMigration);
139
+ return migration;
140
+ };
141
+ const useLegacyUserMigration = args => {
142
+ const {
143
+ config,
144
+ legacyUserMigration
145
+ } = args;
146
+ const legacyUserMigrationRef = useRef(legacyUserMigration);
147
+ legacyUserMigrationRef.current = legacyUserMigration;
148
+ const environment = config?.environment;
149
+ const scriptUrl = config?.scriptUrl;
150
+ const storeKey = config?.storeKey;
151
+ const configuredUserToken = config?.userToken;
152
+ const hasLegacyUserMigration = Boolean(legacyUserMigration);
153
+ const shouldMigrate = Boolean(hasLegacyUserMigration && storeKey && !configuredUserToken);
154
+ const migrationKey = JSON.stringify([environment, scriptUrl, storeKey]);
155
+ const [migrationState, setMigrationState] = useState(() => {
156
+ if (shouldMigrate) return {
157
+ status: 'pending',
158
+ migrationKey
159
+ };
160
+ return {
161
+ status: 'ready',
162
+ migrationKey: null,
163
+ userToken: null
164
+ };
165
+ });
166
+ useEffect(() => {
167
+ const currentLegacyUserMigration = legacyUserMigrationRef.current;
168
+ if (!currentLegacyUserMigration || !storeKey || configuredUserToken) {
169
+ setMigrationState({
170
+ status: 'ready',
171
+ migrationKey: null,
172
+ userToken: null
173
+ });
174
+ return;
175
+ }
176
+ const parsedLegacyUserMigration = legacyUserMigrationSchema.parse(currentLegacyUserMigration);
177
+ const migrationConfig = {
178
+ environment,
179
+ scriptUrl,
180
+ storeKey
181
+ };
182
+ let isActive = true;
183
+ setMigrationState({
184
+ status: 'pending',
185
+ migrationKey
186
+ });
187
+ const migrate = async () => {
188
+ try {
189
+ const userToken = await getLegacyUserMigration({
190
+ config: migrationConfig,
191
+ legacyUserMigration: parsedLegacyUserMigration,
192
+ migrationKey
193
+ });
194
+ if (isActive) {
195
+ setMigrationState({
196
+ status: 'ready',
197
+ migrationKey,
198
+ userToken
199
+ });
200
+ }
201
+ } catch (value) {
202
+ parsedLegacyUserMigration.onLegacyUserMigrationError?.(getError(value));
203
+ if (isActive) {
204
+ setMigrationState({
205
+ status: 'ready',
206
+ migrationKey,
207
+ userToken: null
208
+ });
209
+ }
210
+ }
211
+ };
212
+ void migrate();
213
+ return () => {
214
+ isActive = false;
215
+ };
216
+ }, [configuredUserToken, environment, hasLegacyUserMigration, scriptUrl, storeKey]);
217
+ if (!shouldMigrate) {
218
+ return {
219
+ status: 'ready',
220
+ migrationKey: null,
221
+ userToken: null
222
+ };
223
+ }
224
+ if (migrationState.migrationKey !== migrationKey) {
225
+ return {
226
+ status: 'pending',
227
+ migrationKey
228
+ };
229
+ }
230
+ return migrationState;
231
+ };
232
+ export const TrueFitRecommendationView = args => {
233
+ const {
234
+ config,
235
+ legacyUserMigration,
236
+ options,
237
+ style,
238
+ onPresentationModeChange,
239
+ onHeightChange,
240
+ onWidgetResult,
241
+ onAutoSizeSelect
242
+ } = args;
243
+ const migrationState = useLegacyUserMigration({
244
+ config,
245
+ legacyUserMigration
246
+ });
30
247
  const minHeight = options?.minWidgetHeight ?? DEFAULT_MIN_HEIGHT;
31
248
  const [measuredHeight, setMeasuredHeight] = useState(minHeight);
32
249
  const [presentationMode, setPresentationMode] = useState('widget');
@@ -52,11 +269,16 @@ export function TrueFitRecommendationView({
52
269
  zIndex: presentationMode === 'modal' ? 1000 : undefined,
53
270
  elevation: presentationMode === 'modal' ? 16 : undefined
54
271
  }], [measuredHeight, minHeight, presentationMode, style]);
272
+ if (migrationState.status === 'pending') return null;
273
+ const resolvedConfig = migrationState.userToken ? {
274
+ ...config,
275
+ userToken: migrationState.userToken
276
+ } : config;
55
277
  return /*#__PURE__*/_jsx(View, {
56
278
  style: containerStyle,
57
279
  collapsable: false,
58
280
  children: /*#__PURE__*/_jsx(NativeTrueFitRecommendationView, {
59
- config: config,
281
+ config: resolvedConfig,
60
282
  options: options,
61
283
  style: styles.nativeView,
62
284
  onHeightChange: handleHeightChange,
@@ -65,7 +287,7 @@ export function TrueFitRecommendationView({
65
287
  onAutoSizeSelect: handleAutoSizeSelect
66
288
  })
67
289
  });
68
- }
290
+ };
69
291
  const styles = StyleSheet.create({
70
292
  container: {
71
293
  width: '100%',
@@ -77,7 +299,15 @@ const styles = StyleSheet.create({
77
299
  height: '100%'
78
300
  }
79
301
  });
80
- const orderModule = NativeModules.TrueFitOrderModule;
302
+ const trueFitNativeModule = NativeModules.TrueFitOrderModule;
303
+
304
+ /** Returns the current True Fit user token from the native WebView cookie store. */
305
+ export const getToken = async () => {
306
+ if (!trueFitNativeModule) {
307
+ throw new Error("True Fit token access is unavailable because the native module is not linked. Rebuild the app after installing 'consumer-app-react-native-sdk' (on iOS, run pod install first).");
308
+ }
309
+ return trueFitNativeModule.getToken();
310
+ };
81
311
 
82
312
  /**
83
313
  * Reports a completed order to True Fit, for the order confirmation screen.
@@ -92,10 +322,10 @@ export const trackOrder = args => {
92
322
  environment = 'prod',
93
323
  locale
94
324
  } = args;
95
- if (!orderModule) {
325
+ if (!trueFitNativeModule) {
96
326
  throw new Error("True Fit order tracking is unavailable because the native module is not linked. Rebuild the app after installing 'consumer-app-react-native-sdk' (on iOS, run pod install first).");
97
327
  }
98
- orderModule.trackOrder({
328
+ trueFitNativeModule.trackOrder({
99
329
  storeKey,
100
330
  orderId,
101
331
  products,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useMemo","useState","NativeModules","requireNativeComponent","StyleSheet","View","jsx","_jsx","NativeTrueFitRecommendationView","DEFAULT_MIN_HEIGHT","TrueFitRecommendationView","config","options","style","onPresentationModeChange","onHeightChange","onWidgetResult","onAutoSizeSelect","minHeight","minWidgetHeight","measuredHeight","setMeasuredHeight","presentationMode","setPresentationMode","handleHeightChange","event","nextHeight","Math","max","nativeEvent","height","handlePresentationModeChange","nextMode","mode","styleId","handleWidgetResult","handleAutoSizeSelect","containerStyle","styles","container","zIndex","undefined","elevation","collapsable","children","nativeView","create","width","overflow","position","orderModule","TrueFitOrderModule","trackOrder","args","storeKey","orderId","products","environment","locale","Error"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","NativeModules","requireNativeComponent","StyleSheet","View","z","jsx","_jsx","DEVELOPMENT_BASE_URL","PRODUCTION_BASE_URL","LEGACY_USER_TOKEN_HEADER","USER_TOKEN_HEADER","legacyUserMigrationSchema","object","readLegacyUserToken","custom","value","completeLegacyUserMigration","onLegacyUserMigrationError","optional","legacyUserTokenRecordSchema","token","string","min","creationTime","number","int","nonnegative","maxAge","migrationResponseSchema","migrated","boolean","legacyUserMigrationStateSchema","discriminatedUnion","status","literal","migrationKey","nullable","userToken","NativeTrueFitRecommendationView","DEFAULT_MIN_HEIGHT","pendingLegacyUserMigrations","Map","resolveApiBaseUrl","args","config","scriptUrl","URL","origin","environment","parseLegacyUserTokenRecord","storedValue","parse","JSON","isLegacyUserTokenExpired","Date","now","migrateLegacyUser","legacyUserMigration","getError","legacyUserTokenRecord","apiBaseUrl","migrationUrl","encodeURIComponent","storeKey","response","fetch","method","credentials","headers","ok","Error","migrationResponse","json","migratedUserToken","get","trim","String","getLegacyUserMigration","pendingMigration","migration","set","clearPendingMigration","delete","then","useLegacyUserMigration","legacyUserMigrationRef","current","configuredUserToken","hasLegacyUserMigration","Boolean","shouldMigrate","stringify","migrationState","setMigrationState","currentLegacyUserMigration","parsedLegacyUserMigration","migrationConfig","isActive","migrate","TrueFitRecommendationView","options","style","onPresentationModeChange","onHeightChange","onWidgetResult","onAutoSizeSelect","minHeight","minWidgetHeight","measuredHeight","setMeasuredHeight","presentationMode","setPresentationMode","handleHeightChange","event","nextHeight","Math","max","nativeEvent","height","handlePresentationModeChange","nextMode","mode","styleId","handleWidgetResult","handleAutoSizeSelect","containerStyle","styles","container","zIndex","undefined","elevation","resolvedConfig","collapsable","children","nativeView","create","width","overflow","position","trueFitNativeModule","TrueFitOrderModule","getToken","trackOrder","orderId","products","locale"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,12 @@
1
1
  import React from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
+ import { z } from 'zod';
4
+ declare const legacyUserMigrationSchema: z.ZodObject<{
5
+ readLegacyUserToken: z.ZodCustom<() => Promise<string | null>, () => Promise<string | null>>;
6
+ completeLegacyUserMigration: z.ZodCustom<(storedValue: string | null) => Promise<void>, (storedValue: string | null) => Promise<void>>;
7
+ onLegacyUserMigrationError: z.ZodOptional<z.ZodCustom<(error: Error) => void, (error: Error) => void>>;
8
+ }, z.core.$strip>;
9
+ export type LegacyUserMigration = z.infer<typeof legacyUserMigrationSchema>;
3
10
  /**
4
11
  * Which True Fit environment to point at. The native SDKs resolve the widget
5
12
  * script URL from this internally; consumers never pass raw URLs.
@@ -10,7 +17,7 @@ export type TrueFitRecommendationConfig = {
10
17
  storeKey?: string;
11
18
  storeStyle?: string;
12
19
  uiLocale?: string;
13
- /** Connect user token to seed into the Android widget cookie store. */
20
+ /** Connect user token used once to seed the native WebView cookie store. */
14
21
  userToken?: string;
15
22
  /**
16
23
  * Full widget script URL that overrides `environment` (e.g. a built bundle).
@@ -71,6 +78,7 @@ export type TrackOrderArgs = {
71
78
  };
72
79
  export type TrueFitRecommendationViewProps = {
73
80
  config?: TrueFitRecommendationConfig;
81
+ legacyUserMigration?: LegacyUserMigration;
74
82
  options?: TrueFitRecommendationOptions;
75
83
  style?: StyleProp<ViewStyle>;
76
84
  onPresentationModeChange?: (mode: TrueFitPresentationMode, styleId?: string | null) => void;
@@ -78,7 +86,9 @@ export type TrueFitRecommendationViewProps = {
78
86
  onWidgetResult?: (result: TrueFitWidgetResult) => void;
79
87
  onAutoSizeSelect?: (selection: TrueFitAutoSizeSelect) => void;
80
88
  };
81
- export declare function TrueFitRecommendationView({ config, options, style, onPresentationModeChange, onHeightChange, onWidgetResult, onAutoSizeSelect, }: TrueFitRecommendationViewProps): React.JSX.Element;
89
+ export declare const TrueFitRecommendationView: (args: TrueFitRecommendationViewProps) => React.JSX.Element | null;
90
+ /** Returns the current True Fit user token from the native WebView cookie store. */
91
+ export declare const getToken: () => Promise<string | null>;
82
92
  /**
83
93
  * Reports a completed order to True Fit, for the order confirmation screen.
84
94
  * Forwards straight to the native SDKs' order API, which posts in the
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tfcorp/consumer-app-react-native-sdk",
3
- "version": "2.0.6",
3
+ "version": "2.0.7",
4
4
  "description": "React Native bridge for the True Fit recommendation WebView SDK.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -25,6 +25,9 @@
25
25
  "react": "*",
26
26
  "react-native": "*"
27
27
  },
28
+ "dependencies": {
29
+ "zod": "4.3.6"
30
+ },
28
31
  "devDependencies": {
29
32
  "@types/react": "^18.2.0",
30
33
  "del-cli": "^5.1.0",