@soulcraft/sdk 1.1.0 → 1.2.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 (51) hide show
  1. package/dist/client/index.d.ts +3 -0
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +2 -0
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/modules/auth/service-token.d.ts +62 -0
  9. package/dist/modules/auth/service-token.d.ts.map +1 -0
  10. package/dist/modules/auth/service-token.js +99 -0
  11. package/dist/modules/auth/service-token.js.map +1 -0
  12. package/dist/modules/billing/index.d.ts +17 -5
  13. package/dist/modules/billing/index.d.ts.map +1 -1
  14. package/dist/modules/billing/index.js +24 -9
  15. package/dist/modules/billing/index.js.map +1 -1
  16. package/dist/modules/billing/portal-provider.d.ts +70 -0
  17. package/dist/modules/billing/portal-provider.d.ts.map +1 -0
  18. package/dist/modules/billing/portal-provider.js +204 -0
  19. package/dist/modules/billing/portal-provider.js.map +1 -0
  20. package/dist/modules/billing/types.d.ts +4 -3
  21. package/dist/modules/billing/types.d.ts.map +1 -1
  22. package/dist/modules/billing/types.js +4 -3
  23. package/dist/modules/billing/types.js.map +1 -1
  24. package/dist/modules/hall/browser.d.ts +88 -0
  25. package/dist/modules/hall/browser.d.ts.map +1 -0
  26. package/dist/modules/hall/browser.js +265 -0
  27. package/dist/modules/hall/browser.js.map +1 -0
  28. package/dist/modules/hall/protocol.d.ts +39 -0
  29. package/dist/modules/hall/protocol.d.ts.map +1 -0
  30. package/dist/modules/hall/protocol.js +52 -0
  31. package/dist/modules/hall/protocol.js.map +1 -0
  32. package/dist/modules/hall/server.d.ts +172 -0
  33. package/dist/modules/hall/server.d.ts.map +1 -0
  34. package/dist/modules/hall/server.js +457 -0
  35. package/dist/modules/hall/server.js.map +1 -0
  36. package/dist/modules/hall/types.d.ts +502 -31
  37. package/dist/modules/hall/types.d.ts.map +1 -1
  38. package/dist/modules/hall/types.js +13 -8
  39. package/dist/modules/hall/types.js.map +1 -1
  40. package/dist/server/hall-handlers.d.ts +90 -151
  41. package/dist/server/hall-handlers.d.ts.map +1 -1
  42. package/dist/server/hall-handlers.js +84 -204
  43. package/dist/server/hall-handlers.js.map +1 -1
  44. package/dist/server/index.d.ts +4 -2
  45. package/dist/server/index.d.ts.map +1 -1
  46. package/dist/server/index.js +4 -2
  47. package/dist/server/index.js.map +1 -1
  48. package/dist/types.d.ts +22 -18
  49. package/dist/types.d.ts.map +1 -1
  50. package/docs/USAGE.md +224 -1
  51. package/package.json +1 -6
@@ -36,12 +36,14 @@ export { BrainyInstancePool, BrainyInitializingError, computeEmailHash, } from '
36
36
  export type { InstancePoolConfig, InstancePoolStats, } from './instance-pool.js';
37
37
  export { createBrainyHandler, createBrainyWsHandler, } from './handlers.js';
38
38
  export type { BrainyHandlerConfig, BrainyWsHandlerConfig, BrainyWsHandler, WsSession, } from './handlers.js';
39
- export { createHallRoomHandler, generateTurnCredentials, } from './hall-handlers.js';
40
- export type { HallRoomHandlerConfig, HallRoomHandler, HallSession, TurnCredentialOptions, TurnCredentials, } from './hall-handlers.js';
39
+ export { createHallModule, generateTurnCredentials, HallClient, } from './hall-handlers.js';
40
+ export type { HallConnectionOptions, HallModule, TurnCredentialOptions, TurnCredentials, } from './hall-handlers.js';
41
+ export type { HallRoom, HallRoomEvents, RoomOptions, ConceptInput, RecordingManifest, TranscriptEvent, ConceptMentionEvent, RelationProposedEvent, SpeakerChangedEvent, PeerJoinedEvent, PeerLeftEvent, } from '../modules/hall/types.js';
41
42
  export { createAuthMiddleware, createRemoteSessionVerifier, AUTH_USER_KEY, } from '../modules/auth/middleware.js';
42
43
  export type { AuthMiddlewareOptions, AuthMiddleware, AuthContext, BetterAuthLike, RemoteSessionVerifierOptions, } from '../modules/auth/middleware.js';
