@fixback/expo 0.9.0 → 0.9.1

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/submit.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * The multipart feedback submission — the transport half of the capture loop.
3
3
  *
4
- * The endpoint, the identity compaction, the backpressure window, and the `fetch`
5
- * surface are all shared with the browser SDK through `@fixback/sdk-core`
4
+ * The endpoint, the identity compaction, the backpressure window, the `fetch`
5
+ * surface, and the POST's tail — the gate, the timeout, reading ingest's answer
6
+ * (`postFeedback`) — are all shared with the browser SDK through `@fixback/sdk-core`
6
7
  * (ADR-0028); what stays here is the mobile envelope.
7
8
  *
8
9
  * `POST /api/ingest/feedback` is a multipart request: a single text part
@@ -22,17 +23,10 @@
22
23
  * never breaks the host app. Automatic reports (`source: error`) honour ingest's
23
24
  * `429` + `Retry-After` backpressure; manual reports are never gated.
24
25
  */
25
- import { AutoReportBackoff, feedbackEndpoint, type FetchLike, type IdentityInputs, type MaintenanceNotice, type ReportContent, type ReporterTier } from "@fixback/sdk-core";
26
+ import { AutoReportBackoff, type FetchLike, type IdentityInputs, type ReportContent, type SubmitResult } from "@fixback/sdk-core";
26
27
  import { type FormDataFactory } from "./http";
27
28
  import type { ReplayAttachment } from "./replay-encode";
28
- export { feedbackEndpoint };
29
- /** What ingest returns for an accepted submission (vendored server shape). */
30
- export interface RecordedFeedback {
31
- readonly feedbackId: string;
32
- readonly issueId: string;
33
- readonly reporterId: string;
34
- readonly tier: ReporterTier;
35
- }
29
+ export type { RecordedFeedback, SubmitResult } from "@fixback/sdk-core";
36
30
  /**
37
31
  * The captured screenshot to attach, if any — a React Native file reference.
38
32
  * The server accepts png/jpeg/webp/gif up to 10 MiB; `react-native-view-shot`
@@ -56,40 +50,6 @@ export interface SubmitInput {
56
50
  */
57
51
  readonly replay?: ReplayAttachment | null;
58
52
  }
59
- /** The outcome of a submission — never an exception. */
60
- export type SubmitResult = {
61
- readonly ok: true;
62
- readonly feedback: RecordedFeedback | null;
63
- } | {
64
- readonly ok: false;
65
- readonly reason: "unreachable" | "refused";
66
- readonly status?: number;
67
- } | {
68
- /**
69
- * A `source: error` report shed under ingest backpressure — either held
70
- * locally because the window is still open, or answered `429` by ingest,
71
- * which opened/extended the window. Manual reports never produce this.
72
- */
73
- readonly ok: false;
74
- readonly reason: "backpressure";
75
- readonly retryAfterSeconds: number;
76
- } | {
77
- /**
78
- * A manual report ingest held because Fixback is down for **maintenance** (the
79
- * maintenance-mode ADR): `429` with the notice in the body. The composer shows the
80
- * notice instead of a failure.
81
- */
82
- readonly ok: false;
83
- readonly reason: "maintenance";
84
- readonly maintenance: MaintenanceNotice;
85
- };
86
- /**
87
- * How long a submission may stay in flight before it is reported as
88
- * `unreachable`. React Native's Android networking applies no default request
89
- * timeout, so without this a stalled connection would hang a report forever.
90
- * The abandoned request keeps running in the background harmlessly.
91
- */
92
- export declare const DEFAULT_SUBMIT_TIMEOUT_MS = 30000;
93
53
  /**
94
54
  * Injectable transport collaborators, defaulted to the real implementations —
95
55
  * the same deps-object shape `requestBoot` takes, `origin` included.
@@ -106,7 +66,11 @@ export interface SubmitDeps {
106
66
  */
107
67
  readonly origin?: string;
108
68
  readonly backoff?: AutoReportBackoff;
109
- /** Overall request timeout in ms; `0` disables. Defaults to {@link DEFAULT_SUBMIT_TIMEOUT_MS}. */
69
+ /**
70
+ * Overall request timeout in ms; `0` disables. Defaults to `DEFAULT_SUBMIT_TIMEOUT_MS`
71
+ * — React Native's Android networking applies no default request timeout, so without
72
+ * one a stalled connection would hang a report forever.
73
+ */
110
74
  readonly timeoutMs?: number;
111
75
  }
