@soulcraft/sdk 2.0.0 → 2.0.2

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 (93) hide show
  1. package/dist/client/index.d.ts +5 -38
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +5 -47
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/client/namespace-proxy.d.ts +3 -4
  6. package/dist/client/namespace-proxy.d.ts.map +1 -1
  7. package/dist/client/namespace-proxy.js +3 -4
  8. package/dist/client/namespace-proxy.js.map +1 -1
  9. package/dist/index.d.ts +6 -6
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +4 -4
  12. package/dist/index.js.map +1 -1
  13. package/dist/modules/hall/browser.d.ts +83 -27
  14. package/dist/modules/hall/browser.d.ts.map +1 -1
  15. package/dist/modules/hall/browser.js +238 -49
  16. package/dist/modules/hall/browser.js.map +1 -1
  17. package/dist/modules/hall/media.d.ts +164 -0
  18. package/dist/modules/hall/media.d.ts.map +1 -0
  19. package/dist/modules/hall/media.js +182 -0
  20. package/dist/modules/hall/media.js.map +1 -0
  21. package/dist/modules/hall/server.d.ts +83 -6
  22. package/dist/modules/hall/server.d.ts.map +1 -1
  23. package/dist/modules/hall/server.js +206 -9
  24. package/dist/modules/hall/server.js.map +1 -1
  25. package/dist/modules/hall/types.d.ts +548 -25
  26. package/dist/modules/hall/types.d.ts.map +1 -1
  27. package/dist/modules/hall/types.js +12 -7
  28. package/dist/modules/hall/types.js.map +1 -1
  29. package/dist/server/hall-handlers.d.ts +40 -12
  30. package/dist/server/hall-handlers.d.ts.map +1 -1
  31. package/dist/server/hall-handlers.js +40 -12
  32. package/dist/server/hall-handlers.js.map +1 -1
  33. package/dist/server/handlers/chat/engine.d.ts.map +1 -1
  34. package/dist/server/handlers/chat/engine.js +5 -1
  35. package/dist/server/handlers/chat/engine.js.map +1 -1
  36. package/dist/server/handlers/chat/types.d.ts +17 -2
  37. package/dist/server/handlers/chat/types.d.ts.map +1 -1
  38. package/dist/server/hono-router.d.ts +2 -9
  39. package/dist/server/hono-router.d.ts.map +1 -1
  40. package/dist/server/hono-router.js +2 -46
  41. package/dist/server/hono-router.js.map +1 -1
  42. package/dist/server/index.d.ts +4 -19
  43. package/dist/server/index.d.ts.map +1 -1
  44. package/dist/server/index.js +10 -29
  45. package/dist/server/index.js.map +1 -1
  46. package/dist/types.d.ts +2 -41
  47. package/dist/types.d.ts.map +1 -1
  48. package/docs/ADR-005-hall-integration.md +449 -0
  49. package/package.json +1 -1
  50. package/dist/client/create-client-sdk.d.ts +0 -113
  51. package/dist/client/create-client-sdk.d.ts.map +0 -1
  52. package/dist/client/create-client-sdk.js +0 -169
  53. package/dist/client/create-client-sdk.js.map +0 -1
  54. package/dist/modules/app-context/index.d.ts +0 -214
  55. package/dist/modules/app-context/index.d.ts.map +0 -1
  56. package/dist/modules/app-context/index.js +0 -569
  57. package/dist/modules/app-context/index.js.map +0 -1
  58. package/dist/modules/billing/firestore-provider.d.ts +0 -60
  59. package/dist/modules/billing/firestore-provider.d.ts.map +0 -1
  60. package/dist/modules/billing/firestore-provider.js +0 -315
  61. package/dist/modules/billing/firestore-provider.js.map +0 -1
  62. package/dist/modules/brainy/proxy.d.ts +0 -48
  63. package/dist/modules/brainy/proxy.d.ts.map +0 -1
  64. package/dist/modules/brainy/proxy.js +0 -95
  65. package/dist/modules/brainy/proxy.js.map +0 -1
  66. package/dist/server/create-sdk.d.ts +0 -74
  67. package/dist/server/create-sdk.d.ts.map +0 -1
  68. package/dist/server/create-sdk.js +0 -104
  69. package/dist/server/create-sdk.js.map +0 -1
  70. package/dist/server/from-license.d.ts +0 -252
  71. package/dist/server/from-license.d.ts.map +0 -1
  72. package/dist/server/from-license.js +0 -349
  73. package/dist/server/from-license.js.map +0 -1
  74. package/dist/server/handlers.d.ts +0 -312
  75. package/dist/server/handlers.d.ts.map +0 -1
  76. package/dist/server/handlers.js +0 -376
  77. package/dist/server/handlers.js.map +0 -1
  78. package/dist/server/postmessage-handler.d.ts +0 -152
  79. package/dist/server/postmessage-handler.d.ts.map +0 -1
  80. package/dist/server/postmessage-handler.js +0 -138
  81. package/dist/server/postmessage-handler.js.map +0 -1
  82. package/dist/transports/http.d.ts +0 -86
  83. package/dist/transports/http.d.ts.map +0 -1
  84. package/dist/transports/http.js +0 -137
  85. package/dist/transports/http.js.map +0 -1
  86. package/dist/transports/postmessage.d.ts +0 -159
  87. package/dist/transports/postmessage.d.ts.map +0 -1
  88. package/dist/transports/postmessage.js +0 -207
  89. package/dist/transports/postmessage.js.map +0 -1
  90. package/dist/transports/workshop.d.ts +0 -173
  91. package/dist/transports/workshop.d.ts.map +0 -1
  92. package/dist/transports/workshop.js +0 -307
  93. package/dist/transports/workshop.js.map +0 -1
