@soulcraft/sdk 2.0.0 → 2.0.2

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 (93) hide show
  1. package/dist/client/index.d.ts +5 -38
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +5 -47
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/client/namespace-proxy.d.ts +3 -4
  6. package/dist/client/namespace-proxy.d.ts.map +1 -1
  7. package/dist/client/namespace-proxy.js +3 -4
  8. package/dist/client/namespace-proxy.js.map +1 -1
  9. package/dist/index.d.ts +6 -6
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +4 -4
  12. package/dist/index.js.map +1 -1
  13. package/dist/modules/hall/browser.d.ts +83 -27
  14. package/dist/modules/hall/browser.d.ts.map +1 -1
  15. package/dist/modules/hall/browser.js +238 -49
  16. package/dist/modules/hall/browser.js.map +1 -1
  17. package/dist/modules/hall/media.d.ts +164 -0
  18. package/dist/modules/hall/media.d.ts.map +1 -0
  19. package/dist/modules/hall/media.js +182 -0
  20. package/dist/modules/hall/media.js.map +1 -0
  21. package/dist/modules/hall/server.d.ts +83 -6
  22. package/dist/modules/hall/server.d.ts.map +1 -1
  23. package/dist/modules/hall/server.js +206 -9
  24. package/dist/modules/hall/server.js.map +1 -1
  25. package/dist/modules/hall/types.d.ts +548 -25
  26. package/dist/modules/hall/types.d.ts.map +1 -1
  27. package/dist/modules/hall/types.js +12 -7
  28. package/dist/modules/hall/types.js.map +1 -1
  29. package/dist/server/hall-handlers.d.ts +40 -12
  30. package/dist/server/hall-handlers.d.ts.map +1 -1
  31. package/dist/server/hall-handlers.js +40 -12
  32. package/dist/server/hall-handlers.js.map +1 -1
  33. package/dist/server/handlers/chat/engine.d.ts.map +1 -1
  34. package/dist/server/handlers/chat/engine.js +5 -1
  35. package/dist/server/handlers/chat/engine.js.map +1 -1
  36. package/dist/server/handlers/chat/types.d.ts +17 -2
  37. package/dist/server/handlers/chat/types.d.ts.map +1 -1
  38. package/dist/server/hono-router.d.ts +2 -9
  39. package/dist/server/hono-router.d.ts.map +1 -1
  40. package/dist/server/hono-router.js +2 -46
  41. package/dist/server/hono-router.js.map +1 -1
  42. package/dist/server/index.d.ts +4 -19
  43. package/dist/server/index.d.ts.map +1 -1
  44. package/dist/server/index.js +10 -29
  45. package/dist/server/index.js.map +1 -1
  46. package/dist/types.d.ts +2 -41
  47. package/dist/types.d.ts.map +1 -1
  48. package/docs/ADR-005-hall-integration.md +449 -0
  49. package/package.json +1 -1
  50. package/dist/client/create-client-sdk.d.ts +0 -113
  51. package/dist/client/create-client-sdk.d.ts.map +0 -1
  52. package/dist/client/create-client-sdk.js +0 -169
  53. package/dist/client/create-client-sdk.js.map +0 -1
  54. package/dist/modules/app-context/index.d.ts +0 -214
  55. package/dist/modules/app-context/index.d.ts.map +0 -1
  56. package/dist/modules/app-context/index.js +0 -569
  57. package/dist/modules/app-context/index.js.map +0 -1
  58. package/dist/modules/billing/firestore-provider.d.ts +0 -60
  59. package/dist/modules/billing/firestore-provider.d.ts.map +0 -1
  60. package/dist/modules/billing/firestore-provider.js +0 -315
  61. package/dist/modules/billing/firestore-provider.js.map +0 -1
  62. package/dist/modules/brainy/proxy.d.ts +0 -48
  63. package/dist/modules/brainy/proxy.d.ts.map +0 -1
  64. package/dist/modules/brainy/proxy.js +0 -95
  65. package/dist/modules/brainy/proxy.js.map +0 -1
  66. package/dist/server/create-sdk.d.ts +0 -74
  67. package/dist/server/create-sdk.d.ts.map +0 -1
  68. package/dist/server/create-sdk.js +0 -104
  69. package/dist/server/create-sdk.js.map +0 -1
  70. package/dist/server/from-license.d.ts +0 -252
  71. package/dist/server/from-license.d.ts.map +0 -1
  72. package/dist/server/from-license.js +0 -349
  73. package/dist/server/from-license.js.map +0 -1
  74. package/dist/server/handlers.d.ts +0 -312
  75. package/dist/server/handlers.d.ts.map +0 -1
  76. package/dist/server/handlers.js +0 -376
  77. package/dist/server/handlers.js.map +0 -1
  78. package/dist/server/postmessage-handler.d.ts +0 -152
  79. package/dist/server/postmessage-handler.d.ts.map +0 -1
  80. package/dist/server/postmessage-handler.js +0 -138
  81. package/dist/server/postmessage-handler.js.map +0 -1
  82. package/dist/transports/http.d.ts +0 -86
  83. package/dist/transports/http.d.ts.map +0 -1
  84. package/dist/transports/http.js +0 -137
  85. package/dist/transports/http.js.map +0 -1
  86. package/dist/transports/postmessage.d.ts +0 -159
  87. package/dist/transports/postmessage.d.ts.map +0 -1
  88. package/dist/transports/postmessage.js +0 -207
  89. package/dist/transports/postmessage.js.map +0 -1
  90. package/dist/transports/workshop.d.ts +0 -173
  91. package/dist/transports/workshop.d.ts.map +0 -1
  92. package/dist/transports/workshop.js +0 -307
  93. package/dist/transports/workshop.js.map +0 -1