112
76
  /**
package/dist/submit.js CHANGED
@@ -2,8 +2,9 @@
2
2
  /**
3
3
  * The multipart feedback submission — the transport half of the capture loop.
4
4
  *
5
- * The endpoint, the identity compaction, the backpressure window, and the `fetch`
6
- * surface are all shared with the browser SDK through `@fixback/sdk-core`
5
+ * The endpoint, the identity compaction, the backpressure window, the `fetch`
6
+ * surface, and the POST's tail — the gate, the timeout, reading ingest's answer
7
+ * (`postFeedback`) — are all shared with the browser SDK through `@fixback/sdk-core`
7
8
  * (ADR-0028); what stays here is the mobile envelope.
8
9
  *
9
10
  * `POST /api/ingest/feedback` is a multipart request: a single text part
@@ -24,10 +25,8 @@
24
25
  * `429` + `Retry-After` backpressure; manual reports are never gated.
25
26
  */
26
27
  Object.defineProperty(exports, "__esModule", { value: true });
27
- exports.DEFAULT_SUBMIT_TIMEOUT_MS = exports.feedbackEndpoint = void 0;
28
28
  exports.submitReport = submitReport;
29
29
  const sdk_core_1 = require("@fixback/sdk-core");
30
- Object.defineProperty(exports, "feedbackEndpoint", { enumerable: true, get: function () { return sdk_core_1.feedbackEndpoint; } });
31
30
  const http_1 = require("./http");
32
31
  /** The multipart field the screenshot binary is sent under (mirrors the server). */
33
32
  const SCREENSHOT_FIELD = "screenshot";
@@ -38,22 +37,6 @@ const SCREENSHOT_FIELD = "screenshot";
38
37
  * (ADR-0044).
39
38
  */
40
39
  const REPLAY_FIELD = "replay";
41
- /** A response's JSON body, or `null` when it has none or it does not parse — never throws. */
42
- async function safeJson(response) {
43
- try {
44
- return (await response.json?.()) ?? null;
45
- }
46
- catch {
47
- return null;
48
- }
49
- }
50
- /**
51
- * How long a submission may stay in flight before it is reported as
52
- * `unreachable`. React Native's Android networking applies no default request
53
- * timeout, so without this a stalled connection would hang a report forever.
54
- * The abandoned request keeps running in the background harmlessly.
55
- */
56
- exports.DEFAULT_SUBMIT_TIMEOUT_MS = 30_000;
57
40
  /**
58
41
  * The shared `source: error` backpressure window for the app. One instance so a
59
42
  * `429` from an auto-report holds the auto-reports that follow it.
@@ -74,17 +57,12 @@ const defaultBackoff = new sdk_core_1.AutoReportBackoff();
74
57
  */
75
58
  async function submitReport(apiUrl, input, deps = {}) {
76
59
  const source = input.content.source ?? "reporter";
77
- const isError = source === "error";
78
60
  const backoff = deps.backoff ?? defaultBackoff;
79
61
  // Client-side backpressure: shed auto-reports while the hold window is open,
80
- // without touching the network. Manual reports are never gated.
81
- if (isError && backoff.isPaused()) {
82
- return {
83
- ok: false,
84
- reason: "backpressure",
85
- retryAfterSeconds: backoff.retryAfterSeconds(),
86
- };
87
- }
62
+ // without touching the network — before the envelope is built.
63
+ const held = (0, sdk_core_1.backpressureHold)(source, backoff);
64
+ if (held)
65
+ return held;
88
66
  const doFetch = deps.fetch ?? (0, sdk_core_1.resolveFetch)();
89
67
  const makeForm = deps.formData ?? (0, http_1.globalFormData)();
90
68
  if (!doFetch || !makeForm)
@@ -130,55 +108,12 @@ async function submitReport(apiUrl, input, deps = {}) {
130
108
  type: input.replay.file.type,
131
109
  });
132
110
  }
