@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.
- package/dist/client/index.d.ts +5 -38
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +5 -47
- package/dist/client/index.js.map +1 -1
- package/dist/client/namespace-proxy.d.ts +3 -4
- package/dist/client/namespace-proxy.d.ts.map +1 -1
- package/dist/client/namespace-proxy.js +3 -4
- package/dist/client/namespace-proxy.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/modules/hall/browser.d.ts +83 -27
- package/dist/modules/hall/browser.d.ts.map +1 -1
- package/dist/modules/hall/browser.js +238 -49
- package/dist/modules/hall/browser.js.map +1 -1
- package/dist/modules/hall/media.d.ts +164 -0
- package/dist/modules/hall/media.d.ts.map +1 -0
- package/dist/modules/hall/media.js +182 -0
- package/dist/modules/hall/media.js.map +1 -0
- package/dist/modules/hall/server.d.ts +83 -6
- package/dist/modules/hall/server.d.ts.map +1 -1
- package/dist/modules/hall/server.js +206 -9
- package/dist/modules/hall/server.js.map +1 -1
- package/dist/modules/hall/types.d.ts +548 -25
- package/dist/modules/hall/types.d.ts.map +1 -1
- package/dist/modules/hall/types.js +12 -7
- package/dist/modules/hall/types.js.map +1 -1
- package/dist/server/hall-handlers.d.ts +40 -12
- package/dist/server/hall-handlers.d.ts.map +1 -1
- package/dist/server/hall-handlers.js +40 -12
- package/dist/server/hall-handlers.js.map +1 -1
- package/dist/server/hono-router.d.ts +2 -9
- package/dist/server/hono-router.d.ts.map +1 -1
- package/dist/server/hono-router.js +2 -46
- package/dist/server/hono-router.js.map +1 -1
- package/dist/server/index.d.ts +4 -19
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +10 -29
- package/dist/server/index.js.map +1 -1
- package/dist/types.d.ts +2 -41
- package/dist/types.d.ts.map +1 -1
- package/docs/ADR-005-hall-integration.md +449 -0
- package/package.json +1 -1
- package/dist/client/create-client-sdk.d.ts +0 -113
- package/dist/client/create-client-sdk.d.ts.map +0 -1
- package/dist/client/create-client-sdk.js +0 -169
- package/dist/client/create-client-sdk.js.map +0 -1
- package/dist/modules/app-context/index.d.ts +0 -214
- package/dist/modules/app-context/index.d.ts.map +0 -1
- package/dist/modules/app-context/index.js +0 -569
- package/dist/modules/app-context/index.js.map +0 -1
- package/dist/modules/billing/firestore-provider.d.ts +0 -60
- package/dist/modules/billing/firestore-provider.d.ts.map +0 -1
- package/dist/modules/billing/firestore-provider.js +0 -315
- package/dist/modules/billing/firestore-provider.js.map +0 -1
- package/dist/modules/brainy/proxy.d.ts +0 -48
- package/dist/modules/brainy/proxy.d.ts.map +0 -1
- package/dist/modules/brainy/proxy.js +0 -95
- package/dist/modules/brainy/proxy.js.map +0 -1
- package/dist/server/create-sdk.d.ts +0 -74
- package/dist/server/create-sdk.d.ts.map +0 -1
- package/dist/server/create-sdk.js +0 -104
- package/dist/server/create-sdk.js.map +0 -1
- package/dist/server/from-license.d.ts +0 -252
- package/dist/server/from-license.d.ts.map +0 -1
- package/dist/server/from-license.js +0 -349
- package/dist/server/from-license.js.map +0 -1
- package/dist/server/handlers.d.ts +0 -312
- package/dist/server/handlers.d.ts.map +0 -1
- package/dist/server/handlers.js +0 -376
- package/dist/server/handlers.js.map +0 -1
- package/dist/server/postmessage-handler.d.ts +0 -152
- package/dist/server/postmessage-handler.d.ts.map +0 -1
- package/dist/server/postmessage-handler.js +0 -138
- package/dist/server/postmessage-handler.js.map +0 -1
- package/dist/transports/http.d.ts +0 -86
- package/dist/transports/http.d.ts.map +0 -1
- package/dist/transports/http.js +0 -137
- package/dist/transports/http.js.map +0 -1
- package/dist/transports/postmessage.d.ts +0 -159
- package/dist/transports/postmessage.d.ts.map +0 -1
- package/dist/transports/postmessage.js +0 -207
- package/dist/transports/postmessage.js.map +0 -1
- package/dist/transports/workshop.d.ts +0 -173
- package/dist/transports/workshop.d.ts.map +0 -1
- package/dist/transports/workshop.js +0 -307
- 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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"}
|