43
44
  export { createBackchannelLogoutHandler } from '../modules/auth/backchannel.js';
44
45
  export type { BackchannelLogoutConfig, BackchannelAuthLike, } from '../modules/auth/backchannel.js';
46
+ export { verifyServiceToken, extractBearerToken, } from '../modules/auth/service-token.js';
45
47
  export { SOULCRAFT_USER_FIELDS, SOULCRAFT_SESSION_CONFIG, getAuthMode, getOIDCClientConfig, } from '../modules/auth/config.js';
46
48
  export { createSDK } from './create-sdk.js';
47
49
  export type { CreateSDKOptions } from './create-sdk.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,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,aAAa,GACd,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,cAAc,EACd,4BAA4B,GAC7B,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,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,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"}
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,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,aAAa,GACd,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,cAAc,EACd,4BAA4B,GAC7B,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,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"}
@@ -36,11 +36,13 @@
36
36
  export { BrainyInstancePool, BrainyInitializingError, computeEmailHash, } from './instance-pool.js';
37
37
  // ── Handler factories ─────────────────────────────────────────────────────────
38
38
  export { createBrainyHandler, createBrainyWsHandler, } from './handlers.js';
39
- // ── Hall handler factories ────────────────────────────────────────────────────
40
- export { createHallRoomHandler, generateTurnCredentials, } from './hall-handlers.js';
39
+ // ── Hall module factory + TURN utilities ─────────────────────────────────────
40
+ export { createHallModule, generateTurnCredentials, HallClient, } from './hall-handlers.js';
41
41
  // ── Auth middleware + backchannel logout ──────────────────────────────────────
42
42
  export { createAuthMiddleware, createRemoteSessionVerifier, AUTH_USER_KEY, } from '../modules/auth/middleware.js';
43
43
  export { createBackchannelLogoutHandler } from '../modules/auth/backchannel.js';
44
+ // ── Service token verification ────────────────────────────────────────────────
45
+ export { verifyServiceToken, extractBearerToken, } from '../modules/auth/service-token.js';
44
46
  // ── Auth config helpers (also on shared entry, duplicated here for convenience) ─
45
47
  export { SOULCRAFT_USER_FIELDS, SOULCRAFT_SESSION_CONFIG, getAuthMode, getOIDCClientConfig, } from '../modules/auth/config.js';
46
48
  // ── createSDK factory ─────────────────────────────────────────────────────────
@@ -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,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAA;AAS3B,iFAAiF;AACjF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,aAAa,GACd,MAAM,+BAA+B,CAAA;AAQtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AAM/E,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,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"}
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,gFAAgF;AAChF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,GACX,MAAM,oBAAoB,CAAA;AAqB3B,iFAAiF;AACjF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,aAAa,GACd,MAAM,+BAA+B,CAAA;AAQtC,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,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"}
package/dist/types.d.ts CHANGED
@@ -118,26 +118,30 @@ export interface ServerSDKOptions extends SDKOptions {
118
118
  };
119
119
  /**
120
120
  * Optional Hall real-time communication configuration.
121
- * When present, the SDK initializes a HallServer and exposes it as sdk.hall.
122
- * Requires @soulcraft/hall to be installed.
121
+ * When present, the SDK connects to the Hall standalone server and exposes `sdk.hall`.
122
+ * No additional packages required — Hall support is built into `@soulcraft/sdk`.
123
123
  */
124
124
  hall?: {
125
- /** Public IP address announced in WebRTC ICE candidates. Required in production. */
126
- publicIp: string;
127
- /** UDP port range start for ICE candidates (default: 40000). */
128
- portMin?: number;
129
- /** UDP port range end for ICE candidates (default: 49999). */
130
- portMax?: number;
131
- /** TURN server URL, e.g. "turn:hall.soulcraft.com:3478". */
132
- turnUrl?: string;
133
- /** TURN credentials username (static; use generateTurnCredentials for per-peer creds). */
134
- turnUsername?: string;
135
- /** TURN credentials password (static). */
136
- turnPassword?: string;
137
- /** S3 bucket name for recording uploads. */
138
- recordingBucket?: string;
139
- /** Deepgram API key for real-time transcription. */
140
- deepgramApiKey?: string;
125
+ /**
126
+ * Hall server WebSocket URL (e.g. `"wss://hall.soulcraft.com"`).
127
+ * Defaults to `process.env.HALL_URL` if not set.
128
+ */
129
+ url: string;
130
+ /**
131
+ * Product name as configured in `[auth.products]` in `hall.toml`.
132
+ * e.g. `"academy"`, `"workshop"`, `"venue"`.
133
+ */
134
+ productName: string;
135
+ /**
136
+ * Shared secret for this product. Set via `HALL_<PRODUCT>_SECRET` env var.
137
+ * Never expose this to browsers.
138
+ */
139
+ secret: string;
140
+ /**
141
+ * Milliseconds to wait before a reconnect attempt after an unexpected disconnect.
142
+ * Default: 2000.
143
+ */
144
+ reconnectDelayMs?: number;
141
145
  };