133
- const timeoutMs = deps.timeoutMs ?? exports.DEFAULT_SUBMIT_TIMEOUT_MS;
134
- let timer;
135
- let response;
136
- try {
137
- const request = doFetch((0, sdk_core_1.feedbackEndpoint)(apiUrl), {
138
- method: "POST",
139
- headers: deps.origin ? { origin: deps.origin } : {},
140
- body: form,
141
- });
142
- response =
143
- timeoutMs > 0
144
- ? await Promise.race([
145
- request,
146
- new Promise((_, reject) => {
147
- timer = setTimeout(() => reject(new Error("fixback: submission timed out")), timeoutMs);
148
- }),
149
- ])
150
- : await request;
151
- }
152
- catch {
153
- return { ok: false, reason: "unreachable" };
154
- }
155
- finally {
156
- if (timer !== undefined)
157
- clearTimeout(timer);
158
- }
159
- if (!response.ok) {
160
- // A `429` for an auto-report is backpressure, not a refusal: open/extend
161
- // the hold window from `Retry-After` and report the wait. Manual reports
162
- // never 429 here, so any non-2xx for them stays a plain refusal.
163
- if (isError && response.status === 429) {
164
- const retryAfterSeconds = backoff.hold((0, sdk_core_1.safeHeader)(response, "Retry-After"));
165
- return { ok: false, reason: "backpressure", retryAfterSeconds };
166
- }
167
- // A manual report held for maintenance mode: the body carries the notice to show.
168
- if (response.status === 429) {
169
- const maintenance = (0, sdk_core_1.maintenanceFromHold)(await safeJson(response));
170
- if (maintenance)
171
- return { ok: false, reason: "maintenance", maintenance };
172
- }
173
- return { ok: false, reason: "refused", status: response.status };
174
- }
175
- try {
176
- const feedback = (await response.json?.());
177
- return { ok: true, feedback };
178
- }
179
- catch {
180
- // Accepted, but the body wasn't the expected JSON — still a success.
181
- return { ok: true, feedback: null };
182
- }
111
+ return (0, sdk_core_1.postFeedback)((0, sdk_core_1.feedbackEndpoint)(apiUrl), form, {
112
+ fetch: doFetch,
113
+ headers: deps.origin ? { origin: deps.origin } : {},
114
+ timeoutMs: deps.timeoutMs ?? sdk_core_1.DEFAULT_SUBMIT_TIMEOUT_MS,
115
+ backoff,
116
+ source,
117
+ });
183
118
  }
184
119
  //# sourceMappingURL=submit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"submit.js","sourceRoot":"","sources":["../src/submit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"submit.js","sourceRoot":"","sources":["../src/submit.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;AAuGH,oCAmEC;AAxKD,gDAa2B;AAE3B,iCAA8D;AAO9D,oFAAoF;AACpF,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,YAAY,GAAG,QAAQ,CAAC;AAmD9B;;;GAGG;AACH,MAAM,cAAc,GAAG,IAAI,4BAAiB,EAAE,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,KAAkB,EAClB,OAAmB,EAAE;IAErB,MAAM,MAAM,GAAmB,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC;IAE/C,6EAA6E;IAC7E,+DAA+D;IAC/D,MAAM,IAAI,GAAG,IAAA,2BAAgB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAA,uBAAY,GAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAA,qBAAc,GAAE,CAAC;IACnD,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAEvE,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,GAAG,IAAA,0BAAe,EAAC,KAAK,CAAC,QAAQ,CAAC;QAClC,GAAG,KAAK,CAAC,OAAO;QAChB,MAAM;QACN,6EAA6E;QAC7E,iFAAiF;QACjF,gFAAgF;QAChF,mBAAmB;QACnB,GAAG,CAAC,KAAK,CAAC,MAAM;YACd,CAAC,CAAC;gBACE,MAAM,EAAE;oBACN,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;oBACnC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;oBACzB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;oBAC3B,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;iBACtC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;QAC1B,yEAAyE;QACzE,qEAAqE;QACrE,iCAAiC;QACjC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAC5B,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG;YACzB,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,gBAAgB;YAC/C,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,WAAW;SAC3C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,iFAAiF;QACjF,yEAAyE;QACzE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACxB,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;YAC1B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;YAC5B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAA,uBAAY,EAAC,IAAA,2BAAgB,EAAC,MAAM,CAAC,EAAE,IAAI,EAAE;QAClD,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;QACnD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,oCAAyB;QACtD,OAAO;QACP,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
package/dist/tokens.d.ts CHANGED
@@ -2,9 +2,11 @@
2
2
  * A vendored slice of the **Signal** design tokens for the mobile composer.
3
3
  *
4
4
  * React Native cannot consume CSS custom properties, so the semantic roles the
5
- * composer needs are mirrored here as constants. Every value traces to
6
- * `packages/ui/src/tokens.css` (the design source of truth) — change it there
7
- * first, then keep this slice in step (ADR-0021 records the gap).
5
+ * composer needs are mirrored here as constants. Each value copies a token from
6
+ * `packages/ui/src/tokens.css` (the design source of truth), or is one of the few
7
+ * the composer draws with that Signal names no token for. `tokens.test.ts` holds
8
+ * every copy to the token it copies and names the rest. Change `tokens.css` first,
9
+ * then keep this slice in step (ADR-0021 records the gap).
8
10
  *
9
11
  * IBM Plex is not loadable without the host app shipping fonts, so type falls
10
12
  * back to the system stack; the mono accents use the platform's monospace face
package/dist/tokens.js CHANGED
@@ -5,9 +5,11 @@ exports.signal = void 0;
5
5
  * A vendored slice of the **Signal** design tokens for the mobile composer.
6
6
  *
7
7
  * React Native cannot consume CSS custom properties, so the semantic roles the
