@traffical/react-native 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +11 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +30 -6
- package/dist/client.js.map +1 -1
- package/dist/hooks.d.ts +8 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +17 -6
- package/dist/hooks.js.map +1 -1
- package/dist/lifecycle.d.ts +11 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +18 -2
- package/dist/lifecycle.js.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +17 -8
- package/dist/provider.js.map +1 -1
- package/package.json +3 -3
package/dist/client.d.ts
CHANGED
|
@@ -18,12 +18,20 @@ export declare class TrafficalRNClient<TEvents extends TrackEventMap = TrackEven
|
|
|
18
18
|
/**
|
|
19
19
|
* RN-specific initialization:
|
|
20
20
|
* 1. Wait for AsyncStorage preload
|
|
21
|
-
* 2. Load cached server response
|
|
22
|
-
*
|
|
23
|
-
*
|
|
21
|
+
* 2. Load cached server response and INJECT it into client state so an
|
|
22
|
+
* offline cold start serves the last-known assignments immediately
|
|
23
|
+
* 3. Call parent initialize (fetches from server; on failure the injected
|
|
24
|
+
* cached response survives — the base resolve fetch only overwrites
|
|
25
|
+
* serverResponse on success)
|
|
26
|
+
* 4. Persist the (possibly refreshed) response to cache
|
|
24
27
|
*/
|
|
25
28
|
initialize(): Promise<void>;
|
|
26
29
|
destroy(): void;
|
|
30
|
+
close(): Promise<void>;
|
|
31
|
+
/** Remove our foreground listener AND the native AppState subscription. */
|
|
32
|
+
private _teardownRNLifecycle;
|
|
33
|
+
/** Narrow, RN-only reach into the base client's private state (see above). */
|
|
34
|
+
private _baseState;
|
|
27
35
|
refreshConfig(): Promise<void>;
|
|
28
36
|
private _setupForegroundRefresh;
|
|
29
37
|
private _loadCachedResponse;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAE5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAM5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAE5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAM5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAa3D,MAAM,WAAW,wBAAyB,SAAQ,sBAAsB;IACtE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD,qBAAa,iBAAiB,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IAC5G,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,mBAAmB,CACpB;gBAEK,OAAO,EAAE,wBAAwB;IAqB7C;;;;;;;;;OASG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBxB,OAAO,IAAI,IAAI;IAKT,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC,2EAA2E;IAC3E,OAAO,CAAC,oBAAoB;IAW5B,8EAA8E;IAC9E,OAAO,CAAC,UAAU;IAIH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7C,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,uBAAuB;CAYhC"}
|
package/dist/client.js
CHANGED
|
@@ -32,14 +32,20 @@ export class TrafficalRNClient extends TrafficalClient {
|
|
|
32
32
|
/**
|
|
33
33
|
* RN-specific initialization:
|
|
34
34
|
* 1. Wait for AsyncStorage preload
|
|
35
|
-
* 2. Load cached server response
|
|
36
|
-
*
|
|
37
|
-
*
|
|
35
|
+
* 2. Load cached server response and INJECT it into client state so an
|
|
36
|
+
* offline cold start serves the last-known assignments immediately
|
|
37
|
+
* 3. Call parent initialize (fetches from server; on failure the injected
|
|
38
|
+
* cached response survives — the base resolve fetch only overwrites
|
|
39
|
+
* serverResponse on success)
|
|
40
|
+
* 4. Persist the (possibly refreshed) response to cache
|
|
38
41
|
*/
|
|
39
42
|
async initialize() {
|
|
40
43
|
await this._rnStorage.waitUntilReady();
|
|
41
44
|
const cached = this._loadCachedResponse();
|
|
42
45
|
if (cached) {
|
|
46
|
+
// Seed the base client's state BEFORE super.initialize() so getParams /
|
|
47
|
+
// decide resolve against the cached response even if the network is down.
|
|
48
|
+
this._baseState().serverResponse = cached;
|
|
43
49
|
this._lastResolveTimestamp = this._loadCachedTimestamp();
|
|
44
50
|
if (cached.suggestedRefreshMs) {
|
|
45
51
|
this._suggestedRefreshMs = cached.suggestedRefreshMs;
|
|
@@ -49,11 +55,25 @@ export class TrafficalRNClient extends TrafficalClient {
|
|
|
49
55
|
this._persistCurrentResponse();
|
|
50
56
|
}
|
|
51
57
|
destroy() {
|
|
58
|
+
this._teardownRNLifecycle();
|
|
59
|
+
super.destroy();
|
|
60
|
+
}
|
|
61
|
+
async close() {
|
|
62
|
+
this._teardownRNLifecycle();
|
|
63
|
+
await super.close();
|
|
64
|
+
}
|
|
65
|
+
/** Remove our foreground listener AND the native AppState subscription. */
|
|
66
|
+
_teardownRNLifecycle() {
|
|
52
67
|
if (this._visibilityCallback) {
|
|
53
68
|
this._rnLifecycle.removeVisibilityListener(this._visibilityCallback);
|
|
54
69
|
this._visibilityCallback = null;
|
|
55
70
|
}
|
|
56
|
-
|
|
71
|
+
const disposable = this._rnLifecycle;
|
|
72
|
+
disposable.dispose?.();
|
|
73
|
+
}
|
|
74
|
+
/** Narrow, RN-only reach into the base client's private state (see above). */
|
|
75
|
+
_baseState() {
|
|
76
|
+
return this._state;
|
|
57
77
|
}
|
|
58
78
|
async refreshConfig() {
|
|
59
79
|
await super.refreshConfig();
|
|
@@ -78,11 +98,15 @@ export class TrafficalRNClient extends TrafficalClient {
|
|
|
78
98
|
return this._rnStorage.get(CACHED_RESPONSE_TIMESTAMP_KEY) ?? 0;
|
|
79
99
|
}
|
|
80
100
|
_persistCurrentResponse() {
|
|
81
|
-
const
|
|
82
|
-
if (!
|
|
101
|
+
const response = this._baseState().serverResponse;
|
|
102
|
+
if (!response)
|
|
83
103
|
return;
|
|
84
104
|
const now = Date.now();
|
|
85
105
|
this._lastResolveTimestamp = now;
|
|
106
|
+
// Persist the FULL resolve response (not just a timestamp) so the next cold
|
|
107
|
+
// start can serve it offline. Keyed by CACHED_RESPONSE_KEY, which
|
|
108
|
+
// _loadCachedResponse reads back.
|
|
109
|
+
this._rnStorage.set(CACHED_RESPONSE_KEY, response, this._cacheMaxAgeMs);
|
|
86
110
|
this._rnStorage.set(CACHED_RESPONSE_TIMESTAMP_KEY, now, this._cacheMaxAgeMs);
|
|
87
111
|
}
|
|
88
112
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAGhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,2BAA2B,GAE5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { ParameterValue, DecisionResult, Context, TrackEventMap, TypedTrackFn } from "@traffical/core";
|
|
2
2
|
import type { TrafficalPlugin } from "@traffical/js-client";
|
|
3
|
+
/**
|
|
4
|
+
* Recursively sorts object keys at EVERY level so nested context/defaults
|
|
5
|
+
* objects produce a stable, order-independent key. (The previous implementation
|
|
6
|
+
* used `JSON.stringify(obj, Object.keys(obj).sort())`, whose array replacer only
|
|
7
|
+
* allowlists top-level keys and never reorders nested objects — so changes to a
|
|
8
|
+
* nested value were missed.)
|
|
9
|
+
*/
|
|
10
|
+
export declare function createStableKey(value: unknown): string;
|
|
3
11
|
export interface UseTrafficalOptions<T> {
|
|
4
12
|
defaults: T;
|
|
5
13
|
context?: Context;
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,OAAO,EACP,aAAa,EACb,YAAY,EACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,OAAO,EACP,aAAa,EACb,YAAY,EACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAO5D;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CActD;AAeD,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,EAAE,OAAO,SAAS,aAAa,GAAG,aAAa;IAClF,MAAM,EAAE,CAAC,CAAC;IACV,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAED,wBAAgB,YAAY,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACxC,OAAO,SAAS,aAAa,GAAG,aAAa,EAE7C,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC9B,kBAAkB,CAAC,CAAC,EAAE,OAAO,CAAC,CA4LhC;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,aAAa,GAAG,aAAa,KAAK,YAAY,CAAC,OAAO,CAAC,CAyBxG;AAMD,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,eAAe,GAAG,eAAe,EAC3C,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAQ7B;AAMD,wBAAgB,kBAAkB;;;;EAGjC"}
|
package/dist/hooks.js
CHANGED
|
@@ -4,14 +4,25 @@ import { useTrafficalContext } from "./context.js";
|
|
|
4
4
|
// =============================================================================
|
|
5
5
|
// Internal Utilities
|
|
6
6
|
// =============================================================================
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Recursively sorts object keys at EVERY level so nested context/defaults
|
|
9
|
+
* objects produce a stable, order-independent key. (The previous implementation
|
|
10
|
+
* used `JSON.stringify(obj, Object.keys(obj).sort())`, whose array replacer only
|
|
11
|
+
* allowlists top-level keys and never reorders nested objects — so changes to a
|
|
12
|
+
* nested value were missed.)
|
|
13
|
+
*/
|
|
14
|
+
export function createStableKey(value) {
|
|
15
|
+
if (value === null || typeof value !== "object") {
|
|
16
|
+
return JSON.stringify(value) ?? String(value);
|
|
10
17
|
}
|
|
11
|
-
if (
|
|
12
|
-
return
|
|
18
|
+
if (Array.isArray(value)) {
|
|
19
|
+
return "[" + value.map(createStableKey).join(",") + "]";
|
|
13
20
|
}
|
|
14
|
-
|
|
21
|
+
const obj = value;
|
|
22
|
+
const keys = Object.keys(obj).sort();
|
|
23
|
+
return ("{" +
|
|
24
|
+
keys.map((k) => JSON.stringify(k) + ":" + createStableKey(obj[k])).join(",") +
|
|
25
|
+
"}");
|
|
15
26
|
}
|
|
16
27
|
function useStableObject(obj) {
|
|
17
28
|
const stableKey = createStableKey(obj);
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAQjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/lifecycle.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import type { LifecycleProvider } from "@traffical/js-client";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* A LifecycleProvider that also owns the native AppState subscription and can
|
|
4
|
+
* tear it down. `dispose()` removes the underlying `AppState` listener so the
|
|
5
|
+
* provider (and the client that owns it) can be fully garbage-collected — the
|
|
6
|
+
* base `LifecycleProvider` contract has no teardown verb, so we widen it here.
|
|
7
|
+
*/
|
|
8
|
+
export interface DisposableLifecycleProvider extends LifecycleProvider {
|
|
9
|
+
/** Remove the native AppState subscription and drop all callbacks. */
|
|
10
|
+
dispose(): void;
|
|
11
|
+
}
|
|
12
|
+
export declare function createRNLifecycleProvider(): DisposableLifecycleProvider;
|
|
3
13
|
//# sourceMappingURL=lifecycle.d.ts.map
|
package/dist/lifecycle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAE9B,wBAAgB,yBAAyB,IAAI,
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAE9B;;;;;GAKG;AACH,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,sEAAsE;IACtE,OAAO,IAAI,IAAI,CAAC;CACjB;AAOD,wBAAgB,yBAAyB,IAAI,2BAA2B,CA4CvE"}
|
package/dist/lifecycle.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { AppState } from "react-native";
|
|
2
2
|
export function createRNLifecycleProvider() {
|
|
3
3
|
const listeners = [];
|
|
4
|
-
|
|
4
|
+
const handleChange = (nextState) => {
|
|
5
5
|
const visibility = nextState === "active" ? "foreground" : "background";
|
|
6
6
|
for (const cb of listeners)
|
|
7
7
|
cb(visibility);
|
|
8
|
-
}
|
|
8
|
+
};
|
|
9
|
+
// RN >= 0.65 returns a subscription object with `.remove()`. Older RN returned
|
|
10
|
+
// `undefined` and required `AppState.removeEventListener` — we keep a handle so
|
|
11
|
+
// either way the subscription is torn down in `dispose()` (no leak, no
|
|
12
|
+
// dangling handler firing into a destroyed client).
|
|
13
|
+
const subscription = AppState.addEventListener("change", handleChange);
|
|
9
14
|
return {
|
|
10
15
|
onVisibilityChange(callback) {
|
|
11
16
|
listeners.push(callback);
|
|
@@ -18,6 +23,17 @@ export function createRNLifecycleProvider() {
|
|
|
18
23
|
isUnloading() {
|
|
19
24
|
return false;
|
|
20
25
|
},
|
|
26
|
+
dispose() {
|
|
27
|
+
listeners.length = 0;
|
|
28
|
+
if (subscription && typeof subscription.remove === "function") {
|
|
29
|
+
subscription.remove();
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Legacy RN fallback (< 0.65): no subscription object was returned.
|
|
33
|
+
const legacy = AppState;
|
|
34
|
+
legacy.removeEventListener?.("change", handleChange);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
21
37
|
};
|
|
22
38
|
}
|
|
23
39
|
//# sourceMappingURL=lifecycle.js.map
|
package/dist/lifecycle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAuB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAuB,MAAM,cAAc,CAAC;AAsB7D,MAAM,UAAU,yBAAyB;IACvC,MAAM,SAAS,GAAyB,EAAE,CAAC;IAE3C,MAAM,YAAY,GAAG,CAAC,SAAyB,EAAQ,EAAE;QACvD,MAAM,UAAU,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;QACxE,KAAK,MAAM,EAAE,IAAI,SAAS;YAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,+EAA+E;IAC/E,gFAAgF;IAChF,uEAAuE;IACvE,oDAAoD;IACpD,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAC5C,QAAQ,EACR,YAAY,CACuB,CAAC;IAEtC,OAAO;QACL,kBAAkB,CAAC,QAA4B;YAC7C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QACD,wBAAwB,CAAC,QAA4B;YACnD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,WAAW;YACT,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO;YACL,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACrB,IAAI,YAAY,IAAI,OAAO,YAAY,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC9D,YAAY,CAAC,MAAM,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,oEAAoE;gBACpE,MAAM,MAAM,GAAG,QAKd,CAAC;gBACF,MAAM,CAAC,mBAAmB,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAMZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,yBAAyB,CAAC;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,QAAQ,EACR,gBAAgB,GACjB,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAMZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,yBAAyB,CAAC;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,QAAQ,EACR,gBAAgB,GACjB,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,CAuM/C"}
|
package/dist/provider.js
CHANGED
|
@@ -40,12 +40,18 @@ export function TrafficalRNProvider({ config, children, loadingComponent, }) {
|
|
|
40
40
|
const unitKey = getUnitKey();
|
|
41
41
|
const additionalContext = config.contextFn?.() ?? {};
|
|
42
42
|
const deviceInfo = config.deviceInfoProvider?.getDeviceInfo();
|
|
43
|
+
// Project identity onto the bundle's REAL unit-key field so a custom
|
|
44
|
+
// `hashing.unitKey` buckets correctly (mirrors openfeature-core). In server
|
|
45
|
+
// mode the bundle isn't held locally, so getUnitKeyField() may be null —
|
|
46
|
+
// fall back to the common field names.
|
|
47
|
+
const unitKeyField = clientRef.current?.getUnitKeyField?.() ?? null;
|
|
48
|
+
const identity = unitKeyField
|
|
49
|
+
? { [unitKeyField]: unitKey }
|
|
50
|
+
: { userId: unitKey, deviceId: unitKey, anonymousId: unitKey };
|
|
43
51
|
return {
|
|
44
52
|
...additionalContext,
|
|
45
53
|
...(deviceInfo ?? {}),
|
|
46
|
-
|
|
47
|
-
deviceId: unitKey,
|
|
48
|
-
anonymousId: unitKey,
|
|
54
|
+
...identity,
|
|
49
55
|
};
|
|
50
56
|
}, [getUnitKey, config.contextFn, config.deviceInfoProvider]);
|
|
51
57
|
useEffect(() => {
|
|
@@ -99,26 +105,29 @@ export function TrafficalRNProvider({ config, children, loadingComponent, }) {
|
|
|
99
105
|
clientRef.current?.destroy();
|
|
100
106
|
clientRef.current = null;
|
|
101
107
|
};
|
|
108
|
+
// Recreate the client only when the connection identity changes. Depend
|
|
109
|
+
// ONLY on primitive/scalar options; non-primitive options — `plugins`,
|
|
110
|
+
// `localConfig`, `assignmentLogger`/`eventLogger`, `deviceInfoProvider` —
|
|
111
|
+
// are usually fresh references each render for inline `config` and would
|
|
112
|
+
// otherwise cause a destroy+refetch storm. They are read once at
|
|
113
|
+
// construction. Memoize `config` (or remount with a new `key`) to change
|
|
114
|
+
// them at runtime. See the provider docs.
|
|
115
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
102
116
|
}, [
|
|
103
117
|
config.orgId,
|
|
104
118
|
config.projectId,
|
|
105
119
|
config.env,
|
|
106
120
|
config.apiKey,
|
|
107
121
|
config.baseUrl,
|
|
108
|
-
config.localConfig,
|
|
109
122
|
config.refreshIntervalMs,
|
|
110
123
|
config.trackDecisions,
|
|
111
124
|
config.decisionDeduplicationTtlMs,
|
|
112
125
|
config.exposureSessionTtlMs,
|
|
113
126
|
config.eventBatchSize,
|
|
114
127
|
config.eventFlushIntervalMs,
|
|
115
|
-
config.plugins,
|
|
116
|
-
config.assignmentLogger,
|
|
117
|
-
config.eventLogger,
|
|
118
128
|
config.disableCloudEvents,
|
|
119
129
|
config.deduplicateAssignmentLogger,
|
|
120
130
|
config.evaluationMode,
|
|
121
|
-
config.deviceInfoProvider,
|
|
122
131
|
config.cacheMaxAgeMs,
|
|
123
132
|
]);
|
|
124
133
|
// In server mode, re-resolve when the identity changes so the cached
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":";AAAA,OAAc,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAO,EACP,MAAM,GAEP,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,gBAAgB,GAGjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAShD,MAAM,UAAU,mBAAmB,CAAC,EAClC,MAAM,EACN,QAAQ,EACR,gBAAgB,GACS;IACzB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA2B,IAAI,CAAC,CAAC;IACrE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAEnD,uDAAuD;IACvD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,EAAE;YACxC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,yEAAyE;IACzE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,OAAO,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE;YACnC,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;QACD,OAAO,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAExC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAY,EAAE;QAC3C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;QAE9D,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@traffical/react-native",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Traffical SDK for React Native - server-evaluated feature flags, A/B testing, and adaptive optimization",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"typecheck": "tsc --noEmit"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@traffical/core": "0.
|
|
26
|
-
"@traffical/js-client": "0.
|
|
25
|
+
"@traffical/core": "0.11.0",
|
|
26
|
+
"@traffical/js-client": "0.16.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/bun": "latest",
|