@soulcraft/sdk 2.5.0 → 2.6.1
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 +22 -14
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +22 -15
- package/dist/server/index.js.map +1 -1
- package/dist/server/rpc-handler.d.ts +79 -0
- package/dist/server/rpc-handler.d.ts.map +1 -0
- package/dist/server/rpc-handler.js +185 -0
- package/dist/server/rpc-handler.js.map +1 -0
- package/package.json +5 -1
package/dist/server/index.d.ts
CHANGED
|
@@ -1,28 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module @soulcraft/sdk/server
|
|
3
3
|
* @description Server entry point for @soulcraft/sdk. Exports everything needed to
|
|
4
|
-
* run the SDK in a product backend (
|
|
4
|
+
* run the SDK in a product backend (SvelteKit, Bun, Hono, or any server).
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* 25 SDK namespaces via a unified `/api/rpc` endpoint. Products configure which
|
|
8
|
-
* namespaces are active via `NamespaceProviders`.
|
|
6
|
+
* ## RPC Handler (recommended)
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* Use `createRpcHandler()` to get a framework-agnostic `(Request) => Response`
|
|
9
|
+
* handler for the unified `/api/rpc` endpoint. Works with any server that speaks
|
|
10
|
+
* Web Standard `Request`/`Response` — no framework dependency.
|
|
12
11
|
*
|
|
13
|
-
* @example Unified router
|
|
14
12
|
* ```typescript
|
|
15
|
-
* import {
|
|
16
|
-
*
|
|
17
|
-
* const pool = new BrainyInstancePool({ storage: 'filesystem', dataPath: './data', strategy: 'per-user' })
|
|
13
|
+
* import { createRpcHandler } from '@soulcraft/sdk/server'
|
|
18
14
|
*
|
|
19
|
-
* const
|
|
15
|
+
* const handleRpc = createRpcHandler({
|
|
20
16
|
* resolveBrain: async (ctx) => pool.forUser(ctx.user.emailHash, ctx.workspaceId),
|
|
21
17
|
* authenticate: async (ctx) => verifySession(ctx.request),
|
|
22
|
-
* providers: {
|
|
18
|
+
* providers: { graph: graphHandler, search: searchHandler },
|
|
23
19
|
* })
|
|
24
|
-
*
|
|
20
|
+
*
|
|
21
|
+
* // SvelteKit: export const POST = ({ request }) => handleRpc(request)
|
|
22
|
+
* // Bun: Bun.serve({ fetch: (req) => handleRpc(req) })
|
|
23
|
+
* // Hono: app.post('/api/rpc', (c) => handleRpc(c.req.raw))
|
|
25
24
|
* ```
|
|
25
|
+
*
|
|
26
|
+
* ## Hono Router (legacy)
|
|
27
|
+
*
|
|
28
|
+
* `createSoulcraftRouter()` returns a Hono app — use if your server is Hono-based.
|
|
29
|
+
* Requires `hono` as a peer dependency.
|
|
30
|
+
*
|
|
31
|
+
* This entry point must never be imported in browser bundles — it has hard
|
|
32
|
+
* server-only dependencies (`@soulcraft/brainy`, `lru-cache`, `crypto`, `fs`).
|
|
26
33
|
*/
|
|
27
34
|
export { BrainyInstancePool, computeEmailHash, } from './instance-pool.js';
|
|
28
35
|
export type { InstancePoolConfig, InstancePoolStats, } from './instance-pool.js';
|
|
@@ -57,7 +64,8 @@ export { createNamespaceRouter } from './namespace-router.js';
|
|
|
57
64
|
export type { NamespaceRouterConfig, NamespaceRouter, NamespaceProvider, NamespaceProviders, RequestContext, UserContext, HandlerContext, PreAuthenticatedContext, DispatchResult, } from './namespace-router.js';
|
|
58
65
|
export { createNamespaceWsHandler } from './ws-handler.js';
|
|
59
66
|
export type { NamespaceWsHandlerConfig, NamespaceWsHandler, WsSession, } from './ws-handler.js';
|
|
60
|
-
export {
|
|
67
|
+
export { createRpcHandler } from './rpc-handler.js';
|
|
68
|
+
export type { RpcHandlerConfig } from './rpc-handler.js';
|
|
61
69
|
export type { SoulcraftRouterConfig } from './hono-router.js';
|
|
62
70
|
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';
|
|
63
71
|
export type { AnnotationAiClient, AnnotationsHandlerOptions, ChatHandlerOptions, ChatAIClient, AnthropicStreamEvent, ToolDefinition, ToolExecutor, ToolExecutionContext, SystemPromptBuilder, SystemPromptContext, ChatBillingCheck, ChatEventEmitter, ModelSelector, TieredRouting, RetrievedMemory, UserExpertiseProfile, AIPlan, PlanStep, StepProgress, PlanExecutionResult, AIClientResolverOptions, ResolvedAIClient, CapabilityTokenFactory, AuthHandlerOptions, SampleDataProvider, CollectionsHandlerOptions, PaymentProvider, CommerceHandlerOptions, ConfigService, ConfigBillingService, ConfigHandlerOptions, ExportPipeline, ExportHandlerOptions, FormatConverter, FormatsHandlerOptions, ImportPipeline, ImportHandlerOptions, MediaBackend, MediaHandlerOptions, KitLoader, ProjectHandlerOptions, PublishBackend, VenueDeployService, AcademyPublishService, PublishHandlerOptions, PulseHandlerOptions, RealtimeBackend, RealtimeHandlerOptions, SessionEventEmitter, SessionHandlerOptions, ApiKeyService, SettingsBillingService, StorageTracker, StorageLimitResolver, SettingsHandlerOptions, WorkspaceManager, WorkspaceHandlerOptions, } from './handlers/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA
|
|
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
|
@@ -1,28 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module @soulcraft/sdk/server
|
|
3
3
|
* @description Server entry point for @soulcraft/sdk. Exports everything needed to
|
|
4
|
-
* run the SDK in a product backend (
|
|
4
|
+
* run the SDK in a product backend (SvelteKit, Bun, Hono, or any server).
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* 25 SDK namespaces via a unified `/api/rpc` endpoint. Products configure which
|
|
8
|
-
* namespaces are active via `NamespaceProviders`.
|
|
6
|
+
* ## RPC Handler (recommended)
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* Use `createRpcHandler()` to get a framework-agnostic `(Request) => Response`
|
|
9
|
+
* handler for the unified `/api/rpc` endpoint. Works with any server that speaks
|
|
10
|
+
* Web Standard `Request`/`Response` — no framework dependency.
|
|
12
11
|
*
|
|
13
|
-
* @example Unified router
|
|
14
12
|
* ```typescript
|
|
15
|
-
* import {
|
|
16
|
-
*
|
|
17
|
-
* const pool = new BrainyInstancePool({ storage: 'filesystem', dataPath: './data', strategy: 'per-user' })
|
|
13
|
+
* import { createRpcHandler } from '@soulcraft/sdk/server'
|
|
18
14
|
*
|
|
19
|
-
* const
|
|
15
|
+
* const handleRpc = createRpcHandler({
|
|
20
16
|
* resolveBrain: async (ctx) => pool.forUser(ctx.user.emailHash, ctx.workspaceId),
|
|
21
17
|
* authenticate: async (ctx) => verifySession(ctx.request),
|
|
22
|
-
* providers: {
|
|
18
|
+
* providers: { graph: graphHandler, search: searchHandler },
|
|
23
19
|
* })
|
|
24
|
-
*
|
|
20
|
+
*
|
|
21
|
+
* // SvelteKit: export const POST = ({ request }) => handleRpc(request)
|
|
22
|
+
* // Bun: Bun.serve({ fetch: (req) => handleRpc(req) })
|
|
23
|
+
* // Hono: app.post('/api/rpc', (c) => handleRpc(c.req.raw))
|
|
25
24
|
* ```
|
|
25
|
+
*
|
|
26
|
+
* ## Hono Router (legacy)
|
|
27
|
+
*
|
|
28
|
+
* `createSoulcraftRouter()` returns a Hono app — use if your server is Hono-based.
|
|
29
|
+
* Requires `hono` as a peer dependency.
|
|
30
|
+
*
|
|
31
|
+
* This entry point must never be imported in browser bundles — it has hard
|
|
32
|
+
* server-only dependencies (`@soulcraft/brainy`, `lru-cache`, `crypto`, `fs`).
|
|
26
33
|
*/
|
|
27
34
|
// ── Instance pool ─────────────────────────────────────────────────────────────
|
|
28
35
|
export { BrainyInstancePool, computeEmailHash, } from './instance-pool.js';
|
|
@@ -54,8 +61,8 @@ export { createCachedDispatch, LruCacheProvider, DEFAULT_CACHEABLE_METHODS } fro
|
|
|
54
61
|
export { createNamespaceRouter } from './namespace-router.js';
|
|
55
62
|
// ── Namespace WebSocket handler ─────────────────────────────────────────────
|
|
56
63
|
export { createNamespaceWsHandler } from './ws-handler.js';
|
|
57
|
-
// ──
|
|
58
|
-
export {
|
|
64
|
+
// ── RPC handler (framework-agnostic, recommended) ───────────────────────────
|
|
65
|
+
export { createRpcHandler } from './rpc-handler.js';
|
|
59
66
|
// ── Namespace handler factories ──────────────────────────────────────────────
|
|
60
67
|
// Each factory creates a NamespaceProvider wired into `providers` on the router.
|
|
61
68
|
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';
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;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,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AASlE,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,iFAAiF;AACjF,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAGlG,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,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAWnD,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;AA4D5B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,YAAY,EACZ,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,sBAAsB,GACvB,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module server/rpc-handler
|
|
3
|
+
* @description Framework-agnostic RPC request handler for the Soulcraft SDK.
|
|
4
|
+
*
|
|
5
|
+
* Creates a standard `(request: Request) => Promise<Response>` handler that
|
|
6
|
+
* parses the JSON body, validates RPC fields, dispatches to the namespace
|
|
7
|
+
* router, and serializes the result — all using Web Standard APIs only.
|
|
8
|
+
*
|
|
9
|
+
* No framework dependency (no Hono, no Express, no SvelteKit). Works with
|
|
10
|
+
* any server that speaks `Request`/`Response`:
|
|
11
|
+
*
|
|
12
|
+
* @example SvelteKit
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createRpcHandler } from '@soulcraft/sdk/server'
|
|
15
|
+
*
|
|
16
|
+
* const handleRpc = createRpcHandler({ resolveBrain, authenticate, providers })
|
|
17
|
+
*
|
|
18
|
+
* export const POST: RequestHandler = ({ request }) => handleRpc(request)
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @example Bun.serve
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const handleRpc = createRpcHandler({ resolveBrain, authenticate, providers })
|
|
24
|
+
*
|
|
25
|
+
* Bun.serve({
|
|
26
|
+
* fetch(req) {
|
|
27
|
+
* if (new URL(req.url).pathname === '/api/rpc') return handleRpc(req)
|
|
28
|
+
* return new Response('Not found', { status: 404 })
|
|
29
|
+
* }
|
|
30
|
+
* })
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @example Hono (if you still use it)
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const handleRpc = createRpcHandler({ resolveBrain, authenticate, providers })
|
|
36
|
+
*
|
|
37
|
+
* app.post('/api/rpc', (c) => handleRpc(c.req.raw))
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
import type { NamespaceRouterConfig } from './namespace-router.js';
|
|
41
|
+
import type { RpcCacheConfig } from './rpc-cache.js';
|
|
42
|
+
/**
|
|
43
|
+
* @description Configuration for {@link createRpcHandler}.
|
|
44
|
+
* Extends {@link NamespaceRouterConfig} with optional RPC response caching.
|
|
45
|
+
*/
|
|
46
|
+
export interface RpcHandlerConfig extends NamespaceRouterConfig {
|
|
47
|
+
/**
|
|
48
|
+
* Optional RPC response cache configuration.
|
|
49
|
+
* When provided, cacheable read methods are served from an in-process LRU cache
|
|
50
|
+
* with singleflight deduplication. Write methods flush the scope automatically.
|
|
51
|
+
*
|
|
52
|
+
* @see {@link RpcCacheConfig}
|
|
53
|
+
*/
|
|
54
|
+
cache?: RpcCacheConfig;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Creates a framework-agnostic RPC request handler.
|
|
58
|
+
*
|
|
59
|
+
* Takes a standard Web `Request`, parses the JSON body, validates the RPC
|
|
60
|
+
* envelope, dispatches to the namespace router, and returns a standard `Response`.
|
|
61
|
+
* Streaming results are delivered as SSE (`text/event-stream`).
|
|
62
|
+
*
|
|
63
|
+
* @param config - Namespace router configuration (auth, brain resolution, providers).
|
|
64
|
+
* @returns An async function: `(request: Request) => Promise<Response>`.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const handleRpc = createRpcHandler({
|
|
69
|
+
* resolveBrain: async (ctx) => pool.forUser(ctx.user!.emailHash, ctx.workspaceId),
|
|
70
|
+
* authenticate: async (ctx) => verifySession(ctx.request),
|
|
71
|
+
* providers: { graph: graphHandler, search: searchHandler },
|
|
72
|
+
* })
|
|
73
|
+
*
|
|
74
|
+
* // Use in any server framework:
|
|
75
|
+
* const response = await handleRpc(request)
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function createRpcHandler(config: RpcHandlerConfig): (request: Request) => Promise<Response>;
|
|
79
|
+
//# sourceMappingURL=rpc-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-handler.d.ts","sourceRoot":"","sources":["../../src/server/rpc-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,uBAAuB,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGpD;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAsClG"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module server/rpc-handler
|
|
3
|
+
* @description Framework-agnostic RPC request handler for the Soulcraft SDK.
|
|
4
|
+
*
|
|
5
|
+
* Creates a standard `(request: Request) => Promise<Response>` handler that
|
|
6
|
+
* parses the JSON body, validates RPC fields, dispatches to the namespace
|
|
7
|
+
* router, and serializes the result — all using Web Standard APIs only.
|
|
8
|
+
*
|
|
9
|
+
* No framework dependency (no Hono, no Express, no SvelteKit). Works with
|
|
10
|
+
* any server that speaks `Request`/`Response`:
|
|
11
|
+
*
|
|
12
|
+
* @example SvelteKit
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createRpcHandler } from '@soulcraft/sdk/server'
|
|
15
|
+
*
|
|
16
|
+
* const handleRpc = createRpcHandler({ resolveBrain, authenticate, providers })
|
|
17
|
+
*
|
|
18
|
+
* export const POST: RequestHandler = ({ request }) => handleRpc(request)
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @example Bun.serve
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const handleRpc = createRpcHandler({ resolveBrain, authenticate, providers })
|
|
24
|
+
*
|
|
25
|
+
* Bun.serve({
|
|
26
|
+
* fetch(req) {
|
|
27
|
+
* if (new URL(req.url).pathname === '/api/rpc') return handleRpc(req)
|
|
28
|
+
* return new Response('Not found', { status: 404 })
|
|
29
|
+
* }
|
|
30
|
+
* })
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @example Hono (if you still use it)
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const handleRpc = createRpcHandler({ resolveBrain, authenticate, providers })
|
|
36
|
+
*
|
|
37
|
+
* app.post('/api/rpc', (c) => handleRpc(c.req.raw))
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
import { createNamespaceRouter } from './namespace-router.js';
|
|
41
|
+
import { createCachedDispatch } from './rpc-cache.js';
|
|
42
|
+
/**
|
|
43
|
+
* Creates a framework-agnostic RPC request handler.
|
|
44
|
+
*
|
|
45
|
+
* Takes a standard Web `Request`, parses the JSON body, validates the RPC
|
|
46
|
+
* envelope, dispatches to the namespace router, and returns a standard `Response`.
|
|
47
|
+
* Streaming results are delivered as SSE (`text/event-stream`).
|
|
48
|
+
*
|
|
49
|
+
* @param config - Namespace router configuration (auth, brain resolution, providers).
|
|
50
|
+
* @returns An async function: `(request: Request) => Promise<Response>`.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const handleRpc = createRpcHandler({
|
|
55
|
+
* resolveBrain: async (ctx) => pool.forUser(ctx.user!.emailHash, ctx.workspaceId),
|
|
56
|
+
* authenticate: async (ctx) => verifySession(ctx.request),
|
|
57
|
+
* providers: { graph: graphHandler, search: searchHandler },
|
|
58
|
+
* })
|
|
59
|
+
*
|
|
60
|
+
* // Use in any server framework:
|
|
61
|
+
* const response = await handleRpc(request)
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export function createRpcHandler(config) {
|
|
65
|
+
const baseRouter = createNamespaceRouter(config);
|
|
66
|
+
const router = config.cache
|
|
67
|
+
? createCachedDispatch(baseRouter, config.cache)
|
|
68
|
+
: baseRouter;
|
|
69
|
+
return async (request) => {
|
|
70
|
+
// ── Parse JSON body ────────────────────────────────────────────────────
|
|
71
|
+
let body;
|
|
72
|
+
try {
|
|
73
|
+
body = await request.json();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return _jsonResponse({ error: { code: 'BAD_REQUEST', message: 'Request body must be valid JSON' } }, 400);
|
|
77
|
+
}
|
|
78
|
+
// ── Validate required RPC fields ───────────────────────────────────────
|
|
79
|
+
if (typeof body.ns !== 'string' || typeof body.method !== 'string' || !Array.isArray(body.args)) {
|
|
80
|
+
return _jsonResponse({ error: { code: 'BAD_REQUEST', message: '{ ns: string, method: string, args: unknown[] } required' } }, 400);
|
|
81
|
+
}
|
|
82
|
+
const rpc = {
|
|
83
|
+
id: typeof body.id === 'string' ? body.id : crypto.randomUUID(),
|
|
84
|
+
ns: body.ns,
|
|
85
|
+
method: body.method,
|
|
86
|
+
args: body.args,
|
|
87
|
+
stream: body.stream ?? false,
|
|
88
|
+
};
|
|
89
|
+
// ── Dispatch ──────────────────────────────────────────────────────────
|
|
90
|
+
const result = await router.dispatch(rpc, request);
|
|
91
|
+
return _toResponse(result);
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
95
|
+
// Response helpers (framework-agnostic, Web Standard only)
|
|
96
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
97
|
+
/**
|
|
98
|
+
* Converts a {@link DispatchResult} into a standard Web `Response`.
|
|
99
|
+
*
|
|
100
|
+
* @param result - The dispatch result from the namespace router.
|
|
101
|
+
* @returns A Response — JSON for normal results, SSE for streaming results.
|
|
102
|
+
*/
|
|
103
|
+
function _toResponse(result) {
|
|
104
|
+
if (result.type === 'response') {
|
|
105
|
+
const { response } = result;
|
|
106
|
+
const status = response.error ? _errorStatusCode(response.error.code) : 200;
|
|
107
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
108
|
+
// Merge cache headers (Cache-Control, ETag, X-Cache) when present.
|
|
109
|
+
if (result.headers) {
|
|
110
|
+
for (const [key, value] of Object.entries(result.headers)) {
|
|
111
|
+
headers[key] = value;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return new Response(JSON.stringify(response), { status, headers });
|
|
115
|
+
}
|
|
116
|
+
// Streaming result — deliver as SSE.
|
|
117
|
+
const { id, iterable } = result;
|
|
118
|
+
const stream = new ReadableStream({
|
|
119
|
+
async start(controller) {
|
|
120
|
+
const encoder = new TextEncoder();
|
|
121
|
+
try {
|
|
122
|
+
for await (const chunk of iterable) {
|
|
123
|
+
const frame = { id, chunk };
|
|
124
|
+
controller.enqueue(encoder.encode(`data: ${JSON.stringify(frame)}\n\n`));
|
|
125
|
+
}
|
|
126
|
+
const doneFrame = { id, done: true };
|
|
127
|
+
controller.enqueue(encoder.encode(`data: ${JSON.stringify(doneFrame)}\n\n`));
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
131
|
+
const errorFrame = { id, error: message };
|
|
132
|
+
controller.enqueue(encoder.encode(`data: ${JSON.stringify(errorFrame)}\n\n`));
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
controller.close();
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
return new Response(stream, {
|
|
140
|
+
status: 200,
|
|
141
|
+
headers: {
|
|
142
|
+
'Content-Type': 'text/event-stream',
|
|
143
|
+
'Cache-Control': 'no-cache',
|
|
144
|
+
'Connection': 'keep-alive',
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Creates a JSON Response with the given status code.
|
|
150
|
+
*
|
|
151
|
+
* @param data - The response body.
|
|
152
|
+
* @param status - HTTP status code.
|
|
153
|
+
* @returns A Response with `Content-Type: application/json`.
|
|
154
|
+
*/
|
|
155
|
+
function _jsonResponse(data, status) {
|
|
156
|
+
return new Response(JSON.stringify(data), {
|
|
157
|
+
status,
|
|
158
|
+
headers: { 'Content-Type': 'application/json' },
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Maps RPC error codes to HTTP status codes.
|
|
163
|
+
*
|
|
164
|
+
* @param code - The error code from the dispatch result.
|
|
165
|
+
* @returns HTTP status code.
|
|
166
|
+
*/
|
|
167
|
+
function _errorStatusCode(code) {
|
|
168
|
+
switch (code) {
|
|
169
|
+
case 'UNAUTHORIZED':
|
|
170
|
+
case 'AUTH_ERROR':
|
|
171
|
+
return 401;
|
|
172
|
+
case 'FORBIDDEN':
|
|
173
|
+
return 403;
|
|
174
|
+
case 'NAMESPACE_NOT_FOUND':
|
|
175
|
+
case 'METHOD_NOT_FOUND':
|
|
176
|
+
return 404;
|
|
177
|
+
case 'BRAIN_UNAVAILABLE':
|
|
178
|
+
return 503;
|
|
179
|
+
case 'BAD_REQUEST':
|
|
180
|
+
return 400;
|
|
181
|
+
default:
|
|
182
|
+
return 500;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=rpc-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-handler.js","sourceRoot":"","sources":["../../src/server/rpc-handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soulcraft/sdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.1",
|
|
4
4
|
"description": "The unified Soulcraft platform SDK — data, auth, AI, billing, and notifications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"@soulcraft/kit-schema": ">=2.0.0",
|
|
42
42
|
"@soulcraft/kits": ">=1.0.0",
|
|
43
43
|
"better-auth": ">=1.0.0",
|
|
44
|
+
"hono": ">=4.0.0",
|
|
44
45
|
"stripe": ">=20.0.0"
|
|
45
46
|
},
|
|
46
47
|
"peerDependenciesMeta": {
|
|
@@ -61,6 +62,9 @@
|
|
|
61
62
|
},
|
|
62
63
|
"stripe": {
|
|
63
64
|
"optional": true
|
|
65
|
+
},
|
|
66
|
+
"hono": {
|
|
67
|
+
"optional": true
|
|
64
68
|
}
|
|
65
69
|
},
|
|
66
70
|
"dependencies": {
|