8
- * composer needs are mirrored here as constants. Every value traces to
9
- * `packages/ui/src/tokens.css` (the design source of truth) — change it there
10
- * first, then keep this slice in step (ADR-0021 records the gap).
8
+ * composer needs are mirrored here as constants. Each value copies a token from
9
+ * `packages/ui/src/tokens.css` (the design source of truth), or is one of the few
10
+ * the composer draws with that Signal names no token for. `tokens.test.ts` holds
11
+ * every copy to the token it copies and names the rest. Change `tokens.css` first,
12
+ * then keep this slice in step (ADR-0021 records the gap).
11
13
  *
12
14
  * IBM Plex is not loadable without the host app shipping fonts, so type falls
13
15
  * back to the system stack; the mono accents use the platform's monospace face
@@ -34,9 +36,9 @@ exports.signal = {
34
36
  border: "#e6ebf0",
35
37
  borderControl: "#e0e6ec",
36
38
  borderStrong: "#dce3ea",
37
- /* the reporter's ink title bar — roles invert on the dark ground, so the
38
- composer's header matches the web overlay's `--fb-color-ink` / `--fb-color-on-ink*`
39
- (packages/sdk/src/overlay-styles.ts, board `4a`). Kept in step by value. */
39
+ /* the reporter's ink title bar (board `4a`) — roles invert on the dark ground. The
40
+ ground is Signal's heading ink; the muted, subtle and hairline roles on it are the
41
+ composer's own, since the web panel's header went light (docs/agents/design.md). */
40
42
  ink: "#0f1720",
41
43
  onInk: "#ffffff",
42
44
  onInkMuted: "#8996a2",
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;GAYG;AACU,QAAA,MAAM,GAAG;IACpB,+BAA+B;IAC/B,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,SAAS;IAEvB,2BAA2B;IAC3B,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,SAAS;IAEpB,wBAAwB;IACxB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;IAEvB;;kFAE8E;IAC9E,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,2BAA2B;IAExC,yFAAyF;IACzF,MAAM,EAAE,SAAS;IACjB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;IACvB,OAAO,EAAE,SAAS;IAClB,cAAc,EAAE,SAAS;IACzB,aAAa,EAAE,SAAS;IACxB,8EAA8E;IAC9E,WAAW,EAAE,SAAS;IACtB,cAAc,EAAE,SAAS;IACzB,aAAa,EAAE,SAAS;IACxB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;IAErB,cAAc;IACd,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,wBAAwB;CACvB,CAAC"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACU,QAAA,MAAM,GAAG;IACpB,+BAA+B;IAC/B,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,SAAS;IAEvB,2BAA2B;IAC3B,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,SAAS;IAEpB,wBAAwB;IACxB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;IAEvB;;0FAEsF;IACtF,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,2BAA2B;IAExC,yFAAyF;IACzF,MAAM,EAAE,SAAS;IACjB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;IACvB,OAAO,EAAE,SAAS;IAClB,cAAc,EAAE,SAAS;IACzB,aAAa,EAAE,SAAS;IACxB,8EAA8E;IAC9E,WAAW,EAAE,SAAS;IACtB,cAAc,EAAE,SAAS;IACzB,aAAa,EAAE,SAAS;IACxB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;IAErB,cAAc;IACd,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,wBAAwB;CACvB,CAAC"}
package/dist/version.d.ts CHANGED
@@ -10,4 +10,4 @@
10
10
  * ever drift. Do not hand-edit this line to a value other than `package.json`'s
11
11
  * version.
12
12
  */
13
- export declare const EXPO_SDK_VERSION = "0.9.0";
13
+ export declare const EXPO_SDK_VERSION = "0.9.1";
package/dist/version.js CHANGED
@@ -13,5 +13,5 @@ exports.EXPO_SDK_VERSION = void 0;
13
13
  * ever drift. Do not hand-edit this line to a value other than `package.json`'s
14
14
  * version.
15
15
  */
16
- exports.EXPO_SDK_VERSION = "0.9.0";
16
+ exports.EXPO_SDK_VERSION = "0.9.1";
17
17
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fixback/expo",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "The Fixback capture SDK for Expo / React Native apps — shake the device to report feedback with trace Evidence.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -54,11 +54,12 @@
54
54
  "react": "19.2.8",
55
55
  "react-native": "^0.81.0",
56
56
  "typescript": "5.9.3",
57
- "vitest": "^4.1.10"
57
+ "vitest": "^4.1.10",
58
+ "@fixback/test-config": "0.0.0"
58
59
  },
59
60
  "dependencies": {
60
61
  "@fixback/expo-replay-encoder": "0.2.3",
61
- "@fixback/sdk-core": "0.12.0"
62
+ "@fixback/sdk-core": "0.13.0"
62
63
  },
63
64
  "engines": {
64
65
  "node": ">=20.12"