@soulcraft/sdk 1.0.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.
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/auth/service-token.d.ts +62 -0
- package/dist/modules/auth/service-token.d.ts.map +1 -0
- package/dist/modules/auth/service-token.js +99 -0
- package/dist/modules/auth/service-token.js.map +1 -0
- package/dist/modules/billing/firestore-provider.d.ts +60 -0
- package/dist/modules/billing/firestore-provider.d.ts.map +1 -0
- package/dist/modules/billing/firestore-provider.js +314 -0
- package/dist/modules/billing/firestore-provider.js.map +1 -0
- package/dist/modules/billing/index.d.ts +58 -0
- package/dist/modules/billing/index.d.ts.map +1 -0
- package/dist/modules/billing/index.js +164 -0
- package/dist/modules/billing/index.js.map +1 -0
- package/dist/modules/billing/local-provider.d.ts +38 -0
- package/dist/modules/billing/local-provider.d.ts.map +1 -0
- package/dist/modules/billing/local-provider.js +242 -0
- package/dist/modules/billing/local-provider.js.map +1 -0
- package/dist/modules/billing/portal-provider.d.ts +70 -0
- package/dist/modules/billing/portal-provider.d.ts.map +1 -0
- package/dist/modules/billing/portal-provider.js +204 -0
- package/dist/modules/billing/portal-provider.js.map +1 -0
- package/dist/modules/billing/types.d.ts +323 -3
- package/dist/modules/billing/types.d.ts.map +1 -1
- package/dist/modules/billing/types.js +22 -2
- package/dist/modules/billing/types.js.map +1 -1
- package/dist/modules/billing/usage-buffer.d.ts +72 -0
- package/dist/modules/billing/usage-buffer.d.ts.map +1 -0
- package/dist/modules/billing/usage-buffer.js +141 -0
- package/dist/modules/billing/usage-buffer.js.map +1 -0
- package/dist/modules/formats/types.d.ts +65 -3
- package/dist/modules/formats/types.d.ts.map +1 -1
- package/dist/modules/formats/types.js +40 -3
- package/dist/modules/formats/types.js.map +1 -1
- package/dist/modules/formats/wdoc.d.ts +263 -0
- package/dist/modules/formats/wdoc.d.ts.map +1 -0
- package/dist/modules/formats/wdoc.js +21 -0
- package/dist/modules/formats/wdoc.js.map +1 -0
- package/dist/modules/formats/wquiz.d.ts +122 -0
- package/dist/modules/formats/wquiz.d.ts.map +1 -0
- package/dist/modules/formats/wquiz.js +23 -0
- package/dist/modules/formats/wquiz.js.map +1 -0
- package/dist/modules/formats/wslide.d.ts +130 -0
- package/dist/modules/formats/wslide.d.ts.map +1 -0
- package/dist/modules/formats/wslide.js +23 -0
- package/dist/modules/formats/wslide.js.map +1 -0
- package/dist/modules/formats/wviz.d.ts +114 -0
- package/dist/modules/formats/wviz.d.ts.map +1 -0
- package/dist/modules/formats/wviz.js +21 -0
- package/dist/modules/formats/wviz.js.map +1 -0
- package/dist/modules/hall/browser.d.ts +88 -0
- package/dist/modules/hall/browser.d.ts.map +1 -0
- package/dist/modules/hall/browser.js +265 -0
- package/dist/modules/hall/browser.js.map +1 -0
- package/dist/modules/hall/protocol.d.ts +39 -0
- package/dist/modules/hall/protocol.d.ts.map +1 -0
- package/dist/modules/hall/protocol.js +52 -0
- package/dist/modules/hall/protocol.js.map +1 -0
- package/dist/modules/hall/server.d.ts +172 -0
- package/dist/modules/hall/server.d.ts.map +1 -0
- package/dist/modules/hall/server.js +457 -0
- package/dist/modules/hall/server.js.map +1 -0
- package/dist/modules/hall/types.d.ts +502 -31
- package/dist/modules/hall/types.d.ts.map +1 -1
- package/dist/modules/hall/types.js +13 -8
- package/dist/modules/hall/types.js.map +1 -1
- package/dist/modules/kits/index.d.ts +41 -0
- package/dist/modules/kits/index.d.ts.map +1 -0
- package/dist/modules/kits/index.js +85 -0
- package/dist/modules/kits/index.js.map +1 -0
- package/dist/modules/kits/types.d.ts +107 -3
- package/dist/modules/kits/types.d.ts.map +1 -1
- package/dist/modules/kits/types.js +15 -2
- package/dist/modules/kits/types.js.map +1 -1
- package/dist/modules/license/index.d.ts +53 -0
- package/dist/modules/license/index.d.ts.map +1 -0
- package/dist/modules/license/index.js +233 -0
- package/dist/modules/license/index.js.map +1 -0
- package/dist/modules/license/types.d.ts +222 -3
- package/dist/modules/license/types.d.ts.map +1 -1
- package/dist/modules/license/types.js +21 -2
- package/dist/modules/license/types.js.map +1 -1
- package/dist/modules/notifications/index.d.ts +40 -0
- package/dist/modules/notifications/index.d.ts.map +1 -0
- package/dist/modules/notifications/index.js +280 -0
- package/dist/modules/notifications/index.js.map +1 -0
- package/dist/modules/notifications/types.d.ts +152 -3
- package/dist/modules/notifications/types.d.ts.map +1 -1
- package/dist/modules/notifications/types.js +21 -2
- package/dist/modules/notifications/types.js.map +1 -1
- package/dist/server/create-sdk.d.ts +4 -0
- package/dist/server/create-sdk.d.ts.map +1 -1
- package/dist/server/create-sdk.js +19 -26
- package/dist/server/create-sdk.js.map +1 -1
- package/dist/server/hall-handlers.d.ts +90 -151
- package/dist/server/hall-handlers.d.ts.map +1 -1
- package/dist/server/hall-handlers.js +84 -204
- package/dist/server/hall-handlers.js.map +1 -1
- package/dist/server/index.d.ts +10 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +9 -2
- package/dist/server/index.js.map +1 -1
- package/dist/types.d.ts +35 -25
- package/dist/types.d.ts.map +1 -1
- package/docs/USAGE.md +224 -1
- package/package.json +13 -5
|
@@ -1,7 +1,156 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module notifications/types
|
|
3
|
-
* @description Type definitions for sdk.notifications.*
|
|
4
|
-
*
|
|
3
|
+
* @description Type definitions for sdk.notifications.* — the platform notification system.
|
|
4
|
+
*
|
|
5
|
+
* The notifications module provides a provider-agnostic interface for sending
|
|
6
|
+
* transactional email (via Postmark) and SMS (via Twilio). In development
|
|
7
|
+
* environments where neither API key is configured, a console-logging dev sender
|
|
8
|
+
* is used automatically.
|
|
9
|
+
*
|
|
10
|
+
* The `NotificationSender` interface is the central abstraction: every sender
|
|
11
|
+
* implementation (Postmark, Twilio, dev console, composite) implements it.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const sender = sdk.notifications.getSender()
|
|
16
|
+
* await sender.send({
|
|
17
|
+
* type: 'email',
|
|
18
|
+
* to: 'customer@example.com',
|
|
19
|
+
* subject: 'Booking Confirmed',
|
|
20
|
+
* htmlBody: '<h1>Your booking is confirmed!</h1>',
|
|
21
|
+
* textBody: 'Your booking is confirmed.',
|
|
22
|
+
* })
|
|
23
|
+
* ```
|
|
5
24
|
*/
|
|
6
|
-
|
|
25
|
+
/**
|
|
26
|
+
* An email notification to be sent via the configured email provider (Postmark).
|
|
27
|
+
*/
|
|
28
|
+
export interface EmailNotification {
|
|
29
|
+
/** Channel discriminant. Always `'email'`. */
|
|
30
|
+
type: 'email';
|
|
31
|
+
/** Recipient email address. */
|
|
32
|
+
to: string;
|
|
33
|
+
/**
|
|
34
|
+
* Sender email address.
|
|
35
|
+
* Defaults to `POSTMARK_FROM_EMAIL` when omitted.
|
|
36
|
+
*/
|
|
37
|
+
from?: string;
|
|
38
|
+
/** Email subject line. */
|
|
39
|
+
subject: string;
|
|
40
|
+
/** HTML email body. */
|
|
41
|
+
htmlBody: string;
|
|
42
|
+
/** Plain-text fallback body (required for deliverability). */
|
|
43
|
+
textBody: string;
|
|
44
|
+
/** Optional reply-to email address. */
|
|
45
|
+
replyTo?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* An SMS notification to be sent via the configured SMS provider (Twilio).
|
|
49
|
+
*/
|
|
50
|
+
export interface SmsNotification {
|
|
51
|
+
/** Channel discriminant. Always `'sms'`. */
|
|
52
|
+
type: 'sms';
|
|
53
|
+
/**
|
|
54
|
+
* Recipient phone number in E.164 format, e.g. `'+17045551234'`.
|
|
55
|
+
* Must include country code.
|
|
56
|
+
*/
|
|
57
|
+
to: string;
|
|
58
|
+
/**
|
|
59
|
+
* Sender phone number or Twilio messaging service SID.
|
|
60
|
+
* Defaults to `TWILIO_FROM_NUMBER` when omitted.
|
|
61
|
+
*/
|
|
62
|
+
from?: string;
|
|
63
|
+
/** SMS message body. Maximum 1,600 characters for long SMS. */
|
|
64
|
+
body: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Union of all notification payload types.
|
|
68
|
+
* Discriminate on the `type` field.
|
|
69
|
+
*/
|
|
70
|
+
export type Notification = EmailNotification | SmsNotification;
|
|
71
|
+
/**
|
|
72
|
+
* The result of a notification send attempt.
|
|
73
|
+
*/
|
|
74
|
+
export interface NotificationResult {
|
|
75
|
+
/** Whether the notification was accepted by the provider. */
|
|
76
|
+
success: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Provider-specific message identifier.
|
|
79
|
+
* - Postmark: `MessageID` (UUID)
|
|
80
|
+
* - Twilio: `sid` (e.g. `'SM...'`)
|
|
81
|
+
* - Dev sender: synthetic `'dev-{timestamp}-{random}'`
|
|
82
|
+
*/
|
|
83
|
+
messageId?: string;
|
|
84
|
+
/** Human-readable error message if `success` is `false`. */
|
|
85
|
+
error?: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Interface implemented by all notification provider classes.
|
|
89
|
+
*
|
|
90
|
+
* Consumers of the SDK receive a `NotificationSender` from
|
|
91
|
+
* `sdk.notifications.getSender()` and call `send()` without needing to
|
|
92
|
+
* know which provider is configured underneath.
|
|
93
|
+
*/
|
|
94
|
+
export interface NotificationSender {
|
|
95
|
+
/**
|
|
96
|
+
* Send a notification via this provider.
|
|
97
|
+
*
|
|
98
|
+
* @param notification - The email or SMS notification payload.
|
|
99
|
+
* @returns A result indicating success/failure and the provider message ID.
|
|
100
|
+
*/
|
|
101
|
+
send(notification: Notification): Promise<NotificationResult>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The `sdk.notifications.*` namespace.
|
|
105
|
+
*/
|
|
106
|
+
export interface NotificationsModule {
|
|
107
|
+
/**
|
|
108
|
+
* Returns the configured notification sender for the current environment.
|
|
109
|
+
*
|
|
110
|
+
* - When `POSTMARK_SERVER_TOKEN` and/or `TWILIO_ACCOUNT_SID` + `TWILIO_AUTH_TOKEN`
|
|
111
|
+
* are set, returns a `CompositeNotificationSender` wiring Postmark (email) and
|
|
112
|
+
* Twilio (SMS) to the correct channel.
|
|
113
|
+
* - When neither is configured, returns a `DevSender` that logs notifications to
|
|
114
|
+
* the console — ideal for local development without real API credentials.
|
|
115
|
+
*
|
|
116
|
+
* @returns A `NotificationSender` ready to use.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const sender = sdk.notifications.getSender()
|
|
121
|
+
* const result = await sender.send({ type: 'sms', to: '+17045551234', body: 'Your code is 123456' })
|
|
122
|
+
* if (!result.success) console.error(result.error)
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
getSender(): NotificationSender;
|
|
126
|
+
/**
|
|
127
|
+
* Create a Postmark email sender explicitly.
|
|
128
|
+
*
|
|
129
|
+
* Use when you need to send from a specific server token rather than the
|
|
130
|
+
* environment-configured default.
|
|
131
|
+
*
|
|
132
|
+
* @param serverToken - Postmark server API token.
|
|
133
|
+
* @param defaultFrom - Default sender email address.
|
|
134
|
+
* @returns A `NotificationSender` that only handles email.
|
|
135
|
+
*/
|
|
136
|
+
createPostmarkSender(serverToken: string, defaultFrom: string): NotificationSender;
|
|
137
|
+
/**
|
|
138
|
+
* Create a Twilio SMS sender explicitly.
|
|
139
|
+
*
|
|
140
|
+
* @param accountSid - Twilio account SID.
|
|
141
|
+
* @param authToken - Twilio auth token.
|
|
142
|
+
* @param defaultFrom - Default sender phone number in E.164 format.
|
|
143
|
+
* @returns A `NotificationSender` that only handles SMS.
|
|
144
|
+
*/
|
|
145
|
+
createTwilioSender(accountSid: string, authToken: string, defaultFrom: string): NotificationSender;
|
|
146
|
+
/**
|
|
147
|
+
* Create a development console sender.
|
|
148
|
+
*
|
|
149
|
+
* Logs all notifications to stdout with ANSI formatting. Returns a synthetic
|
|
150
|
+
* message ID. Never makes network calls.
|
|
151
|
+
*
|
|
152
|
+
* @returns A `NotificationSender` that logs to the console.
|
|
153
|
+
*/
|
|
154
|
+
createDevSender(): NotificationSender;
|
|
155
|
+
}
|
|
7
156
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/notifications/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/notifications/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,IAAI,EAAE,OAAO,CAAA;IACb,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,IAAI,EAAE,KAAK,CAAA;IACX;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG,eAAe,CAAA;AAM9D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAA;IAChB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC9D;AAMD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,IAAI,kBAAkB,CAAA;IAE/B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAAA;IAElF;;;;;;;OAOG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAAA;IAElG;;;;;;;OAOG;IACH,eAAe,IAAI,kBAAkB,CAAA;CACtC"}
|
|
@@ -1,7 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module notifications/types
|
|
3
|
-
* @description Type definitions for sdk.notifications.*
|
|
4
|
-
*
|
|
3
|
+
* @description Type definitions for sdk.notifications.* — the platform notification system.
|
|
4
|
+
*
|
|
5
|
+
* The notifications module provides a provider-agnostic interface for sending
|
|
6
|
+
* transactional email (via Postmark) and SMS (via Twilio). In development
|
|
7
|
+
* environments where neither API key is configured, a console-logging dev sender
|
|
8
|
+
* is used automatically.
|
|
9
|
+
*
|
|
10
|
+
* The `NotificationSender` interface is the central abstraction: every sender
|
|
11
|
+
* implementation (Postmark, Twilio, dev console, composite) implements it.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const sender = sdk.notifications.getSender()
|
|
16
|
+
* await sender.send({
|
|
17
|
+
* type: 'email',
|
|
18
|
+
* to: 'customer@example.com',
|
|
19
|
+
* subject: 'Booking Confirmed',
|
|
20
|
+
* htmlBody: '<h1>Your booking is confirmed!</h1>',
|
|
21
|
+
* textBody: 'Your booking is confirmed.',
|
|
22
|
+
* })
|
|
23
|
+
* ```
|
|
5
24
|
*/
|
|
6
25
|
export {};
|
|
7
26
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/notifications/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/notifications/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
|
|
@@ -52,6 +52,10 @@ export interface CreateSDKOptions {
|
|
|
52
52
|
* `sdk.ai.*` calls go directly to the Anthropic API (requires `ANTHROPIC_API_KEY`).
|
|
53
53
|
* `sdk.skills.*` reads from the Brainy VFS and falls back to `@soulcraft/kits`.
|
|
54
54
|
* `sdk.events` is a local EventEmitter — events do not cross process boundaries.
|
|
55
|
+
* `sdk.billing.*` stores usage locally (dev) or in Firestore (prod via `FIREBASE_SERVICE_ACCOUNT_KEY`).
|
|
56
|
+
* `sdk.license.*` activates via `@soulcraft/cortex` and delegates credit metering to `sdk.billing`.
|
|
57
|
+
* `sdk.kits.*` reads from the `@soulcraft/kits` registry (optional peer dependency).
|
|
58
|
+
* `sdk.notifications.*` sends via Postmark/Twilio or logs to the console in dev mode.
|
|
55
59
|
*
|
|
56
60
|
* @param options - SDK creation options.
|
|
57
61
|
* @returns A fully assembled `SoulcraftSDK` instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-sdk.d.ts","sourceRoot":"","sources":["../../src/server/create-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"create-sdk.d.ts","sourceRoot":"","sources":["../../src/server/create-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAW/C,OAAO,KAAK,EAAE,YAAY,EAAyC,MAAM,aAAa,CAAA;AAOtF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAA;CACd;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,YAAY,CAqDjE"}
|
|
@@ -33,6 +33,10 @@ import { createBrainyProxy } from '../modules/brainy/proxy.js';
|
|
|
33
33
|
import { createEventsModule } from '../modules/events/index.js';
|
|
34
34
|
import { createAiModule } from '../modules/ai/index.js';
|
|
35
35
|
import { createSkillsModule } from '../modules/skills/index.js';
|
|
36
|
+
import { createLicenseModule } from '../modules/license/index.js';
|
|
37
|
+
import { createKitsModule } from '../modules/kits/index.js';
|
|
38
|
+
import { createBillingModule } from '../modules/billing/index.js';
|
|
39
|
+
import { createNotificationsModule } from '../modules/notifications/index.js';
|
|
36
40
|
import { createCapabilityToken, verifyCapabilityToken } from '../modules/brainy/auth.js';
|
|
37
41
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
38
42
|
// Factory
|
|
@@ -46,6 +50,10 @@ import { createCapabilityToken, verifyCapabilityToken } from '../modules/brainy/
|
|
|
46
50
|
* `sdk.ai.*` calls go directly to the Anthropic API (requires `ANTHROPIC_API_KEY`).
|
|
47
51
|
* `sdk.skills.*` reads from the Brainy VFS and falls back to `@soulcraft/kits`.
|
|
48
52
|
* `sdk.events` is a local EventEmitter — events do not cross process boundaries.
|
|
53
|
+
* `sdk.billing.*` stores usage locally (dev) or in Firestore (prod via `FIREBASE_SERVICE_ACCOUNT_KEY`).
|
|
54
|
+
* `sdk.license.*` activates via `@soulcraft/cortex` and delegates credit metering to `sdk.billing`.
|
|
55
|
+
* `sdk.kits.*` reads from the `@soulcraft/kits` registry (optional peer dependency).
|
|
56
|
+
* `sdk.notifications.*` sends via Postmark/Twilio or logs to the console in dev mode.
|
|
49
57
|
*
|
|
50
58
|
* @param options - SDK creation options.
|
|
51
59
|
* @returns A fully assembled `SoulcraftSDK` instance.
|
|
@@ -73,6 +81,10 @@ export function createSDK(options) {
|
|
|
73
81
|
const events = createEventsModule();
|
|
74
82
|
const ai = createAiModule();
|
|
75
83
|
const skills = createSkillsModule(brain);
|
|
84
|
+
const billing = createBillingModule();
|
|
85
|
+
const license = createLicenseModule({ billing });
|
|
86
|
+
const kits = createKitsModule();
|
|
87
|
+
const notifications = createNotificationsModule();
|
|
76
88
|
const auth = {
|
|
77
89
|
verifyToken: (token, secret) => verifyCapabilityToken(token, secret),
|
|
78
90
|
createToken: (opts) => createCapabilityToken(opts),
|
|
@@ -85,13 +97,14 @@ export function createSDK(options) {
|
|
|
85
97
|
events,
|
|
86
98
|
ai,
|
|
87
99
|
skills,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
billing: _unimplementedModule('billing'),
|
|
93
|
-
notifications: _unimplementedModule('notifications'),
|
|
100
|
+
license,
|
|
101
|
+
kits,
|
|
102
|
+
billing,
|
|
103
|
+
notifications,
|
|
94
104
|
async shutdown() {
|
|
105
|
+
billing.stopFlush();
|
|
106
|
+
await billing.flush();
|
|
107
|
+
license.stopHeartbeat();
|
|
95
108
|
await brain.flush();
|
|
96
109
|
},
|
|
97
110
|
async flush(scopeKey) {
|
|
@@ -102,24 +115,4 @@ export function createSDK(options) {
|
|
|
102
115
|
},
|
|
103
116
|
};
|
|
104
117
|
}
|
|
105
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
106
|
-
// Internal helpers
|
|
107
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
108
|
-
/**
|
|
109
|
-
* Creates a Proxy that throws a descriptive error for any property access
|
|
110
|
-
* on an unimplemented SDK module. This makes missing modules fail fast and
|
|
111
|
-
* informatively rather than silently returning undefined.
|
|
112
|
-
*
|
|
113
|
-
* @param moduleName - The module name shown in the error message.
|
|
114
|
-
* @returns A Proxy that throws on any property access.
|
|
115
|
-
*/
|
|
116
|
-
function _unimplementedModule(moduleName) {
|
|
117
|
-
return new Proxy({}, {
|
|
118
|
-
get(_target, prop) {
|
|
119
|
-
throw new Error(`sdk.${moduleName}.${String(prop)} is not yet implemented. ` +
|
|
120
|
-
`The '${moduleName}' module is planned for a future SDK release. ` +
|
|
121
|
-
`See docs/ADR-001-sdk-design.md for the implementation roadmap.`);
|
|
122
|
-
},
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
118
|
//# sourceMappingURL=create-sdk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-sdk.js","sourceRoot":"","sources":["../../src/server/create-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAsBxF,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF
|
|
1
|
+
{"version":3,"file":"create-sdk.js","sourceRoot":"","sources":["../../src/server/create-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAsBxF,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAEzB,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAoB,CAAA;IAEnE,wEAAwE;IACxE,2EAA2E;IAC3E,8DAA8D;IAC9D,MAAM,GAAG,GAAI,WAAmB,CAAC,GAAgB,CAAA;IACjD,8DAA8D;IAC9D,MAAM,QAAQ,GAAI,WAAmB,CAAC,QAA0B,CAAA;IAEhE,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAA;IACnC,MAAM,EAAE,GAAG,cAAc,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAA;IACrC,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAA;IAC/B,MAAM,aAAa,GAAG,yBAAyB,EAAE,CAAA;IAEjD,MAAM,IAAI,GAAe;QACvB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC;QACpE,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;KACnD,CAAA;IAED,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,GAAG;QACH,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,EAAE;QACF,MAAM;QACN,OAAO;QACP,IAAI;QACJ,OAAO;QACP,aAAa;QAEb,KAAK,CAAC,QAAQ;YACZ,OAAO,CAAC,SAAS,EAAE,CAAA;YACnB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;YACrB,OAAO,CAAC,aAAa,EAAE,CAAA;YACvB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,QAAgB;YAC1B,qEAAqE;YACrE,qEAAqE;YACrE,KAAK,QAAQ,CAAA;YACb,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1,139 +1,97 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module server/hall-handlers
|
|
3
|
-
* @description
|
|
3
|
+
* @description Hall module factory and TURN credential utilities for product backends.
|
|
4
4
|
*
|
|
5
|
-
* Hall
|
|
5
|
+
* Hall is a standalone server — products connect to it over WebSocket rather than
|
|
6
|
+
* running signaling in-process. This module exports:
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* { type: 'data', channel: string, data: number[] } — data channel message
|
|
11
|
-
* { type: 'leave' } — graceful peer disconnect
|
|
8
|
+
* - `createHallModule` — creates a server-side Hall control-plane client
|
|
9
|
+
* - `generateTurnCredentials` — generates time-limited TURN credentials if a product
|
|
10
|
+
* needs to expose TURN info independently (e.g. for a custom ICE server list)
|
|
12
11
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* { type: 'speaker_changed', speakerId: string }
|
|
17
|
-
* { type: 'concept_mention', ...ConceptEvent }
|
|
18
|
-
* { type: 'relation_proposed', ...RelationProposedEvent }
|
|
19
|
-
* { type: 'transcript', peerId, text, isFinal, sessionMs }
|
|
20
|
-
* { type: 'attention', ...AttentionEvent }
|
|
21
|
-
* { type: 'track_added', peerId, trackId, kind }
|
|
22
|
-
* { type: 'track_removed', peerId, trackId }
|
|
23
|
-
* { type: 'error', message: string }
|
|
12
|
+
* The signaling WebSocket (offer/answer/ICE) is handled directly by the Hall server,
|
|
13
|
+
* not by the product backend. Products only manage the control plane:
|
|
14
|
+
* room creation, session token minting, and recording control.
|
|
24
15
|
*
|
|
25
|
-
*
|
|
26
|
-
* and delegate to the handler returned by createHallRoomHandler().
|
|
27
|
-
*
|
|
28
|
-
* @example Hono mounting
|
|
16
|
+
* @example Academy startup
|
|
29
17
|
* ```typescript
|
|
30
|
-
* import {
|
|
18
|
+
* import { createHallModule } from '@soulcraft/sdk/server'
|
|
31
19
|
*
|
|
32
|
-
* const
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* resolveRoomId: (req) => new URL(req.url).pathname.split('/').at(-2)!,
|
|
20
|
+
* const hall = createHallModule({
|
|
21
|
+
* url: process.env.HALL_URL!, // wss://hall.soulcraft.com
|
|
22
|
+
* productName: 'academy',
|
|
23
|
+
* secret: process.env.HALL_ACADEMY_SECRET!,
|
|
37
24
|
* })
|
|
25
|
+
* await hall.connect()
|
|
38
26
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
27
|
+
* hall.onDisconnect((reason) => {
|
|
28
|
+
* console.error('[Hall] disconnected:', reason)
|
|
29
|
+
* })
|
|
30
|
+
* hall.onReconnect(async () => {
|
|
31
|
+
* // Re-create any active rooms after reconnect
|
|
32
|
+
* for (const session of activeSessions) {
|
|
33
|
+
* await hall.createRoom(session.id, session.roomOptions)
|
|
45
34
|
* }
|
|
46
|
-
* })
|
|
35
|
+
* })
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @example Lesson join route
|
|
39
|
+
* ```typescript
|
|
40
|
+
* app.post('/api/lessons/:id/join', requireAuth, async (c) => {
|
|
41
|
+
* const { id } = c.req.param()
|
|
42
|
+
* const user = c.get('user')!
|
|
43
|
+
*
|
|
44
|
+
* // Create room if it doesn't already exist
|
|
45
|
+
* if (!hall.getRoom(id)) {
|
|
46
|
+
* await hall.createRoom(id, {
|
|
47
|
+
* enableTranscription: true,
|
|
48
|
+
* concepts: await loadLessonConcepts(id),
|
|
49
|
+
* })
|
|
50
|
+
* }
|
|
51
|
+
*
|
|
52
|
+
* // Mint a short-lived token for this browser peer
|
|
53
|
+
* const { token } = await hall.createSessionToken(id, user.id, 3600)
|
|
54
|
+
* return c.json({ token, hallUrl: process.env.HALL_URL })
|
|
55
|
+
* })
|
|
47
56
|
* ```
|
|
48
57
|
*/
|
|
49
|
-
import
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
*/
|
|
54
|
-
export interface HallSession {
|
|
55
|
-
/** The authenticated peer ID (e.g. user ID). */
|
|
56
|
-
readonly peerId: string;
|
|
57
|
-
/** The room this peer is joining. */
|
|
58
|
-
readonly room: Room;
|
|
59
|
-
/** Whether the peer has completed the SDP offer/answer handshake. */
|
|
60
|
-
joined: boolean;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* @description Configuration for createHallRoomHandler().
|
|
64
|
-
*/
|
|
65
|
-
export interface HallRoomHandlerConfig {
|
|
66
|
-
/**
|
|
67
|
-
* The running HallServer instance to use for room management.
|
|
68
|
-
*/
|
|
69
|
-
server: HallServer;
|
|
70
|
-
/**
|
|
71
|
-
* Authenticates an incoming WebSocket upgrade request.
|
|
72
|
-
* Return the authenticated user object (any shape), or null/undefined to reject.
|
|
73
|
-
* @param request - The HTTP upgrade request.
|
|
74
|
-
* @returns Authenticated user or null/undefined.
|
|
75
|
-
*/
|
|
76
|
-
authenticate(request: Request): Promise<unknown> | unknown;
|
|
77
|
-
/**
|
|
78
|
-
* Derives the peer ID from the request and the authenticated user.
|
|
79
|
-
* @param request - The HTTP upgrade request.
|
|
80
|
-
* @param user - The result of authenticate().
|
|
81
|
-
* @returns The peer ID string (e.g. user.id, session.userId).
|
|
82
|
-
*/
|
|
83
|
-
resolvePeerId(request: Request, user: unknown): string;
|
|
84
|
-
/**
|
|
85
|
-
* Derives the room ID from the request.
|
|
86
|
-
* @param request - The HTTP upgrade request.
|
|
87
|
-
* @returns The room ID string (e.g. from URL path parameter).
|
|
88
|
-
*/
|
|
89
|
-
resolveRoomId(request: Request): string;
|
|
90
|
-
/**
|
|
91
|
-
* Optional room options applied when the room does not already exist.
|
|
92
|
-
* @param request - The HTTP upgrade request.
|
|
93
|
-
* @param user - The authenticated user.
|
|
94
|
-
* @returns RoomOptions or undefined to use defaults.
|
|
95
|
-
*/
|
|
96
|
-
roomOptions?(request: Request, user: unknown): import('@soulcraft/hall').RoomOptions | undefined;
|
|
97
|
-
}
|
|
58
|
+
import { HallClient } from '../modules/hall/server.js';
|
|
59
|
+
import type { HallConnectionOptions, HallModule } from '../modules/hall/types.js';
|
|
60
|
+
export { HallClient };
|
|
61
|
+
export type { HallConnectionOptions, HallModule };
|
|
98
62
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
63
|
+
* Create a server-side Hall module connected to the Hall standalone server.
|
|
64
|
+
*
|
|
65
|
+
* Returns a `HallModule` backed by a persistent WebSocket connection. Call `connect()`
|
|
66
|
+
* once at process startup — the client auto-reconnects on unexpected disconnects.
|
|
67
|
+
*
|
|
68
|
+
* @param options - Hall server URL, product name, and shared secret.
|
|
69
|
+
* @returns A `HallModule` instance (not yet connected — call `module.connect()`).
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const hall = createHallModule({
|
|
74
|
+
* url: process.env.HALL_URL!,
|
|
75
|
+
* productName: 'academy',
|
|
76
|
+
* secret: process.env.HALL_ACADEMY_SECRET!,
|
|
77
|
+
* })
|
|
78
|
+
* await hall.connect()
|
|
79
|
+
* ```
|
|
101
80
|
*/
|
|
102
|
-
export
|
|
103
|
-
/**
|
|
104
|
-
* Authenticates the upgrade request and resolves the room/peer. Call this when
|
|
105
|
-
* the WebSocket connection is established.
|
|
106
|
-
* @param request - The HTTP upgrade request.
|
|
107
|
-
* @returns A HallSession if authentication succeeded, or null to reject.
|
|
108
|
-
*/
|
|
109
|
-
handleUpgrade(request: Request): Promise<HallSession | null>;
|
|
110
|
-
/**
|
|
111
|
-
* Processes an incoming signaling message from a peer.
|
|
112
|
-
* @param session - The HallSession returned by handleUpgrade().
|
|
113
|
-
* @param data - Raw JSON string from the WebSocket message event.
|
|
114
|
-
* @param send - Callback to send a JSON string back to this peer's client.
|
|
115
|
-
*/
|
|
116
|
-
handleMessage(session: HallSession, data: string, send: (message: string) => void): Promise<void>;
|
|
117
|
-
/**
|
|
118
|
-
* Cleans up when a peer disconnects. Always call this on WebSocket close/error.
|
|
119
|
-
* @param session - The HallSession to clean up.
|
|
120
|
-
*/
|
|
121
|
-
handleClose(session: HallSession): Promise<void>;
|
|
122
|
-
}
|
|
81
|
+
export declare function createHallModule(options: HallConnectionOptions): HallModule;
|
|
123
82
|
/**
|
|
124
|
-
*
|
|
83
|
+
* Options for {@link generateTurnCredentials}.
|
|
125
84
|
*/
|
|
126
85
|
export interface TurnCredentialOptions {
|
|
127
|
-
/** The HMAC-SHA1 secret shared
|
|
86
|
+
/** The HMAC-SHA1 secret shared with the TURN server (i.e. `TURN_SECRET` from `hall.toml`). */
|
|
128
87
|
secret: string;
|
|
129
|
-
/** Peer
|
|
88
|
+
/** Peer or user identifier embedded in the credential username. */
|
|
130
89
|
peerId: string;
|
|
131
90
|
/** Credential TTL in seconds (default: 86400 — 24 hours). */
|
|
132
91
|
ttlSeconds?: number;
|
|
133
92
|
}
|
|
134
93
|
/**
|
|
135
|
-
*
|
|
136
|
-
* RTCPeerConnection as iceServers configuration.
|
|
94
|
+
* Time-limited TURN credentials, ready for use in `RTCPeerConnection.iceServers`.
|
|
137
95
|
*/
|
|
138
96
|
export interface TurnCredentials {
|
|
139
97
|
/** Username in the form `{expiryTimestamp}:{peerId}`. */
|
|
@@ -144,52 +102,33 @@ export interface TurnCredentials {
|
|
|
144
102
|
expiresAt: number;
|
|
145
103
|
}
|
|
146
104
|
/**
|
|
147
|
-
*
|
|
148
|
-
*
|
|
105
|
+
* Generate time-limited TURN credentials using the TURN REST API authentication
|
|
106
|
+
* mechanism (RFC draft-uberti-behave-turn-rest-00).
|
|
149
107
|
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
108
|
+
* Hall's in-process TURN server uses the same shared `TURN_SECRET` from `hall.toml`.
|
|
109
|
+
* Call this if you need to expose TURN credentials via a product API endpoint
|
|
110
|
+
* (e.g. for a custom ICE server list in a legacy client). In most cases the browser
|
|
111
|
+
* SDK handles TURN automatically via the Hall signaling connection.
|
|
152
112
|
*
|
|
153
|
-
* @param options -
|
|
154
|
-
* @returns Time-limited TURN credentials
|
|
113
|
+
* @param options - TURN secret, peer ID, and optional TTL.
|
|
114
|
+
* @returns Time-limited TURN credentials.
|
|
155
115
|
*
|
|
156
116
|
* @example
|
|
157
117
|
* ```typescript
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
118
|
+
* app.get('/api/turn-credentials', requireAuth, (c) => {
|
|
119
|
+
* const user = c.get('user')!
|
|
120
|
+
* const creds = generateTurnCredentials({
|
|
121
|
+
* secret: process.env.TURN_SECRET!,
|
|
122
|
+
* peerId: user.id,
|
|
123
|
+
* ttlSeconds: 3600,
|
|
124
|
+
* })
|
|
125
|
+
* return c.json({
|
|
126
|
+
* urls: 'turn:hall.soulcraft.com:3478',
|
|
127
|
+
* username: creds.username,
|
|
128
|
+
* credential: creds.password,
|
|
129
|
+
* })
|
|
162
130
|
* })
|
|
163
|
-
* // Pass to client:
|
|
164
|
-
* return c.json({ turnUsername: creds.username, turnPassword: creds.password })
|
|
165
131
|
* ```
|
|
166
132
|
*/
|
|
167
133
|
export declare function generateTurnCredentials(options: TurnCredentialOptions): TurnCredentials;
|
|
168
|
-
/**
|
|
169
|
-
* @description Factory that creates a framework-agnostic Hall WebRTC signaling
|
|
170
|
-
* handler. Products mount the returned handler at a WebSocket route and delegate
|
|
171
|
-
* upgrade, message, and close lifecycle events to it.
|
|
172
|
-
*
|
|
173
|
-
* The handler owns the full signaling lifecycle:
|
|
174
|
-
* - Authenticates the upgrade request
|
|
175
|
-
* - Resolves or creates the Room via HallServer
|
|
176
|
-
* - Forwards SDP offer → gets SDP answer from the NAPI SFU
|
|
177
|
-
* - Forwards ICE candidates in both directions
|
|
178
|
-
* - Wires Room events (transcript, concept_mention, relation_proposed, etc.) to the peer's send callback
|
|
179
|
-
* - Cleans up on disconnect
|
|
180
|
-
*
|
|
181
|
-
* @param config - Handler configuration.
|
|
182
|
-
* @returns A HallRoomHandler with handleUpgrade / handleMessage / handleClose.
|
|
183
|
-
*
|
|
184
|
-
* @example
|
|
185
|
-
* ```typescript
|
|
186
|
-
* const hallHandler = createHallRoomHandler({
|
|
187
|
-
* server: hallServer,
|
|
188
|
-
* authenticate: (req) => verifySession(req.headers.get('cookie') ?? ''),
|
|
189
|
-
* resolvePeerId: (_req, user) => (user as { id: string }).id,
|
|
190
|
-
* resolveRoomId: (req) => new URL(req.url).pathname.split('/').at(-2)!,
|
|
191
|
-
* })
|
|
192
|
-
* ```
|
|
193
|
-
*/
|
|
194
|
-
export declare function createHallRoomHandler(config: HallRoomHandlerConfig): HallRoomHandler;
|
|
195
134
|
//# sourceMappingURL=hall-handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hall-handlers.d.ts","sourceRoot":"","sources":["../../src/server/hall-handlers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hall-handlers.d.ts","sourceRoot":"","sources":["../../src/server/hall-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAGH,OAAO,EAAE,UAAU,EAAyC,MAAM,2BAA2B,CAAA;AAC7F,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAEjF,OAAO,EAAE,UAAU,EAAE,CAAA;AACrB,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAA;AAEjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,UAAU,CAE3E;AAID;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8FAA8F;IAC9F,MAAM,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAA;IACd,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,eAAe,CAMvF"}
|