@soulcraft/sdk 2.1.0 → 2.2.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/server/index.d.ts +3 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/namespace-router.d.ts +21 -2
- package/dist/server/namespace-router.d.ts.map +1 -1
- package/dist/server/namespace-router.js +26 -13
- package/dist/server/namespace-router.js.map +1 -1
- package/dist/server/ws-handler.d.ts +167 -0
- package/dist/server/ws-handler.d.ts.map +1 -0
- package/dist/server/ws-handler.js +243 -0
- package/dist/server/ws-handler.js.map +1 -0
- package/dist/transports/ws.d.ts +29 -1
- package/dist/transports/ws.d.ts.map +1 -1
- package/dist/transports/ws.js +129 -3
- package/dist/transports/ws.js.map +1 -1
- package/package.json +1 -1
package/dist/server/index.d.ts
CHANGED
|
@@ -50,7 +50,9 @@ export { createCapabilityToken, verifyCapabilityToken } from '../modules/brainy/
|
|
|
50
50
|
export type { CreateCapabilityTokenOptions, CapabilityTokenClaims } from '../modules/brainy/auth.js';
|
|
51
51
|
export { LocalTransport } from '../transports/local.js';
|
|
52
52
|
export { createNamespaceRouter } from './namespace-router.js';
|
|
53
|
-
export type { NamespaceRouterConfig, NamespaceRouter, NamespaceProvider, NamespaceProviders, RequestContext, UserContext, HandlerContext, DispatchResult, } from './namespace-router.js';
|
|
53
|
+
export type { NamespaceRouterConfig, NamespaceRouter, NamespaceProvider, NamespaceProviders, RequestContext, UserContext, HandlerContext, PreAuthenticatedContext, DispatchResult, } from './namespace-router.js';
|
|
54
|
+
export { createNamespaceWsHandler } from './ws-handler.js';
|
|
55
|
+
export type { NamespaceWsHandlerConfig, NamespaceWsHandler, WsSession, } from './ws-handler.js';
|
|
54
56
|
export { createSoulcraftRouter } from './hono-router.js';
|
|
55
57
|
export type { SoulcraftRouterConfig } from './hono-router.js';
|
|
56
58
|
export { createAnnotationsHandler, createAuthHandler, createChatHandler, createCertificationHandler, createCollectionsHandler, createCommerceHandler, createConfigHandler, createExportHandler, createFormatsHandler, createGraphHandler, createImportHandler, createMediaHandler, createProjectHandler, createPublishHandler, createPulseHandler, createRealtimeHandler, createSearchHandler, createSessionHandler, createSettingsHandler, createWorkspaceHandler, } from './handlers/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.js
CHANGED
|
@@ -48,6 +48,8 @@ export { createCapabilityToken, verifyCapabilityToken } from '../modules/brainy/
|
|
|
48
48
|
export { LocalTransport } from '../transports/local.js';
|
|
49
49
|
// ── Namespace router ─────────────────────────────────────────────────────────
|
|
50
50
|
export { createNamespaceRouter } from './namespace-router.js';
|
|
51
|
+
// ── Namespace WebSocket handler ─────────────────────────────────────────────
|
|
52
|
+
export { createNamespaceWsHandler } from './ws-handler.js';
|
|
51
53
|
// ── Hono router factory ─────────────────────────────────────────────────────
|
|
52
54
|
export { createSoulcraftRouter } from './hono-router.js';
|
|
53
55
|
// ── Namespace handler factories ──────────────────────────────────────────────
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAM3B,iFAAiF;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAE/D,gFAAgF;AAChF,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,UAAU,EACV,eAAe,GAChB,MAAM,oBAAoB,CAAA;AA4C3B,iFAAiF;AACjF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,GACd,MAAM,+BAA+B,CAAA;AAYtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAM/E,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kCAAkC,CAAA;AAEzC,gFAAgF;AAChF,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAElC,gFAAgF;AAChF,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,6BAA6B,CAAA;AAMpC,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAK7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAExF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,gFAAgF;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAM3B,iFAAiF;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAE/D,gFAAgF;AAChF,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,UAAU,EACV,eAAe,GAChB,MAAM,oBAAoB,CAAA;AA4C3B,iFAAiF;AACjF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,GACd,MAAM,+BAA+B,CAAA;AAYtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAM/E,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kCAAkC,CAAA;AAEzC,gFAAgF;AAChF,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAElC,gFAAgF;AAChF,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,6BAA6B,CAAA;AAMpC,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAK7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAExF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,gFAAgF;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAa7D,+EAA+E;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAO1D,+EAA+E;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAGxD,gFAAgF;AAChF,iFAAiF;AACjF,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,qBAAqB,CAAA;AA0D5B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,YAAY,EACZ,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,GACZ,MAAM,qBAAqB,CAAA"}
|
|
@@ -160,6 +160,21 @@ export type DispatchResult = {
|
|
|
160
160
|
id: string;
|
|
161
161
|
iterable: AsyncIterable<unknown>;
|
|
162
162
|
};
|
|
163
|
+
/**
|
|
164
|
+
* Pre-authenticated context for transports (like WebSocket) that authenticate
|
|
165
|
+
* once at connection time, not per-message.
|
|
166
|
+
*
|
|
167
|
+
* When passed to `dispatch()`, the router skips the `authenticate()` step and
|
|
168
|
+
* uses the provided user directly.
|
|
169
|
+
*/
|
|
170
|
+
export interface PreAuthenticatedContext {
|
|
171
|
+
/** The already-verified user. */
|
|
172
|
+
user: UserContext;
|
|
173
|
+
/** Workspace ID for this request. */
|
|
174
|
+
workspaceId: string;
|
|
175
|
+
/** The raw HTTP request (may be synthetic for WebSocket). */
|
|
176
|
+
request: Request;
|
|
177
|
+
}
|
|
163
178
|
/**
|
|
164
179
|
* The namespace router returned by {@link createNamespaceRouter}.
|
|
165
180
|
*/
|
|
@@ -170,11 +185,15 @@ export interface NamespaceRouter {
|
|
|
170
185
|
* Handles authentication, authorization, namespace resolution, and error
|
|
171
186
|
* wrapping. Returns either a single response or a stream.
|
|
172
187
|
*
|
|
188
|
+
* When `requestOrCtx` is a `PreAuthenticatedContext`, the router skips
|
|
189
|
+
* authentication and uses the provided user directly. This is the path
|
|
190
|
+
* used by the WebSocket handler, which authenticates once at upgrade time.
|
|
191
|
+
*
|
|
173
192
|
* @param rpc - The parsed RPC request envelope.
|
|
174
|
-
* @param
|
|
193
|
+
* @param requestOrCtx - Raw HTTP request OR pre-authenticated context.
|
|
175
194
|
* @returns A response or stream result.
|
|
176
195
|
*/
|
|
177
|
-
dispatch(rpc: SoulcraftRPC,
|
|
196
|
+
dispatch(rpc: SoulcraftRPC, requestOrCtx: Request | PreAuthenticatedContext): Promise<DispatchResult>;
|
|
178
197
|
}
|
|
179
198
|
/**
|
|
180
199
|
* Creates a namespace-aware RPC router that dispatches to Brainy or provider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace-router.d.ts","sourceRoot":"","sources":["../../src/server/namespace-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EAErB,MAAM,WAAW,CAAA;AAMlB;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAA;IAChB,uEAAuE;IACvE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;IACxB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,oEAAoE;IACpE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAMD;;;;;;;GAOG;AAEH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAA;AAErF;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,IAAI,EAAE,WAAW,CAAA;IACjB,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC,CAAA;AAM9E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;OAQG;IACH,YAAY,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAEtD;;;;;;;;OAQG;IACH,YAAY,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAElE;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,CACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EAAE,EACf,IAAI,EAAE,WAAW,KACd,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;IAE/B;;;OAGG;IACH,SAAS,EAAE,kBAAkB,CAAA;IAE7B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;CAChC;AAMD,gDAAgD;AAChD,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,oBAAoB,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;CAAE,CAAA;AAMpE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B
|
|
1
|
+
{"version":3,"file":"namespace-router.d.ts","sourceRoot":"","sources":["../../src/server/namespace-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,23 +82,36 @@ function isBrainyNamespace(ns) {
|
|
|
82
82
|
export function createNamespaceRouter(config) {
|
|
83
83
|
const { resolveBrain, authenticate, authorize, providers, blockedBrainyMethods = [], } = config;
|
|
84
84
|
return {
|
|
85
|
-
async dispatch(rpc,
|
|
85
|
+
async dispatch(rpc, requestOrCtx) {
|
|
86
86
|
const { id, ns, method, args, stream } = rpc;
|
|
87
|
+
// Determine if caller provided a pre-authenticated context or a raw Request.
|
|
88
|
+
const isPreAuth = !(requestOrCtx instanceof Request) && 'user' in requestOrCtx;
|
|
89
|
+
const request = isPreAuth
|
|
90
|
+
? requestOrCtx.request
|
|
91
|
+
: requestOrCtx;
|
|
87
92
|
// ── Extract workspace ID ──────────────────────────────────────────
|
|
88
|
-
const workspaceId =
|
|
93
|
+
const workspaceId = isPreAuth
|
|
94
|
+
? requestOrCtx.workspaceId
|
|
95
|
+
: _extractWorkspaceId(request);
|
|
89
96
|
// ── Build request context ──────────────────────────────────────────
|
|
90
|
-
const ctx = {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
const ctx = {
|
|
98
|
+
request,
|
|
99
|
+
user: isPreAuth ? requestOrCtx.user : null,
|
|
100
|
+
workspaceId,
|
|
101
|
+
};
|
|
102
|
+
// ── Authenticate (skipped for pre-authenticated contexts) ─────────
|
|
103
|
+
if (!isPreAuth) {
|
|
104
|
+
try {
|
|
105
|
+
const user = await authenticate(ctx);
|
|
106
|
+
if (!user) {
|
|
107
|
+
return _errorResponse(id, 401, 'UNAUTHORIZED', 'Authentication required');
|
|
108
|
+
}
|
|
109
|
+
ctx.user = user;
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
console.error('[SDK/router] authenticate threw:', err);
|
|
113
|
+
return _errorResponse(id, 401, 'AUTH_ERROR', 'Authentication failed');
|
|
96
114
|
}
|
|
97
|
-
ctx.user = user;
|
|
98
|
-
}
|
|
99
|
-
catch (err) {
|
|
100
|
-
console.error('[SDK/router] authenticate threw:', err);
|
|
101
|
-
return _errorResponse(id, 401, 'AUTH_ERROR', 'Authentication failed');
|
|
102
115
|
}
|
|
103
116
|
// ── Authorize ─────────────────────────────────────────────────────
|
|
104
117
|
if (authorize) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace-router.js","sourceRoot":"","sources":["../../src/server/namespace-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"namespace-router.js","sourceRoot":"","sources":["../../src/server/namespace-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module server/ws-handler
|
|
3
|
+
* @description Namespace-aware WebSocket handler for the Soulcraft SDK.
|
|
4
|
+
*
|
|
5
|
+
* Provides `createNamespaceWsHandler()` — a server-side handler that processes
|
|
6
|
+
* WebSocket messages through the same namespace router used by HTTP RPC, plus
|
|
7
|
+
* Y.js collaborative editing and real-time change push.
|
|
8
|
+
*
|
|
9
|
+
* ## Wire protocol
|
|
10
|
+
*
|
|
11
|
+
* All frames are binary MessagePack. The protocol supports four message categories:
|
|
12
|
+
*
|
|
13
|
+
* 1. **Namespace RPC** — `{ id, ns, method, args }` dispatched to the namespace router
|
|
14
|
+
* 2. **Streaming RPC** — `{ id, ns, method, args, stream: true }` returns chunked responses
|
|
15
|
+
* 3. **Y.js collab** — `{ type: 'y-sync'|'y-update'|'y-awareness', ... }` for CRDT editing
|
|
16
|
+
* 4. **Change push** — `{ type: 'change', ... }` broadcast from server on data mutations
|
|
17
|
+
*
|
|
18
|
+
* ## Auth
|
|
19
|
+
*
|
|
20
|
+
* Authentication happens once during `handleUpgrade()`. The resulting `WsSession`
|
|
21
|
+
* carries the authenticated user context. Subsequent messages are dispatched with
|
|
22
|
+
* pre-authenticated context — no per-message auth overhead.
|
|
23
|
+
*
|
|
24
|
+
* ## Relationship to namespace router
|
|
25
|
+
*
|
|
26
|
+
* The WS handler is a thin transport adapter. All RPC dispatch logic lives in
|
|
27
|
+
* `namespace-router.ts`. This handler adds: token extraction, Y.js routing,
|
|
28
|
+
* peer tracking, streaming frame serialization, and change broadcasting.
|
|
29
|
+
*
|
|
30
|
+
* @example Bun server wiring
|
|
31
|
+
* ```typescript
|
|
32
|
+
* import { createNamespaceWsHandler, YDocManager } from '@soulcraft/sdk/server'
|
|
33
|
+
*
|
|
34
|
+
* const handler = createNamespaceWsHandler({
|
|
35
|
+
* router: routerConfig,
|
|
36
|
+
* ydocManager: new YDocManager(),
|
|
37
|
+
* })
|
|
38
|
+
*
|
|
39
|
+
* Bun.serve({
|
|
40
|
+
* async fetch(req, server) {
|
|
41
|
+
* if (new URL(req.url).pathname === '/api/brainy/ws') {
|
|
42
|
+
* const session = await handler.handleUpgrade(req)
|
|
43
|
+
* if (!session) return new Response('Unauthorized', { status: 401 })
|
|
44
|
+
* server.upgrade(req, { data: session })
|
|
45
|
+
* return undefined
|
|
46
|
+
* }
|
|
47
|
+
* },
|
|
48
|
+
* websocket: {
|
|
49
|
+
* open(ws) { ws.send(encode({ type: 'ready', scope: ws.data.scope })) },
|
|
50
|
+
* async message(ws, data) {
|
|
51
|
+
* await handler.handleMessage(ws.data, data, (msg) => ws.send(msg))
|
|
52
|
+
* },
|
|
53
|
+
* async close(ws) { await handler.handleClose(ws.data) },
|
|
54
|
+
* },
|
|
55
|
+
* })
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
import type { Brainy } from '@soulcraft/brainy';
|
|
59
|
+
import type { BrainyChangeEvent } from '../modules/brainy/events.js';
|
|
60
|
+
import type { NamespaceRouterConfig, UserContext } from './namespace-router.js';
|
|
61
|
+
import { YDocManager } from '../modules/brainy/ydoc-manager.js';
|
|
62
|
+
/**
|
|
63
|
+
* Configuration for {@link createNamespaceWsHandler}.
|
|
64
|
+
*
|
|
65
|
+
* Reuses the same `NamespaceRouterConfig` shape as `createSoulcraftRouter()`,
|
|
66
|
+
* so products can share a single config object between HTTP and WebSocket handlers.
|
|
67
|
+
*/
|
|
68
|
+
export interface NamespaceWsHandlerConfig {
|
|
69
|
+
/**
|
|
70
|
+
* Shared router config — `authenticate`, `resolveBrain`, `providers`, `authorize`.
|
|
71
|
+
*
|
|
72
|
+
* The `authenticate` callback receives a synthetic `RequestContext` built from
|
|
73
|
+
* the WebSocket upgrade request. The `resolveBrain` callback receives the same
|
|
74
|
+
* context with the authenticated user populated.
|
|
75
|
+
*/
|
|
76
|
+
router: NamespaceRouterConfig;
|
|
77
|
+
/**
|
|
78
|
+
* Optional Y.js document manager for real-time collaborative editing.
|
|
79
|
+
*
|
|
80
|
+
* When provided, the handler routes `y-sync`, `y-update`, and `y-awareness`
|
|
81
|
+
* messages through the `YDocManager`. Y.js update broadcasts are sent to all
|
|
82
|
+
* other peers via the `broadcast` callback on the session.
|
|
83
|
+
*/
|
|
84
|
+
ydocManager?: YDocManager;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Per-connection session state stored on the WebSocket's data field.
|
|
88
|
+
*
|
|
89
|
+
* Created by `handleUpgrade()` and passed to all subsequent message/close handlers.
|
|
90
|
+
*/
|
|
91
|
+
export interface WsSession {
|
|
92
|
+
/** The authenticated user context. */
|
|
93
|
+
user: UserContext;
|
|
94
|
+
/** Workspace ID extracted from the upgrade request. */
|
|
95
|
+
workspaceId: string;
|
|
96
|
+
/** The resolved Brainy instance for this session's scope. */
|
|
97
|
+
brain: Brainy;
|
|
98
|
+
/** The raw scope string from `?scope=` (preserved for broadcast key). */
|
|
99
|
+
scope: string;
|
|
100
|
+
/**
|
|
101
|
+
* Unique peer ID for this connection. Used by `YDocManager` to track per-file
|
|
102
|
+
* peer counts so it knows when the last peer has disconnected.
|
|
103
|
+
*/
|
|
104
|
+
peerId: string;
|
|
105
|
+
/**
|
|
106
|
+
* Broadcast callback set by the product server after upgrade.
|
|
107
|
+
*
|
|
108
|
+
* Called by the handler to fan out `y-update` and `y-awareness` messages to all
|
|
109
|
+
* other peers connected to this scope. The product server owns the connection map
|
|
110
|
+
* and provides this callback so the SDK does not manage WebSocket handles directly.
|
|
111
|
+
*
|
|
112
|
+
* @param msg - Encoded MessagePack frame to send to all OTHER peers in this scope.
|
|
113
|
+
* @param excludePeerId - The peer that sent the message — must be excluded.
|
|
114
|
+
*/
|
|
115
|
+
broadcast: (msg: Uint8Array, excludePeerId: string) => void;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The object returned by {@link createNamespaceWsHandler}.
|
|
119
|
+
*/
|
|
120
|
+
export interface NamespaceWsHandler {
|
|
121
|
+
/**
|
|
122
|
+
* Handles a WebSocket upgrade request.
|
|
123
|
+
*
|
|
124
|
+
* Extracts the token and scope, authenticates via the router's `authenticate`
|
|
125
|
+
* callback, and resolves the Brainy instance. Returns `null` on auth failure.
|
|
126
|
+
*
|
|
127
|
+
* @param request - The HTTP upgrade request.
|
|
128
|
+
* @returns Session state on success, or `null` on auth failure.
|
|
129
|
+
*/
|
|
130
|
+
handleUpgrade(request: Request): Promise<WsSession | null>;
|
|
131
|
+
/**
|
|
132
|
+
* Processes an incoming WebSocket message.
|
|
133
|
+
*
|
|
134
|
+
* Routes to either the namespace RPC dispatcher or the Y.js handler based
|
|
135
|
+
* on the decoded message shape.
|
|
136
|
+
*
|
|
137
|
+
* @param session - Session from `handleUpgrade()`.
|
|
138
|
+
* @param data - Raw binary MessagePack frame.
|
|
139
|
+
* @param send - Callback to send a binary response to THIS client only.
|
|
140
|
+
*/
|
|
141
|
+
handleMessage(session: WsSession, data: ArrayBuffer | Uint8Array, send: (msg: Uint8Array) => void): Promise<void>;
|
|
142
|
+
/**
|
|
143
|
+
* Called when a peer's WebSocket connection closes.
|
|
144
|
+
*
|
|
145
|
+
* Notifies the `YDocManager` so it can flush and discard Y.Docs with no
|
|
146
|
+
* active peers.
|
|
147
|
+
*
|
|
148
|
+
* @param session - The session of the disconnecting peer.
|
|
149
|
+
*/
|
|
150
|
+
handleClose(session: WsSession): Promise<void>;
|
|
151
|
+
/**
|
|
152
|
+
* Broadcasts a Brainy change event to a connected client.
|
|
153
|
+
*
|
|
154
|
+
* @param event - The change event to broadcast.
|
|
155
|
+
* @param send - Callback to send the encoded event to the target client.
|
|
156
|
+
*/
|
|
157
|
+
broadcastChange(event: BrainyChangeEvent, send: (msg: Uint8Array) => void): void;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Creates a namespace-aware WebSocket handler that dispatches RPC through the
|
|
161
|
+
* same namespace router used by HTTP, plus Y.js collaborative editing.
|
|
162
|
+
*
|
|
163
|
+
* @param config - Handler configuration.
|
|
164
|
+
* @returns A {@link NamespaceWsHandler} instance.
|
|
165
|
+
*/
|
|
166
|
+
export declare function createNamespaceWsHandler(config: NamespaceWsHandlerConfig): NamespaceWsHandler;
|
|
167
|
+
//# sourceMappingURL=ws-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-handler.d.ts","sourceRoot":"","sources":["../../src/server/ws-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,KAAK,EACV,qBAAqB,EAErB,WAAW,EAEZ,MAAM,uBAAuB,CAAA;AAI9B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAM/D;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;OAMG;IACH,MAAM,EAAE,qBAAqB,CAAA;IAE7B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAMD;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,sCAAsC;IACtC,IAAI,EAAE,WAAW,CAAA;IACjB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAA;IACnB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;;;;;;;OASG;IACH,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5D;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;OAQG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IAE1D;;;;;;;;;OASG;IACH,aAAa,CACX,OAAO,EAAE,SAAS,EAClB,IAAI,EAAE,WAAW,GAAG,UAAU,EAC9B,IAAI,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhB;;;;;;;OAOG;IACH,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9C;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAA;CACjF;AAiCD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,CA0I7F"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module server/ws-handler
|
|
3
|
+
* @description Namespace-aware WebSocket handler for the Soulcraft SDK.
|
|
4
|
+
*
|
|
5
|
+
* Provides `createNamespaceWsHandler()` — a server-side handler that processes
|
|
6
|
+
* WebSocket messages through the same namespace router used by HTTP RPC, plus
|
|
7
|
+
* Y.js collaborative editing and real-time change push.
|
|
8
|
+
*
|
|
9
|
+
* ## Wire protocol
|
|
10
|
+
*
|
|
11
|
+
* All frames are binary MessagePack. The protocol supports four message categories:
|
|
12
|
+
*
|
|
13
|
+
* 1. **Namespace RPC** — `{ id, ns, method, args }` dispatched to the namespace router
|
|
14
|
+
* 2. **Streaming RPC** — `{ id, ns, method, args, stream: true }` returns chunked responses
|
|
15
|
+
* 3. **Y.js collab** — `{ type: 'y-sync'|'y-update'|'y-awareness', ... }` for CRDT editing
|
|
16
|
+
* 4. **Change push** — `{ type: 'change', ... }` broadcast from server on data mutations
|
|
17
|
+
*
|
|
18
|
+
* ## Auth
|
|
19
|
+
*
|
|
20
|
+
* Authentication happens once during `handleUpgrade()`. The resulting `WsSession`
|
|
21
|
+
* carries the authenticated user context. Subsequent messages are dispatched with
|
|
22
|
+
* pre-authenticated context — no per-message auth overhead.
|
|
23
|
+
*
|
|
24
|
+
* ## Relationship to namespace router
|
|
25
|
+
*
|
|
26
|
+
* The WS handler is a thin transport adapter. All RPC dispatch logic lives in
|
|
27
|
+
* `namespace-router.ts`. This handler adds: token extraction, Y.js routing,
|
|
28
|
+
* peer tracking, streaming frame serialization, and change broadcasting.
|
|
29
|
+
*
|
|
30
|
+
* @example Bun server wiring
|
|
31
|
+
* ```typescript
|
|
32
|
+
* import { createNamespaceWsHandler, YDocManager } from '@soulcraft/sdk/server'
|
|
33
|
+
*
|
|
34
|
+
* const handler = createNamespaceWsHandler({
|
|
35
|
+
* router: routerConfig,
|
|
36
|
+
* ydocManager: new YDocManager(),
|
|
37
|
+
* })
|
|
38
|
+
*
|
|
39
|
+
* Bun.serve({
|
|
40
|
+
* async fetch(req, server) {
|
|
41
|
+
* if (new URL(req.url).pathname === '/api/brainy/ws') {
|
|
42
|
+
* const session = await handler.handleUpgrade(req)
|
|
43
|
+
* if (!session) return new Response('Unauthorized', { status: 401 })
|
|
44
|
+
* server.upgrade(req, { data: session })
|
|
45
|
+
* return undefined
|
|
46
|
+
* }
|
|
47
|
+
* },
|
|
48
|
+
* websocket: {
|
|
49
|
+
* open(ws) { ws.send(encode({ type: 'ready', scope: ws.data.scope })) },
|
|
50
|
+
* async message(ws, data) {
|
|
51
|
+
* await handler.handleMessage(ws.data, data, (msg) => ws.send(msg))
|
|
52
|
+
* },
|
|
53
|
+
* async close(ws) { await handler.handleClose(ws.data) },
|
|
54
|
+
* },
|
|
55
|
+
* })
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
import { encode, decode } from '@msgpack/msgpack';
|
|
59
|
+
import { createNamespaceRouter } from './namespace-router.js';
|
|
60
|
+
import { YDocManager } from '../modules/brainy/ydoc-manager.js';
|
|
61
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
62
|
+
// Factory
|
|
63
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
64
|
+
/**
|
|
65
|
+
* Creates a namespace-aware WebSocket handler that dispatches RPC through the
|
|
66
|
+
* same namespace router used by HTTP, plus Y.js collaborative editing.
|
|
67
|
+
*
|
|
68
|
+
* @param config - Handler configuration.
|
|
69
|
+
* @returns A {@link NamespaceWsHandler} instance.
|
|
70
|
+
*/
|
|
71
|
+
export function createNamespaceWsHandler(config) {
|
|
72
|
+
const { router: routerConfig, ydocManager } = config;
|
|
73
|
+
const router = createNamespaceRouter(routerConfig);
|
|
74
|
+
return {
|
|
75
|
+
async handleUpgrade(request) {
|
|
76
|
+
const url = new URL(request.url);
|
|
77
|
+
const scope = url.searchParams.get('scope') ?? '';
|
|
78
|
+
// Extract auth token — Bun/Node uses Authorization header; browsers use ?token= query.
|
|
79
|
+
const authHeader = request.headers.get('authorization') ?? '';
|
|
80
|
+
const token = authHeader.startsWith('Bearer ')
|
|
81
|
+
? authHeader.slice(7)
|
|
82
|
+
: (url.searchParams.get('token') ?? '');
|
|
83
|
+
// Extract workspace ID from scope or header.
|
|
84
|
+
const workspaceId = request.headers.get('x-workspace-id') ??
|
|
85
|
+
url.searchParams.get('workspaceId') ??
|
|
86
|
+
scope;
|
|
87
|
+
// Build a synthetic RequestContext for the router's authenticate callback.
|
|
88
|
+
const ctx = {
|
|
89
|
+
request,
|
|
90
|
+
user: null,
|
|
91
|
+
workspaceId,
|
|
92
|
+
};
|
|
93
|
+
// Authenticate using the router's callback.
|
|
94
|
+
let user;
|
|
95
|
+
try {
|
|
96
|
+
user = await routerConfig.authenticate(ctx);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
console.error('[SDK/ws] authenticate threw during upgrade:', err);
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
if (!user)
|
|
103
|
+
return null;
|
|
104
|
+
// Resolve brain with the authenticated context.
|
|
105
|
+
ctx.user = user;
|
|
106
|
+
let brain;
|
|
107
|
+
try {
|
|
108
|
+
brain = await routerConfig.resolveBrain(ctx);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
console.error('[SDK/ws] resolveBrain threw during upgrade:', err);
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
const peerId = crypto.randomUUID();
|
|
115
|
+
return {
|
|
116
|
+
user,
|
|
117
|
+
workspaceId,
|
|
118
|
+
brain,
|
|
119
|
+
scope,
|
|
120
|
+
peerId,
|
|
121
|
+
broadcast: () => { }, // No-op until product server sets it in websocket.open()
|
|
122
|
+
};
|
|
123
|
+
},
|
|
124
|
+
async handleMessage(session, data, send) {
|
|
125
|
+
let decoded;
|
|
126
|
+
try {
|
|
127
|
+
decoded = decode(data instanceof ArrayBuffer ? new Uint8Array(data) : data);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return; // Malformed frame — silently ignore
|
|
131
|
+
}
|
|
132
|
+
if (!decoded || typeof decoded !== 'object')
|
|
133
|
+
return;
|
|
134
|
+
const msg = decoded;
|
|
135
|
+
// ── Y.js messages ──────────────────────────────────────────────────
|
|
136
|
+
if (typeof msg['type'] === 'string' && msg['type'].startsWith('y-')) {
|
|
137
|
+
await _handleYjsMessage(msg, session, send, ydocManager);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// ── Namespace RPC ──────────────────────────────────────────────────
|
|
141
|
+
const id = msg['id'];
|
|
142
|
+
const ns = msg['ns'];
|
|
143
|
+
const method = msg['method'];
|
|
144
|
+
const args = msg['args'];
|
|
145
|
+
if (typeof id !== 'string' || typeof method !== 'string' || !Array.isArray(args)) {
|
|
146
|
+
return; // Not a valid RPC frame
|
|
147
|
+
}
|
|
148
|
+
// Default namespace to 'brainy' for backward compat with SDK 1.x clients
|
|
149
|
+
// that send { id, method, args } without an ns field.
|
|
150
|
+
const resolvedNs = typeof ns === 'string' ? ns : 'brainy';
|
|
151
|
+
const stream = msg['stream'] === true;
|
|
152
|
+
const rpc = { id, ns: resolvedNs, method, args, stream };
|
|
153
|
+
// Dispatch with pre-authenticated context — skips re-authentication.
|
|
154
|
+
// The user was already verified in handleUpgrade().
|
|
155
|
+
const preAuthCtx = {
|
|
156
|
+
user: session.user,
|
|
157
|
+
workspaceId: session.workspaceId,
|
|
158
|
+
request: new Request('http://localhost/api/rpc'),
|
|
159
|
+
};
|
|
160
|
+
const result = await router.dispatch(rpc, preAuthCtx);
|
|
161
|
+
if (result.type === 'response') {
|
|
162
|
+
send(encode(result.response));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// Streaming response — iterate the async iterable and send frames.
|
|
166
|
+
if (result.type === 'stream') {
|
|
167
|
+
try {
|
|
168
|
+
for await (const chunk of result.iterable) {
|
|
169
|
+
const frame = { id, chunk };
|
|
170
|
+
send(encode(frame));
|
|
171
|
+
}
|
|
172
|
+
send(encode({ id, done: true }));
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
176
|
+
send(encode({ id, error: message }));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
async handleClose(session) {
|
|
181
|
+
if (!ydocManager)
|
|
182
|
+
return;
|
|
183
|
+
await ydocManager.onPeerDisconnectAll(session.scope, session.peerId);
|
|
184
|
+
},
|
|
185
|
+
broadcastChange(event, send) {
|
|
186
|
+
send(encode(event));
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
191
|
+
// Y.js message handler
|
|
192
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
193
|
+
/**
|
|
194
|
+
* Routes a Y.js protocol message to the appropriate `YDocManager` method.
|
|
195
|
+
*
|
|
196
|
+
* ## Sync protocol (standard two-phase handshake):
|
|
197
|
+
* 1. Client sends `y-sync` with its state vector.
|
|
198
|
+
* 2. Server replies with `y-sync` diff (updates client is missing).
|
|
199
|
+
* 3. Client applies diff → sends `y-update` for pending local ops.
|
|
200
|
+
* 4. Steady state: all ops are `y-update` frames, broadcast to all other peers.
|
|
201
|
+
*
|
|
202
|
+
* ## Awareness:
|
|
203
|
+
* `y-awareness` frames carry cursor positions, user name/color. NOT persisted —
|
|
204
|
+
* forwarded to all other peers then discarded.
|
|
205
|
+
*
|
|
206
|
+
* @param msg - Decoded Y.js message frame.
|
|
207
|
+
* @param session - The WebSocket session for the sending peer.
|
|
208
|
+
* @param send - Sends a response to THIS peer only.
|
|
209
|
+
* @param ydocManager - The server-side Y.Doc pool (may be undefined if collab disabled).
|
|
210
|
+
*/
|
|
211
|
+
async function _handleYjsMessage(msg, session, send, ydocManager) {
|
|
212
|
+
if (!ydocManager)
|
|
213
|
+
return;
|
|
214
|
+
switch (msg.type) {
|
|
215
|
+
case 'y-sync': {
|
|
216
|
+
const clientSv = msg.stateVector instanceof Uint8Array
|
|
217
|
+
? msg.stateVector
|
|
218
|
+
: new Uint8Array(Object.values(msg.stateVector));
|
|
219
|
+
const diff = await ydocManager.getDiff(session.scope, msg.filePath, session.brain, clientSv);
|
|
220
|
+
send(encode({ type: 'y-sync', filePath: msg.filePath, diff }));
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
case 'y-update': {
|
|
224
|
+
const update = msg.update instanceof Uint8Array
|
|
225
|
+
? msg.update
|
|
226
|
+
: new Uint8Array(Object.values(msg.update));
|
|
227
|
+
await ydocManager.getOrCreate(session.scope, msg.filePath, session.brain, session.peerId);
|
|
228
|
+
await ydocManager.applyUpdate(session.scope, msg.filePath, update);
|
|
229
|
+
const frame = encode({ type: 'y-update', filePath: msg.filePath, update });
|
|
230
|
+
session.broadcast(frame, session.peerId);
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
case 'y-awareness': {
|
|
234
|
+
const update = msg.update instanceof Uint8Array
|
|
235
|
+
? msg.update
|
|
236
|
+
: new Uint8Array(Object.values(msg.update));
|
|
237
|
+
const frame = encode({ type: 'y-awareness', update });
|
|
238
|
+
session.broadcast(frame, session.peerId);
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=ws-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-handler.js","sourceRoot":"","sources":["../../src/server/ws-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/transports/ws.d.ts
CHANGED
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
54
|
import type { SDKTransport } from './transport.js';
|
|
55
|
+
import type { NamespaceTransport } from '../client/namespace-proxy.js';
|
|
55
56
|
import type { BrainyChangeEvent } from '../modules/brainy/events.js';
|
|
56
57
|
/**
|
|
57
58
|
* Transport that communicates via MessagePack-encoded WebSocket RPC.
|
|
@@ -63,7 +64,7 @@ import type { BrainyChangeEvent } from '../modules/brainy/events.js';
|
|
|
63
64
|
* `createSDK` client factory calls this automatically when `sdk.connect()` is
|
|
64
65
|
* invoked.
|
|
65
66
|
*/
|
|
66
|
-
export declare class WsTransport implements SDKTransport {
|
|
67
|
+
export declare class WsTransport implements SDKTransport, NamespaceTransport {
|
|
67
68
|
private ws;
|
|
68
69
|
private readonly wsUrl;
|
|
69
70
|
private readonly authToken;
|
|
@@ -71,6 +72,7 @@ export declare class WsTransport implements SDKTransport {
|
|
|
71
72
|
private readonly timeoutMs;
|
|
72
73
|
private readonly maxReconnectAttempts;
|
|
73
74
|
private readonly pending;
|
|
75
|
+
private readonly pendingStreams;
|
|
74
76
|
private nextId;
|
|
75
77
|
private connectionState;
|
|
76
78
|
private readonly changeListeners;
|
|
@@ -99,6 +101,9 @@ export declare class WsTransport implements SDKTransport {
|
|
|
99
101
|
/**
|
|
100
102
|
* Sends a MessagePack-encoded RPC request and awaits the response.
|
|
101
103
|
*
|
|
104
|
+
* Delegates to `callNs('brainy', method, args)` for backward compatibility
|
|
105
|
+
* with SDK 1.x callers that use the flat Brainy method namespace.
|
|
106
|
+
*
|
|
102
107
|
* @param method - Dot-separated Brainy method name (e.g. `'vfs.readdir'`).
|
|
103
108
|
* @param args - Positional arguments to forward.
|
|
104
109
|
* @returns Whatever the server's Brainy method returns.
|
|
@@ -107,6 +112,29 @@ export declare class WsTransport implements SDKTransport {
|
|
|
107
112
|
* @throws {@link SDKRpcError} if the server reports an error.
|
|
108
113
|
*/
|
|
109
114
|
call(method: string, args: unknown[]): Promise<unknown>;
|
|
115
|
+
/**
|
|
116
|
+
* Sends a namespace-aware RPC request and awaits the response.
|
|
117
|
+
*
|
|
118
|
+
* @param ns - Target namespace (e.g. `'chat'`, `'graph'`, `'brainy.vfs'`).
|
|
119
|
+
* @param method - Method within the namespace (e.g. `'send'`, `'getData'`).
|
|
120
|
+
* @param args - Positional arguments.
|
|
121
|
+
* @returns The handler's return value.
|
|
122
|
+
* @throws {@link SDKDisconnectedError} if not connected.
|
|
123
|
+
* @throws {@link SDKTimeoutError} after `timeoutMs` ms.
|
|
124
|
+
* @throws {@link SDKRpcError} if the server reports an error.
|
|
125
|
+
*/
|
|
126
|
+
callNs(ns: string, method: string, args: unknown[]): Promise<unknown>;
|
|
127
|
+
/**
|
|
128
|
+
* Sends a streaming namespace-aware RPC request and returns an async iterable
|
|
129
|
+
* that yields chunks as they arrive from the server.
|
|
130
|
+
*
|
|
131
|
+
* @param ns - Target namespace.
|
|
132
|
+
* @param method - Method within the namespace.
|
|
133
|
+
* @param args - Positional arguments.
|
|
134
|
+
* @returns An async iterable of response chunks.
|
|
135
|
+
* @throws {@link SDKDisconnectedError} if not connected.
|
|
136
|
+
*/
|
|
137
|
+
callNsStream(ns: string, method: string, args: unknown[]): AsyncIterable<unknown>;
|
|
110
138
|
/**
|
|
111
139
|
* Registers a listener for real-time change push events from the server.
|
|
112
140
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/transports/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/transports/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AA2EpE;;;;;;;;;GASG;AACH,qBAAa,WAAY,YAAW,YAAY,EAAE,kBAAkB;IAClE,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAClE,OAAO,CAAC,MAAM,CAAI;IAElB,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgD;IAEhF,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,cAAc,CAA6C;IAEnE;;;;;;OAMG;gBAED,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,SAAS,EAClB,oBAAoB,SAAK;IAW3B;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAO/B;;;;;;;;;;;;OAYG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAM7D;;;;;;;;;;OAUG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB3E;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC;IA+EjF;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI;IAI1D;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI;IAK3D;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B;;;;;;;;;OASG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B9B,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,cAAc;IAyEtB,OAAO,CAAC,YAAY;IA2DpB,OAAO,CAAC,iBAAiB;CAa1B"}
|
package/dist/transports/ws.js
CHANGED
|
@@ -74,6 +74,7 @@ export class WsTransport {
|
|
|
74
74
|
timeoutMs;
|
|
75
75
|
maxReconnectAttempts;
|
|
76
76
|
pending = new Map();
|
|
77
|
+
pendingStreams = new Map();
|
|
77
78
|
nextId = 0;
|
|
78
79
|
connectionState = 'disconnected';
|
|
79
80
|
changeListeners = [];
|
|
@@ -114,6 +115,9 @@ export class WsTransport {
|
|
|
114
115
|
/**
|
|
115
116
|
* Sends a MessagePack-encoded RPC request and awaits the response.
|
|
116
117
|
*
|
|
118
|
+
* Delegates to `callNs('brainy', method, args)` for backward compatibility
|
|
119
|
+
* with SDK 1.x callers that use the flat Brainy method namespace.
|
|
120
|
+
*
|
|
117
121
|
* @param method - Dot-separated Brainy method name (e.g. `'vfs.readdir'`).
|
|
118
122
|
* @param args - Positional arguments to forward.
|
|
119
123
|
* @returns Whatever the server's Brainy method returns.
|
|
@@ -122,6 +126,21 @@ export class WsTransport {
|
|
|
122
126
|
* @throws {@link SDKRpcError} if the server reports an error.
|
|
123
127
|
*/
|
|
124
128
|
async call(method, args) {
|
|
129
|
+
return this.callNs('brainy', method, args);
|
|
130
|
+
}
|
|
131
|
+
// ── NamespaceTransport interface ────────────────────────────────────────
|
|
132
|
+
/**
|
|
133
|
+
* Sends a namespace-aware RPC request and awaits the response.
|
|
134
|
+
*
|
|
135
|
+
* @param ns - Target namespace (e.g. `'chat'`, `'graph'`, `'brainy.vfs'`).
|
|
136
|
+
* @param method - Method within the namespace (e.g. `'send'`, `'getData'`).
|
|
137
|
+
* @param args - Positional arguments.
|
|
138
|
+
* @returns The handler's return value.
|
|
139
|
+
* @throws {@link SDKDisconnectedError} if not connected.
|
|
140
|
+
* @throws {@link SDKTimeoutError} after `timeoutMs` ms.
|
|
141
|
+
* @throws {@link SDKRpcError} if the server reports an error.
|
|
142
|
+
*/
|
|
143
|
+
async callNs(ns, method, args) {
|
|
125
144
|
if (this.connectionState !== 'connected') {
|
|
126
145
|
throw new SDKDisconnectedError();
|
|
127
146
|
}
|
|
@@ -129,13 +148,96 @@ export class WsTransport {
|
|
|
129
148
|
const id = String(this.nextId++);
|
|
130
149
|
const timeoutId = setTimeout(() => {
|
|
131
150
|
this.pending.delete(id);
|
|
132
|
-
reject(new SDKTimeoutError(method));
|
|
151
|
+
reject(new SDKTimeoutError(`${ns}.${method}`));
|
|
133
152
|
}, this.timeoutMs);
|
|
134
153
|
this.pending.set(id, { resolve, reject, timeoutId });
|
|
135
|
-
const request = { id, method, args };
|
|
154
|
+
const request = { id, ns, method, args };
|
|
136
155
|
this.ws.send(encode(request));
|
|
137
156
|
});
|
|
138
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Sends a streaming namespace-aware RPC request and returns an async iterable
|
|
160
|
+
* that yields chunks as they arrive from the server.
|
|
161
|
+
*
|
|
162
|
+
* @param ns - Target namespace.
|
|
163
|
+
* @param method - Method within the namespace.
|
|
164
|
+
* @param args - Positional arguments.
|
|
165
|
+
* @returns An async iterable of response chunks.
|
|
166
|
+
* @throws {@link SDKDisconnectedError} if not connected.
|
|
167
|
+
*/
|
|
168
|
+
callNsStream(ns, method, args) {
|
|
169
|
+
if (this.connectionState !== 'connected') {
|
|
170
|
+
throw new SDKDisconnectedError();
|
|
171
|
+
}
|
|
172
|
+
const id = String(this.nextId++);
|
|
173
|
+
// Create a pull-based async iterable backed by a push buffer.
|
|
174
|
+
const buffer = [];
|
|
175
|
+
let done = false;
|
|
176
|
+
let streamError = null;
|
|
177
|
+
let waiting = null;
|
|
178
|
+
const timeoutId = setTimeout(() => {
|
|
179
|
+
this.pendingStreams.delete(id);
|
|
180
|
+
streamError = `Timeout waiting for stream ${ns}.${method}`;
|
|
181
|
+
if (waiting) {
|
|
182
|
+
waiting.resolve({ value: undefined, done: true });
|
|
183
|
+
waiting = null;
|
|
184
|
+
}
|
|
185
|
+
}, this.timeoutMs);
|
|
186
|
+
this.pendingStreams.set(id, {
|
|
187
|
+
push(chunk) {
|
|
188
|
+
if (waiting) {
|
|
189
|
+
const w = waiting;
|
|
190
|
+
waiting = null;
|
|
191
|
+
w.resolve({ value: chunk, done: false });
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
buffer.push(chunk);
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
end() {
|
|
198
|
+
clearTimeout(timeoutId);
|
|
199
|
+
done = true;
|
|
200
|
+
if (waiting) {
|
|
201
|
+
const w = waiting;
|
|
202
|
+
waiting = null;
|
|
203
|
+
w.resolve({ value: undefined, done: true });
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
error(msg) {
|
|
207
|
+
clearTimeout(timeoutId);
|
|
208
|
+
streamError = msg;
|
|
209
|
+
done = true;
|
|
210
|
+
if (waiting) {
|
|
211
|
+
const w = waiting;
|
|
212
|
+
waiting = null;
|
|
213
|
+
w.resolve({ value: undefined, done: true });
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
timeoutId,
|
|
217
|
+
});
|
|
218
|
+
const request = { id, ns, method, args, stream: true };
|
|
219
|
+
this.ws.send(encode(request));
|
|
220
|
+
return {
|
|
221
|
+
[Symbol.asyncIterator]() {
|
|
222
|
+
return {
|
|
223
|
+
next() {
|
|
224
|
+
if (streamError) {
|
|
225
|
+
return Promise.reject(new SDKRpcError('STREAM_ERROR', streamError));
|
|
226
|
+
}
|
|
227
|
+
if (buffer.length > 0) {
|
|
228
|
+
return Promise.resolve({ value: buffer.shift(), done: false });
|
|
229
|
+
}
|
|
230
|
+
if (done) {
|
|
231
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
232
|
+
}
|
|
233
|
+
return new Promise((resolve) => {
|
|
234
|
+
waiting = { resolve };
|
|
235
|
+
});
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
139
241
|
/**
|
|
140
242
|
* Registers a listener for real-time change push events from the server.
|
|
141
243
|
*
|
|
@@ -273,8 +375,27 @@ export class WsTransport {
|
|
|
273
375
|
this.connectReject = null;
|
|
274
376
|
return;
|
|
275
377
|
}
|
|
276
|
-
// RPC response (has an 'id' field)
|
|
378
|
+
// RPC response or stream frame (has an 'id' field)
|
|
277
379
|
if (typeof m['id'] === 'string') {
|
|
380
|
+
const msgId = m['id'];
|
|
381
|
+
// Check if this is a streaming frame routed to pendingStreams.
|
|
382
|
+
const stream = this.pendingStreams.get(msgId);
|
|
383
|
+
if (stream) {
|
|
384
|
+
const frame = m;
|
|
385
|
+
if (frame.error) {
|
|
386
|
+
this.pendingStreams.delete(msgId);
|
|
387
|
+
stream.error(frame.error);
|
|
388
|
+
}
|
|
389
|
+
else if (frame.done) {
|
|
390
|
+
this.pendingStreams.delete(msgId);
|
|
391
|
+
stream.end();
|
|
392
|
+
}
|
|
393
|
+
else if ('chunk' in frame) {
|
|
394
|
+
stream.push(frame.chunk);
|
|
395
|
+
}
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
// Non-streaming RPC response.
|
|
278
399
|
const response = m;
|
|
279
400
|
const pending = this.pending.get(response.id);
|
|
280
401
|
if (!pending)
|
|
@@ -360,6 +481,11 @@ export class WsTransport {
|
|
|
360
481
|
pending.reject(error);
|
|
361
482
|
}
|
|
362
483
|
this.pending.clear();
|
|
484
|
+
for (const [, stream] of this.pendingStreams) {
|
|
485
|
+
clearTimeout(stream.timeoutId);
|
|
486
|
+
stream.error(error.message);
|
|
487
|
+
}
|
|
488
|
+
this.pendingStreams.clear();
|
|
363
489
|
}
|
|
364
490
|
}
|
|
365
491
|
//# sourceMappingURL=ws.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/transports/ws.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/transports/ws.ts"],"names":[],"mappings":"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"}
|