@soulcraft/sdk 1.4.12 → 1.5.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.
Files changed (48) 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/brainy/errors.d.ts +16 -6
  14. package/dist/modules/brainy/errors.d.ts.map +1 -1
  15. package/dist/modules/brainy/errors.js +21 -11
  16. package/dist/modules/brainy/errors.js.map +1 -1
  17. package/dist/server/from-license.d.ts.map +1 -1
  18. package/dist/server/from-license.js +11 -4
  19. package/dist/server/from-license.js.map +1 -1
  20. package/dist/server/index.d.ts +1 -1
  21. package/dist/server/index.d.ts.map +1 -1
  22. package/dist/server/index.js +1 -1
  23. package/dist/server/index.js.map +1 -1
  24. package/dist/server/instance-pool.d.ts +12 -35
  25. package/dist/server/instance-pool.d.ts.map +1 -1
  26. package/dist/server/instance-pool.js +14 -44
  27. package/dist/server/instance-pool.js.map +1 -1
  28. package/dist/server/postmessage-handler.d.ts +25 -0
  29. package/dist/server/postmessage-handler.d.ts.map +1 -1
  30. package/dist/server/postmessage-handler.js +13 -0
  31. package/dist/server/postmessage-handler.js.map +1 -1
  32. package/dist/transports/http.d.ts +1 -1
  33. package/dist/transports/http.d.ts.map +1 -1
  34. package/dist/transports/http.js +5 -2
  35. package/dist/transports/http.js.map +1 -1
  36. package/dist/transports/postmessage.d.ts +13 -7
  37. package/dist/transports/postmessage.d.ts.map +1 -1
  38. package/dist/transports/postmessage.js +24 -8
  39. package/dist/transports/postmessage.js.map +1 -1
  40. package/dist/transports/sse.d.ts +5 -1
  41. package/dist/transports/sse.d.ts.map +1 -1
  42. package/dist/transports/sse.js +12 -3
  43. package/dist/transports/sse.js.map +1 -1
  44. package/dist/transports/ws.d.ts +7 -3
  45. package/dist/transports/ws.d.ts.map +1 -1
  46. package/dist/transports/ws.js +28 -9
  47. package/dist/transports/ws.js.map +1 -1
  48. 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"}
@@ -5,6 +5,8 @@
5
5
  * All errors thrown by SDK transports and handlers extend `SDKError` so callers
6
6
  * can distinguish Soulcraft-specific failures from generic `Error`s with a single
7
7
  * `instanceof` check. Machine-readable `code` fields allow programmatic handling.
8
+ * All errors support `{ cause }` chaining so the original underlying error is
9
+ * preserved when wrapping (e.g. a network TypeError inside `SDKDisconnectedError`).
8
10
  *
9
11
  * @example
