@getuserfeedback/react-native 3.0.72 → 3.0.75

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.
@@ -23,10 +23,18 @@ function toCommandSettledDetail(settlement) {
23
23
  }
24
24
  export function createNativeCoreCommandSession(input) {
25
25
  const pendingCommands = createPendingCommandTracker();
26
+ const pendingIdentityByRequestId = new Map();
26
27
  const handleInvalidatedListeners = new Set();
27
28
  let disposed = false;
28
29
  const unsubscribeSettlements = input.channel.subscribe((settlement) => {
29
30
  const detail = toCommandSettledDetail(settlement);
31
+ const pendingIdentity = pendingIdentityByRequestId.get(detail.requestId);
32
+ if (!pendingIdentity ||
33
+ detail.instanceId !== pendingIdentity.instanceId ||
34
+ detail.kind !== pendingIdentity.kind) {
35
+ return;
36
+ }
37
+ pendingIdentityByRequestId.delete(detail.requestId);
30
38
  if (detail.ok) {
31
39
  pendingCommands.resolve(detail.requestId, detail);
32
40
  return;
@@ -46,10 +54,15 @@ export function createNativeCoreCommandSession(input) {
46
54
  }
47
55
  const canonicalEnvelope = coreCommandEnvelopeSchema.parse(envelope);
48
56
  const settlement = pendingCommands.waitFor(canonicalEnvelope.requestId);
57
+ pendingIdentityByRequestId.set(canonicalEnvelope.requestId, {
58
+ instanceId: canonicalEnvelope.instanceId,
59
+ kind: canonicalEnvelope.command.kind,
60
+ });
49
61
  try {
50
62
  input.channel.post(canonicalEnvelope);
51
63
  }
52
64
  catch (error) {
65
+ pendingIdentityByRequestId.delete(canonicalEnvelope.requestId);
53
66
  pendingCommands.reject(canonicalEnvelope.requestId, error instanceof Error ? error : new Error(String(error)));
54
67
  }
55
68
  return settlement;
@@ -72,6 +85,7 @@ export function createNativeCoreCommandSession(input) {
72
85
  unsubscribeSettlements();
73
86
  unsubscribeHandleInvalidated();
74
87
  handleInvalidatedListeners.clear();
88
+ pendingIdentityByRequestId.clear();
75
89
  pendingCommands.reset((requestId) => new NativeCoreCommandSessionClosedError(requestId));
76
90
  },
77
91
  };
@@ -1,16 +1,8 @@
1
1
  import { getFlowHandleFromSettlementDetail } from "@getuserfeedback/protocol/host";
2
2
  import { toCoreCommandPayload, } from "@getuserfeedback/protocol/internal/public-core-command";
3
- import { createFlowHandleCommandStateStore, planFlowHandleCommand, } from "./view-orchestration-runtime.js";
4
- // TODO(migration): Add native instance-wide command ordering before routing reset, unscoped close, and the public provider client through this direct session.
5
- // [from=native-flow-handle-command-session] [to=native-instance-flow-command-session] [scope=slice] [principle=core-owned-flow-lifecycle] [priority=high] [impact=high] [risk=high] [epic=runtime-neutral-view-host-orchestration] [epic_order=180]
3
+ // TODO(migration): Route reset, unscoped close, and the public provider client through this core-ordered direct session.
4
+ // [from=native-core-ordered-command-session] [to=native-provider-direct-session] [scope=slice] [principle=core-owned-flow-lifecycle] [priority=high] [impact=high] [risk=high] [epic=runtime-neutral-view-host-orchestration] [epic_order=180]
6
5
  export function createNativeDirectCommandSession(input) {
7
- const flowHandleCommandStateStore = createFlowHandleCommandStateStore();
8
- // The direct session shares the core session lifetime; core-session disposal clears this listener.
9
- input.coreSession.subscribeHandleInvalidated((message) => {
10
- if (message.handleKind === "flow") {
11
- flowHandleCommandStateStore.invalidate(message.handleId);
12
- }
13
- });
14
6
  const dispatchToCore = (envelope, command) => {
15
7
  const coreEnvelope = Object.assign(Object.assign({}, envelope), { command: toCoreCommandPayload(command) });
16
8
  return input.coreSession.dispatch(coreEnvelope);
@@ -22,143 +14,41 @@ export function createNativeDirectCommandSession(input) {
22
14
  throw new Error(`Expected ${input.expectedKind} settlement for requestId "${input.envelope.requestId}" and instanceId "${input.envelope.instanceId}"`);
23
15
  }
24
16
  };
25
- const dispatchAllocation = async (envelope, command) => {
26
- if (command.flowHandleId === undefined) {
27
- const settlement = await dispatchToCore(envelope, command);
28
- if (!settlement.ok) {
29
- return settlement;
30
- }
31
- assertSettlementMatches({
32
- envelope,
33
- expectedKind: command.kind,
34
- settlement,
35
- });
36
- const allocation = getFlowHandleFromSettlementDetail(settlement);
37
- if (!(allocation === null || allocation === void 0 ? void 0 : allocation.flowRunId)) {
38
- throw new Error(`Expected ${command.kind} settlement to include flowHandleId and flowRunId`);
39
- }
40
- const { flowHandleId, flowRunId } = allocation;
41
- await flowHandleCommandStateStore.enqueue(flowHandleId, async (state) => {
42
- state.runtime.bindAffinity({
43
- instanceId: envelope.instanceId,
44
- flowId: command.flowId,
45
- });
46
- state.runtime.bindFlowRun({
47
- flowRunId,
48
- activationPolicy: "never",
49
- });
50
- });
51
- return settlement;
52
- }
53
- const flowHandleId = command.flowHandleId;
54
- return flowHandleCommandStateStore.enqueue(flowHandleId, async (state) => {
55
- const runtime = state.runtime.getSnapshot();
56
- const decision = planFlowHandleCommand({
57
- command: command.kind,
58
- runtime,
59
- instanceId: envelope.instanceId,
60
- flowId: command.flowId,
61
- });
62
- if (decision === "forward-to-core") {
63
- return dispatchToCore(envelope, Object.assign(Object.assign({}, command), { flowHandleId }));
64
- }
65
- if (decision !== "orchestrate") {
66
- throw new Error(`Unexpected flow-handle command decision for ${command.kind}: ${decision}`);
67
- }
68
- state.runtime.bindAffinity({
69
- instanceId: envelope.instanceId,
70
- flowId: command.flowId,
71
- });
72
- const shouldResolveFlowRun = runtime.flowRunId === null;
73
- if (shouldResolveFlowRun &&
74
- !state.runtime.beginFlowRunResolution(envelope.requestId)) {
75
- return dispatchToCore(envelope, Object.assign(Object.assign({}, command), { flowHandleId }));
76
- }
77
- try {
78
- const settlement = await dispatchToCore(envelope, Object.assign(Object.assign({}, command), { flowHandleId }));
79
- if (!settlement.ok) {
80
- if (shouldResolveFlowRun) {
81
- state.runtime.finishFlowRunResolution(envelope.requestId);
82
- }
83
- return settlement;
84
- }
85
- assertSettlementMatches({
86
- envelope,
87
- expectedKind: command.kind,
88
- settlement,
89
- });
90
- const allocation = getFlowHandleFromSettlementDetail(settlement);
91
- if ((allocation === null || allocation === void 0 ? void 0 : allocation.flowHandleId) !== flowHandleId ||
92
- allocation.flowRunId === undefined) {
93
- throw new Error(`Expected ${command.kind} settlement to include matching flowHandleId and flowRunId`);
94
- }
95
- if (shouldResolveFlowRun &&
96
- !state.runtime.finishFlowRunResolution(envelope.requestId) &&
97
- state.runtime.getSnapshot().state !== "invalidated") {
98
- throw new Error(`Could not finish flow-run resolution for requestId "${envelope.requestId}"`);
99
- }
100
- state.runtime.bindFlowRun({
101
- flowRunId: allocation.flowRunId,
102
- activationPolicy: "never",
103
- });
104
- return settlement;
105
- }
106
- catch (error) {
107
- if (shouldResolveFlowRun) {
108
- state.runtime.finishFlowRunResolution(envelope.requestId);
109
- }
110
- throw error;
111
- }
112
- });
113
- };
114
- const dispatchHandleClose = async (envelope, command) => {
115
- const flowHandleId = command.flowHandleId;
116
- return flowHandleCommandStateStore.enqueue(flowHandleId, async (state) => {
117
- const decision = planFlowHandleCommand({
118
- command: "close",
119
- runtime: state.runtime.getSnapshot(),
120
- instanceId: envelope.instanceId,
121
- });
122
- if (decision === "ignore") {
123
- return {
124
- instanceId: envelope.instanceId,
125
- kind: "close",
126
- ok: true,
127
- requestId: envelope.requestId,
128
- };
129
- }
130
- if (decision === "forward-to-core") {
131
- return dispatchToCore(envelope, command);
132
- }
133
- if (decision !== "orchestrate") {
134
- throw new Error(`Unexpected flow-handle command decision for close: ${decision}`);
135
- }
136
- state.runtime.bindAffinity({ instanceId: envelope.instanceId });
137
- const settlement = await dispatchToCore(envelope, command);
138
- if (settlement.ok) {
139
- assertSettlementMatches({
140
- envelope,
141
- expectedKind: "close",
142
- settlement,
143
- });
144
- flowHandleCommandStateStore.invalidate(flowHandleId);
145
- }
146
- return settlement;
17
+ const assertAllocationSettlement = (envelope, command, settlement) => {
18
+ assertSettlementMatches({
19
+ envelope,
20
+ expectedKind: command.kind,
21
+ settlement,
147
22
  });
23
+ const allocation = getFlowHandleFromSettlementDetail(settlement);
24
+ if (!(allocation === null || allocation === void 0 ? void 0 : allocation.flowRunId) ||
25
+ (command.flowHandleId !== undefined &&
26
+ allocation.flowHandleId !== command.flowHandleId)) {
27
+ throw new Error(command.flowHandleId === undefined
28
+ ? `Expected ${command.kind} settlement to include flowHandleId and flowRunId`
29
+ : `Expected ${command.kind} settlement to include matching flowHandleId and flowRunId`);
30
+ }
148
31
  };
149
32
  return {
150
- dispatch: (envelope) => {
33
+ dispatch: async (envelope) => {
34
+ const settlement = await dispatchToCore(envelope, envelope.command);
35
+ if (!settlement.ok) {
36
+ return settlement;
37
+ }
151
38
  switch (envelope.command.kind) {
152
39
  case "open":
153
40
  case "prerender":
154
- return dispatchAllocation(envelope, envelope.command);
155
- case "prefetch":
156
- return dispatchToCore(envelope, envelope.command);
41
+ assertAllocationSettlement(envelope, envelope.command, settlement);
42
+ break;
157
43
  case "close":
158
- return dispatchHandleClose(envelope, envelope.command);
159
- default:
160
- return dispatchToCore(envelope, envelope.command);
44
+ assertSettlementMatches({
45
+ envelope,
46
+ expectedKind: "close",
47
+ settlement,
48
+ });
49
+ break;
161
50
  }
51
+ return settlement;
162
52
  },
163
53
  };
164
54
  }
package/dist/version.js CHANGED
@@ -3,4 +3,4 @@ const reactNativeSdkVersion = typeof __GX_REACT_NATIVE_SDK_VERSION__ === "string
3
3
  : "";
4
4
  // Build scripts patch this fallback to the package version for published artifacts.
5
5
  // Source-linked workspace usage keeps the local fallback.
6
- export const REACT_NATIVE_SDK_VERSION = reactNativeSdkVersion.length > 0 ? reactNativeSdkVersion : "3.0.72";
6
+ export const REACT_NATIVE_SDK_VERSION = reactNativeSdkVersion.length > 0 ? reactNativeSdkVersion : "3.0.75";
@@ -32,209 +32,6 @@ function createActiveViewSnapshotListController() {
32
32
  }
33
33
  };
34
34
  }
35
- // ../view-orchestration/src/flow-handle-runtime-machine.ts
36
- import { createMachine, interpret, reduce, state, transition } from "robot3";
37
- var FLOW_HANDLE_RUNTIME_STATE_SET = {
38
- active: true,
39
- invalidated: true
40
- };
41
- var hasFlowHandleAffinityConflict = (input) => input.boundInstanceId !== undefined && input.boundInstanceId !== input.instanceId || input.flowId !== undefined && input.boundFlowId !== undefined && input.boundFlowId !== input.flowId;
42
- var assertAffinityCompatible = (input) => {
43
- const { context, event } = input;
44
- if (!hasFlowHandleAffinityConflict({
45
- boundInstanceId: context.instanceId,
46
- boundFlowId: context.flowId,
47
- instanceId: event.instanceId,
48
- flowId: event.flowId
49
- })) {
50
- return;
51
- }
52
- if (context.instanceId !== undefined && context.instanceId !== event.instanceId) {
53
- throw new Error(`Flow handle affinity conflict: instanceId already bound to "${context.instanceId}" and cannot be rebound to "${event.instanceId}"`);
54
- }
55
- throw new Error(`Flow handle affinity conflict: flowId already bound to "${context.flowId}" and cannot be rebound to "${event.flowId}"`);
56
- };
57
- var bindAffinity = reduce((context, event) => {
58
- assertAffinityCompatible({ context, event });
59
- return {
60
- ...context,
61
- instanceId: event.instanceId,
62
- flowId: event.flowId ?? context.flowId
63
- };
64
- });
65
- var bindFlowRun = reduce((context, event) => {
66
- if (context.instanceId === undefined) {
67
- throw new Error("Cannot bind flowRunId before instance affinity is bound for flow handle runtime");
68
- }
69
- return {
70
- ...context,
71
- flowRunId: event.flowRunId
72
- };
73
- });
74
- var beginFlowRunResolution = reduce((context, event) => {
75
- if (context.instanceId === undefined) {
76
- throw new Error("Cannot begin flowRun resolution before instance affinity is bound for flow handle runtime");
77
- }
78
- if (context.pendingFlowRunResolutionRequestId !== null && context.pendingFlowRunResolutionRequestId !== event.requestId) {
79
- throw new Error(`Flow handle already has a pending flowRun resolution for requestId "${context.pendingFlowRunResolutionRequestId}"`);
80
- }
81
- return {
82
- ...context,
83
- pendingFlowRunResolutionRequestId: event.requestId
84
- };
85
- });
86
- var clearFlowRunResolution = reduce((context, event) => context.pendingFlowRunResolutionRequestId === event.requestId ? { ...context, pendingFlowRunResolutionRequestId: null } : context);
87
- var setContainerMode = reduce((context, event) => {
88
- if (context.containerMode !== undefined && context.containerMode !== event.mode) {
89
- throw new Error(`Flow handle container mode conflict: already locked to "${context.containerMode}" and cannot switch to "${event.mode}"`);
90
- }
91
- return {
92
- ...context,
93
- containerMode: event.mode
94
- };
95
- });
96
- var invalidateRuntime = reduce((context) => ({
97
- ...context,
98
- instanceId: undefined,
99
- flowId: undefined,
100
- flowRunId: null,
101
- pendingFlowRunResolutionRequestId: null,
102
- containerMode: undefined
103
- }));
104
- function createFlowHandleRuntimeMachine() {
105
- const states = {
106
- active: state(transition("bindAffinity", "active", bindAffinity), transition("bindFlowRun", "active", bindFlowRun), transition("beginFlowRunResolution", "active", beginFlowRunResolution), transition("finishFlowRunResolution", "active", clearFlowRunResolution), transition("setContainerMode", "active", setContainerMode), transition("invalidate", "invalidated", invalidateRuntime)),
107
- invalidated: state()
108
- };
109
- return createMachine(states, () => ({
110
- instanceId: undefined,
111
- flowId: undefined,
112
- flowRunId: null,
113
- pendingFlowRunResolutionRequestId: null,
114
- containerMode: undefined
115
- }));
116
- }
117
- function createFlowHandleRuntimeController() {
118
- const machine = createFlowHandleRuntimeMachine();
119
- const service = interpret(machine, () => {});
120
- const buildSnapshot = (svc) => {
121
- const context = svc.context;
122
- return {
123
- state: readFlowHandleRuntimeState(svc.machine.current),
124
- instanceId: context.instanceId,
125
- flowId: context.flowId,
126
- flowRunId: context.flowRunId,
127
- pendingFlowRunResolutionRequestId: context.pendingFlowRunResolutionRequestId,
128
- containerMode: context.containerMode
129
- };
130
- };
131
- return {
132
- getSnapshot: () => buildSnapshot(service),
133
- bindAffinity: (input) => {
134
- service.send({
135
- type: "bindAffinity",
136
- instanceId: input.instanceId,
137
- ...input.flowId !== undefined ? { flowId: input.flowId } : {}
138
- });
139
- },
140
- bindFlowRun: (input) => {
141
- if (readFlowHandleRuntimeState(service.machine.current) === "invalidated") {
142
- return "ignore";
143
- }
144
- const previousFlowRunId = service.context.flowRunId;
145
- service.send({
146
- type: "bindFlowRun",
147
- flowRunId: input.flowRunId
148
- });
149
- if (input.activationPolicy === "always" || input.activationPolicy === "on-flow-run-change" && previousFlowRunId !== input.flowRunId) {
150
- return "request-activation";
151
- }
152
- return "register";
153
- },
154
- beginFlowRunResolution: (requestId) => {
155
- if (readFlowHandleRuntimeState(service.machine.current) === "invalidated") {
156
- return false;
157
- }
158
- service.send({ type: "beginFlowRunResolution", requestId });
159
- return true;
160
- },
161
- finishFlowRunResolution: (requestId) => {
162
- if (readFlowHandleRuntimeState(service.machine.current) === "invalidated" || service.context.pendingFlowRunResolutionRequestId !== requestId) {
163
- return false;
164
- }
165
- service.send({ type: "finishFlowRunResolution", requestId });
166
- return true;
167
- },
168
- setContainerMode: (mode) => {
169
- service.send({ type: "setContainerMode", mode });
170
- },
171
- invalidate: () => {
172
- service.send({ type: "invalidate" });
173
- }
174
- };
175
- }
176
- function readFlowHandleRuntimeState(value) {
177
- if (!isFlowHandleRuntimeState(value)) {
178
- throw new Error(`Unknown flow-handle runtime state: ${String(value)}`);
179
- }
180
- return value;
181
- }
182
- function isFlowHandleRuntimeState(value) {
183
- return typeof value === "string" && value in FLOW_HANDLE_RUNTIME_STATE_SET;
184
- }
185
-
186
- // ../view-orchestration/src/flow-handle-command-planner.ts
187
- var planFlowHandleCommand = (input) => {
188
- if (input.runtime.state === "invalidated") {
189
- return input.command === "open" || input.command === "prerender" ? "forward-to-core" : "ignore";
190
- }
191
- if (hasFlowHandleAffinityConflict({
192
- boundInstanceId: input.runtime.instanceId,
193
- boundFlowId: input.runtime.flowId,
194
- instanceId: input.instanceId,
195
- ...input.command === "open" || input.command === "prerender" ? { flowId: input.flowId } : {}
196
- })) {
197
- return input.command === "setContainer" ? "reject" : "forward-to-core";
198
- }
199
- return "orchestrate";
200
- };
201
- // ../view-orchestration/src/flow-handle-command-state-store.ts
202
- var createInitialFlowHandleCommandState = () => ({
203
- runtime: createFlowHandleRuntimeController()
204
- });
205
-
206
- class FlowHandleCommandStateStore {
207
- flowHandles = new Map;
208
- getOrCreate(flowHandleId) {
209
- const existing = this.flowHandles.get(flowHandleId);
210
- if (existing) {
211
- return existing;
212
- }
213
- const created = {
214
- state: createInitialFlowHandleCommandState(),
215
- tail: Promise.resolve()
216
- };
217
- this.flowHandles.set(flowHandleId, created);
218
- return created;
219
- }
220
- enqueue(flowHandleId, task) {
221
- const entry = this.getOrCreate(flowHandleId);
222
- const nextTask = entry.tail.then(() => task(entry.state), () => task(entry.state));
223
- entry.tail = nextTask.then(() => {
224
- return;
225
- }, () => {
226
- return;
227
- });
228
- return nextTask;
229
- }
230
- invalidate(flowHandleId) {
231
- const state2 = this.getOrCreate(flowHandleId).state;
232
- if (state2.runtime.getSnapshot().state !== "invalidated") {
233
- state2.runtime.invalidate();
234
- }
235
- return state2;
236
- }
237
- }
238
35
  // ../view-orchestration/src/pending-command-tracker.ts
239
36
  var createDeferred = () => {
240
37
  let resolve;
@@ -287,7 +84,7 @@ class PendingCommandTracker {
287
84
  }
288
85
  }
289
86
  // ../view-orchestration/src/view-activation-machine.ts
290
- import { createMachine as createMachine2, interpret as interpret2, state as state2, transition as transition2 } from "robot3";
87
+ import { createMachine, interpret, state, transition } from "robot3";
291
88
  var VIEW_ACTIVATION_STATES = {
292
89
  idle: true,
293
90
  prerendering: true,
@@ -298,18 +95,18 @@ var VIEW_ACTIVATION_STATES = {
298
95
  };
299
96
  function createViewActivationMachine() {
300
97
  const states = {
301
- idle: state2(transition2("startPrerender", "prerendering"), transition2("requestActivation", "activation-requested")),
302
- prerendering: state2(transition2("requestActivation", "prerendering-activation-requested"), transition2("markPrerendered", "prerendered")),
303
- "activation-requested": state2(transition2("startPrerender", "prerendering-activation-requested")),
304
- "prerendering-activation-requested": state2(transition2("markPrerendered", "active")),
305
- prerendered: state2(transition2("requestActivation", "active")),
306
- active: state2()
98
+ idle: state(transition("startPrerender", "prerendering"), transition("requestActivation", "activation-requested")),
99
+ prerendering: state(transition("requestActivation", "prerendering-activation-requested"), transition("markPrerendered", "prerendered")),
100
+ "activation-requested": state(transition("startPrerender", "prerendering-activation-requested")),
101
+ "prerendering-activation-requested": state(transition("markPrerendered", "active")),
102
+ prerendered: state(transition("requestActivation", "active")),
103
+ active: state()
307
104
  };
308
- return createMachine2(states, () => ({}));
105
+ return createMachine(states, () => ({}));
309
106
  }
310
107
  function createViewActivationController() {
311
108
  const machine = createViewActivationMachine();
312
- const service = interpret2(machine, () => {});
109
+ const service = interpret(machine, () => {});
313
110
  const getState = () => readViewActivationState(service.machine.current);
314
111
  const send = (event) => {
315
112
  service.send(event);
@@ -336,22 +133,22 @@ function readViewActivationState(value) {
336
133
  // ../view-orchestration/src/view-preparation-readiness-registry.ts
337
134
  function createViewPreparationReadinessRegistry() {
338
135
  const states = new Map;
339
- const resolveReadySize = (state3) => {
340
- if (!state3 || state3.status === "ready" || !state3.hostPrepared || state3.size === null) {
136
+ const resolveReadySize = (state2) => {
137
+ if (!state2 || state2.status === "ready" || !state2.hostPrepared || state2.size === null) {
341
138
  return null;
342
139
  }
343
- state3.status = "ready";
344
- return state3.size;
140
+ state2.status = "ready";
141
+ return state2.size;
345
142
  };
346
143
  return {
347
144
  begin(viewId) {
348
- const state3 = {
145
+ const state2 = {
349
146
  hostPrepared: false,
350
147
  size: null,
351
148
  status: "pending"
352
149
  };
353
- states.set(viewId, state3);
354
- const getCurrentState = () => states.get(viewId) === state3 ? state3 : null;
150
+ states.set(viewId, state2);
151
+ const getCurrentState = () => states.get(viewId) === state2 ? state2 : null;
355
152
  return {
356
153
  markHostPrepared() {
357
154
  const current = getCurrentState();
@@ -469,12 +266,6 @@ function createViewPreparationRegistry() {
469
266
  function createPendingCommandTracker() {
470
267
  return new PendingCommandTracker;
471
268
  }
472
- function createFlowHandleCommandStateStore() {
473
- return new FlowHandleCommandStateStore;
474
- }
475
- function planFlowHandleCommand2(input) {
476
- return planFlowHandleCommand(input);
477
- }
478
269
  function createActiveViewSnapshotListController2() {
479
270
  return createActiveViewSnapshotListController();
480
271
  }
@@ -488,11 +279,9 @@ function createViewPreparationReadinessRegistry2() {
488
279
  return createViewPreparationReadinessRegistry();
489
280
  }
490
281
  export {
491
- planFlowHandleCommand2 as planFlowHandleCommand,
492
282
  createViewPreparationRegistry2 as createViewPreparationRegistry,
493
283
  createViewPreparationReadinessRegistry2 as createViewPreparationReadinessRegistry,
494
284
  createViewActivationController2 as createViewActivationController,
495
285
  createPendingCommandTracker,
496
- createFlowHandleCommandStateStore,
497
286
  createActiveViewSnapshotListController2 as createActiveViewSnapshotListController
498
287
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getuserfeedback/react-native",
3
- "version": "3.0.72",
3
+ "version": "3.0.75",
4
4
  "description": "getuserfeedback React Native SDK",
5
5
  "keywords": [
6
6
  "getuserfeedback",
@@ -44,8 +44,8 @@
44
44
  "lint": "biome check ."
45
45
  },
46
46
  "dependencies": {
47
- "@getuserfeedback/protocol": "^3.18.3",
48
- "@getuserfeedback/sdk": "^0.12.3",
47
+ "@getuserfeedback/protocol": "^3.19.0",
48
+ "@getuserfeedback/sdk": "^0.12.4",
49
49
  "robot3": "^1.2.0"
50
50
  },
51
51
  "peerDependencies": {