142
146
  }
143
147
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/docs/USAGE.md CHANGED
@@ -24,7 +24,8 @@ the Soulcraft platform. It covers every implemented module with working examples
24
24
  10. [BrainyInstancePool — Instance Lifecycle](#brainyinstancepool--instance-lifecycle)
25
25
  11. [Capability Tokens — Cross-Product Access](#capability-tokens--cross-product-access)
26
26
  12. [Auth Middleware](#auth-middleware)
27
- 13. [For AI Assistants](#for-ai-assistants)
27
+ 13. [sdk.hall Real-Time Communication](#sdkhall--real-time-communication)
28
+ 14. [For AI Assistants](#for-ai-assistants)
28
29
 
29
30
  ---
30
31
 
@@ -586,6 +587,223 @@ app.post('/api/auth/backchannel-logout', backchannelHandler)
586
587
 
587
588
  ---
588
589
 
590
+ ## sdk.hall — Real-Time Communication
591
+
592
+ Hall is the Soulcraft real-time communication layer: WebRTC SFU, Whisper ASR transcription,
593
+ BERT concept matching, and session recording. It runs as a standalone Rust binary at
594
+ `hall.soulcraft.com` and is accessed via `sdk.hall.*` on the server and `joinHallRoom()`
595
+ in the browser.
596
+
597
+ **Architecture overview:**
598
+
599
+ ```
600
+ Product backend ──(shared secret)──► Hall server ◄──(session token)── Browser
601
+ │ │
602
+ sdk.hall.* joinHallRoom()
603
+ (HallModule) (HallRoomHandle)
604
+ ```
605
+
606
+ - The **product secret** (`HALL_WORKSHOP_SECRET` etc.) is server-to-server only — never sent to browsers.
607
+ - The **session token** is a short-lived JWT issued by `sdk.hall.createSessionToken()` — safe to pass to browsers.
608
+
609
+ ### Server setup
610
+
611
+ ```typescript
612
+ import { createSDK, createHallModule } from '@soulcraft/sdk/server'
613
+
614
+ // Create the Hall module at startup (one per process):
615
+ const hall = createHallModule({
616
+ url: process.env.HALL_URL ?? 'wss://hall.soulcraft.com',
617
+ productName: 'workshop', // must match hall.toml [auth.products]
618
+ secret: process.env.HALL_WORKSHOP_SECRET!, // never sent to browsers
619
+ reconnectDelayMs: 2000, // default
620
+ })
621
+
622
+ await hall.connect()
623
+
624
+ // Lifecycle hooks:
625
+ hall.onDisconnect(() => console.warn('Hall: disconnected'))
626
+ hall.onReconnect(() => console.log('Hall: reconnected'))
627
+ ```
628
+
629
+ ### Creating and managing rooms
630
+
631
+ ```typescript
632
+ import type { RoomOptions } from '@soulcraft/sdk'
633
+
634
+ // Create a room (e.g. when a learning session starts):
635
+ const room = await hall.createRoom('session-abc123', {
636
+ maxPeers: 6,
637
+ enableTranscription: true,
638
+ enableRecording: false,
639
+ entityId: 'entity-uuid', // Brainy entity to attach AI events to
640
+ concepts: [ // BERT concept matching inputs
641
+ { nodeId: 'node-1', name: 'Maillard reaction', nounType: 'concept' },
642
+ { nodeId: 'node-2', name: 'fermentation', nounType: 'concept' },
643
+ ],
644
+ })
645
+
646
+ // Listen to room events on the server side:
647
+ room.on('transcriptEvent', (event) => {
648
+ // event: { sessionId, speakerId, peerId, text, isFinal, timestampMs, confidence }
649
+ if (event.isFinal) saveTranscriptLine(event.text)
650
+ })
651
+
652
+ room.on('conceptMentionEvent', (event) => {
653
+ // event: { sessionId, nodeId, name, confidence, timestampMs, transcriptSnippet }
654
+ console.log(`Concept mentioned: "${event.name}" (${event.confidence.toFixed(2)})`)
655
+ })
656
+
657
+ room.on('relationProposedEvent', (event) => {
658
+ // event: { sessionId, fromNodeId, toNodeId, verb, confidence, evidence }
659
+ // Automatically proposed by Hall based on transcript — accept or discard:
660
+ if (event.confidence > 0.75) {
661
+ await sdk.brainy.relate({ from: event.fromNodeId, to: event.toNodeId, type: event.verb })
662
+ }
663
+ })
664
+
665
+ room.on('speakerChangedEvent', (event) => {
666
+ // event: { sessionId, peerId, speakerId, timestampMs }
667
+ updateActiveSpeaker(event.peerId)
668
+ })
669
+
670
+ room.on('peerJoinedEvent', (event) => {
671
+ // event: { sessionId, peerId, displayName }
672
+ })
673
+
674
+ room.on('peerLeftEvent', (event) => {
675
+ // event: { sessionId, peerId }
676
+ checkIfRoomEmpty(event.sessionId)
677
+ })
678
+
679
+ // Get or close rooms:
680
+ const existing = await hall.getRoom('session-abc123') // HallRoom | null
681
+ const all = await hall.listRooms() // string[]
682
+ await hall.closeRoom('session-abc123')
683
+ ```
684
+
685
+ ### Issuing session tokens for browsers
686
+
687
+ The product backend issues a short-lived token so the browser can join a room without
688
+ ever seeing the product secret:
689
+
690
+ ```typescript
691
+ app.post('/api/hall/token', requireAuth, async (c) => {
692
+ const user = c.get('user')!
693
+ const { roomId } = await c.req.json()
694
+
695
+ const token = await hall.createSessionToken({
696
+ roomId,
697
+ userId: user.id,
698
+ displayName: user.name ?? user.email,
699
+ // ttlMs: 300_000 // default: 5 minutes
700
+ })
701
+
702
+ return c.json({ token })
703
+ })
704
+ ```
705
+
706
+ ### Recording
707
+
708
+ ```typescript
709
+ // Start recording (returns when recording is underway):
710
+ await hall.startRecording('session-abc123')
711
+
712
+ // Stop and get the manifest:
713
+ room.on('recordingManifest', (manifest) => {
714
+ // manifest: { sessionId, startedAt, endedAt, audioTracks, videoTracks }
715
+ // audioTracks: Array<{ peerId, url, durationMs }>
716
+ // videoTracks: Array<{ peerId, url, durationMs }>
717
+ saveRecordingManifest(manifest)
718
+ })
719
+
720
+ await hall.stopRecording('session-abc123')
721
+ ```
722
+
723
+ ### Browser — joinHallRoom
724
+
725
+ ```typescript
726
+ import { joinHallRoom } from '@soulcraft/sdk/client'
727
+ import type { HallRoomHandle } from '@soulcraft/sdk'
728
+
729
+ // 1. Get a session token from your backend:
730
+ const { token } = await fetch('/api/hall/token', {
731
+ method: 'POST',
732
+ headers: { 'Content-Type': 'application/json' },
733
+ body: JSON.stringify({ roomId: 'session-abc123' }),
734
+ }).then(r => r.json())
735
+
736
+ // 2. Join the room:
737
+ const room: HallRoomHandle = await joinHallRoom({
738
+ url: 'wss://hall.soulcraft.com',
739
+ roomId: 'session-abc123',
740
+ token, // short-lived JWT, not the product secret
741
+ })
742
+
743
+ // 3. Add local media stream:
744
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true })
745
+ room.addStream(stream)
746
+
747
+ // 4. Listen to events — same event names as the server-side HallRoom:
748
+ room.on('trackAdded', ({ peerId, track, stream }) => {
749
+ // Attach track to a <video> or <audio> element
750
+ const el = document.getElementById(`peer-${peerId}`) as HTMLVideoElement
751
+ el.srcObject = stream
752
+ })
753
+
754
+ room.on('trackRemoved', ({ peerId, track }) => {
755
+ removeTrackFromUI(peerId, track)
756
+ })
757
+
758
+ room.on('transcriptEvent', (event) => {
759
+ appendSubtitle(event.text, event.isFinal)
760
+ })
761
+
762
+ room.on('conceptMentionEvent', (event) => {
763
+ highlightConcept(event.nodeId, event.confidence)
764
+ })
765
+
766
+ room.on('relationProposedEvent', (event) => {
767
+ showRelationSuggestion(event)
768
+ })
769
+
770
+ room.on('speakerChangedEvent', (event) => {
771
+ setActiveSpeakerIndicator(event.peerId)
772
+ })
773
+
774
+ room.on('peerJoinedEvent', ({ peerId, displayName }) => {
775
+ addParticipant(peerId, displayName)
776
+ })
777
+
778
+ room.on('peerLeftEvent', ({ peerId }) => {
779
+ removeParticipant(peerId)
780
+ })
781
+
782
+ // 5. Clean up:
783
+ room.close()
784
+ ```
785
+
786
+ ### Environment variables
787
+
788
+ | Variable | Description | Required |
789
+ |----------|-------------|----------|
790
+ | `HALL_URL` | Hall server WebSocket URL | Yes (or pass `url` in config) |
791
+ | `HALL_WORKSHOP_SECRET` | Shared secret for Workshop | If product is `workshop` |
792
+ | `HALL_VENUE_SECRET` | Shared secret for Venue | If product is `venue` |
793
+ | `HALL_ACADEMY_SECRET` | Shared secret for Academy | If product is `academy` |
794
+
795
+ The secret name follows the convention `HALL_<PRODUCT_UPPERCASE>_SECRET`. It is defined
796
+ in `hall.toml` on the Hall server side under `[auth.products]`.
797
+
798
+ ### Security rules
799
+
800
+ 1. **Product secrets are server-side only.** Never pass `HALL_*_SECRET` to browsers or kit code.
801
+ 2. **Session tokens are short-lived** (default 5 minutes). Always issue fresh tokens per session.
802
+ 3. **`roomId` is opaque** — the browser can only join rooms that the backend creates. Kit code cannot create rooms directly.
803
+ 4. Hall validates the token signature on every WebSocket connection, so stolen tokens cannot be replayed after expiry.
804
+
805
+ ---
806
+
589
807
  ## For AI Assistants
590
808
 
591
809
  When helping implement Soulcraft server code, follow this checklist:
@@ -627,6 +845,7 @@ sdk.events.emit('custom:event', payload)
627
845
  | `sdk.events.*` | ✅ Implemented | EventEmitter, typed, local to SDK instance |
628
846
  | `sdk.skills.*` | ✅ Implemented | VFS + bundled registry fallback |
629
847
  | `sdk.versions.*` | ✅ Types only | Runtime proxy works; Brainy versions API |
848
+ | `sdk.hall.*` | ✅ Implemented | Server: `createHallModule()`. Browser: `joinHallRoom()` |
630
849
  | `sdk.license.*` | ❌ Not yet | Will throw if accessed |
631
850
  | `sdk.kits.*` | ❌ Not yet | Will throw if accessed |
632
851
  | `sdk.formats.*` | ❌ Not yet | Will throw if accessed |
@@ -644,3 +863,7 @@ sdk.events.emit('custom:event', payload)
644
863
  | `BETTER_AUTH_SECRET` | better-auth | Yes |
645
864
  | `BRAINY_DATA_PATH` | BrainyInstancePool | Yes (defaults to `./brainy-data`) |
646
865
  | `STORAGE_TYPE` | BrainyInstancePool | Yes (`filesystem` or `mmap-filesystem`) |
866
+ | `HALL_URL` | `sdk.hall` | Yes if Hall is enabled |
867
+ | `HALL_WORKSHOP_SECRET` | `sdk.hall` (Workshop) | If product is `workshop` |
868
+ | `HALL_VENUE_SECRET` | `sdk.hall` (Venue) | If product is `venue` |
869
+ | `HALL_ACADEMY_SECRET` | `sdk.hall` (Academy) | If product is `academy` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soulcraft/sdk",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "The unified Soulcraft platform SDK — data, auth, AI, billing, and notifications",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -38,15 +38,11 @@
38
38
  "peerDependencies": {
39
39
  "@soulcraft/brainy": ">=7.17.0",
40
40
  "@soulcraft/cortex": ">=2.1.5",
41
- "@soulcraft/hall": ">=0.1.0",
42
41
  "@soulcraft/kit-schema": ">=2.0.0",
43
42
  "@soulcraft/kits": ">=1.0.0",
44
43
  "firebase-admin": ">=12.0.0"
45
44
  },
46
45
  "peerDependenciesMeta": {
47
- "@soulcraft/hall": {
48
- "optional": true
49
- },
50
46
  "@soulcraft/kit-schema": {
51
47
  "optional": true
52
48
  },
@@ -65,7 +61,6 @@
65
61
  "stripe": "^20.4.0"
66
62
  },
67
63
  "devDependencies": {
68
- "@soulcraft/hall": "link:@soulcraft/hall",
69
64
  "@types/node": "^22.0.0",
70
65
  "hono": "^4.12.3",
71
66
  "typescript": "^5.7.0",