10
12
  * ```typescript
@@ -24,7 +26,8 @@
24
26
  /**
25
27
  * Base class for all @soulcraft/sdk errors.
26
28
  *
27
- * Carries a machine-readable `code` for programmatic error handling.
29
+ * Carries a machine-readable `code` for programmatic error handling and optional
30
+ * `cause` chaining so the original underlying error is never lost when wrapping.
28
31
  * All SDK errors extend this class so callers can use a single `instanceof SDKError` check.
29
32
  */
30
33
  export declare class SDKError extends Error {
@@ -33,8 +36,9 @@ export declare class SDKError extends Error {
33
36
  /**
34
37
  * @param code - Machine-readable identifier.
35
38
  * @param message - Human-readable description.
39
+ * @param cause - Optional underlying error that caused this one.
36
40
  */
37
- constructor(code: string, message: string);
41
+ constructor(code: string, message: string, cause?: unknown);
38
42
  }
39
43
  /**
40
44
  * Thrown when an RPC call is attempted while the transport is not connected.
@@ -43,7 +47,10 @@ export declare class SDKError extends Error {
43
47
  * WebSocket transport when the connection is in a disconnected or closed state.
44
48
  */
45
49
  export declare class SDKDisconnectedError extends SDKError {
46
- constructor();
50
+ /**
51
+ * @param cause - Optional underlying error (e.g. a network TypeError).
52
+ */
53
+ constructor(cause?: unknown);
47
54
  }
48
55
  /**
49
56
  * Thrown when an RPC call exceeds the configured response timeout.
@@ -74,8 +81,9 @@ export declare class SDKTimeoutError extends SDKError {
74
81
  export declare class SDKAuthError extends SDKError {
75
82
  /**
76
83
  * @param detail - Optional detail appended to the error message.
84
+ * @param cause - Optional underlying error.
77
85
  */
78
- constructor(detail?: string);
86
+ constructor(detail?: string, cause?: unknown);
79
87
  }
80
88
  /**
81
89
  * Thrown when the server rejects an RPC call due to insufficient permissions.
@@ -86,8 +94,9 @@ export declare class SDKAuthError extends SDKError {
86
94
  export declare class SDKForbiddenError extends SDKError {
87
95
  /**
88
96
  * @param detail - Optional detail appended to the error message.
97
+ * @param cause - Optional underlying error.
89
98
  */
90
- constructor(detail?: string);
99
+ constructor(detail?: string, cause?: unknown);
91
100
  }
92
101
  /**
93
102
  * Thrown when a remote RPC call fails on the server side.
@@ -100,8 +109,9 @@ export declare class SDKRpcError extends SDKError {
100
109
  /**
101
110
  * @param serverCode - The error code returned by the server.
102
111
  * @param serverMessage - The human-readable message returned by the server.
112
+ * @param cause - Optional underlying error.
103
113
  */
104
- constructor(serverCode: string, serverMessage: string);
114
+ constructor(serverCode: string, serverMessage: string, cause?: unknown);
105
115
  }
106
116
  /**
107
117
  * Thrown when a method path cannot be resolved on the target Brainy instance.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/modules/brainy/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,wEAAwE;IACxE,SAAgB,IAAI,EAAE,MAAM,CAAA;IAE5B;;;OAGG;gBACS,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;;CAKjD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,8EAA8E;IAC9E,SAAgB,MAAM,EAAE,MAAM,CAAA;IAE9B;;OAEG;gBACS,MAAM,EAAE,MAAM;CAK3B;AAED;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,QAAQ;IACxC;;OAEG;gBACS,MAAM,CAAC,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C;;OAEG;gBACS,MAAM,CAAC,EAAE,MAAM;CAI5B;AAED;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,QAAQ;IACvC,qEAAqE;IACrE,SAAgB,UAAU,EAAE,MAAM,CAAA;IAElC;;;OAGG;gBACS,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;CAKtD;AAED;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,QAAQ;IAClD;;OAEG;gBACS,MAAM,EAAE,MAAM;CAI3B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/modules/brainy/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,wEAAwE;IACxE,SAAgB,IAAI,EAAE,MAAM,CAAA;IAE5B;;;;OAIG;gBACS,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAK3D;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD;;OAEG;gBACS,KAAK,CAAC,EAAE,OAAO;CAI5B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,8EAA8E;IAC9E,SAAgB,MAAM,EAAE,MAAM,CAAA;IAE9B;;OAEG;gBACS,MAAM,EAAE,MAAM;CAK3B;AAED;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,QAAQ;IACxC;;;OAGG;gBACS,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C;;;OAGG;gBACS,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,QAAQ;IACvC,qEAAqE;IACrE,SAAgB,UAAU,EAAE,MAAM,CAAA;IAElC;;;;OAIG;gBACS,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAKvE;AAED;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,QAAQ;IAClD;;OAEG;gBACS,MAAM,EAAE,MAAM;CAI3B"}
@@ -5,6 +5,8 @@
5
5
  * All errors thrown by SDK transports and handlers extend `SDKError` so callers
6
6
  * can distinguish Soulcraft-specific failures from generic `Error`s with a single
7
7
  * `instanceof` check. Machine-readable `code` fields allow programmatic handling.
8
+ * All errors support `{ cause }` chaining so the original underlying error is
9
+ * preserved when wrapping (e.g. a network TypeError inside `SDKDisconnectedError`).
8
10
  *
9
11
  * @example
10
12
  * ```typescript
@@ -24,7 +26,8 @@
24
26
  /**
25
27
  * Base class for all @soulcraft/sdk errors.
26
28
  *
27
- * Carries a machine-readable `code` for programmatic error handling.
29
+ * Carries a machine-readable `code` for programmatic error handling and optional
30
+ * `cause` chaining so the original underlying error is never lost when wrapping.
28
31
  * All SDK errors extend this class so callers can use a single `instanceof SDKError` check.
29
32
  */
