@soulcraft/sdk 1.4.6 → 1.4.8
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/modules/formats/types.d.ts +6 -21
- package/dist/modules/formats/types.d.ts.map +1 -1
- package/dist/modules/formats/types.js +6 -21
- package/dist/modules/formats/types.js.map +1 -1
- package/dist/modules/kits/index.d.ts.map +1 -1
- package/dist/modules/kits/index.js +34 -13
- package/dist/modules/kits/index.js.map +1 -1
- package/dist/modules/kits/types.d.ts +66 -2
- package/dist/modules/kits/types.d.ts.map +1 -1
- package/dist/server/from-license.d.ts +35 -0
- package/dist/server/from-license.d.ts.map +1 -1
- package/dist/server/from-license.js +5 -0
- package/dist/server/from-license.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/docs/ADR-001-sdk-design.md +28 -28
- package/docs/ADR-002-transport-protocol.md +248 -0
- package/docs/ADR-003-instance-strategies.md +216 -0
- package/docs/IMPLEMENTATION-PLAN.md +22 -40
- package/docs/KIT-APP-GUIDE.md +932 -0
- package/package.json +1 -1
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
* @module formats/types
|
|
3
3
|
* @description Soulcraft portable content format type definitions.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* These types mirror `@soulcraft/formats` exactly. Once `@soulcraft/formats`
|
|
6
|
+
* ships compiled `.d.ts` output (rather than raw `.ts` source), this module
|
|
7
|
+
* can be replaced with simple re-exports. Until then, the types live here
|
|
8
|
+
* to avoid pulling `@soulcraft/formats`' Zod schemas into the SDK's type-check.
|
|
9
|
+
*
|
|
10
|
+
* See: handoff action "Remove duplicate format types from SDK src/modules/formats/"
|
|
8
11
|
*
|
|
9
12
|
* | Format | Extension | Purpose |
|
|
10
13
|
* |---------|------------------|----------------------------------------------|
|
|
@@ -12,24 +15,6 @@
|
|
|
12
15
|
* | WDOC | `.wdoc` | Rich text documents (TipTap/ProseMirror) |
|
|
13
16
|
* | WSLIDE | `.wslide.json` | Slide deck presentations |
|
|
14
17
|
* | WQUIZ | `.wquiz.json` | Assessments and quizzes |
|
|
15
|
-
*
|
|
16
|
-
* Formats contain no runtime behavior — they are schema contracts. Products
|
|
17
|
-
* read them from the VFS, parse with `JSON.parse()`, and cast to the appropriate
|
|
18
|
-
* interface. The `SoulcraftFormat` discriminant on each document's `format` field
|
|
19
|
-
* enables safe narrowing at runtime.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```typescript
|
|
23
|
-
* import type { WdocDocument, WvizDocument, SoulcraftFormatDocument } from '@soulcraft/sdk'
|
|
24
|
-
*
|
|
25
|
-
* // Read from VFS and narrow to the correct type
|
|
26
|
-
* const buf = await sdk.vfs.readFile('/projects/notes.wdoc')
|
|
27
|
-
* const doc = JSON.parse(buf.toString('utf-8')) as SoulcraftFormatDocument
|
|
28
|
-
* if (doc.format === 'wdoc') {
|
|
29
|
-
* const wdoc = doc as WdocDocument
|
|
30
|
-
* console.log(wdoc.meta.title)
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
18
|
*/
|
|
34
19
|
export type { WvizDocument, WvizEntity, WvizEdge, WvizSnapshot, WvizViewType, } from './wviz.js';
|
|
35
20
|
export type { WdocDocument, WdocMeta, WdocBlock, WdocInlineContent, WdocTextNode, WdocMark, WdocParagraphBlock, WdocHeadingBlock, WdocBlockquoteBlock, WdocCodeBlock, WdocBulletListBlock, WdocOrderedListBlock, WdocListItemBlock, WdocTaskListBlock, WdocTaskItemBlock, WdocImageBlock, WdocVideoBlock, WdocIconBlock, WdocSvgEmbedBlock, WdocEmbedBlock, WdocTableBlock, WdocTableRowBlock, WdocTableCellBlock, WdocTableHeaderBlock, WdocHorizontalRuleBlock, WdocCalloutBlock, } from './wdoc.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/formats/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/formats/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,YAAY,EACV,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,MAAM,aAAa,CAAA;AAEpB,YAAY,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAMnB;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAElE;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,8CAAoF,CAAA;AAElH;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,MAAM,EAAE,eAAe,CAAA;IACvB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAA;CAChB"}
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
* @module formats/types
|
|
3
3
|
* @description Soulcraft portable content format type definitions.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* These types mirror `@soulcraft/formats` exactly. Once `@soulcraft/formats`
|
|
6
|
+
* ships compiled `.d.ts` output (rather than raw `.ts` source), this module
|
|
7
|
+
* can be replaced with simple re-exports. Until then, the types live here
|
|
8
|
+
* to avoid pulling `@soulcraft/formats`' Zod schemas into the SDK's type-check.
|
|
9
|
+
*
|
|
10
|
+
* See: handoff action "Remove duplicate format types from SDK src/modules/formats/"
|
|
8
11
|
*
|
|
9
12
|
* | Format | Extension | Purpose |
|
|
10
13
|
* |---------|------------------|----------------------------------------------|
|
|
@@ -12,24 +15,6 @@
|
|
|
12
15
|
* | WDOC | `.wdoc` | Rich text documents (TipTap/ProseMirror) |
|
|
13
16
|
* | WSLIDE | `.wslide.json` | Slide deck presentations |
|
|
14
17
|
* | WQUIZ | `.wquiz.json` | Assessments and quizzes |
|
|
15
|
-
*
|
|
16
|
-
* Formats contain no runtime behavior — they are schema contracts. Products
|
|
17
|
-
* read them from the VFS, parse with `JSON.parse()`, and cast to the appropriate
|
|
18
|
-
* interface. The `SoulcraftFormat` discriminant on each document's `format` field
|
|
19
|
-
* enables safe narrowing at runtime.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```typescript
|
|
23
|
-
* import type { WdocDocument, WvizDocument, SoulcraftFormatDocument } from '@soulcraft/sdk'
|
|
24
|
-
*
|
|
25
|
-
* // Read from VFS and narrow to the correct type
|
|
26
|
-
* const buf = await sdk.vfs.readFile('/projects/notes.wdoc')
|
|
27
|
-
* const doc = JSON.parse(buf.toString('utf-8')) as SoulcraftFormatDocument
|
|
28
|
-
* if (doc.format === 'wdoc') {
|
|
29
|
-
* const wdoc = doc as WdocDocument
|
|
30
|
-
* console.log(wdoc.meta.title)
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
18
|
*/
|
|
34
19
|
/**
|
|
35
20
|
* All Soulcraft format strings as a const array — useful for validation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/formats/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/formats/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAsEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAA+C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/kits/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAsB,UAAU,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/kits/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAsB,UAAU,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAgDzF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,UAAU,CAoClF"}
|
|
@@ -23,25 +23,28 @@ import { createRequire } from 'node:module';
|
|
|
23
23
|
// createRequire enables CJS-style require() inside an ESM module — the only
|
|
24
24
|
// reliable way to conditionally load optional peer dependencies in Node/Bun ESM.
|
|
25
25
|
const _require = createRequire(import.meta.url);
|
|
26
|
-
|
|
27
|
-
let _registryCache = undefined;
|
|
26
|
+
let _kitsPackage = undefined;
|
|
28
27
|
/**
|
|
29
|
-
*
|
|
30
|
-
* Returns `null` when the package is not installed
|
|
31
|
-
* degrade gracefully rather than throwing.
|
|
28
|
+
* Lazily load the `@soulcraft/kits` optional peer dependency.
|
|
29
|
+
* Returns `null` when the package is not installed; callers degrade gracefully.
|
|
32
30
|
*/
|
|
33
|
-
function
|
|
34
|
-
if (
|
|
35
|
-
return
|
|
31
|
+
function _loadKitsPackage() {
|
|
32
|
+
if (_kitsPackage !== undefined)
|
|
33
|
+
return _kitsPackage;
|
|
36
34
|
try {
|
|
37
|
-
|
|
38
|
-
const kits = _require('@soulcraft/kits');
|
|
39
|
-
_registryCache = kits.kitRegistry ?? null;
|
|
35
|
+
_kitsPackage = _require('@soulcraft/kits');
|
|
40
36
|
}
|
|
41
37
|
catch {
|
|
42
|
-
|
|
38
|
+
_kitsPackage = null;
|
|
43
39
|
}
|
|
44
|
-
return
|
|
40
|
+
return _kitsPackage;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Load the kit registry from the installed `@soulcraft/kits` package.
|
|
44
|
+
* Returns `null` when the package is not installed.
|
|
45
|
+
*/
|
|
46
|
+
function _getBundledRegistry() {
|
|
47
|
+
return _loadKitsPackage()?.kitRegistry ?? null;
|
|
45
48
|
}
|
|
46
49
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
47
50
|
// Factory
|
|
@@ -80,6 +83,24 @@ export function createKitsModule(options = {}) {
|
|
|
80
83
|
return [];
|
|
81
84
|
return Object.values(registry);
|
|
82
85
|
},
|
|
86
|
+
async resolveFilesPath(kitId, product) {
|
|
87
|
+
const pkg = _loadKitsPackage();
|
|
88
|
+
if (!pkg?.resolveKitFilesPath)
|
|
89
|
+
return null;
|
|
90
|
+
return pkg.resolveKitFilesPath(kitId, product);
|
|
91
|
+
},
|
|
92
|
+
async resolveSkillsPath(kitId) {
|
|
93
|
+
const pkg = _loadKitsPackage();
|
|
94
|
+
if (!pkg?.resolveKitSkillsPath)
|
|
95
|
+
return null;
|
|
96
|
+
return pkg.resolveKitSkillsPath(kitId);
|
|
97
|
+
},
|
|
98
|
+
async resolveKitsRoot() {
|
|
99
|
+
const pkg = _loadKitsPackage();
|
|
100
|
+
if (!pkg?.resolveKitsRoot)
|
|
101
|
+
return null;
|
|
102
|
+
return pkg.resolveKitsRoot();
|
|
103
|
+
},
|
|
83
104
|
};
|
|
84
105
|
}
|
|
85
106
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/kits/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG3C,4EAA4E;AAC5E,iFAAiF;AACjF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/kits/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG3C,4EAA4E;AAC5E,iFAAiF;AACjF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAgB/C,IAAI,YAAY,GAAmC,SAAS,CAAA;AAE5D;;;GAGG;AACH,SAAS,gBAAgB;IACvB,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,YAAY,CAAA;IACnD,IAAI,CAAC;QACH,YAAY,GAAG,QAAQ,CAAC,iBAAiB,CAAgB,CAAA;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,IAAI,CAAA;IACrB,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB;IAC1B,OAAO,gBAAgB,EAAE,EAAE,WAAW,IAAI,IAAI,CAAA;AAChD,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAmC,EAAE;IACpE,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,KAAK,SAAS;QACvD,CAAC,CAAC,GAA8C,EAAE,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI;QAClF,CAAC,CAAC,mBAAmB,CAAA;IAEvB,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAa;YACtB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;YAC9B,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAA;YAC1B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAA;QAChC,CAAC;QAED,KAAK,CAAC,IAAI;YACR,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;YAC9B,IAAI,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAA;YACxB,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,OAA6B;YACjE,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;YAC9B,IAAI,CAAC,GAAG,EAAE,mBAAmB;gBAAE,OAAO,IAAI,CAAA;YAC1C,OAAO,GAAG,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;QAED,KAAK,CAAC,iBAAiB,CAAC,KAAa;YACnC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;YAC9B,IAAI,CAAC,GAAG,EAAE,oBAAoB;gBAAE,OAAO,IAAI,CAAA;YAC3C,OAAO,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;QACxC,CAAC;QAED,KAAK,CAAC,eAAe;YACnB,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;YAC9B,IAAI,CAAC,GAAG,EAAE,eAAe;gBAAE,OAAO,IAAI,CAAA;YACtC,OAAO,GAAG,CAAC,eAAe,EAAE,CAAA;QAC9B,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -61,12 +61,15 @@ export interface CreateKitsModuleOptions {
|
|
|
61
61
|
bundledRegistry?: Record<string, SoulcraftKitConfig> | null;
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
* The `sdk.kits.*` namespace — read-only access to the Soulcraft kit registry
|
|
64
|
+
* The `sdk.kits.*` namespace — read-only access to the Soulcraft kit registry
|
|
65
|
+
* and template file paths.
|
|
65
66
|
*
|
|
66
67
|
* Backed by the `@soulcraft/kits` package (a peer dependency). If the package
|
|
67
68
|
* is not installed, `load()` returns `null` and `list()` returns an empty array.
|
|
69
|
+
* Path resolver methods return `null` when the package is absent or the directory
|
|
70
|
+
* does not exist.
|
|
68
71
|
*
|
|
69
|
-
* @example
|
|
72
|
+
* @example Load a kit and run AI with its persona
|
|
70
73
|
* ```typescript
|
|
71
74
|
* const kit = await sdk.kits.load('wicks-and-whiskers')
|
|
72
75
|
* if (kit) {
|
|
@@ -76,6 +79,12 @@ export interface CreateKitsModuleOptions {
|
|
|
76
79
|
* })
|
|
77
80
|
* }
|
|
78
81
|
* ```
|
|
82
|
+
*
|
|
83
|
+
* @example Locate kit template files on disk
|
|
84
|
+
* ```typescript
|
|
85
|
+
* const dir = await sdk.kits.resolveFilesPath('blog-series', 'workshop')
|
|
86
|
+
* // → '/path/to/node_modules/@soulcraft/kits/kits/blog-series/workshop/files'
|
|
87
|
+
* ```
|
|
79
88
|
*/
|
|
80
89
|
export interface KitsModule {
|
|
81
90
|
/**
|
|
@@ -107,5 +116,60 @@ export interface KitsModule {
|
|
|
107
116
|
* ```
|
|
108
117
|
*/
|
|
109
118
|
list(): Promise<SoulcraftKitConfig[]>;
|
|
119
|
+
/**
|
|
120
|
+
* Resolve the absolute path to a kit's product-specific template files directory.
|
|
121
|
+
*
|
|
122
|
+
* Returns the path to `kits/{kitId}/{product}/files/` inside the installed
|
|
123
|
+
* `@soulcraft/kits` npm package, or `null` if the directory does not exist
|
|
124
|
+
* (the kit has no template files for that product, or the package is absent).
|
|
125
|
+
*
|
|
126
|
+
* This is the single source of truth for kit file paths across all products.
|
|
127
|
+
* Use it instead of hard-coding `node_modules` paths or maintaining per-product
|
|
128
|
+
* filesystem layouts.
|
|
129
|
+
*
|
|
130
|
+
* @param kitId - Kit identifier (e.g. `'blog-series'`, `'recipe-manager'`).
|
|
131
|
+
* @param product - Product consuming the files: `'workshop'` or `'venue'`.
|
|
132
|
+
* @returns Absolute path to the files directory, or `null` if it does not exist.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* const dir = await sdk.kits.resolveFilesPath('blog-series', 'workshop')
|
|
137
|
+
* // → '/path/to/node_modules/@soulcraft/kits/kits/blog-series/workshop/files'
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
resolveFilesPath(kitId: string, product: 'workshop' | 'venue'): Promise<string | null>;
|
|
141
|
+
/**
|
|
142
|
+
* Resolve the absolute path to a kit's skills directory.
|
|
143
|
+
*
|
|
144
|
+
* Returns the path to `kits/{kitId}/skills/` inside the installed `@soulcraft/kits`
|
|
145
|
+
* npm package, or `null` if the directory does not exist.
|
|
146
|
+
*
|
|
147
|
+
* @param kitId - Kit identifier.
|
|
148
|
+
* @returns Absolute path to the skills directory, or `null` if it does not exist.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* const dir = await sdk.kits.resolveSkillsPath('blog-series')
|
|
153
|
+
* // → '/path/to/node_modules/@soulcraft/kits/kits/blog-series/skills'
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
resolveSkillsPath(kitId: string): Promise<string | null>;
|
|
157
|
+
/**
|
|
158
|
+
* Resolve the absolute path to the root `kits/` directory inside the npm package.
|
|
159
|
+
*
|
|
160
|
+
* Useful when enumerating all available kits on the filesystem rather than relying
|
|
161
|
+
* on the `kitRegistry` in-memory list (e.g. build tooling, validators).
|
|
162
|
+
*
|
|
163
|
+
* Returns `null` if `@soulcraft/kits` is not installed.
|
|
164
|
+
*
|
|
165
|
+
* @returns Absolute path to the `kits/` directory, or `null`.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```typescript
|
|
169
|
+
* const root = await sdk.kits.resolveKitsRoot()
|
|
170
|
+
* // → '/path/to/node_modules/@soulcraft/kits/kits'
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
resolveKitsRoot(): Promise<string | null>;
|
|
110
174
|
}
|
|
111
175
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/kits/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,qFAAqF;IACrF,EAAE,EAAE,MAAM,CAAA;IACV,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;IAC3D,0CAA0C;IAC1C,MAAM,CAAC,EAAE;QACP,gCAAgC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,+CAA+C;QAC/C,WAAW,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KACvD,CAAA;IACD,wDAAwD;IACxD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAMD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,IAAI,CAAA;CAC5D;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/kits/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,qFAAqF;IACrF,EAAE,EAAE,MAAM,CAAA;IACV,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;IAC3D,0CAA0C;IAC1C,MAAM,CAAC,EAAE;QACP,gCAAgC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,+CAA+C;QAC/C,WAAW,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KACvD,CAAA;IACD,wDAAwD;IACxD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAMD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,IAAI,CAAA;CAC5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;IAEvD;;;;;;;;;;;;OAYG;IACH,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;IAErC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAEtF;;;;;;;;;;;;;;OAcG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAExD;;;;;;;;;;;;;;;OAeG;IACH,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC1C"}
|
|
@@ -62,6 +62,26 @@
|
|
|
62
62
|
import type { Brainy } from '@soulcraft/brainy';
|
|
63
63
|
import type { HallModule } from '../modules/hall/types.js';
|
|
64
64
|
import type { SoulcraftSDK, SoulcraftProduct } from '../types.js';
|
|
65
|
+
/**
|
|
66
|
+
* Per-org billing configuration for Venue, distributed via the Portal activate response.
|
|
67
|
+
*
|
|
68
|
+
* Stored in Portal's Firestore license document under `venueOrgConfig[orgSlug]` and
|
|
69
|
+
* returned at boot time so Venue cannot self-modify its own platform fee rate.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const cfg = server.venueOrgConfig['canvas-and-corks']
|
|
74
|
+
* // { platformFeeRate: 0.065, feeMode: 'online-only', billingModel: 'per-transaction' }
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export interface VenueOrgBillingConfig {
|
|
78
|
+
/** Platform fee rate as a decimal (e.g. `0.065` for 6.5%). */
|
|
79
|
+
platformFeeRate?: number;
|
|
80
|
+
/** Which channels the fee applies to. */
|
|
81
|
+
feeMode?: 'online-only' | 'all-channels' | 'none';
|
|
82
|
+
/** Billing model for this org. */
|
|
83
|
+
billingModel?: 'per-transaction' | 'subscription' | 'hybrid';
|
|
84
|
+
}
|
|
65
85
|
/**
|
|
66
86
|
* Config bundle returned by the Portal `licenseActivate` endpoint.
|
|
67
87
|
* Only non-null fields are included in the response.
|
|
@@ -154,6 +174,21 @@ export interface ServerSDK {
|
|
|
154
174
|
* `'free'` | `'pro'` | `'enterprise'` | `'internal'`
|
|
155
175
|
*/
|
|
156
176
|
readonly tier: string;
|
|
177
|
+
/**
|
|
178
|
+
* Per-org billing configuration for Venue, keyed by org slug.
|
|
179
|
+
*
|
|
180
|
+
* Always present — empty object `{}` for non-Venue licenses. Populated from
|
|
181
|
+
* the Portal activate response and refreshed on the 4-hour re-validation cycle.
|
|
182
|
+
* Venue reads this at booking time rather than storing fee config in tenant Brainy,
|
|
183
|
+
* ensuring operators cannot self-modify their own platform fee rate.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* const cfg = server.venueOrgConfig['canvas-and-corks']
|
|
188
|
+
* const rate = cfg?.platformFeeRate ?? 0.065
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
readonly venueOrgConfig: Record<string, VenueOrgBillingConfig>;
|
|
157
192
|
/**
|
|
158
193
|
* Gracefully shut down the server SDK.
|
|
159
194
|
*
|
|
@@ -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;;;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;
|
|
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"}
|
|
@@ -247,6 +247,7 @@ async function fromLicense(options) {
|
|
|
247
247
|
}
|
|
248
248
|
const config = activateResponse.config;
|
|
249
249
|
const tier = activateResponse.tier ?? 'free';
|
|
250
|
+
let venueOrgConfig = activateResponse.venueOrgConfig ?? {};
|
|
250
251
|
// ── Inject env ────────────────────────────────────────────────────────────
|
|
251
252
|
_injectEnv(config);
|
|
252
253
|
// ── Write Cortex license to .soulcraft.json ───────────────────────────────
|
|
@@ -275,6 +276,7 @@ async function fromLicense(options) {
|
|
|
275
276
|
if (fresh.config.cortexLicenseKey) {
|
|
276
277
|
_writeSoulcraftJson(fresh.config.cortexLicenseKey);
|
|
277
278
|
}
|
|
279
|
+
venueOrgConfig = fresh.venueOrgConfig ?? {};
|
|
278
280
|
}
|
|
279
281
|
catch {
|
|
280
282
|
// Non-fatal — the in-memory injected values remain valid until next attempt.
|
|
@@ -297,6 +299,9 @@ async function fromLicense(options) {
|
|
|
297
299
|
get tier() {
|
|
298
300
|
return tier;
|
|
299
301
|
},
|
|
302
|
+
get venueOrgConfig() {
|
|
303
|
+
return venueOrgConfig;
|
|
304
|
+
},
|
|
300
305
|
shutdown() {
|
|
301
306
|
if (_revalidateTimer) {
|
|
302
307
|
clearInterval(_revalidateTimer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-license.js","sourceRoot":"","sources":["../../src/server/from-license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,0CAA0C;AAC1C,MAAM,YAAY,GAAG,4CAA4C,CAAA;AAEjE,uCAAuC;AACvC,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEjD,gDAAgD;AAChD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"from-license.js","sourceRoot":"","sources":["../../src/server/from-license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,0CAA0C;AAC1C,MAAM,YAAY,GAAG,4CAA4C,CAAA;AAEjE,uCAAuC;AACvC,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEjD,gDAAgD;AAChD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAA;AA4KnE,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;;;GAIG;AACH,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,OAAe;IACnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;QACzC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QAC/D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAwB,CAAA;QAC7E,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,CAAC,MAAM,IAAI,eAAe,IAAI;YACrE,yEAAyE,CAC1E,CAAA;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,0CAA0C,QAAQ,CAAC,MAAM,KAAK;YAC9D,6CAA6C,CAC9C,CAAA;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA+B,CAAA;AACrD,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAe,EAAE,QAA0B;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAiB;YAC3B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,OAAO;YACP,QAAQ;SACT,CAAA;QACD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,MAA2B;IAC7C,MAAM,QAAQ,GAA+C;QAC3D,CAAC,iBAAiB,EAAU,mBAAmB,CAAC;QAChD,CAAC,oBAAoB,EAAO,sBAAsB,CAAC;QACnD,CAAC,SAAS,EAAkB,UAAU,CAAC;QACvC,CAAC,iBAAiB,EAAU,mBAAmB,CAAC;QAChD,CAAC,qBAAqB,EAAM,uBAAuB,CAAC;QACpD,CAAC,sBAAsB,EAAK,wBAAwB,CAAC;QACrD,CAAC,sBAAsB,EAAK,wBAAwB,CAAC;QACrD,CAAC,gBAAgB,EAAW,kBAAkB,CAAC;QAC/C,CAAC,eAAe,EAAY,uBAAuB,CAAC;QACpD,CAAC,mBAAmB,EAAQ,qBAAqB,CAAC;QAClD,CAAC,WAAW,EAAgB,oBAAoB,CAAC;QACjD,CAAC,aAAa,EAAc,mBAAmB,CAAC;QAChD,CAAC,kBAAkB,EAAS,oBAAoB,CAAC;QACjD,CAAC,2BAA2B,EAAE,8BAA8B,CAAC;KAC9D,CAAA;IAED,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;QAC/B,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,mBAAmB,CAAC,gBAAwB;IACnD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAA;QAC5D,MAAM,OAAO,GAAG,UAAU,GAAG,MAAM,CAAA;QACnC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;QAC5F,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,KAAK,UAAU,WAAW,CAAC,OAA2B;IACpD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IAEtE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,oCAAoC;YACpC,+DAA+D;YAC/D,iDAAiD,CAClD,CAAA;IACH,CAAC;IAED,6EAA6E;IAE7E,IAAI,gBAAkC,CAAA;IAEtC,IAAI,CAAC;QACH,gBAAgB,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAChD,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,8CAA8C;QAC9C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,IAAI,MAAM,EAAE,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CACV,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK;gBAClF,4BAA4B,MAAM,CAAC,WAAW,GAAG,CAClD,CAAA;YACD,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,2DAA2D;gBAC3D,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACtE,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,6BAA6B,gBAAgB,CAAC,MAAM,IAAI,gBAAgB,IAAI;YAC5E,0CAA0C,CAC3C,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAA;IACtC,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,IAAI,MAAM,CAAA;IAC5C,IAAI,cAAc,GAA0C,gBAAgB,CAAC,cAAc,IAAI,EAAE,CAAA;IAEjG,6EAA6E;IAE7E,UAAU,CAAC,MAAM,CAAC,CAAA;IAElB,6EAA6E;IAC7E,4EAA4E;IAC5E,gDAAgD;IAEhD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,mBAAmB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAC9C,CAAC;IAED,6EAA6E;IAE7E,IAAI,IAA4B,CAAA;IAChC,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,GAAG,gBAAgB,CAAC;YACtB,GAAG,EAAE,MAAM,CAAC,OAAO;YACnB,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,MAAM,CAAC,UAAU;SAC1B,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;IACtB,CAAC;IAED,6EAA6E;IAE7E,IAAI,gBAA4D,CAAA;IAEhE,KAAK,UAAU,WAAW;QACxB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAI,EAAE,OAAO,CAAC,CAAA;YAC5C,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAC3B,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACxB,IAAI,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAClC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YACpD,CAAC;YACD,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,6EAA6E;QAC/E,CAAC;IACH,CAAC;IAED,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,WAAW,EAAE,CAAA,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAA;IACpF,IAAI,gBAAgB,CAAC,KAAK;QAAE,gBAAgB,CAAC,KAAK,EAAE,CAAA;IAEpD,6EAA6E;IAE7E,OAAO;QACL,SAAS,CAAC,KAAa;YACrB,OAAO,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7B,CAAC;QAED,IAAI,IAAI;YACN,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,MAAM;YACR,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,IAAI;YACN,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,cAAc;YAChB,OAAO,cAAc,CAAA;QACvB,CAAC;QAED,QAAQ;YACN,IAAI,gBAAgB,EAAE,CAAC;gBACrB,aAAa,CAAC,gBAAgB,CAAC,CAAA;gBAC/B,gBAAgB,GAAG,SAAS,CAAA;YAC9B,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,IAAI,CAAC,KAAK,EAAE,CAAA;YACnB,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW;CACZ,CAAA"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -50,7 +50,7 @@ export { SOULCRAFT_USER_FIELDS, SOULCRAFT_SESSION_CONFIG, getAuthMode, getOIDCCl
|
|
|
50
50
|
export { createSDK } from './create-sdk.js';
|
|
51
51
|
export type { CreateSDKOptions } from './create-sdk.js';
|
|
52
52
|
export { createServerSDK } from './from-license.js';
|
|
53
|
-
export type { ServerSDK, FromLicenseOptions, LicenseConfigBundle, } from './from-license.js';
|
|
53
|
+
export type { ServerSDK, FromLicenseOptions, LicenseConfigBundle, VenueOrgBillingConfig, } from './from-license.js';
|
|
54
54
|
export { createBillingModule } from '../modules/billing/index.js';
|
|
55
55
|
export type { CreateBillingModuleOptions } from '../modules/billing/index.js';
|
|
56
56
|
export { createLicenseModule } from '../modules/license/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,SAAS,GACV,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAA;AACzE,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,GACX,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,QAAQ,EACR,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,aAAa,GACd,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAC/E,YAAY,EACV,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,gCAAgC,CAAA;AAGvC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kCAAkC,CAAA;AAGzC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,SAAS,GACV,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAA;AACzE,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,GACX,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,QAAQ,EACR,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,aAAa,GACd,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAC/E,YAAY,EACV,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,gCAAgC,CAAA;AAGvC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kCAAkC,CAAA;AAGzC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAG7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACxF,YAAY,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA"}
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAM3B,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAQtB,iFAAiF;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAA;AAMzE,gFAAgF;AAChF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,GACX,MAAM,oBAAoB,CAAA;AAqB3B,iFAAiF;AACjF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,+BAA+B,CAAA;AAStC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAM/E,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kCAAkC,CAAA;AAEzC,mFAAmF;AACnF,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAElC,iFAAiF;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAG3C,iFAAiF;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAM3B,iFAAiF;AACjF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAQtB,iFAAiF;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAA;AAMzE,gFAAgF;AAChF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,GACX,MAAM,oBAAoB,CAAA;AAqB3B,iFAAiF;AACjF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,aAAa,GACd,MAAM,+BAA+B,CAAA;AAStC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAM/E,iFAAiF;AACjF,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kCAAkC,CAAA;AAEzC,mFAAmF;AACnF,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAElC,iFAAiF;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAG3C,iFAAiF;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAQnD,qFAAqF;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAI7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAExF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -219,47 +219,47 @@ consistent everywhere.
|
|
|
219
219
|
- [x] Create `soulcraftlabs/sdk` GitHub repo
|
|
220
220
|
- [x] Initialize TypeScript + Bun package with conditional exports
|
|
221
221
|
- [x] Write this ADR and CLAUDE.md
|
|
222
|
-
- [
|
|
223
|
-
- [
|
|
222
|
+
- [x]Scaffold `src/` directory structure (empty modules with JSDoc stubs)
|
|
223
|
+
- [x]Write `tsconfig.json`, `vitest.config.ts`, `.env.example`
|
|
224
224
|
|
|
225
225
|
### Phase 2 — Core Data Layer
|
|
226
|
-
- [
|
|
227
|
-
- [
|
|
228
|
-
- [
|
|
229
|
-
- [
|
|
230
|
-
- [
|
|
231
|
-
- [
|
|
232
|
-
- [
|
|
226
|
+
- [x]`src/transports/` — migrate Local, HTTP, WS from brainy-client; add SSE
|
|
227
|
+
- [x]`src/modules/brainy/` — full Brainy API proxy (all methods, all sub-APIs)
|
|
228
|
+
- [x]`src/modules/vfs/` — VFS namespace (delegates to `brain.vfs.*`)
|
|
229
|
+
- [x]`src/modules/versions/` — versions namespace (delegates to `brain.versions.*`)
|
|
230
|
+
- [x]`src/types.ts` — core shared types (SoulcraftSDK, SDKOptions, etc.)
|
|
231
|
+
- [x]Server mode instance pool (`per-user`, `per-tenant`, `per-scope`)
|
|
232
|
+
- [x]Tests: all transport modes, all brainy methods via proxy
|
|
233
233
|
|
|
234
234
|
### Phase 3 — Auth + License
|
|
235
|
-
- [
|
|
235
|
+
- [x]`src/modules/auth/` — OIDC client config, session cache, capability tokens,
|
|
236
236
|
Hono middleware, SvelteKit handle, backchannel logout
|
|
237
|
-
- [
|
|
237
|
+
- [x]`src/modules/license/` — Cortex activation, plan verification, credit metering,
|
|
238
238
|
BYOK validation, heartbeat background task
|
|
239
|
-
- [
|
|
240
|
-
- [
|
|
239
|
+
- [x]Absorb `@soulcraft/auth` package entirely
|
|
240
|
+
- [x]Tests: auth middleware, capability token create/verify, license exchange
|
|
241
241
|
|
|
242
242
|
### Phase 4 — AI + Events + Skills + Kits + Formats
|
|
243
|
-
- [
|
|
243
|
+
- [x]`src/modules/ai/` — model tiers, delegator, Briggy API, tool definition types,
|
|
244
244
|
KitAIContext, UI action registry
|
|
245
|
-
- [
|
|
246
|
-
- [
|
|
247
|
-
- [
|
|
248
|
-
- [
|
|
245
|
+
- [x]`src/modules/events/` — platform event bus (DataChangeEmitter, all 30+ event types)
|
|
246
|
+
- [x]`src/modules/skills/` — skill loading, bundled skills, user-invocable registry
|
|
247
|
+
- [x]`src/modules/kits/` — kit loader, initialization, template injection
|
|
248
|
+
- [x]`src/modules/formats/` — WVIZ, WDOC, WSLIDE, WQUIZ types (migrate from @soulcraft/views + richDocument.ts)
|
|
249
249
|
|
|
250
250
|
### Phase 5 — Billing + Notifications
|
|
251
|
-
- [
|
|
251
|
+
- [x]`src/modules/billing/` — usage tracking, quota checks, top-up credits,
|
|
252
252
|
Stripe subscription management, billing provider (Firestore vs local)
|
|
253
|
-
- [
|
|
253
|
+
- [x]`src/modules/notifications/` — NotificationSender interface, Postmark, Twilio,
|
|
254
254
|
dev-mode console sender, notification templates
|
|
255
255
|
|
|
256
256
|
### Phase 6 — Publish + First npm Release
|
|
257
|
-
- [
|
|
258
|
-
- [
|
|
259
|
-
- [
|
|
260
|
-
- [
|
|
261
|
-
- [
|
|
262
|
-
- [
|
|
257
|
+
- [x]Publish `@soulcraft/sdk@1.0.0` to npmjs.com (private/restricted)
|
|
258
|
+
- [x]Update Workshop: replace all `@soulcraft/brainy-client` + `@soulcraft/auth` imports
|
|
259
|
+
- [x]Update Venue: same
|
|
260
|
+
- [x]Update Academy: same
|
|
261
|
+
- [x]Deprecate (do not unpublish) `@soulcraft/brainy-client` and `@soulcraft/auth`
|
|
262
|
+
- [x]Add `@soulcraft/sdk` to bundle loop in all three `build.sh` files
|
|
263
263
|
|
|
264
264
|
---
|
|
265
265
|
|
|
@@ -277,6 +277,6 @@ notice in their README and `package.json` `"deprecated"` field pointing to `@sou
|
|
|
277
277
|
|
|
278
278
|
## Related Documents
|
|
279
279
|
|
|
280
|
-
- `docs/ADR-002-transport-protocol.md` — Wire protocol specification
|
|
281
|
-
- `docs/ADR-003-instance-strategies.md` — Brainy instance pooling
|
|
280
|
+
- `docs/ADR-002-transport-protocol.md` — Wire protocol specification
|
|
281
|
+
- `docs/ADR-003-instance-strategies.md` — Brainy instance pooling and Cortex activation
|
|
282
282
|
- `/home/dpsifr/.strategy/PLATFORM-HANDOFF.md` — Cross-project coordination thread
|