hci-atrium 0.1.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.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +182 -0
  3. package/dist/atrium.d.ts +522 -0
  4. package/dist/atrium.d.ts.map +1 -0
  5. package/dist/atrium.js +806 -0
  6. package/dist/atrium.js.map +1 -0
  7. package/dist/auth.d.ts +85 -0
  8. package/dist/auth.d.ts.map +1 -0
  9. package/dist/auth.js +369 -0
  10. package/dist/auth.js.map +1 -0
  11. package/dist/by.d.ts +84 -0
  12. package/dist/by.d.ts.map +1 -0
  13. package/dist/by.js +87 -0
  14. package/dist/by.js.map +1 -0
  15. package/dist/decider.d.ts +40 -0
  16. package/dist/decider.d.ts.map +1 -0
  17. package/dist/decider.js +76 -0
  18. package/dist/decider.js.map +1 -0
  19. package/dist/discovery.d.ts +15 -0
  20. package/dist/discovery.d.ts.map +1 -0
  21. package/dist/discovery.js +38 -0
  22. package/dist/discovery.js.map +1 -0
  23. package/dist/env.d.ts +11 -0
  24. package/dist/env.d.ts.map +1 -0
  25. package/dist/env.js +28 -0
  26. package/dist/env.js.map +1 -0
  27. package/dist/errors.d.ts +67 -0
  28. package/dist/errors.d.ts.map +1 -0
  29. package/dist/errors.js +86 -0
  30. package/dist/errors.js.map +1 -0
  31. package/dist/files.d.ts +7 -0
  32. package/dist/files.d.ts.map +1 -0
  33. package/dist/files.js +2 -0
  34. package/dist/files.js.map +1 -0
  35. package/dist/http.d.ts +11 -0
  36. package/dist/http.d.ts.map +1 -0
  37. package/dist/http.js +21 -0
  38. package/dist/http.js.map +1 -0
  39. package/dist/index.d.ts +17 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +14 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/models.d.ts +456 -0
  44. package/dist/models.d.ts.map +1 -0
  45. package/dist/models.js +487 -0
  46. package/dist/models.js.map +1 -0
  47. package/dist/pkce.d.ts +16 -0
  48. package/dist/pkce.d.ts.map +1 -0
  49. package/dist/pkce.js +40 -0
  50. package/dist/pkce.js.map +1 -0
  51. package/dist/react/index.d.ts +37 -0
  52. package/dist/react/index.d.ts.map +1 -0
  53. package/dist/react/index.js +89 -0
  54. package/dist/react/index.js.map +1 -0
  55. package/dist/rooms/armed-set.d.ts +33 -0
  56. package/dist/rooms/armed-set.d.ts.map +1 -0
  57. package/dist/rooms/armed-set.js +65 -0
  58. package/dist/rooms/armed-set.js.map +1 -0
  59. package/dist/rooms/brokers.d.ts +62 -0
  60. package/dist/rooms/brokers.d.ts.map +1 -0
  61. package/dist/rooms/brokers.js +109 -0
  62. package/dist/rooms/brokers.js.map +1 -0
  63. package/dist/rooms/codec.d.ts +100 -0
  64. package/dist/rooms/codec.d.ts.map +1 -0
  65. package/dist/rooms/codec.js +101 -0
  66. package/dist/rooms/codec.js.map +1 -0
  67. package/dist/rooms/index.d.ts +40 -0
  68. package/dist/rooms/index.d.ts.map +1 -0
  69. package/dist/rooms/index.js +45 -0
  70. package/dist/rooms/index.js.map +1 -0
  71. package/dist/rooms/offer-capture.d.ts +96 -0
  72. package/dist/rooms/offer-capture.d.ts.map +1 -0
  73. package/dist/rooms/offer-capture.js +338 -0
  74. package/dist/rooms/offer-capture.js.map +1 -0
  75. package/dist/rooms/offer-transcription.d.ts +63 -0
  76. package/dist/rooms/offer-transcription.d.ts.map +1 -0
  77. package/dist/rooms/offer-transcription.js +231 -0
  78. package/dist/rooms/offer-transcription.js.map +1 -0
  79. package/dist/rooms/participant.d.ts +35 -0
  80. package/dist/rooms/participant.d.ts.map +1 -0
  81. package/dist/rooms/participant.js +53 -0
  82. package/dist/rooms/participant.js.map +1 -0
  83. package/dist/rooms/recorder.d.ts +74 -0
  84. package/dist/rooms/recorder.d.ts.map +1 -0
  85. package/dist/rooms/recorder.js +157 -0
  86. package/dist/rooms/recorder.js.map +1 -0
  87. package/dist/rooms/room.d.ts +542 -0
  88. package/dist/rooms/room.d.ts.map +1 -0
  89. package/dist/rooms/room.js +1357 -0
  90. package/dist/rooms/room.js.map +1 -0
  91. package/dist/rooms/snippet.d.ts +48 -0
  92. package/dist/rooms/snippet.d.ts.map +1 -0
  93. package/dist/rooms/snippet.js +70 -0
  94. package/dist/rooms/snippet.js.map +1 -0
  95. package/dist/rooms/sse.d.ts +102 -0
  96. package/dist/rooms/sse.d.ts.map +1 -0
  97. package/dist/rooms/sse.js +347 -0
  98. package/dist/rooms/sse.js.map +1 -0
  99. package/dist/rooms/standing-source.d.ts +190 -0
  100. package/dist/rooms/standing-source.d.ts.map +1 -0
  101. package/dist/rooms/standing-source.js +431 -0
  102. package/dist/rooms/standing-source.js.map +1 -0
  103. package/dist/rooms/transcriber.d.ts +81 -0
  104. package/dist/rooms/transcriber.d.ts.map +1 -0
  105. package/dist/rooms/transcriber.js +111 -0
  106. package/dist/rooms/transcriber.js.map +1 -0
  107. package/dist/rooms/transport-shared.d.ts +28 -0
  108. package/dist/rooms/transport-shared.d.ts.map +1 -0
  109. package/dist/rooms/transport-shared.js +42 -0
  110. package/dist/rooms/transport-shared.js.map +1 -0
  111. package/dist/rooms/transport.d.ts +161 -0
  112. package/dist/rooms/transport.d.ts.map +1 -0
  113. package/dist/rooms/transport.js +258 -0
  114. package/dist/rooms/transport.js.map +1 -0
  115. package/dist/shaping/assets.d.ts +42 -0
  116. package/dist/shaping/assets.d.ts.map +1 -0
  117. package/dist/shaping/assets.js +77 -0
  118. package/dist/shaping/assets.js.map +1 -0
  119. package/dist/shaping/chat.d.ts +39 -0
  120. package/dist/shaping/chat.d.ts.map +1 -0
  121. package/dist/shaping/chat.js +62 -0
  122. package/dist/shaping/chat.js.map +1 -0
  123. package/dist/shaping/index.d.ts +14 -0
  124. package/dist/shaping/index.d.ts.map +1 -0
  125. package/dist/shaping/index.js +13 -0
  126. package/dist/shaping/index.js.map +1 -0
  127. package/dist/shaping/library.d.ts +84 -0
  128. package/dist/shaping/library.d.ts.map +1 -0
  129. package/dist/shaping/library.js +288 -0
  130. package/dist/shaping/library.js.map +1 -0
  131. package/dist/shaping/request.d.ts +47 -0
  132. package/dist/shaping/request.d.ts.map +1 -0
  133. package/dist/shaping/request.js +25 -0
  134. package/dist/shaping/request.js.map +1 -0
  135. package/dist/shaping/rooms.d.ts +128 -0
  136. package/dist/shaping/rooms.d.ts.map +1 -0
  137. package/dist/shaping/rooms.js +330 -0
  138. package/dist/shaping/rooms.js.map +1 -0
  139. package/dist/shaping/sources.d.ts +29 -0
  140. package/dist/shaping/sources.d.ts.map +1 -0
  141. package/dist/shaping/sources.js +51 -0
  142. package/dist/shaping/sources.js.map +1 -0
  143. package/dist/shaping/structured.d.ts +47 -0
  144. package/dist/shaping/structured.d.ts.map +1 -0
  145. package/dist/shaping/structured.js +115 -0
  146. package/dist/shaping/structured.js.map +1 -0
  147. package/dist/storage.d.ts +36 -0
  148. package/dist/storage.d.ts.map +1 -0
  149. package/dist/storage.js +86 -0
  150. package/dist/storage.js.map +1 -0
  151. package/dist/transcribe-stream.d.ts +81 -0
  152. package/dist/transcribe-stream.d.ts.map +1 -0
  153. package/dist/transcribe-stream.js +253 -0
  154. package/dist/transcribe-stream.js.map +1 -0
  155. package/dist/transcribe.d.ts +57 -0
  156. package/dist/transcribe.d.ts.map +1 -0
  157. package/dist/transcribe.js +267 -0
  158. package/dist/transcribe.js.map +1 -0
  159. package/dist/types.d.ts +20 -0
  160. package/dist/types.d.ts.map +1 -0
  161. package/dist/types.js +3 -0
  162. package/dist/types.js.map +1 -0
  163. package/package.json +56 -0
