@ohm_studio/sdk-react-native 0.5.3 → 0.7.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/README.md CHANGED
@@ -66,6 +66,40 @@ export default function App() {
66
66
  }
67
67
  ```
68
68
 
69
+ ## Cancellation, upload progress, and discovery (v0.6+)
70
+
71
+ Every method accepts `signal?: AbortSignal`. `audio.transcribe` and
72
+ `audio.extract` accept `onProgress`. `ohm.apis.list()` enumerates
73
+ published APIs.
74
+
75
+ ```tsx
76
+ const controller = new AbortController();
77
+
78
+ const { data } = await ohm.audio.extract({
79
+ apiSlug: "opd-clinic",
80
+ file: { uri, name: "rec.m4a", type: "audio/mp4" },
81
+ signal: controller.signal,
82
+ onProgress: ({ percent }) => setProgress(percent),
83
+ });
84
+
85
+ const apis = await ohm.apis.list();
86
+ ```
87
+
88
+ The React hooks (`useOhmExtract`, `useOhmAudioExtract`,
89
+ `useOhmSummarize`, `useRecorder`) auto-abort on unmount and on the next
90
+ mutation. Aborts surface as `OHMAbortError` (`code: "aborted"`) —
91
+ pattern match to ignore them.
92
+
93
+ ## Typed `data` with the Studio CLI
94
+
95
+ Pair with [`@ohm_studio/cli`](https://www.npmjs.com/package/@ohm_studio/cli)
96
+ to generate TypeScript interfaces from your Studio schemas:
97
+
98
+ ```bash
99
+ npm install -D @ohm_studio/cli
100
+ npx ohm-studio pull-all --out src/ohm
101
+ ```
102
+
69
103
  ## Production: proxy your backend
70
104
 
71
105
  Don't ship live keys. Run a tiny proxy on your backend that holds the live key and forwards requests from your RN app (authenticated with your existing session token). Documented at [docs.ohm.doctor/security/rn-key-handling](https://docs.ohm.doctor/security/rn-key-handling).
package/dist/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import { OHMCoreClient } from "@ohm_studio/sdk-core";
2
- import type { OHMInit } from "@ohm_studio/sdk-core";
2
+ import type { OHMInit, UploadProgressEvent } from "@ohm_studio/sdk-core";
3
3
  export * from "@ohm_studio/sdk-core";
4
4
  export { ExpoRecorder, RecorderError, isExpoAvAvailable, } from "./recorder";
5
5
  export type { ExpoRecorderOptions, RNFile, RecorderState, RecorderErrorCode, } from "./recorder";
6
6
  export { BareRecorder } from "./bare-recorder";
7
7
  export type { BareRecorderOptions } from "./bare-recorder";
8
+ export { OhmQueue, makeAsyncStorageAdapter } from "./queue";
9
+ export type { QueueEntry, QueueStorage } from "./queue";
8
10
  /**
9
11
  * OHM Studio SDK for React Native.
10
12
  *
@@ -33,7 +35,18 @@ export declare class OHM extends OHMCoreClient {
33
35
  path: string;
34
36
  file: any;
35
37
  fields?: Record<string, string>;
38
+ signal?: AbortSignal;
39
+ idempotencyKey?: string;
40
+ onProgress?: (event: UploadProgressEvent) => void;
36
41
  }): Promise<T>;
42
+ /**
43
+ * RN doesn't expose upload progress through `fetch`, so when the
44
+ * caller wants progress we fall back to XMLHttpRequest. Mirrors the
45
+ * sdk-js implementation byte-for-byte; kept duplicated rather than
46
+ * lifted into core because the FormData body type differs by platform
47
+ * and we want zero-cost when the caller doesn't request progress.
48
+ */
49
+ private runMultipartXhr;
37
50
  protected buildMultipartBody(file: unknown, fields?: Record<string, string>): Promise<unknown>;
38
51
  }
39
52
  export default OHM;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEtE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAY3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,GAAI,SAAQ,aAAa;gBACxB,IAAI,EAAE,OAAO;cAiBT,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,CAAC;QACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,GAAG,OAAO,CAAC,CAAC,CAAC;cAQE,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;CAuBpB;AAED,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EAId,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAEV,OAAO,EACP,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAYxD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,GAAI,SAAQ,aAAa;gBACxB,IAAI,EAAE,OAAO;cAiBT,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,CAAC;QACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;KACnD,GAAG,OAAO,CAAC,CAAC,CAAC;IAsBd;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;cAsFP,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;CAuBpB;AAED,eAAe,GAAG,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
- import { OHMConfigError, OHMCoreClient } from "@ohm_studio/sdk-core";
1
+ import { OHMAbortError, OHMAuthError, OHMConfigError, OHMCoreClient, OHMRateLimitError, OHMServerError, OHMValidationError, } from "@ohm_studio/sdk-core";
2
2
  export * from "@ohm_studio/sdk-core";
3
3
  export { ExpoRecorder, RecorderError, isExpoAvAvailable, } from "./recorder";
4
4
  export { BareRecorder } from "./bare-recorder";
5
+ export { OhmQueue, makeAsyncStorageAdapter } from "./queue";
5
6
  /** Detect React Native runtime — used to gate the bundled-key safeguard. */
6
7
  function isReactNative() {
7
8
  return (
@@ -47,7 +48,100 @@ export class OHM extends OHMCoreClient {
47
48
  }
48
49
  async runMultipart(opts) {
49
50
  const fd = (await this.buildMultipartBody(opts.file, opts.fields));
50
- return this.requestRaw("POST", opts.path, { body: fd });
51
+ if (opts.onProgress && typeof XMLHttpRequest !== "undefined") {
52
+ return this.runMultipartXhr({
53
+ path: opts.path,
54
+ body: fd,
55
+ signal: opts.signal,
56
+ idempotencyKey: opts.idempotencyKey,
57
+ onProgress: opts.onProgress,
58
+ });
59
+ }
60
+ return this.requestRaw("POST", opts.path, { body: fd }, { signal: opts.signal, idempotencyKey: opts.idempotencyKey });
61
+ }
62
+ /**
63
+ * RN doesn't expose upload progress through `fetch`, so when the
64
+ * caller wants progress we fall back to XMLHttpRequest. Mirrors the
65
+ * sdk-js implementation byte-for-byte; kept duplicated rather than
66
+ * lifted into core because the FormData body type differs by platform
67
+ * and we want zero-cost when the caller doesn't request progress.
68
+ */
69
+ runMultipartXhr(opts) {
70
+ const url = `${this.baseUrl}${opts.path}`;
71
+ const apiKey = this.apiKey;
72
+ const jwt = this.jwt;
73
+ return new Promise((resolve, reject) => {
74
+ if (opts.signal?.aborted) {
75
+ reject(new OHMAbortError());
76
+ return;
77
+ }
78
+ const xhr = new XMLHttpRequest();
79
+ xhr.open("POST", url, true);
80
+ if (apiKey)
81
+ xhr.setRequestHeader("Authorization", `Bearer ${apiKey}`);
82
+ else if (jwt)
83
+ xhr.setRequestHeader("Authorization", `Bearer ${jwt}`);
84
+ xhr.setRequestHeader("X-OHM-Client", "@ohm_studio/sdk-react-native@0.7.0");
85
+ if (opts.idempotencyKey) {
86
+ xhr.setRequestHeader("Idempotency-Key", opts.idempotencyKey);
87
+ }
88
+ xhr.upload.onprogress = (ev) => {
89
+ const total = ev.lengthComputable ? ev.total : 0;
90
+ const loaded = ev.loaded;
91
+ const percent = total > 0 ? Math.round((loaded / total) * 1000) / 10 : 0;
92
+ opts.onProgress({ loaded, total, percent });
93
+ };
94
+ xhr.onerror = () => reject(new OHMServerError({
95
+ message: "Network error during upload",
96
+ status: 0,
97
+ }));
98
+ xhr.onabort = () => reject(new OHMAbortError());
99
+ xhr.onload = () => {
100
+ const status = xhr.status;
101
+ const requestId = xhr.getResponseHeader("x-request-id") ||
102
+ xhr.getResponseHeader("x-ohm-request-id") ||
103
+ undefined;
104
+ let body = {};
105
+ try {
106
+ body = xhr.responseText ? JSON.parse(xhr.responseText) : {};
107
+ }
108
+ catch {
109
+ body = { message: xhr.responseText };
110
+ }
111
+ if (status >= 200 && status < 300) {
112
+ resolve(body);
113
+ return;
114
+ }
115
+ const message = body?.message || `HTTP ${status}`;
116
+ if (status === 401 || status === 403) {
117
+ reject(new OHMAuthError({ message, status, requestId }));
118
+ }
119
+ else if (status === 422 || status === 400) {
120
+ reject(new OHMValidationError({
121
+ message,
122
+ status,
123
+ requestId,
124
+ fields: body?.fields,
125
+ }));
126
+ }
127
+ else if (status === 429) {
128
+ const retryAfter = xhr.getResponseHeader("retry-after");
129
+ reject(new OHMRateLimitError({
130
+ message,
131
+ status,
132
+ requestId,
133
+ retryAfterSec: retryAfter ? Number(retryAfter) : body?.retryAfterSec,
134
+ }));
135
+ }
136
+ else {
137
+ reject(new OHMServerError({ message, status, requestId }));
138
+ }
139
+ };
140
+ if (opts.signal) {
141
+ opts.signal.addEventListener("abort", () => xhr.abort(), { once: true });
142
+ }
143
+ xhr.send(opts.body);
144
+ });
51
145
  }
52
146
  async buildMultipartBody(file, fields) {
53
147
  const fd = new FormData();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAOpB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,4EAA4E;AAC5E,SAAS,aAAa;IACpB,OAAO;IACL,+BAA+B;IAC/B,OAAO,SAAS,KAAK,WAAW;QAChC,aAAa;QACb,SAAS,CAAC,OAAO,KAAK,aAAa,CACpC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,GAAI,SAAQ,aAAa;IACpC,YAAY,IAAa;QACvB,MAAM,IAAI,GACR,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,IACE,CAAC,IAAI,CAAC,IAAI;YACV,aAAa,EAAE;YACf,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC;YACrC,CAAC,IAAI,CAAC,qBAAqB,EAC3B,CAAC;YACD,MAAM,IAAI,cAAc,CAAC;gBACvB,OAAO,EACL,kOAAkO;aACrO,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAES,KAAK,CAAC,YAAY,CAAI,IAI/B;QACC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,kBAAkB,CACvC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CACZ,CAAwB,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAI,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAES,KAAK,CAAC,kBAAkB,CAChC,IAAa,EACb,MAA+B;QAE/B,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,IAAK,IAAY,EAAE,CAAC;YAC/D,MAAM,CAAC,GAAG,IAAqD,CAAC;YAChE,8DAA8D;YAC9D,kDAAkD;YAClD,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;gBAChB,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,WAAW;gBAC3B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,WAAW;aAC5B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;YAC/D,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAW,EAAE,WAAW,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YAClD,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * ─────────────────────────────────────────────────────────────────────
3
+ * Offline queue for OHM extractions on React Native — for flaky wifi
4
+ * ─────────────────────────────────────────────────────────────────────
5
+ *
6
+ * Hospital basements / OT lifts / ICU corridors lose network mid-call.
7
+ * If a clinician records vitals during a network blip, we don't want
8
+ * the recording to disappear — we want it queued and replayed when
9
+ * connectivity returns.
10
+ *
11
+ * This module is a tiny BYO-storage queue. The customer plugs in their
12
+ * own storage adapter (typically AsyncStorage from
13
+ * @react-native-async-storage/async-storage) — we don't bundle the
14
+ * dependency to keep peer-dep churn low. The pattern:
15
+ *
16
+ * import { OhmQueue, makeAsyncStorageAdapter } from "@ohm_studio/sdk-react-native";
17
+ * import AsyncStorage from "@react-native-async-storage/async-storage";
18
+ *
19
+ * const queue = new OhmQueue({
20
+ * storage: makeAsyncStorageAdapter(AsyncStorage),
21
+ * client: ohm,
22
+ * });
23
+ *
24
+ * // When a network call fails, enqueue:
25
+ * try {
26
+ * await ohm.audio.extract({ apiSlug, file, ... });
27
+ * } catch (e) {
28
+ * if (e instanceof OHMServerError && e.status === 0) {
29
+ * // network down — queue for later
30
+ * await queue.enqueue("audio.extract", { apiSlug, file, patientHash });
31
+ * }
32
+ * }
33
+ *
34
+ * // On app foreground / network reconnect, replay:
35
+ * await queue.flush(); // sequential, stops on first non-recoverable
36
+ *
37
+ * What's NOT here: automatic detection of network state. Customers wire
38
+ * NetInfo from @react-native-community/netinfo to call queue.flush()
39
+ * when connectivity returns. We don't bundle NetInfo for the same
40
+ * peer-dep reason.
41
+ *
42
+ * Persistence shape: one JSON-serialisable entry per call. Audio file
43
+ * URIs are stored AS PATHS, not as binary blobs — the file at the URI
44
+ * must still exist when flush runs. Customers should keep the file
45
+ * on disk until queue.markComplete(id) succeeds.
46
+ */
47
+ import type { OHMCoreClient } from "@ohm_studio/sdk-core";
48
+ /**
49
+ * Minimal storage interface — `getItem` / `setItem` / `removeItem`
50
+ * matches AsyncStorage exactly. Pass any KV store with this shape.
51
+ */
52
+ export interface QueueStorage {
53
+ getItem: (key: string) => Promise<string | null>;
54
+ setItem: (key: string, value: string) => Promise<void>;
55
+ removeItem: (key: string) => Promise<void>;
56
+ }
57
+ export interface QueueEntry {
58
+ id: string;
59
+ /** When the entry was enqueued (ISO-8601). */
60
+ enqueuedAt: string;
61
+ /** Which OHM method to call on flush. */
62
+ method: "extract" | "audio.extract" | "audio.transcribe";
63
+ /** Method-specific input. Audio inputs MUST keep `file` as { uri, name, type }. */
64
+ input: Record<string, unknown>;
65
+ /** How many times we've tried to flush this entry. */
66
+ attempts: number;
67
+ /** Last error message (truncated) — diagnostic only. */
68
+ lastError?: string;
69
+ }
70
+ export declare class OhmQueue {
71
+ private readonly opts;
72
+ constructor(opts: {
73
+ storage: QueueStorage;
74
+ client: OHMCoreClient;
75
+ });
76
+ /**
77
+ * Enqueue an entry for later replay. Returns the entry id so the
78
+ * caller can correlate (e.g. "show pending uploads" UI).
79
+ */
80
+ enqueue(method: QueueEntry["method"], input: Record<string, unknown>): Promise<string>;
81
+ /**
82
+ * Read all queued entries. Useful for showing "X uploads pending"
83
+ * status in the UI.
84
+ */
85
+ list(): Promise<QueueEntry[]>;
86
+ /** Drop a single entry by id. Used internally + after manual abandons. */
87
+ remove(id: string): Promise<void>;
88
+ /** Clear the entire queue. Used after a manual reset. */
89
+ clear(): Promise<void>;
90
+ /**
91
+ * Replay all queued entries sequentially. Stops on the first
92
+ * unrecoverable error so a permanent auth failure doesn't burn
93
+ * through every entry. Returns a summary of what happened.
94
+ */
95
+ flush(): Promise<{
96
+ replayed: number;
97
+ failed: number;
98
+ skipped: number;
99
+ }>;
100
+ private replayOne;
101
+ }
102
+ /**
103
+ * Convenience adapter — turns @react-native-async-storage/async-storage
104
+ * (and any other AsyncStorage-shaped lib) into a QueueStorage.
105
+ *
106
+ * import AsyncStorage from "@react-native-async-storage/async-storage";
107
+ * const storage = makeAsyncStorageAdapter(AsyncStorage);
108
+ */
109
+ export declare function makeAsyncStorageAdapter(asyncStorage: {
110
+ getItem: (k: string) => Promise<string | null>;
111
+ setItem: (k: string, v: string) => Promise<void>;
112
+ removeItem: (k: string) => Promise<void>;
113
+ }): QueueStorage;
114
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,MAAM,EAAE,SAAS,GAAG,eAAe,GAAG,kBAAkB,CAAC;IACzD,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,qBAAa,QAAQ;IAEjB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE;QACrB,OAAO,EAAE,YAAY,CAAC;QACtB,MAAM,EAAE,aAAa,CAAC;KACvB;IAGH;;;OAGG;IACG,OAAO,CACX,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC;IAclB;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAWnC,0EAA0E;IACpE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC,yDAAyD;IACnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;YAiCY,SAAS;CAgBxB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE;IACpD,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C,GAAG,YAAY,CAMf"}
package/dist/queue.js ADDED
@@ -0,0 +1,165 @@
1
+ /**
2
+ * ─────────────────────────────────────────────────────────────────────
3
+ * Offline queue for OHM extractions on React Native — for flaky wifi
4
+ * ─────────────────────────────────────────────────────────────────────
5
+ *
6
+ * Hospital basements / OT lifts / ICU corridors lose network mid-call.
7
+ * If a clinician records vitals during a network blip, we don't want
8
+ * the recording to disappear — we want it queued and replayed when
9
+ * connectivity returns.
10
+ *
11
+ * This module is a tiny BYO-storage queue. The customer plugs in their
12
+ * own storage adapter (typically AsyncStorage from
13
+ * @react-native-async-storage/async-storage) — we don't bundle the
14
+ * dependency to keep peer-dep churn low. The pattern:
15
+ *
16
+ * import { OhmQueue, makeAsyncStorageAdapter } from "@ohm_studio/sdk-react-native";
17
+ * import AsyncStorage from "@react-native-async-storage/async-storage";
18
+ *
19
+ * const queue = new OhmQueue({
20
+ * storage: makeAsyncStorageAdapter(AsyncStorage),
21
+ * client: ohm,
22
+ * });
23
+ *
24
+ * // When a network call fails, enqueue:
25
+ * try {
26
+ * await ohm.audio.extract({ apiSlug, file, ... });
27
+ * } catch (e) {
28
+ * if (e instanceof OHMServerError && e.status === 0) {
29
+ * // network down — queue for later
30
+ * await queue.enqueue("audio.extract", { apiSlug, file, patientHash });
31
+ * }
32
+ * }
33
+ *
34
+ * // On app foreground / network reconnect, replay:
35
+ * await queue.flush(); // sequential, stops on first non-recoverable
36
+ *
37
+ * What's NOT here: automatic detection of network state. Customers wire
38
+ * NetInfo from @react-native-community/netinfo to call queue.flush()
39
+ * when connectivity returns. We don't bundle NetInfo for the same
40
+ * peer-dep reason.
41
+ *
42
+ * Persistence shape: one JSON-serialisable entry per call. Audio file
43
+ * URIs are stored AS PATHS, not as binary blobs — the file at the URI
44
+ * must still exist when flush runs. Customers should keep the file
45
+ * on disk until queue.markComplete(id) succeeds.
46
+ */
47
+ const STORAGE_KEY = "@ohm_studio/queue/v1";
48
+ const MAX_ATTEMPTS = 5;
49
+ export class OhmQueue {
50
+ opts;
51
+ constructor(opts) {
52
+ this.opts = opts;
53
+ }
54
+ /**
55
+ * Enqueue an entry for later replay. Returns the entry id so the
56
+ * caller can correlate (e.g. "show pending uploads" UI).
57
+ */
58
+ async enqueue(method, input) {
59
+ const id = `q_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
60
+ const entries = await this.list();
61
+ entries.push({
62
+ id,
63
+ enqueuedAt: new Date().toISOString(),
64
+ method,
65
+ input,
66
+ attempts: 0,
67
+ });
68
+ await this.opts.storage.setItem(STORAGE_KEY, JSON.stringify(entries));
69
+ return id;
70
+ }
71
+ /**
72
+ * Read all queued entries. Useful for showing "X uploads pending"
73
+ * status in the UI.
74
+ */
75
+ async list() {
76
+ const raw = await this.opts.storage.getItem(STORAGE_KEY);
77
+ if (!raw)
78
+ return [];
79
+ try {
80
+ const parsed = JSON.parse(raw);
81
+ return Array.isArray(parsed) ? parsed : [];
82
+ }
83
+ catch {
84
+ return [];
85
+ }
86
+ }
87
+ /** Drop a single entry by id. Used internally + after manual abandons. */
88
+ async remove(id) {
89
+ const entries = (await this.list()).filter((e) => e.id !== id);
90
+ await this.opts.storage.setItem(STORAGE_KEY, JSON.stringify(entries));
91
+ }
92
+ /** Clear the entire queue. Used after a manual reset. */
93
+ async clear() {
94
+ await this.opts.storage.removeItem(STORAGE_KEY);
95
+ }
96
+ /**
97
+ * Replay all queued entries sequentially. Stops on the first
98
+ * unrecoverable error so a permanent auth failure doesn't burn
99
+ * through every entry. Returns a summary of what happened.
100
+ */
101
+ async flush() {
102
+ let replayed = 0;
103
+ let failed = 0;
104
+ let skipped = 0;
105
+ const entries = await this.list();
106
+ const remaining = [];
107
+ for (const entry of entries) {
108
+ if (entry.attempts >= MAX_ATTEMPTS) {
109
+ skipped++;
110
+ remaining.push(entry); // keep for visibility — user must clear manually
111
+ continue;
112
+ }
113
+ try {
114
+ await this.replayOne(entry);
115
+ replayed++;
116
+ }
117
+ catch (e) {
118
+ entry.attempts++;
119
+ entry.lastError = String(e?.message || e).slice(0, 200);
120
+ // Auth errors are unrecoverable without user action — stop the
121
+ // flush, keep the entry so the customer's UI can prompt.
122
+ if (e?.code === "auth_error") {
123
+ remaining.push(entry, ...entries.slice(entries.indexOf(entry) + 1));
124
+ failed++;
125
+ break;
126
+ }
127
+ remaining.push(entry);
128
+ failed++;
129
+ }
130
+ }
131
+ await this.opts.storage.setItem(STORAGE_KEY, JSON.stringify(remaining));
132
+ return { replayed, failed, skipped };
133
+ }
134
+ async replayOne(entry) {
135
+ const c = this.opts.client;
136
+ switch (entry.method) {
137
+ case "extract":
138
+ await c.extract(entry.input);
139
+ return;
140
+ case "audio.extract":
141
+ await c.audio.extract(entry.input);
142
+ return;
143
+ case "audio.transcribe":
144
+ await c.audio.transcribe(entry.input);
145
+ return;
146
+ default:
147
+ throw new Error(`Unknown queued method: ${entry.method}`);
148
+ }
149
+ }
150
+ }
151
+ /**
152
+ * Convenience adapter — turns @react-native-async-storage/async-storage
153
+ * (and any other AsyncStorage-shaped lib) into a QueueStorage.
154
+ *
155
+ * import AsyncStorage from "@react-native-async-storage/async-storage";
156
+ * const storage = makeAsyncStorageAdapter(AsyncStorage);
157
+ */
158
+ export function makeAsyncStorageAdapter(asyncStorage) {
159
+ return {
160
+ getItem: (k) => asyncStorage.getItem(k),
161
+ setItem: (k, v) => asyncStorage.setItem(k, v),
162
+ removeItem: (k) => asyncStorage.removeItem(k),
163
+ };
164
+ }
165
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAEL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,aAAa,CAAC;AAarB,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,SAAS,CAAC;CACrB,uFAEA;AAoDD,wBAAgB,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE;IAC/D,OAAO,EAAE,MAAM,CAAC;CACjB;;;;;WAxCQ,KAAK,GAAG,IAAI;eACR,OAAO;EA4CnB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE;IACpE,OAAO,EAAE,MAAM,CAAC;CACjB;;;;;WAjDQ,KAAK,GAAG,IAAI;eACR,OAAO;EAqDnB;AAED,wBAAgB,eAAe;;;;;WAxDtB,KAAK,GAAG,IAAI;eACR,OAAO;EA2DnB;AAID,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1E;;;;;OAKG;IACH,KAAK,EAAE,GAAG,CAAC;IAEX;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;IAElB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,YAAY,EAAE,KAAK,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrD,IAAI,EAAE,kBAAkB,GACvB,iBAAiB,CAAC,CAAC,CAAC,CA2ItB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAEL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,aAAa,CAAC;AAarB,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,SAAS,CAAC;CACrB,uFAEA;AAoDD,wBAAgB,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE;IAC/D,OAAO,EAAE,MAAM,CAAC;CACjB;;;;;WAxCQ,KAAK,GAAG,IAAI;eACR,OAAO;EA4CnB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE;IACpE,OAAO,EAAE,MAAM,CAAC;CACjB;;;;;WAjDQ,KAAK,GAAG,IAAI;eACR,OAAO;EAqDnB;AAED,wBAAgB,eAAe;;;;;WAxDtB,KAAK,GAAG,IAAI;eACR,OAAO;EA2DnB;AAID,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1E;;;;;OAKG;IACH,KAAK,EAAE,GAAG,CAAC;IAEX;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;IAElB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,YAAY,EAAE,KAAK,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrD,IAAI,EAAE,kBAAkB,GACvB,iBAAiB,CAAC,CAAC,CAAC,CA2JtB"}
@@ -97,11 +97,22 @@ export function useRecorder(opts) {
97
97
  recRef.current = r;
98
98
  return r;
99
99
  }, []);