30
33
  export class SDKError extends Error {
@@ -33,9 +36,10 @@ export class SDKError extends Error {
33
36
  /**
34
37
  * @param code - Machine-readable identifier.
35
38
  * @param message - Human-readable description.
39
+ * @param cause - Optional underlying error that caused this one.
36
40
  */
37
- constructor(code, message) {
38
- super(message);
41
+ constructor(code, message, cause) {
42
+ super(message, cause !== undefined ? { cause } : undefined);
39
43
  this.name = 'SDKError';
40
44
  this.code = code;
41
45
  }
@@ -47,8 +51,11 @@ export class SDKError extends Error {
47
51
  * WebSocket transport when the connection is in a disconnected or closed state.
48
52
  */
49
53
  export class SDKDisconnectedError extends SDKError {
50
- constructor() {
51
- super('DISCONNECTED', 'SDK: not connected to a Brainy server');
54
+ /**
55
+ * @param cause - Optional underlying error (e.g. a network TypeError).
56
+ */
57
+ constructor(cause) {
58
+ super('DISCONNECTED', 'SDK: not connected to a Brainy server', cause);
52
59
  this.name = 'SDKDisconnectedError';
53
60
  }
54
61
  }
@@ -85,9 +92,10 @@ export class SDKTimeoutError extends SDKError {
85
92
  export class SDKAuthError extends SDKError {
86
93
  /**
87
94
  * @param detail - Optional detail appended to the error message.
95
+ * @param cause - Optional underlying error.
88
96
  */
89
- constructor(detail) {
90
- super('UNAUTHORIZED', `SDK: authentication rejected${detail ? ` — ${detail}` : ''}`);
97
+ constructor(detail, cause) {
98
+ super('UNAUTHORIZED', `SDK: authentication rejected${detail ? ` — ${detail}` : ''}`, cause);
91
99
  this.name = 'SDKAuthError';
92
100
  }
93
101
  }
@@ -100,9 +108,10 @@ export class SDKAuthError extends SDKError {
100
108
  export class SDKForbiddenError extends SDKError {
101
109
  /**
102
110
  * @param detail - Optional detail appended to the error message.
111
+ * @param cause - Optional underlying error.
103
112
  */
104
- constructor(detail) {
105
- super('FORBIDDEN', `SDK: insufficient permissions${detail ? ` — ${detail}` : ''}`);
113
+ constructor(detail, cause) {
114
+ super('FORBIDDEN', `SDK: insufficient permissions${detail ? ` — ${detail}` : ''}`, cause);
106
115
  this.name = 'SDKForbiddenError';
107
116
  }
108
117
  }
@@ -117,9 +126,10 @@ export class SDKRpcError extends SDKError {
117
126
  /**
118
127
  * @param serverCode - The error code returned by the server.
119
128
  * @param serverMessage - The human-readable message returned by the server.
129
+ * @param cause - Optional underlying error.
120
130
  */
121
- constructor(serverCode, serverMessage) {
122
- super('RPC_ERROR', `SDK: remote error [${serverCode}] ${serverMessage}`);
131
+ constructor(serverCode, serverMessage, cause) {
132
+ super('RPC_ERROR', `SDK: remote error [${serverCode}] ${serverMessage}`, cause);
123
133
  this.name = 'SDKRpcError';
124
134
  this.serverCode = serverCode;
125
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/modules/brainy/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,wEAAwE;IACxD,IAAI,CAAQ;IAE5B;;;OAGG;IACH,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IAChD;QACE,KAAK,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAA;QAC9D,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,8EAA8E;IAC9D,MAAM,CAAQ;IAE9B;;OAEG;IACH,YAAY,MAAc;QACxB,KAAK,CAAC,SAAS,EAAE,yBAAyB,MAAM,kBAAkB,CAAC,CAAA;QACnE,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC;;OAEG;IACH,YAAY,MAAe;QACzB,KAAK,CAAC,cAAc,EAAE,+BAA+B,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACpF,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAC7C;;OAEG;IACH,YAAY,MAAe;QACzB,KAAK,CAAC,WAAW,EAAE,gCAAgC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAClF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,qEAAqE;IACrD,UAAU,CAAQ;IAElC;;;OAGG;IACH,YAAY,UAAkB,EAAE,aAAqB;QACnD,KAAK,CAAC,WAAW,EAAE,sBAAsB,UAAU,KAAK,aAAa,EAAE,CAAC,CAAA;QACxE,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD;;OAEG;IACH,YAAY,MAAc;QACxB,KAAK,CAAC,kBAAkB,EAAE,gBAAgB,MAAM,gCAAgC,CAAC,CAAA;QACjF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAA;IACtC,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/modules/brainy/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;GAMG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,wEAAwE;IACxD,IAAI,CAAQ;IAE5B;;;;OAIG;IACH,YAAY,IAAY,EAAE,OAAe,EAAE,KAAe;QACxD,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC3D,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IAChD;;OAEG;IACH,YAAY,KAAe;QACzB,KAAK,CAAC,cAAc,EAAE,uCAAuC,EAAE,KAAK,CAAC,CAAA;QACrE,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,8EAA8E;IAC9D,MAAM,CAAQ;IAE9B;;OAEG;IACH,YAAY,MAAc;QACxB,KAAK,CAAC,SAAS,EAAE,yBAAyB,MAAM,kBAAkB,CAAC,CAAA;QACnE,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC;;;OAGG;IACH,YAAY,MAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,cAAc,EAAE,+BAA+B,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;QAC3F,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAC7C;;;OAGG;IACH,YAAY,MAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,WAAW,EAAE,gCAAgC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;QACzF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,qEAAqE;IACrD,UAAU,CAAQ;IAElC;;;;OAIG;IACH,YAAY,UAAkB,EAAE,aAAqB,EAAE,KAAe;QACpE,KAAK,CAAC,WAAW,EAAE,sBAAsB,UAAU,KAAK,aAAa,EAAE,EAAE,KAAK,CAAC,CAAA;QAC/E,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD;;OAEG;IACH,YAAY,MAAc;QACxB,KAAK,CAAC,kBAAkB,EAAE,gBAAgB,MAAM,gCAAgC,CAAC,CAAA;QACjF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAA;IACtC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"from-license.d.ts","sourceRoot":"","sources":["../../src/server/from-license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAoBjE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yCAAyC;IACzC,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,GAAG,MAAM,CAAA;IACjD,kCAAkC;IAClC,YAAY,CAAC,EAAE,iBAAiB,GAAG,cAAc,GAAG,QAAQ,CAAA;CAC7D;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gFAAgF;IAChF,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAwBD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,OAAO,EAAE,gBAAgB,CAAA;IAEzB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;;;OAQG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAA;IAEtC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAA;IAErC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;IAEpC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;IAE9D;;;;OAIG;IACH,QAAQ,IAAI,IAAI,CAAA;CACjB;AA8HD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,iBAAe,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,CA6H1E;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe;;CAE3B,CAAA"}
1
+ {"version":3,"file":"from-license.d.ts","sourceRoot":"","sources":["../../src/server/from-license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AA2BjE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yCAAyC;IACzC,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,GAAG,MAAM,CAAA;IACjD,kCAAkC;IAClC,YAAY,CAAC,EAAE,iBAAiB,GAAG,cAAc,GAAG,QAAQ,CAAA;CAC7D;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gFAAgF;IAChF,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAwBD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,OAAO,EAAE,gBAAgB,CAAA;IAEzB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;;;OAQG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAA;IAEtC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAA;IAErC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;IAEpC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;IAE9D;;;;OAIG;IACH,QAAQ,IAAI,IAAI,CAAA;CACjB;AA8HD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,iBAAe,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,CA6H1E;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe;;CAE3B,CAAA"}
@@ -71,8 +71,15 @@ import { SDK_VERSION } from '../version.js';
71
71
  const ACTIVATE_URL = 'https://soulcraft.com/api/license/activate';
72
72
  /** Re-validation interval: 4 hours. */
73
73
  const REVALIDATE_INTERVAL_MS = 4 * 60 * 60 * 1000;
74
- /** Path to the cached config bundle on disk. */
75
- const CACHE_PATH = resolve(process.cwd(), '.soulcraft-config.json');
74
+ /**
75
+ * Returns the path to the cached config bundle.
76
+ *
77
+ * Resolved lazily at call-time so the path is always relative to the working
78
+ * directory at the time of the call, not at module load time.
79
+ */
80
+ function getCachePath() {
81
+ return resolve(process.cwd(), '.soulcraft-config.json');
82
+ }
76
83
  // ─────────────────────────────────────────────────────────────────────────────
77
84
  // Internal helpers
78
85
  // ─────────────────────────────────────────────────────────────────────────────
@@ -105,7 +112,7 @@ async function _activate(key, product) {
105
112
  */
106
113
  function _readCache() {
107
114
  try {
108
- const raw = readFileSync(CACHE_PATH, 'utf8');
115
+ const raw = readFileSync(getCachePath(), 'utf8');
109
116
  return JSON.parse(raw);
110
117
  }
111
118
  catch {
@@ -123,7 +130,7 @@ function _writeCache(product, response) {
123
130
  product,
124
131
  response,
125
132
  };
126
- writeFileSync(CACHE_PATH, JSON.stringify(bundle, null, 2), 'utf8');
133
+ writeFileSync(getCachePath(), JSON.stringify(bundle, null, 2), 'utf8');
127
134
  }
128
135
  catch {
129
136
  // Non-fatal — read-only FS or permission error.