@soulcraft/sdk 1.4.12 → 1.5.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.
Files changed (54) hide show
  1. package/dist/client/create-client-sdk.d.ts +99 -0
  2. package/dist/client/create-client-sdk.d.ts.map +1 -0
  3. package/dist/client/create-client-sdk.js +174 -0
  4. package/dist/client/create-client-sdk.js.map +1 -0
  5. package/dist/client/index.d.ts +1 -0
  6. package/dist/client/index.d.ts.map +1 -1
  7. package/dist/client/index.js +2 -0
  8. package/dist/client/index.js.map +1 -1
  9. package/dist/index.d.ts +8 -8
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +13 -8
  12. package/dist/index.js.map +1 -1
  13. package/dist/modules/auth/middleware.d.ts +246 -68
  14. package/dist/modules/auth/middleware.d.ts.map +1 -1
  15. package/dist/modules/auth/middleware.js +369 -67
  16. package/dist/modules/auth/middleware.js.map +1 -1
  17. package/dist/modules/auth/types.d.ts +4 -3
  18. package/dist/modules/auth/types.d.ts.map +1 -1
  19. package/dist/modules/brainy/errors.d.ts +16 -6
  20. package/dist/modules/brainy/errors.d.ts.map +1 -1
  21. package/dist/modules/brainy/errors.js +21 -11
  22. package/dist/modules/brainy/errors.js.map +1 -1
  23. package/dist/server/from-license.d.ts.map +1 -1
  24. package/dist/server/from-license.js +11 -4
  25. package/dist/server/from-license.js.map +1 -1
  26. package/dist/server/index.d.ts +3 -3
  27. package/dist/server/index.d.ts.map +1 -1
  28. package/dist/server/index.js +3 -3
  29. package/dist/server/index.js.map +1 -1
  30. package/dist/server/instance-pool.d.ts +12 -35
  31. package/dist/server/instance-pool.d.ts.map +1 -1
  32. package/dist/server/instance-pool.js +14 -44
  33. package/dist/server/instance-pool.js.map +1 -1
  34. package/dist/server/postmessage-handler.d.ts +25 -0
  35. package/dist/server/postmessage-handler.d.ts.map +1 -1
  36. package/dist/server/postmessage-handler.js +13 -0
  37. package/dist/server/postmessage-handler.js.map +1 -1
  38. package/dist/transports/http.d.ts +1 -1
  39. package/dist/transports/http.d.ts.map +1 -1
  40. package/dist/transports/http.js +5 -2
  41. package/dist/transports/http.js.map +1 -1
  42. package/dist/transports/postmessage.d.ts +13 -7
  43. package/dist/transports/postmessage.d.ts.map +1 -1
  44. package/dist/transports/postmessage.js +24 -8
  45. package/dist/transports/postmessage.js.map +1 -1
  46. package/dist/transports/sse.d.ts +5 -1
  47. package/dist/transports/sse.d.ts.map +1 -1
  48. package/dist/transports/sse.js +12 -3
  49. package/dist/transports/sse.js.map +1 -1
  50. package/dist/transports/ws.d.ts +7 -3
  51. package/dist/transports/ws.d.ts.map +1 -1
  52. package/dist/transports/ws.js +28 -9
  53. package/dist/transports/ws.js.map +1 -1
  54. package/package.json +17 -5
