@soulcraft/sdk 2.0.1 → 2.1.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/index.d.ts +5 -38
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +5 -47
- package/dist/client/index.js.map +1 -1
- package/dist/client/namespace-proxy.d.ts +3 -4
- package/dist/client/namespace-proxy.d.ts.map +1 -1
- package/dist/client/namespace-proxy.js +3 -4
- package/dist/client/namespace-proxy.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/modules/hall/admin.d.ts +39 -0
- package/dist/modules/hall/admin.d.ts.map +1 -0
- package/dist/modules/hall/admin.js +115 -0
- package/dist/modules/hall/admin.js.map +1 -0
- package/dist/modules/hall/browser.d.ts +83 -27
- package/dist/modules/hall/browser.d.ts.map +1 -1
- package/dist/modules/hall/browser.js +238 -49
- package/dist/modules/hall/browser.js.map +1 -1
- package/dist/modules/hall/media.d.ts +164 -0
- package/dist/modules/hall/media.d.ts.map +1 -0
- package/dist/modules/hall/media.js +182 -0
- package/dist/modules/hall/media.js.map +1 -0
- package/dist/modules/hall/server.d.ts +119 -6
- package/dist/modules/hall/server.d.ts.map +1 -1
- package/dist/modules/hall/server.js +299 -9
- package/dist/modules/hall/server.js.map +1 -1
- package/dist/modules/hall/types.d.ts +705 -25
- package/dist/modules/hall/types.d.ts.map +1 -1
- package/dist/modules/hall/types.js +12 -7
- package/dist/modules/hall/types.js.map +1 -1
- package/dist/server/hall-handlers.d.ts +60 -14
- package/dist/server/hall-handlers.d.ts.map +1 -1
- package/dist/server/hall-handlers.js +61 -12
- package/dist/server/hall-handlers.js.map +1 -1
- package/dist/server/hono-router.d.ts +2 -9
- package/dist/server/hono-router.d.ts.map +1 -1
- package/dist/server/hono-router.js +2 -46
- package/dist/server/hono-router.js.map +1 -1
- package/dist/server/index.d.ts +4 -19
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +10 -29
- package/dist/server/index.js.map +1 -1
- package/dist/types.d.ts +2 -41
- package/dist/types.d.ts.map +1 -1
- package/docs/ADR-005-hall-integration.md +449 -0
- package/package.json +1 -1
- package/dist/client/create-client-sdk.d.ts +0 -113
- package/dist/client/create-client-sdk.d.ts.map +0 -1
- package/dist/client/create-client-sdk.js +0 -169
- package/dist/client/create-client-sdk.js.map +0 -1
- package/dist/modules/app-context/index.d.ts +0 -214
- package/dist/modules/app-context/index.d.ts.map +0 -1
- package/dist/modules/app-context/index.js +0 -569
- package/dist/modules/app-context/index.js.map +0 -1
- package/dist/modules/billing/firestore-provider.d.ts +0 -60
- package/dist/modules/billing/firestore-provider.d.ts.map +0 -1
- package/dist/modules/billing/firestore-provider.js +0 -315
- package/dist/modules/billing/firestore-provider.js.map +0 -1
- package/dist/modules/brainy/proxy.d.ts +0 -48
- package/dist/modules/brainy/proxy.d.ts.map +0 -1
- package/dist/modules/brainy/proxy.js +0 -95
- package/dist/modules/brainy/proxy.js.map +0 -1
- package/dist/server/create-sdk.d.ts +0 -74
- package/dist/server/create-sdk.d.ts.map +0 -1
- package/dist/server/create-sdk.js +0 -104
- package/dist/server/create-sdk.js.map +0 -1
- package/dist/server/from-license.d.ts +0 -252
- package/dist/server/from-license.d.ts.map +0 -1
- package/dist/server/from-license.js +0 -349
- package/dist/server/from-license.js.map +0 -1
- package/dist/server/handlers.d.ts +0 -312
- package/dist/server/handlers.d.ts.map +0 -1
- package/dist/server/handlers.js +0 -376
- package/dist/server/handlers.js.map +0 -1
- package/dist/server/postmessage-handler.d.ts +0 -152
- package/dist/server/postmessage-handler.d.ts.map +0 -1
- package/dist/server/postmessage-handler.js +0 -138
- package/dist/server/postmessage-handler.js.map +0 -1
- package/dist/transports/http.d.ts +0 -86
- package/dist/transports/http.d.ts.map +0 -1
- package/dist/transports/http.js +0 -137
- package/dist/transports/http.js.map +0 -1
- package/dist/transports/postmessage.d.ts +0 -159
- package/dist/transports/postmessage.d.ts.map +0 -1
- package/dist/transports/postmessage.js +0 -207
- package/dist/transports/postmessage.js.map +0 -1
- package/dist/transports/workshop.d.ts +0 -173
- package/dist/transports/workshop.d.ts.map +0 -1
- package/dist/transports/workshop.js +0 -307
- package/dist/transports/workshop.js.map +0 -1
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module client/create-client-sdk
|
|
3
|
-
* @description `createClientSDK` factory for browser/client-mode @soulcraft/sdk.
|
|
4
|
-
*
|
|
5
|
-
* Assembles a `SoulcraftSDK` from a `ClientSDKOptions` specification. Selects and
|
|
6
|
-
* wires the appropriate transport (`http`, `ws`, or `sse`) and returns a full SDK
|
|
7
|
-
* object whose `sdk.brainy.*` API works identically to server mode.
|
|
8
|
-
*
|
|
9
|
-
* ## Transport selection
|
|
10
|
-
*
|
|
11
|
-
* | `transport` | Use case |
|
|
12
|
-
* |-------------|----------|
|
|
13
|
-
* | `'http'` | Stateless RPC — kit apps, simple clients. No push events. |
|
|
14
|
-
* | `'ws'` | Bidirectional RPC + real-time change push. Call `sdk.connect()` first. |
|
|
15
|
-
* | `'sse'` | Receive-only push events. Pair with `'http'` for outbound RPC. |
|
|
16
|
-
*
|
|
17
|
-
* ## Auth
|
|
18
|
-
*
|
|
19
|
-
* - `auth: 'cookie'` — sends session cookies (same-origin browser use). HTTP only.
|
|
20
|
-
* - `auth: { token }` — sends `Authorization: Bearer <token>`. HTTP and WS.
|
|
21
|
-
* - Omit `auth` for unauthenticated requests (public endpoints).
|
|
22
|
-
*
|
|
23
|
-
* @example HTTP transport (kit app, cookie auth)
|
|
24
|
-
* ```typescript
|
|
25
|
-
* import { createClientSDK } from '@soulcraft/sdk/client'
|
|
26
|
-
*
|
|
27
|
-
* const sdk = createClientSDK({
|
|
28
|
-
* mode: 'client',
|
|
29
|
-
* product: 'workshop',
|
|
30
|
-
* transport: 'http',
|
|
31
|
-
* baseUrl: 'https://workshop.soulcraft.com',
|
|
32
|
-
* auth: 'cookie',
|
|
33
|
-
* })
|
|
34
|
-
*
|
|
35
|
-
* const results = await sdk.brainy.find({ query: 'candle kits', limit: 10 })
|
|
36
|
-
* ```
|
|
37
|
-
*
|
|
38
|
-
* @example WebSocket transport (real-time change push)
|
|
39
|
-
* ```typescript
|
|
40
|
-
* import { createClientSDK } from '@soulcraft/sdk/client'
|
|
41
|
-
*
|
|
42
|
-
* const sdk = createClientSDK({
|
|
43
|
-
* mode: 'client',
|
|
44
|
-
* product: 'venue',
|
|
45
|
-
* transport: 'ws',
|
|
46
|
-
* baseUrl: 'wss://venue.soulcraft.com/api/brainy/ws',
|
|
47
|
-
* auth: { token: capabilityToken },
|
|
48
|
-
* })
|
|
49
|
-
*
|
|
50
|
-
* await sdk.connect!()
|
|
51
|
-
* sdk.brainy.onDataChange((event) => refreshUI(event))
|
|
52
|
-
* const items = await sdk.brainy.find({ query: 'inventory' })
|
|
53
|
-
* ```
|
|
54
|
-
*
|
|
55
|
-
* @example SSE transport (receive-only change events + HTTP for outbound)
|
|
56
|
-
* ```typescript
|
|
57
|
-
* import { createClientSDK } from '@soulcraft/sdk/client'
|
|
58
|
-
*
|
|
59
|
-
* const sdk = createClientSDK({
|
|
60
|
-
* mode: 'client',
|
|
61
|
-
* product: 'venue',
|
|
62
|
-
* transport: 'sse',
|
|
63
|
-
* baseUrl: 'https://venue.soulcraft.com',
|
|
64
|
-
* auth: 'cookie',
|
|
65
|
-
* })
|
|
66
|
-
*
|
|
67
|
-
* // sdk.brainy.onDataChange() fires on live server changes.
|
|
68
|
-
* // sdk.brainy.find() etc. are not available on SSE — wire an HttpTransport separately.
|
|
69
|
-
* sdk.brainy.onDataChange((event) => console.log('change:', event))
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
import type { SoulcraftSDK } from '../types.js';
|
|
73
|
-
/**
|
|
74
|
-
* Legacy client SDK options. Kept for backward compatibility with `createClientSDK()`.
|
|
75
|
-
* New code should use `createSoulcraftProxy()` with a namespace-aware transport instead.
|
|
76
|
-
*/
|
|
77
|
-
interface LegacyClientSDKOptions {
|
|
78
|
-
mode: 'client';
|
|
79
|
-
product: string;
|
|
80
|
-
transport: 'http' | 'ws' | 'sse';
|
|
81
|
-
baseUrl: string;
|
|
82
|
-
auth?: 'cookie' | {
|
|
83
|
-
token: string;
|
|
84
|
-
};
|
|
85
|
-
timeoutMs?: number;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Create a client-mode `SoulcraftSDK` from the given options.
|
|
89
|
-
*
|
|
90
|
-
* Selects the transport specified by `options.transport`, wires auth, and returns
|
|
91
|
-
* a `SoulcraftSDK` whose `sdk.brainy.*` surface is identical to server mode.
|
|
92
|
-
*
|
|
93
|
-
* For `'ws'` transport, call `await sdk.connect!()` before making any `sdk.brainy.*`
|
|
94
|
-
* calls to establish the WebSocket connection.
|
|
95
|
-
*
|
|
96
|
-
* @param options - Client SDK options including transport, baseUrl, and auth.
|
|
97
|
-
* @returns A `SoulcraftSDK` backed by the chosen transport.
|
|
98
|
-
*
|
|
99
|
-
* @example HTTP transport
|
|
100
|
-
* ```typescript
|
|
101
|
-
* const sdk = createClientSDK({
|
|
102
|
-
* mode: 'client',
|
|
103
|
-
* product: 'workshop',
|
|
104
|
-
* transport: 'http',
|
|
105
|
-
* baseUrl: 'https://workshop.soulcraft.com',
|
|
106
|
-
* auth: 'cookie',
|
|
107
|
-
* })
|
|
108
|
-
* const results = await sdk.brainy.find({ query: 'candle inventory' })
|
|
109
|
-
* ```
|
|
110
|
-
*/
|
|
111
|
-
export declare function createClientSDK(options: LegacyClientSDKOptions): SoulcraftSDK;
|
|
112
|
-
export {};
|
|
113
|
-
//# sourceMappingURL=create-client-sdk.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-client-sdk.d.ts","sourceRoot":"","sources":["../../src/client/create-client-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/C;;;GAGG;AACH,UAAU,sBAAsB;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAA;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,QAAQ,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,YAAY,CAwE7E"}
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module client/create-client-sdk
|
|
3
|
-
* @description `createClientSDK` factory for browser/client-mode @soulcraft/sdk.
|
|
4
|
-
*
|
|
5
|
-
* Assembles a `SoulcraftSDK` from a `ClientSDKOptions` specification. Selects and
|
|
6
|
-
* wires the appropriate transport (`http`, `ws`, or `sse`) and returns a full SDK
|
|
7
|
-
* object whose `sdk.brainy.*` API works identically to server mode.
|
|
8
|
-
*
|
|
9
|
-
* ## Transport selection
|
|
10
|
-
*
|
|
11
|
-
* | `transport` | Use case |
|
|
12
|
-
* |-------------|----------|
|
|
13
|
-
* | `'http'` | Stateless RPC — kit apps, simple clients. No push events. |
|
|
14
|
-
* | `'ws'` | Bidirectional RPC + real-time change push. Call `sdk.connect()` first. |
|
|
15
|
-
* | `'sse'` | Receive-only push events. Pair with `'http'` for outbound RPC. |
|
|
16
|
-
*
|
|
17
|
-
* ## Auth
|
|
18
|
-
*
|
|
19
|
-
* - `auth: 'cookie'` — sends session cookies (same-origin browser use). HTTP only.
|
|
20
|
-
* - `auth: { token }` — sends `Authorization: Bearer <token>`. HTTP and WS.
|
|
21
|
-
* - Omit `auth` for unauthenticated requests (public endpoints).
|
|
22
|
-
*
|
|
23
|
-
* @example HTTP transport (kit app, cookie auth)
|
|
24
|
-
* ```typescript
|
|
25
|
-
* import { createClientSDK } from '@soulcraft/sdk/client'
|
|
26
|
-
*
|
|
27
|
-
* const sdk = createClientSDK({
|
|
28
|
-
* mode: 'client',
|
|
29
|
-
* product: 'workshop',
|
|
30
|
-
* transport: 'http',
|
|
31
|
-
* baseUrl: 'https://workshop.soulcraft.com',
|
|
32
|
-
* auth: 'cookie',
|
|
33
|
-
* })
|
|
34
|
-
*
|
|
35
|
-
* const results = await sdk.brainy.find({ query: 'candle kits', limit: 10 })
|
|
36
|
-
* ```
|
|
37
|
-
*
|
|
38
|
-
* @example WebSocket transport (real-time change push)
|
|
39
|
-
* ```typescript
|
|
40
|
-
* import { createClientSDK } from '@soulcraft/sdk/client'
|
|
41
|
-
*
|
|
42
|
-
* const sdk = createClientSDK({
|
|
43
|
-
* mode: 'client',
|
|
44
|
-
* product: 'venue',
|
|
45
|
-
* transport: 'ws',
|
|
46
|
-
* baseUrl: 'wss://venue.soulcraft.com/api/brainy/ws',
|
|
47
|
-
* auth: { token: capabilityToken },
|
|
48
|
-
* })
|
|
49
|
-
*
|
|
50
|
-
* await sdk.connect!()
|
|
51
|
-
* sdk.brainy.onDataChange((event) => refreshUI(event))
|
|
52
|
-
* const items = await sdk.brainy.find({ query: 'inventory' })
|
|
53
|
-
* ```
|
|
54
|
-
*
|
|
55
|
-
* @example SSE transport (receive-only change events + HTTP for outbound)
|
|
56
|
-
* ```typescript
|
|
57
|
-
* import { createClientSDK } from '@soulcraft/sdk/client'
|
|
58
|
-
*
|
|
59
|
-
* const sdk = createClientSDK({
|
|
60
|
-
* mode: 'client',
|
|
61
|
-
* product: 'venue',
|
|
62
|
-
* transport: 'sse',
|
|
63
|
-
* baseUrl: 'https://venue.soulcraft.com',
|
|
64
|
-
* auth: 'cookie',
|
|
65
|
-
* })
|
|
66
|
-
*
|
|
67
|
-
* // sdk.brainy.onDataChange() fires on live server changes.
|
|
68
|
-
* // sdk.brainy.find() etc. are not available on SSE — wire an HttpTransport separately.
|
|
69
|
-
* sdk.brainy.onDataChange((event) => console.log('change:', event))
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
import { HttpTransport } from '../transports/http.js';
|
|
73
|
-
import { WsTransport } from '../transports/ws.js';
|
|
74
|
-
import { SseTransport } from '../transports/sse.js';
|
|
75
|
-
import { createBrainyProxy } from '../modules/brainy/proxy.js';
|
|
76
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
77
|
-
// Factory
|
|
78
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
79
|
-
/**
|
|
80
|
-
* Create a client-mode `SoulcraftSDK` from the given options.
|
|
81
|
-
*
|
|
82
|
-
* Selects the transport specified by `options.transport`, wires auth, and returns
|
|
83
|
-
* a `SoulcraftSDK` whose `sdk.brainy.*` surface is identical to server mode.
|
|
84
|
-
*
|
|
85
|
-
* For `'ws'` transport, call `await sdk.connect!()` before making any `sdk.brainy.*`
|
|
86
|
-
* calls to establish the WebSocket connection.
|
|
87
|
-
*
|
|
88
|
-
* @param options - Client SDK options including transport, baseUrl, and auth.
|
|
89
|
-
* @returns A `SoulcraftSDK` backed by the chosen transport.
|
|
90
|
-
*
|
|
91
|
-
* @example HTTP transport
|
|
92
|
-
* ```typescript
|
|
93
|
-
* const sdk = createClientSDK({
|
|
94
|
-
* mode: 'client',
|
|
95
|
-
* product: 'workshop',
|
|
96
|
-
* transport: 'http',
|
|
97
|
-
* baseUrl: 'https://workshop.soulcraft.com',
|
|
98
|
-
* auth: 'cookie',
|
|
99
|
-
* })
|
|
100
|
-
* const results = await sdk.brainy.find({ query: 'candle inventory' })
|
|
101
|
-
* ```
|
|
102
|
-
*/
|
|
103
|
-
export function createClientSDK(options) {
|
|
104
|
-
const { baseUrl, transport: transportType, auth, timeoutMs } = options;
|
|
105
|
-
const authToken = auth && auth !== 'cookie' && typeof auth === 'object' ? auth.token : undefined;
|
|
106
|
-
const useCookies = auth === 'cookie';
|
|
107
|
-
let transport;
|
|
108
|
-
if (transportType === 'ws') {
|
|
109
|
-
if (!authToken) {
|
|
110
|
-
throw new Error('createClientSDK: WebSocket transport requires auth: { token } — ' +
|
|
111
|
-
'browser WebSocket does not support cookie auth or header-less connections.');
|
|
112
|
-
}
|
|
113
|
-
transport = new WsTransport(baseUrl, authToken, undefined, timeoutMs);
|
|
114
|
-
}
|
|
115
|
-
else if (transportType === 'sse') {
|
|
116
|
-
transport = new SseTransport(baseUrl, undefined, authToken);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
// Default: HTTP
|
|
120
|
-
transport = new HttpTransport(baseUrl, authToken, useCookies, timeoutMs);
|
|
121
|
-
}
|
|
122
|
-
const brainyProxy = createBrainyProxy(transport);
|
|
123
|
-
// This legacy factory only wires the brainy namespace. All other namespaces
|
|
124
|
-
// throw at access time. For full namespace support, use createSoulcraftProxy().
|
|
125
|
-
const sdk = {
|
|
126
|
-
brainy: brainyProxy,
|
|
127
|
-
// Client mode stubs — these module namespaces are server-only.
|
|
128
|
-
// Accessing them from a client app is a usage error; throw explicitly.
|
|
129
|
-
get auth() {
|
|
130
|
-
throw new Error('sdk.auth is not available in client mode — use server-side auth middleware');
|
|
131
|
-
},
|
|
132
|
-
get license() {
|
|
133
|
-
throw new Error('sdk.license is not available in client mode');
|
|
134
|
-
},
|
|
135
|
-
get ai() {
|
|
136
|
-
throw new Error('sdk.ai is not available in client mode — use server-side AI endpoints');
|
|
137
|
-
},
|
|
138
|
-
get events() {
|
|
139
|
-
throw new Error('sdk.events is not available in client mode');
|
|
140
|
-
},
|
|
141
|
-
get skills() {
|
|
142
|
-
throw new Error('sdk.skills is not available in client mode');
|
|
143
|
-
},
|
|
144
|
-
get kits() {
|
|
145
|
-
throw new Error('sdk.kits is not available in client mode');
|
|
146
|
-
},
|
|
147
|
-
get billing() {
|
|
148
|
-
throw new Error('sdk.billing is not available in client mode');
|
|
149
|
-
},
|
|
150
|
-
get notifications() {
|
|
151
|
-
throw new Error('sdk.notifications is not available in client mode');
|
|
152
|
-
},
|
|
153
|
-
async connect() {
|
|
154
|
-
if (transportType === 'ws') {
|
|
155
|
-
await transport.connect();
|
|
156
|
-
}
|
|
157
|
-
else if (transportType === 'sse') {
|
|
158
|
-
;
|
|
159
|
-
transport.connect();
|
|
160
|
-
}
|
|
161
|
-
// HTTP is stateless — connect is a no-op.
|
|
162
|
-
},
|
|
163
|
-
async disconnect() {
|
|
164
|
-
await transport.close();
|
|
165
|
-
},
|
|
166
|
-
};
|
|
167
|
-
return sdk;
|
|
168
|
-
}
|
|
169
|
-
//# sourceMappingURL=create-client-sdk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-client-sdk.js","sourceRoot":"","sources":["../../src/client/create-client-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module modules/app-context
|
|
3
|
-
* @description Factory for building a full {@link AppRuntimeContext} from minimal options.
|
|
4
|
-
*
|
|
5
|
-
* `createAppContext()` is the single entry point kit apps use to get a fully-wired
|
|
6
|
-
* runtime context. Both Workshop (dev, WebContainer iframe) and Venue (production,
|
|
7
|
-
* same-origin HTTP) call the same factory — the only difference is which transport
|
|
8
|
-
* the host provides.
|
|
9
|
-
*
|
|
10
|
-
* **Workshop** passes a {@link WorkshopTransport} → all non-brainy API calls go
|
|
11
|
-
* through PostMessage to the parent frame's relay in PreviewFrame.svelte.
|
|
12
|
-
*
|
|
13
|
-
* **Venue** omits `workshopTransport` → all API calls use HTTP fetch to `baseUrl`.
|
|
14
|
-
*
|
|
15
|
-
* Each property (brainy, ai, hall, pulse, files, notify, services, auth) is built
|
|
16
|
-
* by a dedicated proxy builder that accepts either transport mode. The brainy property
|
|
17
|
-
* is built from the provided Brainy transport (PostMessage or HTTP) via the existing
|
|
18
|
-
* `createBrainyProxy()`.
|
|
19
|
-
*
|
|
20
|
-
* @example Workshop kit app (WebContainer iframe)
|
|
21
|
-
* ```typescript
|
|
22
|
-
* import { createAppContext, PostMessageTransport, WorkshopTransport } from '@soulcraft/sdk/client'
|
|
23
|
-
*
|
|
24
|
-
* const origin = document.referrer ? new URL(document.referrer).origin : '*'
|
|
25
|
-
* const soulcraft = createAppContext({
|
|
26
|
-
* transport: new PostMessageTransport(origin),
|
|
27
|
-
* workshopTransport: new WorkshopTransport(origin),
|
|
28
|
-
* })
|
|
29
|
-
*
|
|
30
|
-
* // Full API surface:
|
|
31
|
-
* const items = await soulcraft.brainy.find({ query: 'test' })
|
|
32
|
-
* for await (const token of soulcraft.ai.chat([{ role: 'user', content: 'hello' }])) { ... }
|
|
33
|
-
* soulcraft.pulse.track('page_view', { page: '/home' })
|
|
34
|
-
* ```
|
|
35
|
-
*
|
|
36
|
-
* @example Venue production app (same-origin HTTP)
|
|
37
|
-
* ```typescript
|
|
38
|
-
* import { createAppContext } from '@soulcraft/sdk/client'
|
|
39
|
-
*
|
|
40
|
-
* const soulcraft = createAppContext({
|
|
41
|
-
* brainy: existingBrainyProxy,
|
|
42
|
-
* auth: { user, role, can, signOut, getToken },
|
|
43
|
-
* kit: kitManifest,
|
|
44
|
-
* slot: '/app',
|
|
45
|
-
* credentials: true,
|
|
46
|
-
* })
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
import type { SDKTransport } from '../../transports/transport.js';
|
|
50
|
-
import { WorkshopTransport } from '../../transports/workshop.js';
|
|
51
|
-
import type { SoulcraftBrainy } from '../brainy/types.js';
|
|
52
|
-
/**
|
|
53
|
-
* Re-declare the kit-schema context interfaces at type level so the SDK has
|
|
54
|
-
* no hard dependency on kit-schema at runtime. These are structurally identical
|
|
55
|
-
* to the canonical types in `@soulcraft/kit-schema` — TypeScript's structural
|
|
56
|
-
* typing ensures compatibility without import.
|
|
57
|
-
*/
|
|
58
|
-
/** @see AppAIContext in @soulcraft/kit-schema */
|
|
59
|
-
interface AIContext {
|
|
60
|
-
chat(messages: Array<{
|
|
61
|
-
role: 'user' | 'assistant';
|
|
62
|
-
content: string;
|
|
63
|
-
}>, opts?: {
|
|
64
|
-
system?: string;
|
|
65
|
-
model?: string;
|
|
66
|
-
}): AsyncIterable<string>;
|
|
67
|
-
embed(text: string | string[]): Promise<number[][]>;
|
|
68
|
-
}
|
|
69
|
-
/** @see AppHallContext in @soulcraft/kit-schema */
|
|
70
|
-
interface HallContext {
|
|
71
|
-
joinRoom(roomId: string, options?: {
|
|
72
|
-
audio?: boolean;
|
|
73
|
-
video?: boolean;
|
|
74
|
-
}): Promise<void>;
|
|
75
|
-
leaveRoom(): void;
|
|
76
|
-
readonly connected: boolean;
|
|
77
|
-
readonly roomId: string | null;
|
|
78
|
-
on(event: 'participant-joined' | 'participant-left' | 'error', handler: (...args: unknown[]) => void): () => void;
|
|
79
|
-
}
|
|
80
|
-
/** @see AppPulseContext in @soulcraft/kit-schema */
|
|
81
|
-
interface PulseContext {
|
|
82
|
-
track(event: string, properties?: Record<string, string | number | boolean>): void;
|
|
83
|
-
identify(userId: string, traits?: Record<string, string | number | boolean>): void;
|
|
84
|
-
}
|
|
85
|
-
/** @see AppFilesContext in @soulcraft/kit-schema */
|
|
86
|
-
interface FilesContext {
|
|
87
|
-
upload(file: File | Blob, path: string): Promise<string>;
|
|
88
|
-
read(path: string): Promise<Blob>;
|
|
89
|
-
delete(path: string): Promise<void>;
|
|
90
|
-
list(prefix: string): Promise<string[]>;
|
|
91
|
-
}
|
|
92
|
-
/** @see AppNotifyContext in @soulcraft/kit-schema */
|
|
93
|
-
interface NotifyContext {
|
|
94
|
-
email(to: string, subject: string, body: string, opts?: {
|
|
95
|
-
html?: string;
|
|
96
|
-
replyTo?: string;
|
|
97
|
-
}): Promise<void>;
|
|
98
|
-
sms(to: string, message: string): Promise<void>;
|
|
99
|
-
push(userId: string, payload: {
|
|
100
|
-
title: string;
|
|
101
|
-
body: string;
|
|
102
|
-
url?: string;
|
|
103
|
-
}): Promise<void>;
|
|
104
|
-
}
|
|
105
|
-
/** @see AppWebSocketContext in @soulcraft/kit-schema */
|
|
106
|
-
interface WebSocketContext {
|
|
107
|
-
on<T = unknown>(event: string, handler: (data: T) => void): () => void;
|
|
108
|
-
emit(event: string, data: unknown): void;
|
|
109
|
-
readonly connected: boolean;
|
|
110
|
-
}
|
|
111
|
-
/** @see AppServicesContext in @soulcraft/kit-schema */
|
|
112
|
-
interface ServicesContext {
|
|
113
|
-
bookings: unknown;
|
|
114
|
-
transactions: unknown;
|
|
115
|
-
inventory: unknown;
|
|
116
|
-
customers: unknown;
|
|
117
|
-
subscriptions: unknown;
|
|
118
|
-
support: unknown;
|
|
119
|
-
loyalty: unknown;
|
|
120
|
-
analytics: unknown;
|
|
121
|
-
}
|
|
122
|
-
/** @see AppAuthContext in @soulcraft/kit-schema */
|
|
123
|
-
interface AuthContext {
|
|
124
|
-
user: {
|
|
125
|
-
id: string;
|
|
126
|
-
name: string;
|
|
127
|
-
email: string;
|
|
128
|
-
} | null;
|
|
129
|
-
role: unknown;
|
|
130
|
-
can(capability: string): boolean;
|
|
131
|
-
signOut(): Promise<void>;
|
|
132
|
-
getToken(): Promise<string>;
|
|
133
|
-
}
|
|
134
|
-
/** Structurally matches AppRuntimeContext from @soulcraft/kit-schema. */
|
|
135
|
-
export interface AppContext {
|
|
136
|
-
brainy: unknown;
|
|
137
|
-
auth: AuthContext;
|
|
138
|
-
kit: unknown;
|
|
139
|
-
ws: WebSocketContext;
|
|
140
|
-
services: ServicesContext;
|
|
141
|
-
ai: AIContext;
|
|
142
|
-
files: FilesContext;
|
|
143
|
-
notify: NotifyContext;
|
|
144
|
-
hall: HallContext;
|
|
145
|
-
pulse: PulseContext;
|
|
146
|
-
config?: Record<string, string | number | boolean> | undefined;
|
|
147
|
-
slot?: string | undefined;
|
|
148
|
-
}
|
|
149
|
-
/** HTTP transport config for fetch-based proxy calls (Venue production). */
|
|
150
|
-
export interface HttpProxyConfig {
|
|
151
|
-
/** Base URL for API calls (e.g. '' for same-origin, or 'https://venue.example.com'). */
|
|
152
|
-
baseUrl: string;
|
|
153
|
-
/** Whether to include credentials (cookies) on fetch calls. */
|
|
154
|
-
credentials: boolean;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Options for {@link createAppContext}.
|
|
158
|
-
*/
|
|
159
|
-
export interface CreateAppContextOptions {
|
|
160
|
-
/**
|
|
161
|
-
* Base URL for HTTP API calls.
|
|
162
|
-
* Venue: same-origin (empty string). Workshop standalone: unused.
|
|
163
|
-
*/
|
|
164
|
-
baseUrl?: string;
|
|
165
|
-
/** Pre-built Brainy proxy (if the caller already has one). */
|
|
166
|
-
brainy?: SoulcraftBrainy;
|
|
167
|
-
/** Transport for Brainy RPC (used to build brainy if `brainy` not provided). */
|
|
168
|
-
transport?: SDKTransport;
|
|
169
|
-
/**
|
|
170
|
-
* PostMessage transport for non-brainy API calls in Workshop dev.
|
|
171
|
-
* When provided, all non-brainy calls go through PostMessage.
|
|
172
|
-
* When omitted, all calls use HTTP fetch to `baseUrl`.
|
|
173
|
-
*/
|
|
174
|
-
workshopTransport?: WorkshopTransport;
|
|
175
|
-
/** Auth context injected by the host. */
|
|
176
|
-
auth?: Partial<AuthContext>;
|
|
177
|
-
/** Kit metadata injected by the host. */
|
|
178
|
-
kit?: unknown;
|
|
179
|
-
/** Slot path for file operations. */
|
|
180
|
-
slot?: string;
|
|
181
|
-
/** Site config overrides. */
|
|
182
|
-
config?: Record<string, string | number | boolean>;
|
|
183
|
-
/** Include credentials on fetch calls (Venue same-origin). Default: false. */
|
|
184
|
-
credentials?: boolean;
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Build a full {@link AppContext} (structurally matches `AppRuntimeContext`)
|
|
188
|
-
* from minimal options.
|
|
189
|
-
*
|
|
190
|
-
* @param options - Configuration for the app context.
|
|
191
|
-
* @returns A fully-wired app runtime context.
|
|
192
|
-
*
|
|
193
|
-
* @example Workshop kit app
|
|
194
|
-
* ```typescript
|
|
195
|
-
* export const soulcraft = createAppContext({
|
|
196
|
-
* transport: new PostMessageTransport(origin),
|
|
197
|
-
* workshopTransport: new WorkshopTransport(origin),
|
|
198
|
-
* })
|
|
199
|
-
* // soulcraft.brainy, soulcraft.ai, soulcraft.pulse, etc.
|
|
200
|
-
* ```
|
|
201
|
-
*
|
|
202
|
-
* @example Venue production app
|
|
203
|
-
* ```typescript
|
|
204
|
-
* const soulcraft = createAppContext({
|
|
205
|
-
* brainy: existingProxy,
|
|
206
|
-
* auth: appAuth,
|
|
207
|
-
* kit: kitManifest,
|
|
208
|
-
* credentials: true,
|
|
209
|
-
* })
|
|
210
|
-
* ```
|
|
211
|
-
*/
|
|
212
|
-
export declare function createAppContext(options: CreateAppContextOptions): AppContext;
|
|
213
|
-
export {};
|
|
214
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/app-context/index.ts"],"names":[],"mappings":"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"}
|