100
+ // Track the auto-extract abort controller so we can cancel the
101
+ // in-flight extraction on unmount (RN parity with the web hook).
102
+ // Without this, a user navigating away mid-extract leaks the network
103
+ // request and the recorder retains its callback closure.
104
+ const extractAcRef = useRef(null);
100
105
  useEffect(() => {
101
106
  return () => {
102
107
  void recRef.current?.cancel().catch(() => {
103
108
  /* ignore */
104
109
  });
110
+ try {
111
+ extractAcRef.current?.abort();
112
+ }
113
+ catch {
114
+ /* ignore */
115
+ }
105
116
  recRef.current = null;
106
117
  };
107
118
  }, []);
@@ -122,6 +133,8 @@ export function useRecorder(opts) {
122
133
  const f = await r.stop();
123
134
  setFile(f);
124
135
  if (optsRef.current.apiSlug && client) {
136
+ const ac = new AbortController();
137
+ extractAcRef.current = ac;
125
138
  setExtracting(true);
126
139
  try {
127
140
  const res = await client.audio.extract({
@@ -129,14 +142,19 @@ export function useRecorder(opts) {
129
142
  file: f,
130
143
  inputs: optsRef.current.extractInputs,
131
144
  language: optsRef.current.extractLanguage,
145
+ signal: ac.signal,
132
146
  });
133
147
  setTranscript(res.transcript ?? null);
134
148
  setData(res.data);
135
149
  }
136
150
  catch (e) {
137
- setExtractError(e);
151
+ // Aborts on unmount are not real errors — leave state alone.
152
+ if (e?.code !== "aborted")
153
+ setExtractError(e);
138
154
  }
139
155
  finally {
156
+ if (extractAcRef.current === ac)
157
+ extractAcRef.current = null;
140
158
  setExtracting(false);
141
159
  }
142
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ohm_studio/sdk-react-native",
3
- "version": "0.5.3",
3
+ "version": "0.7.0",
4
4
  "description": "OHM Studio SDK for React Native. Voice-to-structured-JSON clinical extraction APIs in your mobile app.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -41,7 +41,7 @@
41
41
  "access": "public"
42
42
  },
43
43
  "dependencies": {
44
- "@ohm_studio/sdk-core": "0.3.3"
44
+ "@ohm_studio/sdk-core": "0.5.0"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "react": ">=17",