@@ -1,55 +1,56 @@
1
1
  /**
2
2
  * @module modules/hall/browser
3
- * @description Browser-side Hall room client joins a WebRTC room via a session token.
3
+ * @description Browser-side Hall clientsjoin WebRTC rooms and pub/sub topics via session tokens.
4
4
  *
5
- * `joinHallRoom` is the browser entry point for Hall real-time communication.
6
- * It opens a WebSocket to the Hall signaling endpoint, negotiates a WebRTC peer
7
- * connection via offer/answer/ICE, and returns a `HallRoomHandle` with typed events
8
- * for tracks, transcripts, concept mentions, and room lifecycle.
5
+ * This module provides two browser entry points:
6
+ *
7
+ * - `joinHallRoom` joins a WebRTC room for real-time audio/video/data communication.
8
+ * Handles SDP offer/answer, ICE negotiation, track events, and AI events (transcripts,
9
+ * concept mentions). In broadcast rooms, handles role changes (promotion/demotion)
10
+ * transparently.
11
+ *
12
+ * - `joinHallPubsub` — connects to the Hall pub/sub system for topic-based messaging
13
+ * with presence tracking. Uses msgpack over WebSocket, same binary format as the
14
+ * product connection.
9
15
  *
10
16
  * **Auth model:** The browser never sees the product's shared secret. The product
11
- * backend mints a short-lived HMAC session token (via `sdk.hall.createSessionToken`)
12
- * and passes it to the browser. The browser passes the token to `joinHallRoom` — that
13
- * is the only browser credential.
17
+ * backend mints short-lived tokens (via `sdk.hall.createSessionToken` or
18
+ * `sdk.hall.createPubsubToken`) and passes them to the browser.
14
19
  *
15
20
  * This module has no server-only dependencies and is safe to bundle for the browser.
16
- * It does require `RTCPeerConnection` and `WebSocket` to be available (standard in
17
- * all modern browsers; not available in Node.js without polyfills).
18
21
  *
19
- * @example
22
+ * @example WebRTC room
20
23
  * ```typescript
21
24
  * import { joinHallRoom } from '@soulcraft/sdk/client'
22
25
  *
23
- * // 1. Get token from product backend:
24
26
  * const { token, hallUrl } = await fetch('/api/session/join').then(r => r.json())
25
- *
26
- * // 2. Get camera + mic:
27
27
  * const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true })
28
- *
29
- * // 3. Join room:
30
28
  * const room = await joinHallRoom({ token, hallUrl })
31
29
  * room.addStream(stream)
30
+ * room.on('trackAdded', ({ peerId, streams }) => renderVideo(peerId, streams[0]))
31
+ * room.on('transcript', ({ text, isFinal }) => { if (isFinal) showCaption(text) })
32
+ * room.on('roleChanged', ({ role, canPublish }) => updateUI(role, canPublish))
33
+ * room.close()
34
+ * ```
32
35
  *
33
- * // 4. Handle events:
34
- * room.on('trackAdded', ({ peerId, streams }) => {
35
- * document.getElementById(`video-${peerId}`).srcObject = streams[0]
36
- * })
37
- * room.on('transcript', ({ peerId, text, isFinal }) => {
38
- * if (isFinal) appendCaption(peerId, text)
39
- * })
40
- * room.on('conceptMention', ({ nodeId, confidence }) => pulseGraphNode(nodeId, confidence))
36
+ * @example Pub/Sub
37
+ * ```typescript
38
+ * import { joinHallPubsub } from '@soulcraft/sdk/client'
41
39
  *
42
- * // 5. On leave:
43
- * room.close()
40
+ * const { token, hallUrl } = await fetch('/api/pubsub/token').then(r => r.json())
41
+ * const pubsub = await joinHallPubsub({ token, hallUrl })
42
+ * pubsub.subscribe('room:abc:chat', { username: 'Alice' })
43
+ * pubsub.on('topicMessage', ({ senderId, payload }) => showMessage(senderId, payload))
44
+ * pubsub.broadcast('room:abc:chat', { text: 'Hello!' })
45
+ * pubsub.close()
44
46
  * ```
45
47
  */
