@soulcraft/sdk 2.0.1 → 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 (88) 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/hono-router.d.ts +2 -9
  34. package/dist/server/hono-router.d.ts.map +1 -1
  35. package/dist/server/hono-router.js +2 -46
  36. package/dist/server/hono-router.js.map +1 -1
  37. package/dist/server/index.d.ts +4 -19
  38. package/dist/server/index.d.ts.map +1 -1
  39. package/dist/server/index.js +10 -29
  40. package/dist/server/index.js.map +1 -1
  41. package/dist/types.d.ts +2 -41
  42. package/dist/types.d.ts.map +1 -1
  43. package/docs/ADR-005-hall-integration.md +449 -0
  44. package/package.json +1 -1
  45. package/dist/client/create-client-sdk.d.ts +0 -113
  46. package/dist/client/create-client-sdk.d.ts.map +0 -1
  47. package/dist/client/create-client-sdk.js +0 -169
  48. package/dist/client/create-client-sdk.js.map +0 -1
  49. package/dist/modules/app-context/index.d.ts +0 -214
  50. package/dist/modules/app-context/index.d.ts.map +0 -1
  51. package/dist/modules/app-context/index.js +0 -569
  52. package/dist/modules/app-context/index.js.map +0 -1
  53. package/dist/modules/billing/firestore-provider.d.ts +0 -60
  54. package/dist/modules/billing/firestore-provider.d.ts.map +0 -1
  55. package/dist/modules/billing/firestore-provider.js +0 -315
  56. package/dist/modules/billing/firestore-provider.js.map +0 -1
  57. package/dist/modules/brainy/proxy.d.ts +0 -48
  58. package/dist/modules/brainy/proxy.d.ts.map +0 -1
  59. package/dist/modules/brainy/proxy.js +0 -95
  60. package/dist/modules/brainy/proxy.js.map +0 -1
  61. package/dist/server/create-sdk.d.ts +0 -74
  62. package/dist/server/create-sdk.d.ts.map +0 -1
  63. package/dist/server/create-sdk.js +0 -104
  64. package/dist/server/create-sdk.js.map +0 -1
  65. package/dist/server/from-license.d.ts +0 -252
  66. package/dist/server/from-license.d.ts.map +0 -1
  67. package/dist/server/from-license.js +0 -349
  68. package/dist/server/from-license.js.map +0 -1
  69. package/dist/server/handlers.d.ts +0 -312
  70. package/dist/server/handlers.d.ts.map +0 -1
  71. package/dist/server/handlers.js +0 -376
  72. package/dist/server/handlers.js.map +0 -1
  73. package/dist/server/postmessage-handler.d.ts +0 -152
  74. package/dist/server/postmessage-handler.d.ts.map +0 -1
  75. package/dist/server/postmessage-handler.js +0 -138
  76. package/dist/server/postmessage-handler.js.map +0 -1
  77. package/dist/transports/http.d.ts +0 -86
  78. package/dist/transports/http.d.ts.map +0 -1
  79. package/dist/transports/http.js +0 -137
  80. package/dist/transports/http.js.map +0 -1
  81. package/dist/transports/postmessage.d.ts +0 -159
  82. package/dist/transports/postmessage.d.ts.map +0 -1
  83. package/dist/transports/postmessage.js +0 -207
  84. package/dist/transports/postmessage.js.map +0 -1
  85. package/dist/transports/workshop.d.ts +0 -173
  86. package/dist/transports/workshop.d.ts.map +0 -1
  87. package/dist/transports/workshop.js +0 -307
  88. package/dist/transports/workshop.js.map +0 -1