@@ -0,0 +1,99 @@
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 { ClientSDKOptions } from '../types.js';
73
+ import type { SoulcraftSDK } from '../types.js';
74
+ /**
75
+ * Create a client-mode `SoulcraftSDK` from the given options.
76
+ *
77
+ * Selects the transport specified by `options.transport`, wires auth, and returns
78
+ * a `SoulcraftSDK` whose `sdk.brainy.*` surface is identical to server mode.
79
+ *
80
+ * For `'ws'` transport, call `await sdk.connect!()` before making any `sdk.brainy.*`
81
+ * calls to establish the WebSocket connection.
82
+ *
83
+ * @param options - Client SDK options including transport, baseUrl, and auth.
84
+ * @returns A `SoulcraftSDK` backed by the chosen transport.
85
+ *
86
+ * @example HTTP transport
87
+ * ```typescript
88
+ * const sdk = createClientSDK({
89
+ * mode: 'client',
90
+ * product: 'workshop',
91
+ * transport: 'http',
92
+ * baseUrl: 'https://workshop.soulcraft.com',
93
+ * auth: 'cookie',
94
+ * })
95
+ * const results = await sdk.brainy.find({ query: 'candle inventory' })
96
+ * ```
97
+ */
98
+ export declare function createClientSDK(options: ClientSDKOptions): SoulcraftSDK;
99
+ //# sourceMappingURL=create-client-sdk.d.ts.map
@@ -0,0 +1 @@
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,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAA6B,MAAM,aAAa,CAAA;AAO1E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,YAAY,CA6EvE"}
@@ -0,0 +1,174 @@
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
+ // VFS and versions are sub-namespaces of the Brainy proxy.
124
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
125
+ const vfs = brainyProxy.vfs;
126
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
127
+ const versions = brainyProxy.versions;
128
+ const sdk = {
129
+ brainy: brainyProxy,
130
+ vfs,
131
+ versions,
132
+ // Client mode stubs — these module namespaces are server-only.
133
+ // Accessing them from a client app is a usage error; throw explicitly.
134
+ get auth() {
135
+ throw new Error('sdk.auth is not available in client mode — use server-side auth middleware');
136
+ },
137
+ get license() {
138
+ throw new Error('sdk.license is not available in client mode');
139
+ },
140
+ get ai() {
141
+ throw new Error('sdk.ai is not available in client mode — use server-side AI endpoints');
142
+ },
143
+ get events() {
144
+ throw new Error('sdk.events is not available in client mode');
145
+ },
146
+ get skills() {
147
+ throw new Error('sdk.skills is not available in client mode');
148
+ },
149
+ get kits() {
150
+ throw new Error('sdk.kits is not available in client mode');
151
+ },
152
+ get billing() {
153
+ throw new Error('sdk.billing is not available in client mode');
154
+ },
155
+ get notifications() {
156
+ throw new Error('sdk.notifications is not available in client mode');
157
+ },
158
+ async connect() {
159
+ if (transportType === 'ws') {
160
+ await transport.connect();
161
+ }
162
+ else if (transportType === 'sse') {
163
+ ;
164
+ transport.connect();
165
+ }
166
+ // HTTP is stateless — connect is a no-op.
167
+ },
168
+ async disconnect() {
169
+ await transport.close();
170
+ },
171
+ };
172
+ return sdk;
173
+ }
174
+ //# sourceMappingURL=create-client-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-client-sdk.js","sourceRoot":"","sources":["../../src/client/create-client-sdk.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,7 @@
51
51
  * sse.onEvent((event) => refreshUI(event))
52
52
  * ```
53
53
  */
54
+ export { createClientSDK } from './create-client-sdk.js';
54
55
  export { HttpTransport } from '../transports/http.js';
55
56
  export { WsTransport } from '../transports/ws.js';
56
57
  export { SseTransport } from '../transports/sse.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAC3F,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,GACb,MAAM,0BAA0B,CAAA;AAGjC,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,sBAAsB,GACvB,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAC3F,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,YAAY,GACb,MAAM,0BAA0B,CAAA;AAGjC,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,sBAAsB,GACvB,MAAM,6BAA6B,CAAA"}
@@ -51,6 +51,8 @@
51
51
  * sse.onEvent((event) => refreshUI(event))
52
52
  * ```
53
53
  */
54
+ // ── Client SDK factory ────────────────────────────────────────────────────────
55
+ export { createClientSDK } from './create-client-sdk.js';
54
56
  // ── Transport classes ─────────────────────────────────────────────────────────
55
57
  export { HttpTransport } from '../transports/http.js';
56
58
  export { WsTransport } from '../transports/ws.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,iFAAiF;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAInE,iFAAiF;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAE9D,iFAAiF;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAoBzD,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,sBAAsB,GACvB,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,iFAAiF;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,iFAAiF;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAInE,iFAAiF;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAE9D,iFAAiF;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAoBzD,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,sBAAsB,GACvB,MAAM,6BAA6B,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,26 +1,26 @@
1
1
  /**
2
2
  * @module @soulcraft/sdk
3
- * @description Shared entry point for @soulcraft/sdk. Exports the createSDK factory,
4
- * all shared types, and re-exports from every module namespace. This entry point is
5
- * safe to import in any environment (server or browser).
3
+ * @description Shared entry point for @soulcraft/sdk. Exports all shared types and
4
+ * environment-agnostic constants. This entry point is safe to import in any environment
5
+ * (server or browser).
6
6
  *
7
- * For server-specific exports (Brainy lifecycle, Cortex, auth middleware, RPC handlers),
8
- * use `@soulcraft/sdk/server`.
7
+ * For server-specific exports (Brainy lifecycle, Cortex, auth middleware, RPC handlers,
8
+ * `createSDK`, `computeEmailHash`, `createCapabilityToken`, `verifyCapabilityToken`,
9
+ * `getAuthMode`, `getOIDCClientConfig`), use `@soulcraft/sdk/server`.
9
10
  *
10
- * For browser-specific exports (HTTP/WS/SSE transports, cookie auth), use
11
+ * For browser-specific exports (HTTP/WS/SSE transports, `createClientSDK`), use
11
12
  * `@soulcraft/sdk/client`.
12
13
  */
13
14
  export type { SoulcraftSDK, SDKOptions, ServerSDKOptions, ClientSDKOptions } from './types.js';
14
15
  export type { SoulcraftBrainy } from './modules/brainy/types.js';
15
16
  export type { Entity, Relation, Result, AddParams, UpdateParams, RelateParams, FindParams, BrainyConfig, AggregateDefinition, DiagnosticsResult, MigrationResult, MigrateOptions, MigrationPreview, NounType, VerbType, BrainyChangeEvent, BrainyChangeEntity, BrainyChangeRelation, } from './modules/brainy/types.js';