package/dist/models.js ADDED
@@ -0,0 +1,487 @@
1
+ /**
2
+ * Public result shapes and their defensive parse functions — the TypeScript mirror of
3
+ * ``hci_atrium.models``.
4
+ *
5
+ * Mostly plain interfaces (decision 7: tree-shakeable, JSON-friendly). {@link Asset} is the one
6
+ * class (the Round-3 bound-object migration — it carries ``vectors()`` / ``segments()`` / ``index()``
7
+ * methods on its prototype, bound to the owning client at parse); every data field stays an own,
8
+ * enumerable, JSON-serializable property, so a spread / ``JSON.stringify`` sees exactly the interface
9
+ * it always did. Each ``parse*`` takes the raw server JSON (snake_case) plus the ``baseUrl`` where a
10
+ * shape needs to build public URLs, and returns a camelCase model. They are defensive like Python's
11
+ * ``from_dict``: a missing field becomes a sensible default rather than throwing.
12
+ */
13
+ import { InvalidArgumentError } from "./errors.js";
14
+ function asRecord(value) {
15
+ return value && typeof value === "object" ? value : {};
16
+ }
17
+ function str(value, fallback = "") {
18
+ return typeof value === "string" ? value : fallback;
19
+ }
20
+ function num(value, fallback = 0) {
21
+ return typeof value === "number" && !Number.isNaN(value) ? value : fallback;
22
+ }
23
+ function strArray(value) {
24
+ return Array.isArray(value) ? value.map((v) => String(v)) : [];
25
+ }
26
+ /** Keep only the object entries of a list (the tagging layer's label objects) — a defensive
27
+ * passthrough mirroring Python's ``data.get(...) or []``. */
28
+ function recordArray(value) {
29
+ return Array.isArray(value) ? value.filter((v) => v && typeof v === "object") : [];
30
+ }
31
+ /** Parse a server ISO-8601 timestamp to a ``Date`` (``null`` for a missing / unparseable value) —
32
+ * the same tolerant parse the room roster uses (``rooms/participant.ts``). */
33
+ function parseIso(value) {
34
+ if (typeof value !== "string" || !value)
35
+ return null;
36
+ const date = new Date(value);
37
+ return Number.isNaN(date.getTime()) ? null : date;
38
+ }
39
+ function stripTrailingSlash(url) {
40
+ return url.replace(/\/+$/, "");
41
+ }
42
+ export function parseSegment(data, assetId, baseUrl = "") {
43
+ const d = asRecord(data);
44
+ const base = stripTrailingSlash(baseUrl);
45
+ const startS = num(d.start_s);
46
+ const endS = num(d.end_s);
47
+ return {
48
+ id: str(d.id),
49
+ ordinal: num(d.ordinal),
50
+ startS,
51
+ endS,
52
+ durationS: endS - startS,
53
+ // The parent's content route with a ``?segment=`` selector — there is no separate slice route.
54
+ contentUrl: `${base}/v1/assets/${assetId}/content?segment=${str(d.id)}`,
55
+ };
56
+ }
57
+ /**
58
+ * A library asset's metadata (a useful subset of the server's ``AssetRead``).
59
+ *
60
+ * ``modality`` is the open-vocabulary, user-editable facet; ``contentKind`` is what the bytes are
61
+ * (what the server routes on). ``contentUrl`` / ``thumbnailUrl`` are the public no-auth URLs,
62
+ * computed at parse time from ``baseUrl`` (fingerprinted with ``sha256`` when known).
63
+ *
64
+ * A **class** (the Round-3 bound-object migration): every data field is an own, enumerable property
65
+ * — so a spread or ``JSON.stringify`` is unchanged — while ``vectors()`` / ``segments()`` /
66
+ * ``index()`` live on the prototype, bound to the owning client. An asset built by hand or parsed
67
+ * without a client still reads/derives freely; only its bound methods throw, naming the id-form
68
+ * ``atrium.assets.*`` calls.
69
+ */
70
+ export class Asset {
71
+ id;
72
+ filename;
73
+ title;
74
+ modality;
75
+ contentKind;
76
+ contentType;
77
+ description;
78
+ size;
79
+ facts;
80
+ sha256;
81
+ sourceUrl;
82
+ data;
83
+ contentUrl;
84
+ thumbnailUrl;
85
+ // The tagging layer + provenance fields the server returns (member-read only, so all default to
86
+ // empty / null on the public by-id projection — absence-tolerant).
87
+ labels;
88
+ rejectedLabels;
89
+ proposedLabels;
90
+ autoTagged;
91
+ createdAt;
92
+ updatedAt;
93
+ status;
94
+ descriptionSource;
95
+ homeCollectionId;
96
+ externalId;
97
+ origin;
98
+ sourceId;
99
+ // The owning client — a truly-private field, so it never spreads, enumerates, or serializes.
100
+ #binder;
101
+ constructor(data, baseUrl = "", binder = null) {
102
+ const d = asRecord(data);
103
+ const base = stripTrailingSlash(baseUrl);
104
+ const id = str(d.id);
105
+ const sha256 = typeof d.sha256 === "string" ? d.sha256 : null;
106
+ const contentBase = `${base}/v1/assets/${id}/content`;
107
+ this.id = id;
108
+ this.filename = str(d.filename);
109
+ this.title = typeof d.title === "string" ? d.title : null;
110
+ this.modality = str(d.modality);
111
+ this.contentKind = str(d.content_kind);
112
+ this.contentType = str(d.content_type);
113
+ this.description = typeof d.description === "string" ? d.description : null;
114
+ this.size = typeof d.size === "number" ? d.size : null;
115
+ this.facts = asRecord(d.facts);
116
+ this.sha256 = sha256;
117
+ this.sourceUrl = typeof d.source_url === "string" ? d.source_url : null;
118
+ this.data = d.data && typeof d.data === "object" ? d.data : null;
119
+ this.contentUrl = sha256 ? `${contentBase}?v=${sha256}` : contentBase;
120
+ this.thumbnailUrl = `${base}/v1/assets/${id}/thumbnail`;
121
+ this.labels = recordArray(d.labels);
122
+ this.rejectedLabels = recordArray(d.rejected_labels);
123
+ this.proposedLabels = recordArray(d.proposed_labels);
124
+ this.autoTagged = Boolean(d.auto_tagged);
125
+ this.createdAt = parseIso(d.created_at);
126
+ this.updatedAt = parseIso(d.updated_at);
127
+ this.status = typeof d.status === "string" ? d.status : null;
128
+ this.descriptionSource = typeof d.description_source === "string" ? d.description_source : null;
129
+ this.homeCollectionId = d.home_collection_id != null ? String(d.home_collection_id) : null;
130
+ this.externalId = typeof d.external_id === "string" ? d.external_id : null;
131
+ this.origin = typeof d.origin === "string" ? d.origin : null;
132
+ this.sourceId = typeof d.source_id === "string" ? d.source_id : null;
133
+ this.#binder = binder;
134
+ }
135
+ bound() {
136
+ if (!this.#binder) {
137
+ throw new InvalidArgumentError(`this Asset (${this.id}) isn't bound to a client — it was built by hand or parsed without ` +
138
+ "one. Call atrium.assets.vectors(id) / .segments(id) / .index(id) with the asset id " +
139
+ "instead, or fetch it via atrium.assets.get(id) to get a bound asset.");
140
+ }
141
+ return this.#binder;
142
+ }
143
+ /** This asset's stored embedding vectors (``GET /v1/assets/{id}/vectors``). ``space`` (id or
144
+ * human name, one or a list) and ``matchBy`` narrow them; no args returns every stored vector.
145
+ * See {@link Assets.vectors}. (``async`` so an unbound asset rejects rather than throwing.) */
146
+ async vectors(opts = {}) {
147
+ return this.bound().vectors(this, opts);
148
+ }
149
+ /** This asset's sound-event segments (``GET /v1/assets/{id}/segments``). See {@link Assets.segments}. */
150
+ async segments() {
151
+ return this.bound().segments(this);
152
+ }
153
+ /** This asset's per-signal index map (``GET /v1/assets/{id}/index``). See {@link Assets.index}. */
154
+ async index() {
155
+ return this.bound().index(this);
156
+ }
157
+ }
158
+ export function parseAsset(data, baseUrl = "", binder = null) {
159
+ return new Asset(data, baseUrl, binder);
160
+ }
161
+ /**
162
+ * What an asset can produce, derived from its fields (mirror of Python's ``Asset.capabilities``):
163
+ * ``"bytes"`` when it has stored content (``sha256``), ``"link"`` when it resolves to an external
164
+ * URL (``sourceUrl``). Both, one, or neither may hold.
165
+ */
166
+ export function assetCapabilities(asset) {
167
+ const caps = [];
168
+ if (asset.sha256)
169
+ caps.push("bytes");
170
+ if (asset.sourceUrl)
171
+ caps.push("link");
172
+ return caps;
173
+ }
174
+ // Provider names the SDK knows how to format a ``provider:entity:id`` URI for; an unrecognized
175
+ // ``facts.link`` provider degrades to the generic link behaviour (mirror of Python's constant).
176
+ const RECOGNIZED_LINK_PROVIDERS = new Set(["spotify"]);
177
+ /**
178
+ * An asset's provider-link discriminator (mirror of Python's ``Asset.link``): reads the
179
+ * server-stamped ``facts.link`` (``{provider, entity, id}``). ``provider``/``entity`` are ``null``
180
+ * when the link is absent, malformed, or names a provider this SDK doesn't recognize; ``uri`` is
181
+ * ``spotify:{entity}:{id}`` for a recognized provider, else the raw ``sourceUrl``. Returns ``null``
182
+ * when the asset carries no link at all.
183
+ */
184
+ function assetLink(asset) {
185
+ if (!asset.sourceUrl)
186
+ return null;
187
+ let provider = null;
188
+ let entity = null;
189
+ let uri = asset.sourceUrl;
190
+ const linkFacts = asset.facts.link;
191
+ if (linkFacts && typeof linkFacts === "object") {
192
+ const lf = linkFacts;
193
+ const p = lf.provider;
194
+ if (typeof p === "string" && RECOGNIZED_LINK_PROVIDERS.has(p) && lf.entity && lf.id) {
195
+ provider = p;
196
+ entity = String(lf.entity);
197
+ uri = `${p}:${entity}:${String(lf.id)}`;
198
+ }
199
+ }
200
+ return { provider, entity, uri };
201
+ }
202
+ /**
203
+ * The normalized play intent for an asset — the ``{source, ref, mode?}`` wire shape shared with the
204
+ * room ``play`` signal (mirror of Python's ``Asset.playback.as_signal()``). ``source`` prefers
205
+ * ``"bytes"`` whenever the asset has stored content, else a recognized link provider's name (e.g.
206
+ * ``"spotify"``), else ``"link"`` for a generic link, else ``"description"``. ``ref`` is the matching
207
+ * resolvable target; ``mode`` is ``"shuffle"`` for a recognized ``playlist`` entity (omitted
208
+ * otherwise).
209
+ */
210
+ export function assetPlayback(asset) {
211
+ if (asset.sha256) {
212
+ return { source: "bytes", ref: asset.contentUrl };
213
+ }
214
+ const link = assetLink(asset);
215
+ if (link === null) {
216
+ return { source: "description", ref: asset.id };
217
+ }
218
+ if (link.provider !== null) {
219
+ const signal = {
220
+ source: link.provider,
221
+ ref: link.uri,
222
+ };
223
+ if (link.entity === "playlist")
224
+ signal.mode = "shuffle";
225
+ return signal;
226
+ }
227
+ return { source: "link", ref: link.uri };
228
+ }
229
+ export function parseAssetPage(data, baseUrl = "", binder = null) {
230
+ const d = asRecord(data);
231
+ const items = Array.isArray(d.items)
232
+ ? d.items.map((item) => parseAsset(item, baseUrl, binder))
233
+ : [];
234
+ return { items, nextCursor: typeof d.next_cursor === "string" ? d.next_cursor : null };
235
+ }
236
+ export function parseSearchHit(data, baseUrl = "", binder = null) {
237
+ const d = asRecord(data);
238
+ const asset = parseAsset(d.asset, baseUrl, binder);
239
+ return {
240
+ asset,
241
+ score: num(d.score),
242
+ matchedBy: str(d.matched_by),
243
+ matchLabel: str(d.match_label),
244
+ rawScore: num(d.raw_score),
245
+ calibrated: Boolean(d.calibrated),
246
+ matchFloor: num(d.match_floor),
247
+ segment: d.segment ? parseSegment(d.segment, asset.id, baseUrl) : null,
248
+ vector: Array.isArray(d.vector) ? d.vector.map(Number) : undefined,
249
+ };
250
+ }
251
+ export function parseSearchByExamplesHit(data, baseUrl = "", binder = null) {
252
+ const d = asRecord(data);
253
+ return { asset: parseAsset(d.asset, baseUrl, binder), score: num(d.score) };
254
+ }
255
+ function parseOperandInfo(data) {
256
+ const d = asRecord(data);
257
+ return { kind: str(d.kind), modality: d.modality == null ? null : str(d.modality) };
258
+ }
259
+ function parseCompareFeature(data) {
260
+ const d = asRecord(data);
261
+ return {
262
+ space: str(d.space),
263
+ matchedBy: str(d.matched_by),
264
+ weight: num(d.weight),
265
+ rawScore: num(d.raw_score),
266
+ score: num(d.score),
267
+ };
268
+ }
269
+ export function parseCompareResult(data) {
270
+ const d = asRecord(data);
271
+ return {
272
+ rawScore: num(d.raw_score),
273
+ score: num(d.score),
274
+ calibrated: Boolean(d.calibrated),
275
+ space: str(d.space),
276
+ a: parseOperandInfo(d.a),
277
+ b: parseOperandInfo(d.b),
278
+ features: Array.isArray(d.features) ? d.features.map(parseCompareFeature) : undefined,
279
+ };
280
+ }
281
+ export function parseAssetVector(data, asset = null) {
282
+ const d = asRecord(data);
283
+ return {
284
+ space: str(d.space),
285
+ matchedBy: str(d.matched_by),
286
+ vector: Array.isArray(d.vector) ? d.vector.map(Number) : [],
287
+ asset: d.asset != null ? String(d.asset) : asset,
288
+ };
289
+ }
290
+ export function parseIndexEntry(data) {
291
+ const d = asRecord(data);
292
+ return {
293
+ space: str(d.space),
294
+ matchedBy: str(d.via), // server's ``via`` → the SDK's ``matchedBy``
295
+ label: typeof d.label === "string" ? d.label : null,
296
+ name: typeof d.name === "string" ? d.name : null,
297
+ active: Boolean(d.active),
298
+ status: typeof d.status === "string" ? d.status : null,
299
+ attempts: typeof d.attempts === "number" ? d.attempts : null,
300
+ error: typeof d.error === "string" ? d.error : null,
301
+ };
302
+ }
303
+ export function parseSpace(data) {
304
+ const d = asRecord(data);
305
+ return {
306
+ id: str(d.id),
307
+ name: str(d.name),
308
+ modalities: strArray(d.modalities),
309
+ defaultModalities: strArray(d.default_modalities),
310
+ model: typeof d.model === "string" ? d.model : null,
311
+ };
312
+ }
313
+ export function parseSourceInfo(data) {
314
+ const d = asRecord(data);
315
+ return {
316
+ id: str(d.id),
317
+ modalities: strArray(d.modalities),
318
+ modes: strArray(d.modes),
319
+ licenseTier: str(d.license_tier),
320
+ costClass: str(d.cost_class, "free"),
321
+ };
322
+ }
323
+ export function parseCandidate(data) {
324
+ const d = asRecord(data);
325
+ return {
326
+ provider: str(d.provider),
327
+ externalId: str(d.external_id),
328
+ modality: str(d.modality),
329
+ title: str(d.title),
330
+ previewUrl: str(d.preview_url),
331
+ license: typeof d.license === "string" ? d.license : null,
332
+ author: typeof d.author === "string" ? d.author : null,
333
+ attributionUrl: typeof d.attribution_url === "string" ? d.attribution_url : null,
334
+ tags: strArray(d.tags),
335
+ description: typeof d.description === "string" ? d.description : null,
336
+ duration: typeof d.duration === "number" ? d.duration : null,
337
+ size: typeof d.size === "number" ? d.size : null,
338
+ contentType: typeof d.content_type === "string" ? d.content_type : null,
339
+ alreadyImported: Boolean(d.already_imported),
340
+ };
341
+ }
342
+ export function parseSourceSkip(data) {
343
+ const d = asRecord(data);
344
+ return { provider: str(d.provider), reason: str(d.reason) };
345
+ }
346
+ export function parseSourceSearchResult(data) {
347
+ const d = asRecord(data);
348
+ const results = Array.isArray(d.results) ? d.results.map(parseCandidate) : [];
349
+ const skipped = Array.isArray(d.skipped) ? d.skipped.map(parseSourceSkip) : [];
350
+ return { results, skipped };
351
+ }
352
+ export function parseSession(data) {
353
+ const d = asRecord(data);
354
+ return {
355
+ id: str(d.id),
356
+ projectId: str(d.project_id),
357
+ name: typeof d.name === "string" ? d.name : null,
358
+ lastSeq: num(d.last_seq),
359
+ phase: typeof d.phase === "string" ? d.phase : null,
360
+ condition: typeof d.condition === "string" ? d.condition : null,
361
+ participantRef: typeof d.participant_ref === "string" ? d.participant_ref : null,
362
+ meta: asRecord(d.meta),
363
+ startedAt: parseIso(d.started_at),
364
+ };
365
+ }
366
+ export function parseSessionInfo(data) {
367
+ const d = asRecord(data);
368
+ return {
369
+ id: str(d.id),
370
+ projectId: str(d.project_id),
371
+ name: typeof d.name === "string" ? d.name : null,
372
+ participantRef: typeof d.participant_ref === "string" ? d.participant_ref : null,
373
+ condition: typeof d.condition === "string" ? d.condition : null,
374
+ phase: typeof d.phase === "string" ? d.phase : null,
375
+ notes: typeof d.notes === "string" ? d.notes : null,
376
+ meta: asRecord(d.meta),
377
+ lastSeq: num(d.last_seq),
378
+ startedAt: parseIso(d.started_at),
379
+ hasSubmittedResponse: Boolean(d.has_submitted_response),
380
+ hasTranscript: typeof d.has_transcript === "boolean" ? d.has_transcript : null,
381
+ };
382
+ }
383
+ export function parseSessionEventRow(data) {
384
+ const d = asRecord(data);
385
+ return {
386
+ id: str(d.id),
387
+ sessionId: str(d.session_id),
388
+ seq: num(d.seq),
389
+ type: str(d.type),
390
+ payload: asRecord(d.payload),
391
+ source: typeof d.source === "string" ? d.source : null,
392
+ origin: str(d.origin),
393
+ createdAt: parseIso(d.created_at),
394
+ via: d.via && typeof d.via === "object" ? d.via : null,
395
+ };
396
+ }
397
+ export function parseRoom(data) {
398
+ const d = asRecord(data);
399
+ return {
400
+ id: str(d.id),
401
+ connectCode: str(d.connect_code),
402
+ name: typeof d.name === "string" ? d.name : null,
403
+ projectId: typeof d.project_id === "string" ? d.project_id : null,
404
+ };
405
+ }
406
+ export function parseSessionEvent(data) {
407
+ const d = asRecord(data);
408
+ return {
409
+ kind: "event",
410
+ type: str(d.type),
411
+ payload: asRecord(d.payload),
412
+ source: typeof d.source === "string" ? d.source : null,
413
+ seq: typeof d.seq === "number" ? d.seq : null,
414
+ via: d.via && typeof d.via === "object" ? d.via : null,
415
+ };
416
+ }
417
+ export function parseChatReply(data) {
418
+ const d = asRecord(data);
419
+ const choices = Array.isArray(d.choices) ? d.choices : [];
420
+ const message = asRecord(asRecord(choices[0]).message);
421
+ return {
422
+ content: str(message.content),
423
+ model: str(d.model),
424
+ raw: d,
425
+ };
426
+ }
427
+ export function parseEmbedding(data) {
428
+ const d = asRecord(data);
429
+ const items = Array.isArray(d.data) ? d.data : [];
430
+ const embedding = asRecord(items[0]).embedding;
431
+ return Array.isArray(embedding) ? embedding.map((v) => Number(v)) : [];
432
+ }
433
+ export function parseTranscript(data) {
434
+ const d = asRecord(data);
435
+ const segments = Array.isArray(d.segments) ? d.segments : [];
436
+ return {
437
+ text: str(d.text),
438
+ language: d.language == null ? null : str(d.language),
439
+ duration: d.duration == null ? null : num(d.duration),
440
+ segments,
441
+ raw: d,
442
+ final: true,
443
+ };
444
+ }
445
+ function parseTagSnapshotFeature(data) {
446
+ const d = asRecord(data);
447
+ return {
448
+ space: str(d.space),
449
+ matchedBy: str(d.matched_by),
450
+ weight: num(d.weight, 1),
451
+ centroid: Array.isArray(d.centroid) ? d.centroid.map(Number) : [],
452
+ quantiles: Array.isArray(d.quantiles) ? d.quantiles.map(Number) : [],
453
+ };
454
+ }
455
+ function parseTagSnapshot(data) {
456
+ const d = asRecord(data);
457
+ return {
458
+ threshold: num(d.threshold),
459
+ method: str(d.method),
460
+ bias: typeof d.bias === "number" ? d.bias : null,
461
+ features: Array.isArray(d.features) ? d.features.map(parseTagSnapshotFeature) : [],
462
+ };
463
+ }
464
+ export function parseTagDefinition(data) {
465
+ const d = asRecord(data);
466
+ return {
467
+ id: str(d.id),
468
+ name: str(d.name),
469
+ description: typeof d.description === "string" ? d.description : null,
470
+ collectionId: str(d.collection_id),
471
+ conceptEnabled: Boolean(d.concept_enabled),
472
+ conceptThreshold: num(d.concept_threshold),
473
+ conceptMethod: str(d.concept_method),
474
+ listed: Boolean(d.listed),
475
+ userAsserts: num(d.user_asserts),
476
+ modelAsserts: num(d.model_asserts),
477
+ conceptAsserts: num(d.concept_asserts),
478
+ rejects: num(d.rejects),
479
+ anchors: num(d.anchors),
480
+ agreement: typeof d.agreement === "number" ? d.agreement : null,
481
+ conceptMaterializedAt: parseIso(d.concept_materialized_at),
482
+ conceptStale: Boolean(d.concept_stale),
483
+ snapshot: d.snapshot ? parseTagSnapshot(d.snapshot) : null,
484
+ raw: d,
485
+ };
486
+ }
487
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
package/dist/pkce.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * PKCE (RFC 7636) primitives using WebCrypto.
3
+ *
4
+ * ``crypto`` is resolved lazily so importing the module never throws where WebCrypto is absent —
5
+ * only generating a challenge does.
6
+ */
7
+ /** A URL-safe random token (base64url, no padding) from ``byteLength`` random bytes. */
8
+ export declare function randomToken(byteLength?: number): string;
9
+ /** The S256 code challenge for a verifier: ``base64url(sha256(ascii(verifier)))`` (RFC 7636 §4.2). */
10
+ export declare function s256Challenge(verifier: string): Promise<string>;
11
+ /** A fresh PKCE verifier (43–128 chars) and its S256 challenge. */
12
+ export declare function createPkcePair(): Promise<{
13
+ verifier: string;
14
+ challenge: string;
15
+ }>;
16
+ //# sourceMappingURL=pkce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../src/pkce.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,UAAU,SAAK,GAAG,MAAM,CAInD;AAED,sGAAsG;AACtG,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIrE;AAED,mEAAmE;AACnE,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAKvF"}
package/dist/pkce.js ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * PKCE (RFC 7636) primitives using WebCrypto.
3
+ *
4
+ * ``crypto`` is resolved lazily so importing the module never throws where WebCrypto is absent —
5
+ * only generating a challenge does.
6
+ */
7
+ function getCrypto() {
8
+ const c = globalThis.crypto;
9
+ if (!c?.subtle || !c.getRandomValues) {
10
+ throw new Error("Atrium: WebCrypto (crypto.subtle) is unavailable in this environment");
11
+ }
12
+ return c;
13
+ }
14
+ function base64UrlEncode(bytes) {
15
+ let binary = "";
16
+ for (const byte of bytes) {
17
+ binary += String.fromCharCode(byte);
18
+ }
19
+ return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
20
+ }
21
+ /** A URL-safe random token (base64url, no padding) from ``byteLength`` random bytes. */
22
+ export function randomToken(byteLength = 32) {
23
+ const bytes = new Uint8Array(byteLength);
24
+ getCrypto().getRandomValues(bytes);
25
+ return base64UrlEncode(bytes);
26
+ }
27
+ /** The S256 code challenge for a verifier: ``base64url(sha256(ascii(verifier)))`` (RFC 7636 §4.2). */
28
+ export async function s256Challenge(verifier) {
29
+ const data = new TextEncoder().encode(verifier);
30
+ const digest = await getCrypto().subtle.digest("SHA-256", data);
31
+ return base64UrlEncode(new Uint8Array(digest));
32
+ }
33
+ /** A fresh PKCE verifier (43–128 chars) and its S256 challenge. */
34
+ export async function createPkcePair() {
35
+ // RFC 7636 §4.1: 43–128 chars from the unreserved set. 48 random bytes → 64 base64url chars.
36
+ const verifier = randomToken(48);
37
+ const challenge = await s256Challenge(verifier);
38
+ return { verifier, challenge };
39
+ }
40
+ //# sourceMappingURL=pkce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../src/pkce.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,SAAS,SAAS;IAChB,MAAM,CAAC,GAAI,UAAkC,CAAC,MAAM,CAAA;IACpD,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;IACzF,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,eAAe,CAAC,KAAiB;IACxC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAChF,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,WAAW,CAAC,UAAU,GAAG,EAAE;IACzC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAA;IACxC,SAAS,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAClC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC/D,OAAO,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,6FAA6F;IAC7F,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;IAChC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;AAChC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * React bindings for ``hci-atrium`` — ``hci-atrium/react``.
3
+ *
4
+ * ``<AtriumProvider>`` subscribes to auth changes and exposes the client + user via context;
5
+ * ``useAtrium`` / ``useUser`` read it; ``<RequireSignIn>`` gates a subtree behind sign-in.
6
+ *
7
+ * ``useUser()`` distinguishes three states: ``undefined`` while the initial auth check is still in
8
+ * flight, ``null`` when signed out, and a ``User`` when signed in.
9
+ */
10
+ import { type ReactNode } from "react";
11
+ import type { Atrium } from "../atrium.js";
12
+ import type { User } from "../types.js";
13
+ export interface AtriumProviderProps {
14
+ atrium: Atrium;
15
+ children: ReactNode;
16
+ }
17
+ /** Provides the ``Atrium`` client and the live user to the ``useAtrium`` / ``useUser`` hooks. */
18
+ export declare function AtriumProvider({ atrium, children }: AtriumProviderProps): ReactNode;
19
+ /** The ``Atrium`` client from the nearest provider. */
20
+ export declare function useAtrium(): Atrium;
21
+ /** The signed-in user: ``undefined`` while loading, ``null`` when signed out, else the ``User``. */
22
+ export declare function useUser(): User | null | undefined;
23
+ /** The most recent auth error (state mismatch, exchange or refresh failure), or ``null``. */
24
+ export declare function useAuthError(): Error | null;
25
+ export interface RequireSignInProps {
26
+ children: ReactNode;
27
+ /** Shown while signed out. Defaults to a minimal "Sign in with Atrium" button. */
28
+ fallback?: ReactNode;
29
+ }
30
+ /**
31
+ * Render ``children`` only once signed in; otherwise render ``fallback`` (or a default sign-in
32
+ * button). Renders nothing while the initial auth check is still in flight.
33
+ *
34
+ * This is a UX guard, not a security boundary — see the README caveat.
35
+ */
36
+ export declare function RequireSignIn({ children, fallback }: RequireSignInProps): ReactNode;
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAiB,KAAK,SAAS,EAAmC,MAAM,OAAO,CAAA;AACtF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAUvC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,GAAG,SAAS,CAoCnF;AAUD,uDAAuD;AACvD,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,oGAAoG;AACpG,wBAAgB,OAAO,IAAI,IAAI,GAAG,IAAI,GAAG,SAAS,CAEjD;AAED,6FAA6F;AAC7F,wBAAgB,YAAY,IAAI,KAAK,GAAG,IAAI,CAE3C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAA;IACnB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG,SAAS,CAUnF"}