@@ -1,307 +0,0 @@
1
- /**
2
- * @module transports/workshop
3
- * @description PostMessage transport for non-brainy API calls from kit iframes to
4
- * the Workshop parent frame.
5
- *
6
- * While {@link PostMessageTransport} handles Brainy RPC (`brainy:request` /
7
- * `brainy:response`), this transport handles generic HTTP-style API calls —
8
- * AI chat streaming, Hall room joins, Pulse analytics, file operations, and
9
- * notifications — using the `workshop:request` / `workshop:response` /
10
- * `workshop:stream` wire protocol.
11
- *
12
- * The parent frame (PreviewFrame.svelte) receives `workshop:request` messages,
13
- * forwards them as real HTTP requests to Workshop's backend, and relays the
14
- * response back via `workshop:response` (JSON) or `workshop:stream` (SSE chunks).
15
- *
16
- * ## Wire protocol
17
- *
18
- * **Request** (kit iframe → parent):
19
- * ```json
20
- * { "type": "workshop:request", "id": "<uuid>", "path": "/api/ai/chat",
21
- * "method": "POST", "body": "{...}", "stream": true, "headers": {} }
22
- * ```
23
- *
24
- * **Response** (parent → kit iframe, non-streaming):
25
- * ```json
26
- * { "type": "workshop:response", "id": "<uuid>", "result": {...} }
27
- * { "type": "workshop:response", "id": "<uuid>", "error": { "code": "...", "message": "..." } }
28
- * ```
29
- *
30
- * **Stream chunk** (parent → kit iframe, streaming):
31
- * ```json
32
- * { "type": "workshop:stream", "id": "<uuid>", "chunk": "..." }
33
- * { "type": "workshop:stream", "id": "<uuid>", "done": true }
34
- * { "type": "workshop:stream", "id": "<uuid>", "error": "..." }
35
- * ```
36
- *
37
- * ## Usage
38
- *
39
- * ```typescript
40
- * import { WorkshopTransport } from '@soulcraft/sdk/client'
41
- *
42
- * const transport = new WorkshopTransport('https://workshop.soulcraft.com')
43
- *
44
- * // JSON call
45
- * const result = await transport.call('/api/hall/rooms/my-room/join', 'POST', '{"audio":true}')
46
- *
47
- * // Streaming call (AI chat)
48
- * for await (const chunk of transport.stream('/api/ai/chat', 'POST', body)) {
49
- * process.stdout.write(chunk)
50
- * }
51
- * ```
52
- *
53
- * @see {@link PostMessageTransport} for Brainy-specific RPC transport.
54
- */
55
- // ─────────────────────────────────────────────────────────────────────────────
56
- // Transport
57
- // ─────────────────────────────────────────────────────────────────────────────
58
- /**
59
- * PostMessage transport for generic (non-brainy) API calls from kit iframes.
60
- *
61
- * Each `call()` posts a `workshop:request` message to `window.parent` and awaits
62
- * a matching `workshop:response`. For streaming endpoints, `stream()` collects
63
- * `workshop:stream` chunks and yields them as an `AsyncIterable<string>`.
64
- *
65
- * @example
66
- * ```typescript
67
- * const t = new WorkshopTransport(workshopOrigin)
68
- *
69
- * // Fire-and-forget analytics
70
- * t.call('/api/pulse/track', 'POST', JSON.stringify({ event: 'page_view' }))
71
- *
72
- * // Stream AI tokens
73
- * for await (const token of t.stream('/api/ai/chat', 'POST', body)) {
74
- * output += token
75
- * }
76
- * ```
77
- */
78
- export class WorkshopTransport {
79
- _targetOrigin;
80
- _timeoutMs;
81
- _pendingCalls = new Map();
82
- _pendingStreams = new Map();
83
- _closed = false;
84
- _messageListener;
85
- _listenerWindow;
86
- _parentWindow;
87
- /**
88
- * @param targetOrigin - The Workshop parent frame's origin for postMessage security.
89
- * Must be an explicit origin in production; `'*'` is acceptable only in dev.
90
- * @param timeoutMs - Per-call timeout in milliseconds. Default: 60 000 (longer than
91
- * brainy RPC because AI chat streams can take a while to start).
92
- * @param listenerWindow - Window for message events. Defaults to `window`.
93
- * @param parentWindow - Window to post messages to. Defaults to `window.parent`.
94
- */
95
- constructor(targetOrigin, timeoutMs = 60_000, listenerWindow, parentWindow) {
96
- this._targetOrigin = targetOrigin;
97
- this._timeoutMs = timeoutMs;
98
- this._listenerWindow = listenerWindow ?? window;
99
- this._parentWindow = parentWindow ?? window.parent;
100
- this._messageListener = (event) => this._handleMessage(event);
101
- this._listenerWindow.addEventListener('message', this._messageListener);
102
- }
103
- // ── Internal ──────────────────────────────────────────────────────────────
104
- _handleMessage(event) {
105
- const data = event.data;
106
- if (!data || typeof data.type !== 'string')
107
- return;
108
- // ── JSON response ─────────────────────────────────────────────────────
109
- if (data.type === 'workshop:response') {
110
- const pending = this._pendingCalls.get(data.id);
111
- if (!pending)
112
- return;
113
- clearTimeout(pending.timer);
114
- this._pendingCalls.delete(data.id);
115
- if (data.error) {
116
- pending.reject(new Error(`${data.error.code}: ${data.error.message}`));
117
- }
118
- else {
119
- pending.resolve(data.result);
120
- }
121
- return;
122
- }
123
- // ── Stream chunk ──────────────────────────────────────────────────────
124
- if (data.type === 'workshop:stream') {
125
- const stream = this._pendingStreams.get(data.id);
126
- if (!stream)
127
- return;
128
- if (data.error) {
129
- stream.ended = true;
130
- stream.error = data.error;
131
- clearTimeout(stream.timer);
132
- this._pendingStreams.delete(data.id);
133
- if (stream.waiter) {
134
- const w = stream.waiter;
135
- stream.waiter = null;
136
- w({ value: undefined, done: true });
137
- }
138
- return;
139
- }
140
- if (data.done) {
141
- stream.ended = true;
142
- clearTimeout(stream.timer);
143
- this._pendingStreams.delete(data.id);
144
- if (stream.waiter) {
145
- const w = stream.waiter;
146
- stream.waiter = null;
147
- w({ value: undefined, done: true });
148
- }
149
- return;
150
- }
151
- if (data.chunk !== undefined) {
152
- // Reset timeout on each chunk — the stream is alive.
153
- clearTimeout(stream.timer);
154
- stream.timer = setTimeout(() => this._streamTimeout(data.id), this._timeoutMs);
155
- if (stream.waiter) {
156
- // Consumer is waiting — deliver directly.
157
- const w = stream.waiter;
158
- stream.waiter = null;
159
- w({ value: data.chunk, done: false });
160
- }
161
- else {
162
- // Consumer hasn't called next() yet — buffer.
163
- stream.buffer.push(data.chunk);
164
- }
165
- }
166
- }
167
- }
168
- _streamTimeout(id) {
169
- const stream = this._pendingStreams.get(id);
170
- if (!stream)
171
- return;
172
- stream.ended = true;
173
- stream.error = 'Stream timed out';
174
- this._pendingStreams.delete(id);
175
- if (stream.waiter) {
176
- const w = stream.waiter;
177
- stream.waiter = null;
178
- w({ value: undefined, done: true });
179
- }
180
- }
181
- _generateId() {
182
- if (typeof crypto !== 'undefined' && crypto.randomUUID) {
183
- return crypto.randomUUID();
184
- }
185
- return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
186
- }
187
- // ── Public API ────────────────────────────────────────────────────────────
188
- /**
189
- * Send a JSON API call through the PostMessage relay.
190
- *
191
- * @param path - API endpoint path (e.g. '/api/hall/rooms/my-room/join').
192
- * @param method - HTTP method.
193
- * @param body - JSON-serialized request body.
194
- * @param headers - Extra headers to forward.
195
- * @returns The parsed JSON response body.
196
- * @throws {Error} If the transport is closed, the request times out, or the
197
- * parent responds with an error.
198
- */
199
- async call(path, method = 'POST', body, headers) {
200
- if (this._closed)
201
- throw new Error('WorkshopTransport is closed');
202
- const id = this._generateId();
203
- return new Promise((resolve, reject) => {
204
- const timer = setTimeout(() => {
205
- this._pendingCalls.delete(id);
206
- reject(new Error(`WorkshopTransport: call to ${path} timed out after ${this._timeoutMs}ms`));
207
- }, this._timeoutMs);
208
- this._pendingCalls.set(id, { resolve, reject, timer });
209
- const message = {
210
- type: 'workshop:request',
211
- id,
212
- path,
213
- method,
214
- body,
215
- headers,
216
- };
217
- this._parentWindow.postMessage(message, this._targetOrigin);
218
- });
219
- }
220
- /**
221
- * Send a streaming API call through the PostMessage relay.
222
- *
223
- * The parent frame reads the HTTP response as SSE chunks and forwards each as
224
- * a `workshop:stream` message. This method yields each chunk as it arrives.
225
- *
226
- * @param path - API endpoint path (e.g. '/api/ai/chat').
227
- * @param method - HTTP method (typically 'POST').
228
- * @param body - JSON-serialized request body.
229
- * @param headers - Extra headers to forward.
230
- * @returns An async iterable of string chunks.
231
- */
232
- stream(path, method = 'POST', body, headers) {
233
- if (this._closed)
234
- throw new Error('WorkshopTransport is closed');
235
- const id = this._generateId();
236
- const pending = {
237
- buffer: [],
238
- ended: false,
239
- waiter: null,
240
- timer: setTimeout(() => this._streamTimeout(id), this._timeoutMs),
241
- };
242
- this._pendingStreams.set(id, pending);
243
- const message = {
244
- type: 'workshop:request',
245
- id,
246
- path,
247
- method,
248
- body,
249
- stream: true,
250
- headers,
251
- };
252
- this._parentWindow.postMessage(message, this._targetOrigin);
253
- // Return an AsyncIterable that pulls from the pending stream state.
254
- return {
255
- [Symbol.asyncIterator]: () => ({
256
- next: () => {
257
- // Check for buffered data first.
258
- if (pending.buffer.length > 0) {
259
- return Promise.resolve({ value: pending.buffer.shift(), done: false });
260
- }
261
- // Stream ended — check for error.
262
- if (pending.ended) {
263
- if (pending.error) {
264
- return Promise.reject(new Error(`WorkshopTransport stream error: ${pending.error}`));
265
- }
266
- return Promise.resolve({ value: undefined, done: true });
267
- }
268
- // Wait for the next chunk.
269
- return new Promise((resolve) => {
270
- pending.waiter = resolve;
271
- });
272
- },
273
- }),
274
- };
275
- }
276
- /**
277
- * Returns `true` if the transport is open and usable.
278
- */
279
- isAlive() {
280
- return !this._closed;
281
- }
282
- /**
283
- * Close the transport, removing the message listener and rejecting all pending calls.
284
- */
285
- close() {
286
- if (this._closed)
287
- return;
288
- this._closed = true;
289
- this._listenerWindow.removeEventListener('message', this._messageListener);
290
- const callError = new Error('WorkshopTransport closed');
291
- for (const [id, pending] of this._pendingCalls) {
292
- clearTimeout(pending.timer);
293
- pending.reject(callError);
294
- this._pendingCalls.delete(id);
295
- }
296
- for (const [id, stream] of this._pendingStreams) {
297
- clearTimeout(stream.timer);
298
- stream.ended = true;
299
- stream.error = 'Transport closed';
300
- this._pendingStreams.delete(id);
301
- if (stream.waiter) {
302
- stream.waiter({ value: undefined, done: true });
303
- }
304
- }
305
- }
306
- }
307
- //# sourceMappingURL=workshop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workshop.js","sourceRoot":"","sources":["../../src/transports/workshop.ts"],"names":[],"mappings":"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"}