16
17
  export type { CreateCapabilityTokenOptions, CapabilityTokenClaims, } from './modules/brainy/auth.js';
17
- export { createCapabilityToken, verifyCapabilityToken, } from './modules/brainy/auth.js';
18
18
  export { SDKError, SDKDisconnectedError, SDKTimeoutError, SDKAuthError, SDKForbiddenError, SDKRpcError, SDKMethodNotFoundError, } from './modules/brainy/errors.js';
19
19
  export type { VfsModule } from './modules/vfs/types.js';
20
20
  export type { VersionsModule } from './modules/versions/types.js';
21
21
  export type { HallModule, HallRoom, HallRoomHandle, HallRoomEvents, HallRoomHandleEvents, HallConnectionOptions, RoomOptions, ConceptInput, RecordingManifest, TranscriptEvent, ConceptMentionEvent, RelationProposedEvent, SpeakerChangedEvent, PeerJoinedEvent, PeerLeftEvent, } from './modules/hall/types.js';
22
22
  export type { AuthModule, PlatformRole, SoulcraftAuthProvider, SoulcraftOrganization, SoulcraftUserFields, SoulcraftSessionUser, SoulcraftSession, OIDCClientConfig, AuthMode, } from './modules/auth/types.js';
23
- export { SOULCRAFT_USER_FIELDS, SOULCRAFT_SESSION_CONFIG, computeEmailHash, getAuthMode, getOIDCClientConfig, } from './modules/auth/config.js';
23
+ export { SOULCRAFT_USER_FIELDS, SOULCRAFT_SESSION_CONFIG, } from './modules/auth/config.js';
24
24
  export type { AiModule, AiCompleteOptions, AiCompleteResult, AiStreamOptions, AiStreamEvent, AiToolCall, AiMessage, AiContentBlock, AiTool, AiModel, } from './modules/ai/types.js';
25
25
  export { AI_MODELS } from './modules/ai/types.js';
26
26
  export type { EventsModule, SoulcraftEventMap, SoulcraftEventName, VfsWriteEvent, VfsDeleteEvent, VfsRenameEvent, } from './modules/events/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,18 +1,23 @@
1
1
  /**
2
2
  * @module @soulcraft/sdk
3
- * @description Shared entry point for @soulcraft/sdk. Exports the createSDK factory,
4
- * all shared types, and re-exports from every module namespace. This entry point is
5
- * safe to import in any environment (server or browser).
3
+ * @description Shared entry point for @soulcraft/sdk. Exports all shared types and
4
+ * environment-agnostic constants. This entry point is safe to import in any environment
5
+ * (server or browser).
6
6
  *
7
- * For server-specific exports (Brainy lifecycle, Cortex, auth middleware, RPC handlers),
8
- * use `@soulcraft/sdk/server`.
7
+ * For server-specific exports (Brainy lifecycle, Cortex, auth middleware, RPC handlers,
8
+ * `createSDK`, `computeEmailHash`, `createCapabilityToken`, `verifyCapabilityToken`,
9
+ * `getAuthMode`, `getOIDCClientConfig`), use `@soulcraft/sdk/server`.
9
10
  *
10
- * For browser-specific exports (HTTP/WS/SSE transports, cookie auth), use
11
+ * For browser-specific exports (HTTP/WS/SSE transports, `createClientSDK`), use
11
12
  * `@soulcraft/sdk/client`.
12
13
  */
13
- export { createCapabilityToken, verifyCapabilityToken, } from './modules/brainy/auth.js';
14
+ // createCapabilityToken and verifyCapabilityToken are server-only (node:crypto).
15
+ // Import from @soulcraft/sdk/server.
14
16
  export { SDKError, SDKDisconnectedError, SDKTimeoutError, SDKAuthError, SDKForbiddenError, SDKRpcError, SDKMethodNotFoundError, } from './modules/brainy/errors.js';
15
- export { SOULCRAFT_USER_FIELDS, SOULCRAFT_SESSION_CONFIG, computeEmailHash, getAuthMode, getOIDCClientConfig, } from './modules/auth/config.js';
17
+ // SOULCRAFT_USER_FIELDS and SOULCRAFT_SESSION_CONFIG are pure constants safe on shared entry.
18
+ // computeEmailHash, getAuthMode, getOIDCClientConfig use node:crypto / process.env.
19
+ // Import those from @soulcraft/sdk/server.
20
+ export { SOULCRAFT_USER_FIELDS, SOULCRAFT_SESSION_CONFIG, } from './modules/auth/config.js';
16
21
  export { AI_MODELS } from './modules/ai/types.js';
17
22
  export { SOULCRAFT_FORMATS } from './modules/formats/types.js';
18
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AAuCnC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,gBAAgB,EAChB,WAAW,EACX,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AAejC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAoFjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA8BH,iFAAiF;AACjF,qCAAqC;AACrC,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AAuCnC,gGAAgG;AAChG,oFAAoF;AACpF,2CAA2C;AAC3C,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AAejC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAoFjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA"}