@@ -1,307 +0,0 @@
1
- /**
2
- * @module transports/workshop
3
- * @description PostMessage transport for non-brainy API calls from kit iframes to
4
- * the Workshop parent frame.
5
- *
6
- * While {@link PostMessageTransport} handles Brainy RPC (`brainy:request` /
7
- * `brainy:response`), this transport handles generic HTTP-style API calls —
8
- * AI chat streaming, Hall room joins, Pulse analytics, file operations, and
9
- * notifications — using the `workshop:request` / `workshop:response` /
10
- * `workshop:stream` wire protocol.
11
- *
12
- * The parent frame (PreviewFrame.svelte) receives `workshop:request` messages,
13
- * forwards them as real HTTP requests to Workshop's backend, and relays the
14
- * response back via `workshop:response` (JSON) or `workshop:stream` (SSE chunks).
15
- *
16
- * ## Wire protocol
17
- *
18
- * **Request** (kit iframe → parent):
19
- * ```json
20
- * { "type": "workshop:request", "id": "<uuid>", "path": "/api/ai/chat",
21
- * "method": "POST", "body": "{...}", "stream": true, "headers": {} }
22
- * ```
23
- *
24
- * **Response** (parent → kit iframe, non-streaming):
25
- * ```json
26
- * { "type": "workshop:response", "id": "<uuid>", "result": {...} }
27
- * { "type": "workshop:response", "id": "<uuid>", "error": { "code": "...", "message": "..." } }
28
- * ```
29
- *
30
- * **Stream chunk** (parent → kit iframe, streaming):
31
- * ```json
32
- * { "type": "workshop:stream", "id": "<uuid>", "chunk": "..." }
33
- * { "type": "workshop:stream", "id": "<uuid>", "done": true }
34
- * { "type": "workshop:stream", "id": "<uuid>", "error": "..." }
35
- * ```
36
- *
37
- * ## Usage
38
- *
39
- * ```typescript
40
- * import { WorkshopTransport } from '@soulcraft/sdk/client'
41
- *
42
- * const transport = new WorkshopTransport('https://workshop.soulcraft.com')
43
- *
44
- * // JSON call
45
- * const result = await transport.call('/api/hall/rooms/my-room/join', 'POST', '{"audio":true}')
46
- *
47
- * // Streaming call (AI chat)
48
- * for await (const chunk of transport.stream('/api/ai/chat', 'POST', body)) {
49
- * process.stdout.write(chunk)
50
- * }
51
- * ```
52
- *
53
- * @see {@link PostMessageTransport} for Brainy-specific RPC transport.
54
- */
55
- // ─────────────────────────────────────────────────────────────────────────────
56
- // Transport
57
- // ─────────────────────────────────────────────────────────────────────────────
58
- /**
59
- * PostMessage transport for generic (non-brainy) API calls from kit iframes.
60
- *
61
- * Each `call()` posts a `workshop:request` message to `window.parent` and awaits
62
- * a matching `workshop:response`. For streaming endpoints, `stream()` collects
63
- * `workshop:stream` chunks and yields them as an `AsyncIterable<string>`.
64
- *
65
- * @example
66
- * ```typescript
67
- * const t = new WorkshopTransport(workshopOrigin)
68
- *
69
- * // Fire-and-forget analytics
70
- * t.call('/api/pulse/track', 'POST', JSON.stringify({ event: 'page_view' }))
71
- *
72
- * // Stream AI tokens
73
- * for await (const token of t.stream('/api/ai/chat', 'POST', body)) {
74
- * output += token
75
- * }
76
- * ```
77
- */
78
- export class WorkshopTransport {
79
- _targetOrigin;
80
- _timeoutMs;
81
- _pendingCalls = new Map();
82
- _pendingStreams = new Map();
83
- _closed = false;
84
- _messageListener;
85
- _listenerWindow;
86
- _parentWindow;
87
- /**
88
- * @param targetOrigin - The Workshop parent frame's origin for postMessage security.
89
- * Must be an explicit origin in production; `'*'` is acceptable only in dev.
90
- * @param timeoutMs - Per-call timeout in milliseconds. Default: 60 000 (longer than
91
- * brainy RPC because AI chat streams can take a while to start).
92
- * @param listenerWindow - Window for message events. Defaults to `window`.
93
- * @param parentWindow - Window to post messages to. Defaults to `window.parent`.
94
- */
95
- constructor(targetOrigin, timeoutMs = 60_000, listenerWindow, parentWindow) {
96
- this._targetOrigin = targetOrigin;
97
- this._timeoutMs = timeoutMs;
98
- this._listenerWindow = listenerWindow ?? window;
99
- this._parentWindow = parentWindow ?? window.parent;
100
- this._messageListener = (event) => this._handleMessage(event);
101
- this._listenerWindow.addEventListener('message', this._messageListener);
102
- }
103
- // ── Internal ──────────────────────────────────────────────────────────────
104
- _handleMessage(event) {
105
- const data = event.data;
106
- if (!data || typeof data.type !== 'string')
107
- return;
108
- // ── JSON response ─────────────────────────────────────────────────────
109
- if (data.type === 'workshop:response') {
110
- const pending = this._pendingCalls.get(data.id);
111
- if (!pending)
112
- return;
113
- clearTimeout(pending.timer);
114
- this._pendingCalls.delete(data.id);
115
- if (data.error) {
116
- pending.reject(new Error(`${data.error.code}: ${data.error.message}`));
117
- }
118
- else {
119
- pending.resolve(data.result);
120
- }
121
- return;
122
- }
123
- // ── Stream chunk ──────────────────────────────────────────────────────
124
- if (data.type === 'workshop:stream') {
125
- const stream = this._pendingStreams.get(data.id);
126
- if (!stream)
127
- return;
128
- if (data.error) {
129
- stream.ended = true;
130
- stream.error = data.error;
131
- clearTimeout(stream.timer);
132
- this._pendingStreams.delete(data.id);
133
- if (stream.waiter) {
134
- const w = stream.waiter;
135
- stream.waiter = null;
136
- w({ value: undefined, done: true });
137
- }
138
- return;
139
- }
140
- if (data.done) {
141
- stream.ended = true;
142
- clearTimeout(stream.timer);
143
- this._pendingStreams.delete(data.id);
144
- if (stream.waiter) {
145
- const w = stream.waiter;
146
- stream.waiter = null;
147
- w({ value: undefined, done: true });
148
- }
149
- return;
150
- }
151
- if (data.chunk !== undefined) {
152
- // Reset timeout on each chunk — the stream is alive.
153
- clearTimeout(stream.timer);
154
- stream.timer = setTimeout(() => this._streamTimeout(data.id), this._timeoutMs);
155
- if (stream.waiter) {
156
- // Consumer is waiting — deliver directly.
157
- const w = stream.waiter;
158
- stream.waiter = null;
159
- w({ value: data.chunk, done: false });
160
- }
161
- else {
162
- // Consumer hasn't called next() yet — buffer.
163
- stream.buffer.push(data.chunk);
164
- }
165
- }
166
- }
167
- }
168
- _streamTimeout(id) {
169
- const stream = this._pendingStreams.get(id);
170
- if (!stream)
171
- return;
172
- stream.ended = true;
173
- stream.error = 'Stream timed out';
174
- this._pendingStreams.delete(id);
175
- if (stream.waiter) {
176
- const w = stream.waiter;
177
- stream.waiter = null;
178
- w({ value: undefined, done: true });
179
- }
180
- }
181
- _generateId() {
182
- if (typeof crypto !== 'undefined' && crypto.randomUUID) {
183
- return crypto.randomUUID();
184
- }
185
- return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
186
- }
187
- // ── Public API ────────────────────────────────────────────────────────────
188
- /**
189
- * Send a JSON API call through the PostMessage relay.
190
- *
191
- * @param path - API endpoint path (e.g. '/api/hall/rooms/my-room/join').
192
- * @param method - HTTP method.
193
- * @param body - JSON-serialized request body.
194
- * @param headers - Extra headers to forward.
195
- * @returns The parsed JSON response body.
196
- * @throws {Error} If the transport is closed, the request times out, or the
197
- * parent responds with an error.
198
- */
199
- async call(path, method = 'POST', body, headers) {
200
- if (this._closed)
201
- throw new Error('WorkshopTransport is closed');
202
- const id = this._generateId();
203
- return new Promise((resolve, reject) => {
204
- const timer = setTimeout(() => {
205
- this._pendingCalls.delete(id);
206
- reject(new Error(`WorkshopTransport: call to ${path} timed out after ${this._timeoutMs}ms`));
207
- }, this._timeoutMs);
208
- this._pendingCalls.set(id, { resolve, reject, timer });
209
- const message = {
210
- type: 'workshop:request',
211
- id,
212
- path,
213
- method,
214
- body,
215
- headers,
216
- };
217
- this._parentWindow.postMessage(message, this._targetOrigin);
218
- });
219
- }
220
- /**
221
- * Send a streaming API call through the PostMessage relay.
222
- *
223
- * The parent frame reads the HTTP response as SSE chunks and forwards each as
224
- * a `workshop:stream` message. This method yields each chunk as it arrives.
225
- *
226
- * @param path - API endpoint path (e.g. '/api/ai/chat').
227
- * @param method - HTTP method (typically 'POST').
228
- * @param body - JSON-serialized request body.
229
- * @param headers - Extra headers to forward.
230
- * @returns An async iterable of string chunks.
231
- */
232
- stream(path, method = 'POST', body, headers) {
233
- if (this._closed)
234
- throw new Error('WorkshopTransport is closed');
235
- const id = this._generateId();
236
- const pending = {
237
- buffer: [],
238
- ended: false,
239
- waiter: null,
240
- timer: setTimeout(() => this._streamTimeout(id), this._timeoutMs),
241
- };
242
- this._pendingStreams.set(id, pending);
243
- const message = {
244
- type: 'workshop:request',
245
- id,
246
- path,
247
- method,
248
- body,
249
- stream: true,
250
- headers,
251
- };
252
- this._parentWindow.postMessage(message, this._targetOrigin);
253
- // Return an AsyncIterable that pulls from the pending stream state.
254
- return {
255
- [Symbol.asyncIterator]: () => ({
256
- next: () => {
257
- // Check for buffered data first.
258
- if (pending.buffer.length > 0) {
259
- return Promise.resolve({ value: pending.buffer.shift(), done: false });
260
- }
261
- // Stream ended — check for error.
262
- if (pending.ended) {
263
- if (pending.error) {
264
- return Promise.reject(new Error(`WorkshopTransport stream error: ${pending.error}`));
265
- }
266
- return Promise.resolve({ value: undefined, done: true });
267
- }
268
- // Wait for the next chunk.
269
- return new Promise((resolve) => {
270
- pending.waiter = resolve;
271
- });
272
- },
273
- }),
274
- };
275
- }
276
- /**
277
- * Returns `true` if the transport is open and usable.
278
- */
279
- isAlive() {
280
- return !this._closed;
281
- }
282
- /**
283
- * Close the transport, removing the message listener and rejecting all pending calls.
284
- */
285
- close() {
286
- if (this._closed)
287
- return;
288
- this._closed = true;
289
- this._listenerWindow.removeEventListener('message', this._messageListener);
290
- const callError = new Error('WorkshopTransport closed');
291
- for (const [id, pending] of this._pendingCalls) {
292
- clearTimeout(pending.timer);
293
- pending.reject(callError);
294
- this._pendingCalls.delete(id);
295
- }
296
- for (const [id, stream] of this._pendingStreams) {
297
- clearTimeout(stream.timer);
298
- stream.ended = true;
299
- stream.error = 'Transport closed';
300
- this._pendingStreams.delete(id);
301
- if (stream.waiter) {
302
- stream.waiter({ value: undefined, done: true });
303
- }
304
- }
305
- }
306
- }
307
- //# sourceMappingURL=workshop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workshop.js","sourceRoot":"","sources":["../../src/transports/workshop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AA0EH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,iBAAiB;IACX,aAAa,CAAQ;IACrB,UAAU,CAAQ;IAClB,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC9C,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC3D,OAAO,GAAG,KAAK,CAAA;IACN,gBAAgB,CAA+B;IAC/C,eAAe,CAAyB;IACxC,aAAa,CAAyB;IAEvD;;;;;;;OAOG;IACH,YACE,YAAoB,EACpB,SAAS,GAAG,MAAM,EAClB,cAAwC,EACxC,YAAsC;QAEtC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAA;QACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC3B,IAAI,CAAC,eAAe,GAAG,cAAc,IAAK,MAA6C,CAAA;QACvF,IAAI,CAAC,aAAa,GAAG,YAAY,IAAK,MAA6C,CAAC,MAAM,CAAA;QAE1F,IAAI,CAAC,gBAAgB,GAAG,CAAC,KAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAC3E,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;IACzE,CAAC;IAED,6EAA6E;IAErE,cAAc,CAAC,KAAmB;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAA8C,CAAA;QACjE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAM;QAElD,yEAAyE;QACzE,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC/C,IAAI,CAAC,OAAO;gBAAE,OAAM;YAEpB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC3B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAElC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YACxE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC9B,CAAC;YACD,OAAM;QACR,CAAC;QAED,yEAAyE;QACzE,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAM;YAEnB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;gBACnB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;gBACzB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC1B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACpC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;oBACvB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;oBACpB,CAAC,CAAC,EAAE,KAAK,EAAE,SAA8B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC1D,CAAC;gBACD,OAAM;YACR,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;gBACnB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC1B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACpC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;oBACvB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;oBACpB,CAAC,CAAC,EAAE,KAAK,EAAE,SAA8B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC1D,CAAC;gBACD,OAAM;YACR,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC7B,qDAAqD;gBACrD,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC1B,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;gBAE9E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,0CAA0C;oBAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;oBACvB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;oBACpB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;gBACvC,CAAC;qBAAM,CAAC;oBACN,8CAA8C;oBAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,EAAU;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;QACnB,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAA;QACjC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;YACvB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;YACpB,CAAC,CAAC,EAAE,KAAK,EAAE,SAA8B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,UAAU,EAAE,CAAA;QAC5B,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;IACnE,CAAC;IAED,6EAA6E;IAE7E;;;;;;;;;;OAUG;IACH,KAAK,CAAC,IAAI,CACR,IAAY,EACZ,SAA4C,MAAM,EAClD,IAAa,EACb,OAAgC;QAEhC,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAEhE,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAE7B,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,IAAI,oBAAoB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAA;YAC9F,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;YAEnB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YAEtD,MAAM,OAAO,GAAoB;gBAC/B,IAAI,EAAE,kBAAkB;gBACxB,EAAE;gBACF,IAAI;gBACJ,MAAM;gBACN,IAAI;gBACJ,OAAO;aACR,CAAA;YACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACH,MAAM,CACJ,IAAY,EACZ,SAA4C,MAAM,EAClD,IAAa,EACb,OAAgC;QAEhC,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAEhE,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAE7B,MAAM,OAAO,GAAkB;YAC7B,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;SAClE,CAAA;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAErC,MAAM,OAAO,GAAoB;YAC/B,IAAI,EAAE,kBAAkB;YACxB,EAAE;YACF,IAAI;YACJ,MAAM;YACN,IAAI;YACJ,MAAM,EAAE,IAAI;YACZ,OAAO;SACR,CAAA;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAE3D,oEAAoE;QACpE,OAAO;YACL,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7B,IAAI,EAAE,GAAoC,EAAE;oBAC1C,iCAAiC;oBACjC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;oBACzE,CAAC;oBAED,kCAAkC;oBAClC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAClB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;4BAClB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;wBACtF,CAAC;wBACD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAA8B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;oBAC/E,CAAC;oBAED,2BAA2B;oBAC3B,OAAO,IAAI,OAAO,CAAyB,CAAC,OAAO,EAAE,EAAE;wBACrD,OAAO,CAAC,MAAM,GAAG,OAAO,CAAA;oBAC1B,CAAC,CAAC,CAAA;gBACJ,CAAC;aACF,CAAC;SACH,CAAA;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,CAAC,IAAI,CAAC,OAAO,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAM;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QAEnB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAE1E,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACvD,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/C,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YACzB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC/B,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAChD,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC1B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;YACnB,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAA;YACjC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAC/B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAA8B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;IACH,CAAC;CACF"}