48
+ import { encode, decode } from '@msgpack/msgpack';
46
49
  class HallRoomHandleImpl {
47
- // roomId and peerId are set by the server's first 'peerJoined' message after
48
- // the WebRTC connection reaches 'connected'. They start empty and are populated
49
- // via _setIdentifiers() before any application code can read them (the promise
50
- // returned by joinHallRoom does not resolve until they are set).
51
50
  roomId;
52
51
  peerId;
52
+ role;
53
+ canPublish;
53
54
  #listeners = {
54
55
  transcript: new Set(),
55
56
  conceptMention: new Set(),
@@ -59,29 +60,38 @@ class HallRoomHandleImpl {
59
60
  peerLeft: new Set(),
60
61
  trackAdded: new Set(),
61
62
  trackRemoved: new Set(),
63
+ roleChanged: new Set(),
62
64
  closed: new Set(),
63
65
  error: new Set(),
64
66
  };
65
67
  #pc;
66
68
  #ws;
67
- constructor(roomId, peerId, pc, ws) {
69
+ constructor(roomId, peerId, role, canPublish, pc, ws) {
68
70
  this.roomId = roomId;
69
71
  this.peerId = peerId;
72
+ this.role = role;
73
+ this.canPublish = canPublish;
70
74
  this.#pc = pc;
71
75
  this.#ws = ws;
72
76
  }
73
77
  /**
74
78
  * Set the room and peer identifiers decoded from the server's first peerJoined message.
75
79
  *
76
- * Called by the signaling event router once the server confirms the room assignment.
77
- * Must be called before the `joinHallRoom` promise resolves.
78
- *
79
80
  * @internal
80
81
  */
81
82
  _setIdentifiers(roomId, peerId) {
82
83
  this.roomId = roomId;
83
84
  this.peerId = peerId;
84
85
  }
86
+ /**
87
+ * Update role and canPublish after a roleChanged event.
88
+ *
89
+ * @internal
90
+ */
91
+ _setRole(role, canPublish) {
92
+ this.role = role;
93
+ this.canPublish = canPublish;
94
+ }
85
95
  on(event, listener) {
86
96
  ;
87
97
  this.#listeners[event].add(listener);
@@ -121,6 +131,9 @@ class HallRoomHandleImpl {
121
131
  * performs the offer/answer/ICE exchange, and resolves once the peer connection reaches
122
132
  * `connected` state. Returns a {@link HallRoomHandle} with typed events.
123
133
  *
134
+ * In broadcast rooms, the handle also emits `roleChanged` when the peer is promoted
135
+ * or demoted. The `role` and `canPublish` properties are updated automatically.
136
+ *
124
137
  * @param options - Token, Hall URL, and optional ICE server overrides.
125
138
  * @returns A connected `HallRoomHandle`.
126
139
  * @throws {Error} If the signaling handshake fails or the connection times out.
@@ -131,13 +144,12 @@ class HallRoomHandleImpl {
131
144
  * room.addStream(localStream)
132
145
  * room.on('trackAdded', ({ peerId, streams }) => renderVideo(peerId, streams[0]))
133
146
  * room.on('transcript', ({ text, isFinal }) => { if (isFinal) showCaption(text) })
147
+ * room.on('roleChanged', ({ role, canPublish }) => updateUI(role, canPublish))
134
148
  * ```
135
149
  */
136
150
  export async function joinHallRoom(options) {
137
151
  const { token, hallUrl, iceServers = [] } = options;
138
152
  const signalingUrl = `${hallUrl}/ws/session/${encodeURIComponent(token)}`;
139
- // The Hall server sends TURN credentials in the first message after the WebSocket opens.
140
- // We resolve ICE servers from that before creating the RTCPeerConnection.
141
153
  const ws = new WebSocket(signalingUrl);
142
154
  const handle = await new Promise((resolve, reject) => {
143
155
  const timeout = setTimeout(() => {
@@ -149,23 +161,17 @@ export async function joinHallRoom(options) {
149
161
  reject(new Error('Hall: WebSocket error during signaling'));
150
162
  };
151
163
  ws.onopen = async () => {
152
- // Create the peer connection. Hall's TURN server handles NAT traversal —
153
- // the signaling 'answer' message from Hall includes ICE candidates.
154
164
  const pc = new RTCPeerConnection({
155
165
  iceServers: [
156
- // Hall's in-process TURN is always available.
157
- // The session token encodes the TURN credentials — Hall provides them via the ws.
158
166
  { urls: `${hallUrl.replace('wss://', 'turn:').replace('ws://', 'turn:')}:3478` },
159
167
  ...iceServers,
160
168
  ],
161
169
  });
162
- // Send ICE candidates to Hall as they are gathered.
163
170
  pc.onicecandidate = (ev) => {
164
171
  if (ev.candidate) {
165
172
  ws.send(JSON.stringify({ type: 'ice', candidate: JSON.stringify(ev.candidate) }));
166
173
  }
167
174
  };
168
- // Create and send SDP offer.
169
175
  const offer = await pc.createOffer();
170
176
  await pc.setLocalDescription(offer);
171
177
  ws.send(JSON.stringify({ type: 'offer', sdp: offer.sdp }));
@@ -198,15 +204,11 @@ export async function joinHallRoom(options) {
198
204
  return;
199
205
  }
200
206
  // roomId and peerId arrive in the server's first 'peerJoined' message.
201
- // Resolve the joinHallRoom promise only once we have both identifiers,
202
- // so callers always get a fully-populated HallRoomHandle.
203
207
  if (msg.type === 'peerJoined' && !roomHandleRef) {
204
- const h = new HallRoomHandleImpl(msg.roomId, msg.peerId, pc, ws);
208
+ const h = new HallRoomHandleImpl(msg.roomId, msg.peerId, 'participant', true, pc, ws);
205
209
  roomHandleRef = h;
206
210
  clearTimeout(timeout);
207
211
  resolve(h);
208
- // Also dispatch peerJoined so listeners attached immediately after
209
- // joinHallRoom() resolves can observe the local peer's own join event.
210
212
  routeSignalingEvent(roomHandleRef, msg);
211
213
  return;
212
214
  }
@@ -214,7 +216,6 @@ export async function joinHallRoom(options) {
214
216
  return;
215
217
  routeSignalingEvent(roomHandleRef, msg);
216
218
  };
217
- // Detect hard WebRTC failures before the first peerJoined arrives.
218
219
  pc.onconnectionstatechange = () => {
219
220
  if (pc.connectionState === 'failed' || pc.connectionState === 'closed') {
220
221
  if (!roomHandleRef) {
@@ -223,7 +224,6 @@ export async function joinHallRoom(options) {
223
224
  }
224
225
  }
225
226
  };
226
- // Wire track events. peerId is populated once the peerJoined message arrives.
227
227
  pc.ontrack = (ev) => {
228
228
  if (!roomHandleRef)
229
229
  return;
@@ -270,6 +270,12 @@ function routeSignalingEvent(handle, msg) {
270
270
  case 'peerLeft':
271
271
  handle._dispatch('peerLeft', msg);
272
272
  break;
273
+ case 'roleChanged': {
274
+ const role = (msg.role === 'viewer' ? 'viewer' : 'participant');
275
+ handle._setRole(role, msg.canPublish);
276
+ handle._dispatch('roleChanged', { role, canPublish: msg.canPublish });
277
+ break;
278
+ }
273
279
  case 'roomClosed':
274
280
  handle._dispatch('closed', { roomId: msg.roomId });
275
281
  break;
@@ -278,4 +284,187 @@ function routeSignalingEvent(handle, msg) {
278
284
  break;
279
285
  }
280
286
  }
287
+ class HallPubsubHandleImpl {
288
+ peerId;
289
+ #ws;
290
+ #listeners = {
291
+ topicSubscribed: new Set(),
292
+ topicUnsubscribed: new Set(),
293
+ topicMessage: new Set(),
294
+ presenceUpdate: new Set(),
295
+ presenceSnapshot: new Set(),
296
+ error: new Set(),
297
+ closed: new Set(),
298
+ };
299
+ constructor(peerId, ws) {
300
+ this.peerId = peerId;
301
+ this.#ws = ws;
302
+ }
303
+ subscribe(topic, metadata) {
304
+ this.#send({ t: 'subscribeTopic', d: { topic, metadata } });
305
+ }
306
+ unsubscribe(topic) {
307
+ this.#send({ t: 'unsubscribeTopic', d: { topic } });
308
+ }
309
+ broadcast(topic, payload) {
310
+ this.#send({ t: 'broadcastTopic', d: { topic, payload } });
311
+ }
312
+ getPresence(topic) {
313
+ this.#send({ t: 'getPresence', d: { topic } });
314
+ }
315
+ on(event, listener) {
316
+ ;
317
+ this.#listeners[event].add(listener);
318
+ return this;
319
+ }
320
+ off(event, listener) {
321
+ ;
322
+ this.#listeners[event].delete(listener);
323
+ return this;
324
+ }
325
+ close() {
326
+ this.#ws.close(1000, 'client closing');
327
+ }
328
+ /** @internal */
329
+ _dispatch(event, payload) {
330
+ for (const listener of this.#listeners[event]) {
331
+ try {
332
+ listener(payload);
333
+ }
334
+ catch (e) {
335
+ console.error(`[Hall] uncaught error in pubsub ${String(event)} listener:`, e);
336
+ }
337
+ }
338
+ }
339
+ #send(msg) {
340
+ if (this.#ws.readyState !== WebSocket.OPEN) {
341
+ throw new Error('Hall pubsub: not connected');
342
+ }
343
+ this.#ws.send(encode(msg));
344
+ }
345
+ }
346
+ // ─── joinHallPubsub ──────────────────────────────────────────────────────────
347
+ /**
348
+ * Connect to the Hall pub/sub system from the browser using a pub/sub token.
349
+ *
350
+ * Opens a WebSocket to `{hallUrl}/ws/pubsub/{token}` using msgpack wire format.
351
+ * Resolves once `authOk` is received from the server, confirming the token is valid.
352
+ *
353
+ * @param options - Token and Hall URL.
354
+ * @returns A connected `HallPubsubHandle`.
355
+ * @throws {Error} If authentication fails or the connection times out.
356
+ *
357
+ * @example
358
+ * ```typescript
359
+ * const pubsub = await joinHallPubsub({ token, hallUrl: 'wss://hall.soulcraft.com' })
360
+ * pubsub.subscribe('room:abc:chat', { username: 'Alice' })
361
+ * pubsub.on('topicMessage', ({ topic, senderId, payload }) => showMessage(senderId, payload))
362
+ * pubsub.broadcast('room:abc:chat', { text: 'Hello!' })
363
+ * pubsub.close()
364
+ * ```
365
+ */
366
+ export async function joinHallPubsub(options) {
367
+ const { token, hallUrl } = options;
368
+ const url = `${hallUrl}/ws/pubsub/${encodeURIComponent(token)}`;
369
+ const ws = new WebSocket(url);
370
+ ws.binaryType = 'arraybuffer';
371
+ const handle = await new Promise((resolve, reject) => {
372
+ const timeout = setTimeout(() => {
373
+ ws.close();
374
+ reject(new Error('Hall pubsub: connection timed out after 30s'));
375
+ }, 30_000);
376
+ ws.onerror = () => {
377
+ clearTimeout(timeout);
378
+ reject(new Error('Hall pubsub: WebSocket error'));
379
+ };
380
+ let pubsubHandle = null;
381
+ ws.onmessage = (ev) => {
382
+ let msg;
383
+ try {
384
+ msg = decode(new Uint8Array(ev.data));
385
+ }
386
+ catch {
387
+ return;
388
+ }
389
+ // Before auth is confirmed, only handle authOk/authFailed.
390
+ if (!pubsubHandle) {
391
+ if (msg.t === 'authOk') {
392
+ clearTimeout(timeout);
393
+ const h = new HallPubsubHandleImpl(msg.d.peerId, ws);
394
+ pubsubHandle = h;
395
+ resolve(h);
396
+ return;
397
+ }
398
+ if (msg.t === 'authFailed') {
399
+ clearTimeout(timeout);
400
+ ws.close();
401
+ reject(new Error(`Hall pubsub auth failed: ${msg.d.reason}`));
402
+ return;
403
+ }
404
+ return;
405
+ }
406
+ // Route post-auth messages.
407
+ routePubsubEvent(pubsubHandle, msg);
408
+ };
409
+ ws.onclose = (ev) => {
410
+ if (pubsubHandle) {
411
+ if (ev.code !== 1000) {
412
+ pubsubHandle._dispatch('error', {
413
+ code: String(ev.code),
414
+ message: ev.reason || `WebSocket closed: ${ev.code}`,
415
+ });
416
+ }
417
+ pubsubHandle._dispatch('closed', undefined);
418
+ }
419
+ };
420
+ });
421
+ return handle;
422
+ }
423
+ // ─── Pub/sub event router ────────────────────────────────────────────────────
424
+ function routePubsubEvent(handle, msg) {
425
+ switch (msg.t) {
426
+ case 'topicSubscribed':
427
+ handle._dispatch('topicSubscribed', msg.d);
428
+ break;
429
+ case 'topicUnsubscribed':
430
+ handle._dispatch('topicUnsubscribed', msg.d);
431
+ break;
432
+ case 'topicMessage':
433
+ handle._dispatch('topicMessage', msg.d);
434
+ break;
435
+ case 'presenceUpdate':
436
+ handle._dispatch('presenceUpdate', msg.d);
437
+ break;
438
+ case 'presenceSnapshot':
439
+ handle._dispatch('presenceSnapshot', msg.d);
440
+ break;
441
+ case 'error':
442
+ handle._dispatch('error', msg.d);
443
+ break;
444
+ }
445
+ }
446
+ // ─── URL helpers ─────────────────────────────────────────────────────────────
447
+ /**
448
+ * Build the WHEP endpoint URL for receive-only WebRTC viewing of a broadcast room.
449
+ * The browser POSTs an SDP offer to this URL with `Authorization: Bearer <sessionToken>`.
450
+ *
451
+ * @param hallUrl - Hall server base URL (e.g. `"https://hall.soulcraft.com"`).
452
+ * @param roomId - The room to view.
453
+ * @returns The WHEP endpoint URL.
454
+ */
455
+ export function getWhepUrl(hallUrl, roomId) {
456
+ const base = hallUrl.replace(/^wss:/, 'https:').replace(/^ws:/, 'http:');
457
+ return `${base}/whep/${encodeURIComponent(roomId)}`;
458
+ }
459
+ /**
460
+ * Build the LL-HLS master playlist URL for scalable HLS viewing of a broadcast room.
461
+ *
462
+ * @param hallUrl - Hall server base URL (e.g. `"https://hall.soulcraft.com"`).
463
+ * @param roomId - The room to view.
464
+ * @returns The HLS playlist URL.
465
+ */
466
+ export function getHlsUrl(hallUrl, roomId) {
467
+ const base = hallUrl.replace(/^wss:/, 'https:').replace(/^ws:/, 'http:');
468
+ return `${base}/hls/${encodeURIComponent(roomId)}/playlist.m3u8`;
469
+ }
281
470
  //# sourceMappingURL=browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/modules/hall/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/modules/hall/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * @module modules/hall/media
3
+ * @description HTTP client for the Hall media pipeline — upload, transcode, retrieve, and delete media.
4
+ *
5
+ * Hall provides a media pipeline for processing audio, video, and image files. This module
6
+ * wraps the HTTP endpoints (not WebSocket) with a typed client. Async notifications for
7
+ * transcoding completion arrive via the product WebSocket (`mediaReady` / `mediaError` events
8
+ * on the `HallRoom` handle).
9
+ *
10
+ * **Auth model:** All media HTTP requests use `Authorization: Hall <productName>:<secret>`.
11
+ * This client is server-only — never expose the product secret to browsers. Browser clients
12
+ * access processed media via the public `GET /media/{mediaId}` endpoint (no auth required
13
+ * for read access).
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { createHallMediaClient } from '@soulcraft/sdk/server'
18
+ *
19
+ * const media = createHallMediaClient({
20
+ * baseUrl: 'https://hall.soulcraft.com',
21
+ * productName: 'workshop',
22
+ * secret: process.env.HALL_WORKSHOP_SECRET!,
23
+ * })
24
+ *
25
+ * // Upload a file with transcoding
26
+ * const result = await media.upload(file, { transcode: 'video/mp4' })
27
+ * console.log(result.mediaId) // listen for 'mediaReady' event on the room
28
+ *
29
+ * // Get media info
30
+ * const info = await media.getInfo(result.mediaId)
31
+ *
32
+ * // Delete media
33
+ * await media.delete(result.mediaId)
34
+ * ```
35
+ */
36
+ import type { MediaInfo, TranscodeTarget } from './types.js';
37
+ /**
38
+ * Options for creating a Hall media client.
39
+ */
40
+ export interface HallMediaClientOptions {
41
+ /**
42
+ * Hall server HTTP base URL (e.g. `"https://hall.soulcraft.com"`).
43
+ * Note: use `https://` not `wss://` — media endpoints are HTTP, not WebSocket.
44
+ */
45
+ baseUrl: string;
46
+ /**
47
+ * Product name as configured in `[auth.products]` in `hall.toml`.
48
+ */
49
+ productName: string;
50
+ /**
51
+ * Shared secret for this product. Same as used for the WebSocket connection.
52
+ * Must match the value in `[auth.products.<productName>]` in `hall.toml`.
53
+ */
54
+ secret: string;
55
+ }
56
+ /**
57
+ * Options for uploading a media file.
58
+ */
59
+ export interface MediaUploadOptions {
60
+ /**
61
+ * Target transcode format. If omitted, the file is stored as-is.
62
+ * Supported targets: `"audio/mp3"`, `"video/mp4"`, `"image/webp"`.
63
+ */
64
+ transcode?: TranscodeTarget;
65
+ }
66
+ /**
67
+ * Result of a media upload.
68
+ */
69
+ export interface MediaUploadResult {
70
+ /** Unique media identifier assigned by Hall. */
71
+ mediaId: string;
72
+ }
73
+ /**
74
+ * Server-side HTTP client for the Hall media pipeline.
75
+ *
76
+ * Handles upload, info retrieval, thumbnail access, and deletion.
77
+ * All requests are authenticated with the product shared secret.
78
+ *
79
+ * Async transcoding notifications arrive via the product WebSocket, not this client.
80
+ * Listen for `mediaReady` / `mediaError` events on the `HallRoom` handle.
81
+ */
82
+ export declare class HallMediaClient {
83
+ #private;
84
+ /**
85
+ * @param options - Hall server URL, product name, and shared secret.
86
+ */
87
+ constructor(options: HallMediaClientOptions);
88
+ /**
89
+ * Upload a media file to Hall for processing.
90
+ *
91
+ * @param file - The file to upload. Can be a `Blob`, `File`, or `Buffer`.
92
+ * @param options - Optional transcode target.
93
+ * @returns The assigned media ID. Listen for `mediaReady` on the room for completion.
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const file = new Blob([audioBuffer], { type: 'audio/wav' })
98
+ * const { mediaId } = await media.upload(file, { transcode: 'audio/mp3' })
99
+ * ```
100
+ */
101
+ upload(file: Blob | File, options?: MediaUploadOptions): Promise<MediaUploadResult>;
102
+ /**
103
+ * Get metadata for a processed media file.
104
+ *
105
+ * @param mediaId - The media identifier from the upload result.
106
+ * @returns Media metadata including MIME type, size, duration, dimensions, and status.
107
+ */
108
+ getInfo(mediaId: string): Promise<MediaInfo>;
109
+ /**
110
+ * Get the URL for streaming a media file.
111
+ * Supports HTTP range requests (206 Partial Content).
112
+ *
113
+ * @param mediaId - The media identifier.
114
+ * @returns The full URL to the media file.
115
+ */
116
+ getStreamUrl(mediaId: string): string;
117
+ /**
118
+ * Get the URL for an auto-generated thumbnail (WebP).
119
+ *
120
+ * @param mediaId - The media identifier.
121
+ * @returns The full URL to the thumbnail image.
122
+ */
123
+ getThumbnailUrl(mediaId: string): string;
124
+ /**
125
+ * Delete a media file. Only the uploading product can delete its own media.
126
+ *
127
+ * @param mediaId - The media identifier to delete.
128
+ */
129
+ delete(mediaId: string): Promise<void>;
130
+ /**
131
+ * Build the WHEP endpoint URL for receive-only WebRTC viewing.
132
+ * Browser viewers POST an SDP offer to this URL with a session token.
133
+ *
134
+ * @param roomId - The room to view.
135
+ * @returns The WHEP endpoint URL.
136
+ */
137
+ getWhepUrl(roomId: string): string;
138
+ /**
139
+ * Build the LL-HLS master playlist URL for scalable HLS viewing.
140
+ *
141
+ * @param roomId - The room to view.
142
+ * @returns The HLS playlist URL.
143
+ */
144
+ getHlsUrl(roomId: string): string;
145
+ }
146
+ /**
147
+ * Create a server-side Hall media client for upload, transcode, and retrieval.
148
+ *
149
+ * @param options - Hall server URL, product name, and shared secret.
150
+ * @returns A `HallMediaClient` instance ready for use.
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * import { createHallMediaClient } from '@soulcraft/sdk/server'
155
+ *
156
+ * const media = createHallMediaClient({
157
+ * baseUrl: 'https://hall.soulcraft.com',
158
+ * productName: 'workshop',
159
+ * secret: process.env.HALL_WORKSHOP_SECRET!,
160
+ * })
161
+ * ```
162
+ */
163
+ export declare function createHallMediaClient(options: HallMediaClientOptions): HallMediaClient;
164
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/modules/hall/media.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI5D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAA;CAChB;AAID;;;;;;;;GAQG;AACH,qBAAa,eAAe;;IAK1B;;OAEG;gBACS,OAAO,EAAE,sBAAsB;IAM3C;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqB7F;;;;;OAKG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAalD;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIrC;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIxC;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5C;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIlC;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAOlC;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAEtF"}