@soulcraft/sdk 1.6.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/create-client-sdk.d.ts +16 -2
- package/dist/client/create-client-sdk.d.ts.map +1 -1
- package/dist/client/create-client-sdk.js +2 -7
- package/dist/client/create-client-sdk.js.map +1 -1
- package/dist/client/index.d.ts +48 -37
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +61 -42
- package/dist/client/index.js.map +1 -1
- package/dist/client/namespace-proxy.d.ts +108 -0
- package/dist/client/namespace-proxy.d.ts.map +1 -0
- package/dist/client/namespace-proxy.js +151 -0
- package/dist/client/namespace-proxy.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/app-context/index.d.ts +214 -0
- package/dist/modules/app-context/index.d.ts.map +1 -0
- package/dist/modules/app-context/index.js +569 -0
- package/dist/modules/app-context/index.js.map +1 -0
- package/dist/modules/auth/products.d.ts +208 -0
- package/dist/modules/auth/products.d.ts.map +1 -0
- package/dist/modules/auth/products.js +165 -0
- package/dist/modules/auth/products.js.map +1 -0
- package/dist/namespaces.d.ts +2942 -0
- package/dist/namespaces.d.ts.map +1 -0
- package/dist/namespaces.js +37 -0
- package/dist/namespaces.js.map +1 -0
- package/dist/rpc.d.ts +156 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +26 -0
- package/dist/rpc.js.map +1 -0
- package/dist/server/create-sdk.d.ts.map +1 -1
- package/dist/server/create-sdk.js +3 -13
- package/dist/server/create-sdk.js.map +1 -1
- package/dist/server/handlers/annotations.d.ts +52 -0
- package/dist/server/handlers/annotations.d.ts.map +1 -0
- package/dist/server/handlers/annotations.js +204 -0
- package/dist/server/handlers/annotations.js.map +1 -0
- package/dist/server/handlers/auth.d.ts +53 -0
- package/dist/server/handlers/auth.d.ts.map +1 -0
- package/dist/server/handlers/auth.js +66 -0
- package/dist/server/handlers/auth.js.map +1 -0
- package/dist/server/handlers/certification.d.ts +32 -0
- package/dist/server/handlers/certification.d.ts.map +1 -0
- package/dist/server/handlers/certification.js +253 -0
- package/dist/server/handlers/certification.js.map +1 -0
- package/dist/server/handlers/chat/conversations.d.ts +91 -0
- package/dist/server/handlers/chat/conversations.d.ts.map +1 -0
- package/dist/server/handlers/chat/conversations.js +314 -0
- package/dist/server/handlers/chat/conversations.js.map +1 -0
- package/dist/server/handlers/chat/delegator.d.ts +144 -0
- package/dist/server/handlers/chat/delegator.d.ts.map +1 -0
- package/dist/server/handlers/chat/delegator.js +431 -0
- package/dist/server/handlers/chat/delegator.js.map +1 -0
- package/dist/server/handlers/chat/engine.d.ts +81 -0
- package/dist/server/handlers/chat/engine.d.ts.map +1 -0
- package/dist/server/handlers/chat/engine.js +442 -0
- package/dist/server/handlers/chat/engine.js.map +1 -0
- package/dist/server/handlers/chat/executor.d.ts +65 -0
- package/dist/server/handlers/chat/executor.d.ts.map +1 -0
- package/dist/server/handlers/chat/executor.js +375 -0
- package/dist/server/handlers/chat/executor.js.map +1 -0
- package/dist/server/handlers/chat/index.d.ts +62 -0
- package/dist/server/handlers/chat/index.d.ts.map +1 -0
- package/dist/server/handlers/chat/index.js +182 -0
- package/dist/server/handlers/chat/index.js.map +1 -0
- package/dist/server/handlers/chat/memory.d.ts +91 -0
- package/dist/server/handlers/chat/memory.d.ts.map +1 -0
- package/dist/server/handlers/chat/memory.js +293 -0
- package/dist/server/handlers/chat/memory.js.map +1 -0
- package/dist/server/handlers/chat/models.d.ts +180 -0
- package/dist/server/handlers/chat/models.d.ts.map +1 -0
- package/dist/server/handlers/chat/models.js +304 -0
- package/dist/server/handlers/chat/models.js.map +1 -0
- package/dist/server/handlers/chat/planner.d.ts +116 -0
- package/dist/server/handlers/chat/planner.d.ts.map +1 -0
- package/dist/server/handlers/chat/planner.js +344 -0
- package/dist/server/handlers/chat/planner.js.map +1 -0
- package/dist/server/handlers/chat/types.d.ts +500 -0
- package/dist/server/handlers/chat/types.d.ts.map +1 -0
- package/dist/server/handlers/chat/types.js +11 -0
- package/dist/server/handlers/chat/types.js.map +1 -0
- package/dist/server/handlers/collections.d.ts +67 -0
- package/dist/server/handlers/collections.d.ts.map +1 -0
- package/dist/server/handlers/collections.js +484 -0
- package/dist/server/handlers/collections.js.map +1 -0
- package/dist/server/handlers/commerce.d.ts +106 -0
- package/dist/server/handlers/commerce.d.ts.map +1 -0
- package/dist/server/handlers/commerce.js +62 -0
- package/dist/server/handlers/commerce.js.map +1 -0
- package/dist/server/handlers/config.d.ts +112 -0
- package/dist/server/handlers/config.d.ts.map +1 -0
- package/dist/server/handlers/config.js +122 -0
- package/dist/server/handlers/config.js.map +1 -0
- package/dist/server/handlers/export.d.ts +72 -0
- package/dist/server/handlers/export.d.ts.map +1 -0
- package/dist/server/handlers/export.js +175 -0
- package/dist/server/handlers/export.js.map +1 -0
- package/dist/server/handlers/formats.d.ts +77 -0
- package/dist/server/handlers/formats.d.ts.map +1 -0
- package/dist/server/handlers/formats.js +65 -0
- package/dist/server/handlers/formats.js.map +1 -0
- package/dist/server/handlers/graph.d.ts +31 -0
- package/dist/server/handlers/graph.d.ts.map +1 -0
- package/dist/server/handlers/graph.js +490 -0
- package/dist/server/handlers/graph.js.map +1 -0
- package/dist/server/handlers/import.d.ts +96 -0
- package/dist/server/handlers/import.d.ts.map +1 -0
- package/dist/server/handlers/import.js +108 -0
- package/dist/server/handlers/import.js.map +1 -0
- package/dist/server/handlers/index.d.ts +68 -0
- package/dist/server/handlers/index.d.ts.map +1 -0
- package/dist/server/handlers/index.js +71 -0
- package/dist/server/handlers/index.js.map +1 -0
- package/dist/server/handlers/media.d.ts +76 -0
- package/dist/server/handlers/media.d.ts.map +1 -0
- package/dist/server/handlers/media.js +53 -0
- package/dist/server/handlers/media.js.map +1 -0
- package/dist/server/handlers/project.d.ts +45 -0
- package/dist/server/handlers/project.d.ts.map +1 -0
- package/dist/server/handlers/project.js +181 -0
- package/dist/server/handlers/project.js.map +1 -0
- package/dist/server/handlers/publish.d.ts +102 -0
- package/dist/server/handlers/publish.d.ts.map +1 -0
- package/dist/server/handlers/publish.js +130 -0
- package/dist/server/handlers/publish.js.map +1 -0
- package/dist/server/handlers/pulse.d.ts +39 -0
- package/dist/server/handlers/pulse.d.ts.map +1 -0
- package/dist/server/handlers/pulse.js +78 -0
- package/dist/server/handlers/pulse.js.map +1 -0
- package/dist/server/handlers/realtime.d.ts +55 -0
- package/dist/server/handlers/realtime.d.ts.map +1 -0
- package/dist/server/handlers/realtime.js +49 -0
- package/dist/server/handlers/realtime.js.map +1 -0
- package/dist/server/handlers/search.d.ts +21 -0
- package/dist/server/handlers/search.d.ts.map +1 -0
- package/dist/server/handlers/search.js +237 -0
- package/dist/server/handlers/search.js.map +1 -0
- package/dist/server/handlers/session.d.ts +47 -0
- package/dist/server/handlers/session.d.ts.map +1 -0
- package/dist/server/handlers/session.js +286 -0
- package/dist/server/handlers/session.js.map +1 -0
- package/dist/server/handlers/settings.d.ts +97 -0
- package/dist/server/handlers/settings.d.ts.map +1 -0
- package/dist/server/handlers/settings.js +131 -0
- package/dist/server/handlers/settings.js.map +1 -0
- package/dist/server/handlers/workspace.d.ts +78 -0
- package/dist/server/handlers/workspace.d.ts.map +1 -0
- package/dist/server/handlers/workspace.js +270 -0
- package/dist/server/handlers/workspace.js.map +1 -0
- package/dist/server/hono-router.d.ts +66 -0
- package/dist/server/hono-router.d.ts.map +1 -0
- package/dist/server/hono-router.js +203 -0
- package/dist/server/hono-router.js.map +1 -0
- package/dist/server/index.d.ts +29 -19
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +33 -19
- package/dist/server/index.js.map +1 -1
- package/dist/server/namespace-router.d.ts +204 -0
- package/dist/server/namespace-router.d.ts.map +1 -0
- package/dist/server/namespace-router.js +262 -0
- package/dist/server/namespace-router.js.map +1 -0
- package/dist/transports/http-namespace.d.ts +210 -0
- package/dist/transports/http-namespace.d.ts.map +1 -0
- package/dist/transports/http-namespace.js +514 -0
- package/dist/transports/http-namespace.js.map +1 -0
- package/dist/transports/workshop.d.ts +173 -0
- package/dist/transports/workshop.d.ts.map +1 -0
- package/dist/transports/workshop.js +307 -0
- package/dist/transports/workshop.js.map +1 -0
- package/dist/types.d.ts +65 -67
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -3
- package/dist/types.js.map +1 -1
- package/docs/ADR-004-product-registry.md +108 -0
- package/package.json +1 -1
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module transports/http-namespace
|
|
3
|
+
* @description Namespace-aware HTTP transport — sends RPC calls as JSON POST to `/api/rpc`
|
|
4
|
+
* with the unified `{ ns, method, args }` envelope.
|
|
5
|
+
*
|
|
6
|
+
* This is the Symmetrical SDK 2.0 replacement for {@link HttpTransport}, which
|
|
7
|
+
* only supports the `brainy` namespace via `{ method, args }` at `/api/brainy/rpc`.
|
|
8
|
+
*
|
|
9
|
+
* For streaming responses, the transport reads the response as SSE
|
|
10
|
+
* (`text/event-stream`) and yields each `data:` line as a chunk.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { HttpNamespaceTransport } from '@soulcraft/sdk/client'
|
|
15
|
+
* import { createSoulcraftProxy } from '@soulcraft/sdk/client'
|
|
16
|
+
*
|
|
17
|
+
* const transport = new HttpNamespaceTransport('https://workshop.soulcraft.com', {
|
|
18
|
+
* credentials: true,
|
|
19
|
+
* })
|
|
20
|
+
* const soulcraft = createSoulcraftProxy(transport)
|
|
21
|
+
*
|
|
22
|
+
* const graph = await soulcraft.graph.getData()
|
|
23
|
+
* const results = await soulcraft.brainy.find({ query: 'candles' })
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { SDKDisconnectedError, SDKTimeoutError, SDKAuthError, SDKForbiddenError, SDKRpcError, } from '../modules/brainy/errors.js';
|
|
27
|
+
/**
|
|
28
|
+
* Namespace-aware HTTP transport for Soulcraft SDK 2.0.
|
|
29
|
+
*
|
|
30
|
+
* Posts to `{baseUrl}/api/rpc` with the unified RPC envelope.
|
|
31
|
+
* Supports both JSON responses and SSE streaming.
|
|
32
|
+
*/
|
|
33
|
+
export class HttpNamespaceTransport {
|
|
34
|
+
_rpcUrl;
|
|
35
|
+
_authToken;
|
|
36
|
+
_credentials;
|
|
37
|
+
_timeoutMs;
|
|
38
|
+
_headers;
|
|
39
|
+
_closed = false;
|
|
40
|
+
/**
|
|
41
|
+
* @param baseUrl - Base URL of the Soulcraft server (e.g. `'https://workshop.soulcraft.com'`).
|
|
42
|
+
* @param options - Transport options.
|
|
43
|
+
*/
|
|
44
|
+
constructor(baseUrl, options = {}) {
|
|
45
|
+
this._rpcUrl = `${baseUrl.replace(/\/$/, '')}/api/rpc`;
|
|
46
|
+
this._authToken = options.authToken;
|
|
47
|
+
this._credentials = options.credentials ?? false;
|
|
48
|
+
this._timeoutMs = options.timeoutMs ?? 30_000;
|
|
49
|
+
this._headers = options.headers ?? {};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Dispatch a namespace-aware RPC call over HTTP POST.
|
|
53
|
+
*
|
|
54
|
+
* @param ns - Target namespace.
|
|
55
|
+
* @param method - Method within the namespace.
|
|
56
|
+
* @param args - Positional arguments.
|
|
57
|
+
* @returns The handler's return value.
|
|
58
|
+
*/
|
|
59
|
+
async callNs(ns, method, args) {
|
|
60
|
+
if (this._closed)
|
|
61
|
+
throw new SDKDisconnectedError();
|
|
62
|
+
const abort = new AbortController();
|
|
63
|
+
const timer = setTimeout(() => abort.abort(), this._timeoutMs);
|
|
64
|
+
const headers = {
|
|
65
|
+
'Content-Type': 'application/json',
|
|
66
|
+
...this._headers,
|
|
67
|
+
};
|
|
68
|
+
if (this._authToken)
|
|
69
|
+
headers['Authorization'] = `Bearer ${this._authToken}`;
|
|
70
|
+
const id = _generateId();
|
|
71
|
+
const body = JSON.stringify({ id, ns, method, args });
|
|
72
|
+
let response;
|
|
73
|
+
try {
|
|
74
|
+
response = await fetch(this._rpcUrl, {
|
|
75
|
+
method: 'POST',
|
|
76
|
+
headers,
|
|
77
|
+
body,
|
|
78
|
+
credentials: this._credentials ? 'include' : 'omit',
|
|
79
|
+
signal: abort.signal,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
clearTimeout(timer);
|
|
84
|
+
if (err instanceof DOMException && err.name === 'AbortError') {
|
|
85
|
+
throw new SDKTimeoutError(`${ns}.${method}`);
|
|
86
|
+
}
|
|
87
|
+
throw new SDKDisconnectedError(err);
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
clearTimeout(timer);
|
|
91
|
+
}
|
|
92
|
+
if (response.status === 401)
|
|
93
|
+
throw new SDKAuthError();
|
|
94
|
+
if (response.status === 403)
|
|
95
|
+
throw new SDKForbiddenError();
|
|
96
|
+
if (!response.ok) {
|
|
97
|
+
throw new SDKRpcError(`HTTP_${response.status}`, `SDK: server returned HTTP ${response.status} for ${ns}.${method}`);
|
|
98
|
+
}
|
|
99
|
+
const json = (await response.json());
|
|
100
|
+
if (json.error) {
|
|
101
|
+
throw new SDKRpcError(json.error.code, json.error.message);
|
|
102
|
+
}
|
|
103
|
+
return json.result;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Dispatch a streaming namespace-aware RPC call.
|
|
107
|
+
*
|
|
108
|
+
* Sends the request with `stream: true` and reads the response as SSE.
|
|
109
|
+
*
|
|
110
|
+
* @param ns - Target namespace.
|
|
111
|
+
* @param method - Method within the namespace.
|
|
112
|
+
* @param args - Positional arguments.
|
|
113
|
+
* @returns An async iterable of response chunks.
|
|
114
|
+
*/
|
|
115
|
+
callNsStream(ns, method, args) {
|
|
116
|
+
if (this._closed)
|
|
117
|
+
throw new SDKDisconnectedError();
|
|
118
|
+
const transport = this;
|
|
119
|
+
const id = _generateId();
|
|
120
|
+
return {
|
|
121
|
+
[Symbol.asyncIterator]() {
|
|
122
|
+
let reader = null;
|
|
123
|
+
let buffer = '';
|
|
124
|
+
let done = false;
|
|
125
|
+
let startPromise = null;
|
|
126
|
+
async function start() {
|
|
127
|
+
const headers = {
|
|
128
|
+
'Content-Type': 'application/json',
|
|
129
|
+
'Accept': 'text/event-stream',
|
|
130
|
+
...transport._headers,
|
|
131
|
+
};
|
|
132
|
+
if (transport._authToken)
|
|
133
|
+
headers['Authorization'] = `Bearer ${transport._authToken}`;
|
|
134
|
+
const response = await fetch(transport._rpcUrl, {
|
|
135
|
+
method: 'POST',
|
|
136
|
+
headers,
|
|
137
|
+
body: JSON.stringify({ id, ns, method, args, stream: true }),
|
|
138
|
+
credentials: transport._credentials ? 'include' : 'omit',
|
|
139
|
+
});
|
|
140
|
+
if (response.status === 401)
|
|
141
|
+
throw new SDKAuthError();
|
|
142
|
+
if (response.status === 403)
|
|
143
|
+
throw new SDKForbiddenError();
|
|
144
|
+
if (!response.ok) {
|
|
145
|
+
throw new SDKRpcError(`HTTP_${response.status}`, `SDK: server returned HTTP ${response.status} for ${ns}.${method} (stream)`);
|
|
146
|
+
}
|
|
147
|
+
if (!response.body) {
|
|
148
|
+
throw new SDKRpcError('NO_BODY', 'Streaming response has no body');
|
|
149
|
+
}
|
|
150
|
+
reader = response.body.getReader();
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
async next() {
|
|
154
|
+
if (done)
|
|
155
|
+
return { value: undefined, done: true };
|
|
156
|
+
// Lazily start the request on first next() call.
|
|
157
|
+
if (!startPromise) {
|
|
158
|
+
startPromise = start();
|
|
159
|
+
}
|
|
160
|
+
await startPromise;
|
|
161
|
+
const decoder = new TextDecoder();
|
|
162
|
+
while (true) {
|
|
163
|
+
// Check buffer for a complete SSE line.
|
|
164
|
+
const lineEnd = buffer.indexOf('\n');
|
|
165
|
+
if (lineEnd !== -1) {
|
|
166
|
+
const line = buffer.slice(0, lineEnd).trim();
|
|
167
|
+
buffer = buffer.slice(lineEnd + 1);
|
|
168
|
+
if (line.startsWith('data: ')) {
|
|
169
|
+
const data = line.slice(6);
|
|
170
|
+
// Check for [DONE] sentinel.
|
|
171
|
+
if (data === '[DONE]') {
|
|
172
|
+
done = true;
|
|
173
|
+
return { value: undefined, done: true };
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const parsed = JSON.parse(data);
|
|
177
|
+
// Check for stream error or done signal in the parsed data.
|
|
178
|
+
if (parsed.done === true) {
|
|
179
|
+
done = true;
|
|
180
|
+
return { value: undefined, done: true };
|
|
181
|
+
}
|
|
182
|
+
if (parsed.error) {
|
|
183
|
+
done = true;
|
|
184
|
+
throw new SDKRpcError('STREAM_ERROR', parsed.error);
|
|
185
|
+
}
|
|
186
|
+
return { value: parsed.chunk ?? parsed, done: false };
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
if (err instanceof SDKRpcError)
|
|
190
|
+
throw err;
|
|
191
|
+
// Not valid JSON — yield the raw string.
|
|
192
|
+
return { value: data, done: false };
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Skip non-data lines (comments, event names, etc.)
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
// Need more data from the stream.
|
|
199
|
+
if (!reader) {
|
|
200
|
+
done = true;
|
|
201
|
+
return { value: undefined, done: true };
|
|
202
|
+
}
|
|
203
|
+
const { value, done: readerDone } = await reader.read();
|
|
204
|
+
if (readerDone) {
|
|
205
|
+
done = true;
|
|
206
|
+
// Process any remaining buffer.
|
|
207
|
+
if (buffer.trim()) {
|
|
208
|
+
const remaining = buffer.trim();
|
|
209
|
+
buffer = '';
|
|
210
|
+
if (remaining.startsWith('data: ')) {
|
|
211
|
+
const data = remaining.slice(6);
|
|
212
|
+
if (data !== '[DONE]') {
|
|
213
|
+
try {
|
|
214
|
+
const parsed = JSON.parse(data);
|
|
215
|
+
return { value: parsed.chunk ?? parsed, done: false };
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return { value: data, done: false };
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return { value: undefined, done: true };
|
|
224
|
+
}
|
|
225
|
+
buffer += decoder.decode(value, { stream: true });
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/** Returns `true` when the transport is open. */
|
|
233
|
+
isAlive() {
|
|
234
|
+
return !this._closed;
|
|
235
|
+
}
|
|
236
|
+
/** Close the transport. Further calls throw `SDKDisconnectedError`. */
|
|
237
|
+
async close() {
|
|
238
|
+
this._closed = true;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
242
|
+
// PostMessage namespace transport
|
|
243
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
244
|
+
/**
|
|
245
|
+
* Namespace-aware PostMessage transport for kit apps in WebContainer iframes.
|
|
246
|
+
*
|
|
247
|
+
* Uses the unified `soulcraft:request` / `soulcraft:response` / `soulcraft:stream`
|
|
248
|
+
* wire protocol instead of the legacy `brainy:request` + `workshop:request` split.
|
|
249
|
+
*/
|
|
250
|
+
export class PostMessageNamespaceTransport {
|
|
251
|
+
_targetOrigin;
|
|
252
|
+
_timeoutMs;
|
|
253
|
+
_pending = new Map();
|
|
254
|
+
_pendingStreams = new Map();
|
|
255
|
+
_closed = false;
|
|
256
|
+
_messageListener;
|
|
257
|
+
_listenerWindow;
|
|
258
|
+
_parentWindow;
|
|
259
|
+
/**
|
|
260
|
+
* @param targetOrigin - The parent frame's origin for security.
|
|
261
|
+
* @param timeoutMs - Per-call timeout. Default: 60 000.
|
|
262
|
+
* @param listenerWindow - Window for message events. Defaults to `window`.
|
|
263
|
+
* @param parentWindow - Window to post messages to. Defaults to `window.parent`.
|
|
264
|
+
*/
|
|
265
|
+
constructor(targetOrigin, timeoutMs = 60_000, listenerWindow, parentWindow) {
|
|
266
|
+
this._targetOrigin = targetOrigin;
|
|
267
|
+
this._timeoutMs = timeoutMs;
|
|
268
|
+
this._listenerWindow = listenerWindow ?? globalThis;
|
|
269
|
+
this._parentWindow = parentWindow ?? globalThis.parent ?? this._listenerWindow;
|
|
270
|
+
this._messageListener = (event) => this._handleMessage(event);
|
|
271
|
+
this._listenerWindow.addEventListener('message', this._messageListener);
|
|
272
|
+
}
|
|
273
|
+
_handleMessage(event) {
|
|
274
|
+
const data = event.data;
|
|
275
|
+
if (!data || typeof data.type !== 'string')
|
|
276
|
+
return;
|
|
277
|
+
// ── JSON response ─────────────────────────────────────────────────
|
|
278
|
+
if (data.type === 'soulcraft:response') {
|
|
279
|
+
const pending = this._pending.get(data.id);
|
|
280
|
+
if (!pending)
|
|
281
|
+
return;
|
|
282
|
+
clearTimeout(pending.timer);
|
|
283
|
+
this._pending.delete(data.id);
|
|
284
|
+
if (data.error) {
|
|
285
|
+
pending.reject(new SDKRpcError(data.error.code, data.error.message));
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
pending.resolve(data.result);
|
|
289
|
+
}
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
// ── Stream chunk ─────────────────────────────────────────────────
|
|
293
|
+
if (data.type === 'soulcraft:stream') {
|
|
294
|
+
const stream = this._pendingStreams.get(data.id);
|
|
295
|
+
if (!stream)
|
|
296
|
+
return;
|
|
297
|
+
if (data.error) {
|
|
298
|
+
stream.ended = true;
|
|
299
|
+
stream.error = data.error;
|
|
300
|
+
clearTimeout(stream.timer);
|
|
301
|
+
this._pendingStreams.delete(data.id);
|
|
302
|
+
if (stream.waiter) {
|
|
303
|
+
const w = stream.waiter;
|
|
304
|
+
stream.waiter = null;
|
|
305
|
+
w({ value: undefined, done: true });
|
|
306
|
+
}
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
if (data.done) {
|
|
310
|
+
stream.ended = true;
|
|
311
|
+
clearTimeout(stream.timer);
|
|
312
|
+
this._pendingStreams.delete(data.id);
|
|
313
|
+
if (stream.waiter) {
|
|
314
|
+
const w = stream.waiter;
|
|
315
|
+
stream.waiter = null;
|
|
316
|
+
w({ value: undefined, done: true });
|
|
317
|
+
}
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
if (data.chunk !== undefined) {
|
|
321
|
+
clearTimeout(stream.timer);
|
|
322
|
+
stream.timer = setTimeout(() => this._streamTimeout(data.id), this._timeoutMs);
|
|
323
|
+
if (stream.waiter) {
|
|
324
|
+
const w = stream.waiter;
|
|
325
|
+
stream.waiter = null;
|
|
326
|
+
w({ value: data.chunk, done: false });
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
stream.buffer.push(data.chunk);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
_streamTimeout(id) {
|
|
335
|
+
const stream = this._pendingStreams.get(id);
|
|
336
|
+
if (!stream)
|
|
337
|
+
return;
|
|
338
|
+
stream.ended = true;
|
|
339
|
+
stream.error = 'Stream timed out';
|
|
340
|
+
this._pendingStreams.delete(id);
|
|
341
|
+
if (stream.waiter) {
|
|
342
|
+
const w = stream.waiter;
|
|
343
|
+
stream.waiter = null;
|
|
344
|
+
w({ value: undefined, done: true });
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Dispatch a namespace-aware RPC call via PostMessage.
|
|
349
|
+
*
|
|
350
|
+
* Posts a `soulcraft:request` message to the parent window and waits for a
|
|
351
|
+
* matching `soulcraft:response` message keyed by request ID.
|
|
352
|
+
*
|
|
353
|
+
* @param ns - Target namespace (e.g. `'brainy'`, `'chat'`).
|
|
354
|
+
* @param method - Method within the namespace.
|
|
355
|
+
* @param args - Positional arguments.
|
|
356
|
+
* @returns The handler's return value from the parent frame.
|
|
357
|
+
* @throws {SDKDisconnectedError} If the transport is closed.
|
|
358
|
+
* @throws {SDKTimeoutError} If no response arrives within `timeoutMs`.
|
|
359
|
+
* @throws {SDKRpcError} If the parent frame returns an error.
|
|
360
|
+
*
|
|
361
|
+
* @example
|
|
362
|
+
* ```typescript
|
|
363
|
+
* const graph = await transport.callNs('graph', 'getData', [])
|
|
364
|
+
* ```
|
|
365
|
+
*/
|
|
366
|
+
async callNs(ns, method, args) {
|
|
367
|
+
if (this._closed)
|
|
368
|
+
throw new SDKDisconnectedError();
|
|
369
|
+
const id = _generateId();
|
|
370
|
+
return new Promise((resolve, reject) => {
|
|
371
|
+
const timer = setTimeout(() => {
|
|
372
|
+
this._pending.delete(id);
|
|
373
|
+
reject(new SDKTimeoutError(`${ns}.${method}`));
|
|
374
|
+
}, this._timeoutMs);
|
|
375
|
+
this._pending.set(id, { resolve, reject, timer });
|
|
376
|
+
this._parentWindow.postMessage({ type: 'soulcraft:request', id, ns, method, args }, this._targetOrigin);
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Dispatch a streaming namespace-aware RPC call via PostMessage.
|
|
381
|
+
*
|
|
382
|
+
* Posts a `soulcraft:request` message with `stream: true`. The parent frame
|
|
383
|
+
* responds with a series of `soulcraft:stream` messages, each containing a
|
|
384
|
+
* `chunk`, `done`, or `error` field. Chunks are buffered and yielded through
|
|
385
|
+
* the returned async iterable.
|
|
386
|
+
*
|
|
387
|
+
* @param ns - Target namespace.
|
|
388
|
+
* @param method - Method within the namespace.
|
|
389
|
+
* @param args - Positional arguments.
|
|
390
|
+
* @returns An async iterable that yields response chunks.
|
|
391
|
+
* @throws {SDKDisconnectedError} If the transport is closed.
|
|
392
|
+
* @throws {SDKRpcError} If the stream receives an error frame.
|
|
393
|
+
*
|
|
394
|
+
* @example
|
|
395
|
+
* ```typescript
|
|
396
|
+
* for await (const chunk of transport.callNsStream('chat', 'sendStreaming', [msg])) {
|
|
397
|
+
* process.stdout.write(chunk.text)
|
|
398
|
+
* }
|
|
399
|
+
* ```
|
|
400
|
+
*/
|
|
401
|
+
callNsStream(ns, method, args) {
|
|
402
|
+
if (this._closed)
|
|
403
|
+
throw new SDKDisconnectedError();
|
|
404
|
+
const id = _generateId();
|
|
405
|
+
const pending = {
|
|
406
|
+
buffer: [],
|
|
407
|
+
ended: false,
|
|
408
|
+
error: undefined,
|
|
409
|
+
waiter: null,
|
|
410
|
+
timer: setTimeout(() => this._streamTimeout(id), this._timeoutMs),
|
|
411
|
+
};
|
|
412
|
+
this._pendingStreams.set(id, pending);
|
|
413
|
+
this._parentWindow.postMessage({ type: 'soulcraft:request', id, ns, method, args, stream: true }, this._targetOrigin);
|
|
414
|
+
return {
|
|
415
|
+
[Symbol.asyncIterator]: () => ({
|
|
416
|
+
next: () => {
|
|
417
|
+
if (pending.buffer.length > 0) {
|
|
418
|
+
return Promise.resolve({ value: pending.buffer.shift(), done: false });
|
|
419
|
+
}
|
|
420
|
+
if (pending.ended) {
|
|
421
|
+
if (pending.error) {
|
|
422
|
+
return Promise.reject(new SDKRpcError('STREAM_ERROR', pending.error));
|
|
423
|
+
}
|
|
424
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
425
|
+
}
|
|
426
|
+
return new Promise((resolve) => {
|
|
427
|
+
pending.waiter = resolve;
|
|
428
|
+
});
|
|
429
|
+
},
|
|
430
|
+
}),
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Returns `true` when the transport has an active connection.
|
|
435
|
+
*
|
|
436
|
+
* Once {@link close} is called, this returns `false` permanently.
|
|
437
|
+
*/
|
|
438
|
+
isAlive() {
|
|
439
|
+
return !this._closed;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Close the transport and clean up all pending calls.
|
|
443
|
+
*
|
|
444
|
+
* Removes the global `message` event listener, rejects all pending call
|
|
445
|
+
* promises with {@link SDKDisconnectedError}, and terminates all active
|
|
446
|
+
* streams. Further calls to {@link callNs} or {@link callNsStream} will
|
|
447
|
+
* throw immediately.
|
|
448
|
+
*/
|
|
449
|
+
async close() {
|
|
450
|
+
if (this._closed)
|
|
451
|
+
return;
|
|
452
|
+
this._closed = true;
|
|
453
|
+
this._listenerWindow.removeEventListener('message', this._messageListener);
|
|
454
|
+
const error = new SDKDisconnectedError();
|
|
455
|
+
for (const [id, pending] of this._pending) {
|
|
456
|
+
clearTimeout(pending.timer);
|
|
457
|
+
pending.reject(error);
|
|
458
|
+
this._pending.delete(id);
|
|
459
|
+
}
|
|
460
|
+
for (const [id, stream] of this._pendingStreams) {
|
|
461
|
+
clearTimeout(stream.timer);
|
|
462
|
+
stream.ended = true;
|
|
463
|
+
stream.error = 'Transport closed';
|
|
464
|
+
this._pendingStreams.delete(id);
|
|
465
|
+
if (stream.waiter) {
|
|
466
|
+
stream.waiter({ value: undefined, done: true });
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
472
|
+
// Helpers
|
|
473
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
474
|
+
/**
|
|
475
|
+
* Generates a unique request ID.
|
|
476
|
+
*
|
|
477
|
+
* @returns A UUID or timestamp-based fallback.
|
|
478
|
+
*/
|
|
479
|
+
function _generateId() {
|
|
480
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
481
|
+
return crypto.randomUUID();
|
|
482
|
+
}
|
|
483
|
+
return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
484
|
+
}
|
|
485
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
486
|
+
// SDK 2.0 canonical aliases
|
|
487
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
488
|
+
/**
|
|
489
|
+
* @description SDK 2.0 canonical HTTP transport. Alias for {@link HttpNamespaceTransport}.
|
|
490
|
+
*
|
|
491
|
+
* Sends RPC calls as JSON POST to `/api/rpc` with the unified `{ ns, method, args }` envelope.
|
|
492
|
+
* Supports streaming via SSE.
|
|
493
|
+
*
|
|
494
|
+
* @example
|
|
495
|
+
* ```typescript
|
|
496
|
+
* import { HttpTransport, createSoulcraftProxy } from '@soulcraft/sdk/client'
|
|
497
|
+
* const sdk = createSoulcraftProxy(new HttpTransport('/api'))
|
|
498
|
+
* ```
|
|
499
|
+
*/
|
|
500
|
+
export { HttpNamespaceTransport as HttpRpcTransport };
|
|
501
|
+
/**
|
|
502
|
+
* @description SDK 2.0 canonical PostMessage transport. Alias for {@link PostMessageNamespaceTransport}.
|
|
503
|
+
*
|
|
504
|
+
* Uses the unified `soulcraft:request` / `soulcraft:response` / `soulcraft:stream`
|
|
505
|
+
* wire protocol for kit apps in WebContainer iframes.
|
|
506
|
+
*
|
|
507
|
+
* @example
|
|
508
|
+
* ```typescript
|
|
509
|
+
* import { PostMessageRpcTransport, createSoulcraftProxy } from '@soulcraft/sdk/client'
|
|
510
|
+
* const sdk = createSoulcraftProxy(new PostMessageRpcTransport(parentOrigin))
|
|
511
|
+
* ```
|
|
512
|
+
*/
|
|
513
|
+
export { PostMessageNamespaceTransport as PostMessageRpcTransport };
|
|
514
|
+
//# sourceMappingURL=http-namespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-namespace.js","sourceRoot":"","sources":["../../src/transports/http-namespace.ts"],"names":[],"mappings":"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"}
|