@moorline/control-api 0.0.1

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.
@@ -0,0 +1,588 @@
1
+ import { JsonBodyError } from '../errors.js';
2
+ import { optionalNullableId, optionalString, parseControlApiRuntimeMode, requireBoolean, requireString } from '../validation.js';
3
+ function parseRecord(value) {
4
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
5
+ throw new JsonBodyError(422, 'Request body must be a JSON object.');
6
+ }
7
+ return value;
8
+ }
9
+ function parsePackageKind(value) {
10
+ if (value === 'api-adapter' || value === 'transport' || value === 'provider' || value === 'plugin' || value === 'skill' || value === 'bundle') {
11
+ return value;
12
+ }
13
+ throw new JsonBodyError(422, 'kind must be one of: api-adapter, transport, provider, plugin, skill, bundle.');
14
+ }
15
+ function parsePackageSurface(value) {
16
+ if (value === 'api-adapter' || value === 'transport' || value === 'provider' || value === 'plugin' || value === 'skill') {
17
+ return value;
18
+ }
19
+ throw new JsonBodyError(422, 'surface must be one of: api-adapter, transport, provider, plugin, skill.');
20
+ }
21
+ function parsePackageSelectionSurface(value) {
22
+ if (value === 'api-adapter' || value === 'transport' || value === 'provider') {
23
+ return value;
24
+ }
25
+ throw new JsonBodyError(422, 'surface must be one of: api-adapter, transport, provider.');
26
+ }
27
+ function parsePackageEnablementSurface(value) {
28
+ if (value === 'plugin' || value === 'skill') {
29
+ return value;
30
+ }
31
+ throw new JsonBodyError(422, 'surface must be one of: plugin, skill.');
32
+ }
33
+ function parseStringRecord(value, label) {
34
+ if (value === undefined) {
35
+ return {};
36
+ }
37
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
38
+ throw new JsonBodyError(422, `${label} must be an object mapping config keys to strings.`);
39
+ }
40
+ const parsed = {};
41
+ for (const [key, entry] of Object.entries(value)) {
42
+ if (!key.trim()) {
43
+ throw new JsonBodyError(422, `${label} keys must be non-empty strings.`);
44
+ }
45
+ if (typeof entry !== 'string') {
46
+ throw new JsonBodyError(422, `${label}.${key} must be a string.`);
47
+ }
48
+ parsed[key] = entry;
49
+ }
50
+ return parsed;
51
+ }
52
+ function parseSecretReplacements(value) {
53
+ if (value === undefined) {
54
+ return [];
55
+ }
56
+ if (!Array.isArray(value)) {
57
+ throw new JsonBodyError(422, 'secretReplacements must be an array when provided.');
58
+ }
59
+ return value.map((entry, index) => {
60
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
61
+ throw new JsonBodyError(422, `secretReplacements[${index}] must be an object.`);
62
+ }
63
+ const record = entry;
64
+ return {
65
+ key: requireString(record, 'key'),
66
+ value: requireString(record, 'value', { trim: false, allowEmpty: true })
67
+ };
68
+ });
69
+ }
70
+ function parseSessionTarget(body) {
71
+ const sessionId = optionalString(body, 'sessionId');
72
+ const spaceId = optionalString(body, 'spaceId');
73
+ if (!sessionId && !spaceId) {
74
+ throw new JsonBodyError(422, 'Either sessionId or spaceId is required.');
75
+ }
76
+ return {
77
+ ...(sessionId ? { sessionId } : {}),
78
+ ...(spaceId ? { spaceId } : {})
79
+ };
80
+ }
81
+ function parseSpaceSessionTarget(body) {
82
+ const target = parseSessionTarget(body);
83
+ if (!target.spaceId) {
84
+ throw new JsonBodyError(422, 'spaceId is required.');
85
+ }
86
+ return {
87
+ ...(target.sessionId ? { sessionId: target.sessionId } : {}),
88
+ spaceId: target.spaceId
89
+ };
90
+ }
91
+ function parseMissionTarget(body) {
92
+ const missionId = optionalString(body, 'missionId');
93
+ const spaceId = optionalString(body, 'spaceId');
94
+ if (!spaceId) {
95
+ throw new JsonBodyError(422, 'spaceId is required.');
96
+ }
97
+ return {
98
+ ...(missionId ? { missionId } : {}),
99
+ spaceId
100
+ };
101
+ }
102
+ function parseRequestAnswers(value) {
103
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
104
+ throw new JsonBodyError(422, 'answers must be an object mapping question ids to answer strings.');
105
+ }
106
+ const answers = {};
107
+ for (const [key, entry] of Object.entries(value)) {
108
+ const id = key.trim();
109
+ if (!id) {
110
+ throw new JsonBodyError(422, 'answers keys must be non-empty question ids.');
111
+ }
112
+ if (typeof entry === 'string') {
113
+ const normalized = entry.trim();
114
+ if (!normalized) {
115
+ throw new JsonBodyError(422, `answers.${id} must be a non-empty string.`);
116
+ }
117
+ answers[id] = normalized;
118
+ continue;
119
+ }
120
+ if (Array.isArray(entry) && entry.every((item) => typeof item === 'string' && item.trim().length > 0)) {
121
+ answers[id] = entry.map((item) => item.trim());
122
+ continue;
123
+ }
124
+ throw new JsonBodyError(422, `answers.${id} must be a string or non-empty string array.`);
125
+ }
126
+ if (Object.keys(answers).length === 0) {
127
+ throw new JsonBodyError(422, 'answers must include at least one question response.');
128
+ }
129
+ return answers;
130
+ }
131
+ function requireRoutePath(pathname) {
132
+ switch (pathname) {
133
+ case '/api/main/start':
134
+ case '/api/main/stop':
135
+ case '/api/main/restart':
136
+ case '/api/shutdown':
137
+ case '/api/leases/create':
138
+ case '/api/leases/heartbeat':
139
+ case '/api/leases/release':
140
+ case '/api/runtime/accepting':
141
+ case '/api/runtime/reload':
142
+ case '/api/provider/test':
143
+ case '/api/provider/start':
144
+ case '/api/provider/stop':
145
+ case '/api/work/session/create':
146
+ case '/api/work/session/direct':
147
+ case '/api/work/session/archive':
148
+ case '/api/work/session/delete':
149
+ case '/api/work/mission/create':
150
+ case '/api/work/mission/pause':
151
+ case '/api/work/mission/resume':
152
+ case '/api/work/mission/stop':
153
+ case '/api/work/mission/run':
154
+ case '/api/work/mission/archive':
155
+ case '/api/work/mission/delete':
156
+ case '/api/packages/install':
157
+ case '/api/packages/remove':
158
+ case '/api/packages/enable':
159
+ case '/api/packages/disable':
160
+ case '/api/packages/activate':
161
+ case '/api/packages/deactivate':
162
+ case '/api/packages/select':
163
+ case '/api/packages/config':
164
+ case '/api/packages/apply':
165
+ case '/api/history/snapshot':
166
+ case '/api/history/restore':
167
+ case '/api/history/discard':
168
+ case '/api/pending-requests/resolve':
169
+ case '/api/pending-requests/answer':
170
+ case '/api/pending-requests/cancel':
171
+ case '/api/management/default-model':
172
+ case '/api/management/config-migration-warning/acknowledge':
173
+ return pathname;
174
+ default:
175
+ throw new JsonBodyError(404, 'Not found');
176
+ }
177
+ }
178
+ export function parseControlApiPostRoute(pathname, rawBody) {
179
+ const body = parseRecord(rawBody);
180
+ const path = requireRoutePath(pathname);
181
+ switch (path) {
182
+ case '/api/main/start':
183
+ case '/api/main/stop':
184
+ case '/api/main/restart':
185
+ case '/api/shutdown':
186
+ return {
187
+ kind: 'api',
188
+ path,
189
+ payload: {}
190
+ };
191
+ case '/api/leases/create': {
192
+ const client = optionalString(body, 'client') ?? 'unknown-client';
193
+ const policy = body.policy;
194
+ if (policy !== undefined && policy !== 'detached' && policy !== 'stop_on_last_lease') {
195
+ throw new JsonBodyError(422, 'policy must be "detached" or "stop_on_last_lease" when provided.');
196
+ }
197
+ const ttlMs = body.ttlMs;
198
+ if (ttlMs !== undefined && (typeof ttlMs !== 'number' || !Number.isFinite(ttlMs))) {
199
+ throw new JsonBodyError(422, 'ttlMs must be a finite number when provided.');
200
+ }
201
+ return {
202
+ kind: 'api',
203
+ path,
204
+ payload: {
205
+ client,
206
+ ...(policy ? { policy } : {}),
207
+ ...(typeof ttlMs === 'number' ? { ttlMs } : {})
208
+ }
209
+ };
210
+ }
211
+ case '/api/leases/heartbeat': {
212
+ const leaseId = requireString(body, 'leaseId');
213
+ const ttlMs = body.ttlMs;
214
+ if (ttlMs !== undefined && (typeof ttlMs !== 'number' || !Number.isFinite(ttlMs))) {
215
+ throw new JsonBodyError(422, 'ttlMs must be a finite number when provided.');
216
+ }
217
+ return {
218
+ kind: 'api',
219
+ path,
220
+ payload: {
221
+ leaseId,
222
+ ...(typeof ttlMs === 'number' ? { ttlMs } : {})
223
+ }
224
+ };
225
+ }
226
+ case '/api/leases/release':
227
+ return {
228
+ kind: 'api',
229
+ path,
230
+ payload: {
231
+ leaseId: requireString(body, 'leaseId')
232
+ }
233
+ };
234
+ case '/api/runtime/accepting':
235
+ return {
236
+ kind: 'api',
237
+ path,
238
+ payload: {
239
+ accepting: requireBoolean(body, 'accepting')
240
+ }
241
+ };
242
+ case '/api/runtime/reload': {
243
+ const mode = body.mode;
244
+ if (mode !== undefined && mode !== 'graceful' && mode !== 'force') {
245
+ throw new JsonBodyError(422, 'mode must be "graceful" or "force" when provided.');
246
+ }
247
+ return {
248
+ kind: 'api',
249
+ path,
250
+ payload: {
251
+ mode: (mode === 'force' ? 'force' : 'graceful')
252
+ }
253
+ };
254
+ }
255
+ case '/api/provider/start':
256
+ {
257
+ const threadId = optionalString(body, 'threadId');
258
+ return {
259
+ kind: 'api',
260
+ path,
261
+ payload: {
262
+ ...(threadId ? { threadId } : {})
263
+ }
264
+ };
265
+ }
266
+ case '/api/provider/test':
267
+ {
268
+ const prompt = optionalString(body, 'prompt');
269
+ const sendTurn = body.sendTurn;
270
+ if (sendTurn !== undefined && typeof sendTurn !== 'boolean') {
271
+ throw new JsonBodyError(422, 'sendTurn must be a boolean when provided.');
272
+ }
273
+ return {
274
+ kind: 'api',
275
+ path,
276
+ payload: {
277
+ ...(sendTurn === true ? { sendTurn: true } : {}),
278
+ ...(prompt ? { prompt } : {})
279
+ }
280
+ };
281
+ }
282
+ case '/api/provider/stop':
283
+ {
284
+ const threadId = optionalString(body, 'threadId');
285
+ return {
286
+ kind: 'api',
287
+ path,
288
+ payload: {
289
+ ...(threadId ? { threadId } : {})
290
+ }
291
+ };
292
+ }
293
+ case '/api/work/session/create': {
294
+ const initialInstruction = optionalString(body, 'initialInstruction');
295
+ const objective = optionalString(body, 'objective');
296
+ return {
297
+ kind: 'api',
298
+ path,
299
+ payload: {
300
+ requestedName: requireString(body, 'requestedName'),
301
+ runtimeMode: parseControlApiRuntimeMode(body.runtimeMode, 'runtimeMode'),
302
+ ...(initialInstruction ? { initialInstruction } : {}),
303
+ ...(objective ? { objective } : {})
304
+ }
305
+ };
306
+ }
307
+ case '/api/work/session/direct': {
308
+ const reason = optionalString(body, 'reason');
309
+ return {
310
+ kind: 'api',
311
+ path,
312
+ payload: {
313
+ ...parseSessionTarget(body),
314
+ instruction: requireString(body, 'instruction'),
315
+ ...(reason ? { reason } : {})
316
+ }
317
+ };
318
+ }
319
+ case '/api/work/session/archive':
320
+ return {
321
+ kind: 'api',
322
+ path,
323
+ payload: parseSpaceSessionTarget(body)
324
+ };
325
+ case '/api/work/session/delete':
326
+ return {
327
+ kind: 'api',
328
+ path,
329
+ payload: parseSpaceSessionTarget(body)
330
+ };
331
+ case '/api/work/mission/create': {
332
+ const startTime = optionalString(body, 'startTime');
333
+ return {
334
+ kind: 'api',
335
+ path,
336
+ payload: {
337
+ title: requireString(body, 'title'),
338
+ goal: requireString(body, 'goal'),
339
+ schedule: requireString(body, 'schedule'),
340
+ runtimeMode: parseControlApiRuntimeMode(body.runtimeMode, 'runtimeMode'),
341
+ ...(startTime ? { startTime } : {})
342
+ }
343
+ };
344
+ }
345
+ case '/api/work/mission/pause':
346
+ return {
347
+ kind: 'api',
348
+ path,
349
+ payload: {
350
+ ...parseMissionTarget(body)
351
+ }
352
+ };
353
+ case '/api/work/mission/resume':
354
+ return {
355
+ kind: 'api',
356
+ path,
357
+ payload: {
358
+ ...parseMissionTarget(body)
359
+ }
360
+ };
361
+ case '/api/work/mission/stop':
362
+ return {
363
+ kind: 'api',
364
+ path,
365
+ payload: {
366
+ ...parseMissionTarget(body)
367
+ }
368
+ };
369
+ case '/api/work/mission/run':
370
+ return {
371
+ kind: 'api',
372
+ path,
373
+ payload: {
374
+ ...parseMissionTarget(body)
375
+ }
376
+ };
377
+ case '/api/work/mission/archive':
378
+ return {
379
+ kind: 'api',
380
+ path,
381
+ payload: {
382
+ ...parseMissionTarget(body)
383
+ }
384
+ };
385
+ case '/api/work/mission/delete':
386
+ return {
387
+ kind: 'api',
388
+ path,
389
+ payload: {
390
+ ...parseMissionTarget(body)
391
+ }
392
+ };
393
+ case '/api/packages/install': {
394
+ const packageId = optionalString(body, 'packageId');
395
+ const source = optionalString(body, 'source');
396
+ return {
397
+ kind: 'api',
398
+ path,
399
+ payload: {
400
+ kind: parsePackageKind(body.kind ?? body.surface),
401
+ ...(packageId ? { packageId } : {}),
402
+ ...(source ? { source } : {})
403
+ }
404
+ };
405
+ }
406
+ case '/api/packages/remove': {
407
+ const cascade = body.cascade;
408
+ if (cascade !== undefined && typeof cascade !== 'boolean') {
409
+ throw new JsonBodyError(422, 'cascade must be a boolean when provided.');
410
+ }
411
+ return {
412
+ kind: 'api',
413
+ path,
414
+ payload: {
415
+ kind: parsePackageKind(body.kind ?? body.surface),
416
+ packageId: requireString(body, 'packageId'),
417
+ ...(cascade === true ? { cascade: true } : {})
418
+ }
419
+ };
420
+ }
421
+ case '/api/packages/enable':
422
+ return {
423
+ kind: 'api',
424
+ path,
425
+ payload: {
426
+ surface: parsePackageEnablementSurface(body.surface),
427
+ packageId: requireString(body, 'packageId')
428
+ }
429
+ };
430
+ case '/api/packages/disable':
431
+ return {
432
+ kind: 'api',
433
+ path,
434
+ payload: {
435
+ surface: parsePackageEnablementSurface(body.surface),
436
+ packageId: requireString(body, 'packageId')
437
+ }
438
+ };
439
+ case '/api/packages/activate':
440
+ case '/api/packages/deactivate':
441
+ return {
442
+ kind: 'api',
443
+ path,
444
+ payload: {
445
+ surface: parsePackageSurface(body.surface),
446
+ packageId: requireString(body, 'packageId')
447
+ }
448
+ };
449
+ case '/api/packages/select': {
450
+ const packageId = optionalNullableId(body, 'packageId');
451
+ if (packageId === undefined) {
452
+ throw new JsonBodyError(422, 'packageId must be provided as a string or null.');
453
+ }
454
+ return {
455
+ kind: 'api',
456
+ path,
457
+ payload: {
458
+ surface: parsePackageSelectionSurface(body.surface),
459
+ packageId
460
+ }
461
+ };
462
+ }
463
+ case '/api/packages/config': {
464
+ const values = parseStringRecord(body.values, 'values');
465
+ if (Object.keys(values).length === 0 && body.secretReplacements === undefined) {
466
+ throw new JsonBodyError(422, 'At least one config value or secret replacement is required.');
467
+ }
468
+ return {
469
+ kind: 'api',
470
+ path,
471
+ payload: {
472
+ surface: parsePackageSurface(body.surface),
473
+ packageId: requireString(body, 'packageId'),
474
+ values,
475
+ secretReplacements: parseSecretReplacements(body.secretReplacements)
476
+ }
477
+ };
478
+ }
479
+ case '/api/packages/apply':
480
+ return {
481
+ kind: 'api',
482
+ path,
483
+ payload: {}
484
+ };
485
+ case '/api/history/snapshot':
486
+ return {
487
+ kind: 'api',
488
+ path,
489
+ payload: {
490
+ label: requireString(body, 'label')
491
+ }
492
+ };
493
+ case '/api/history/restore': {
494
+ const historyPath = optionalString(body, 'path');
495
+ return {
496
+ kind: 'api',
497
+ path,
498
+ payload: {
499
+ commitish: requireString(body, 'commitish'),
500
+ ...(historyPath ? { path: historyPath } : {})
501
+ }
502
+ };
503
+ }
504
+ case '/api/history/discard': {
505
+ const historyPath = optionalString(body, 'path');
506
+ return {
507
+ kind: 'api',
508
+ path,
509
+ payload: {
510
+ ...(historyPath ? { path: historyPath } : {})
511
+ }
512
+ };
513
+ }
514
+ case '/api/pending-requests/resolve': {
515
+ const decision = body.decision;
516
+ if (decision !== 'accept' && decision !== 'decline' && decision !== 'cancel') {
517
+ throw new JsonBodyError(422, 'decision must be one of: accept, decline, cancel.');
518
+ }
519
+ return {
520
+ kind: 'api',
521
+ path,
522
+ payload: {
523
+ requestId: requireString(body, 'requestId'),
524
+ decision
525
+ }
526
+ };
527
+ }
528
+ case '/api/pending-requests/answer':
529
+ return {
530
+ kind: 'api',
531
+ path,
532
+ payload: {
533
+ requestId: requireString(body, 'requestId'),
534
+ answers: parseRequestAnswers(body.answers)
535
+ }
536
+ };
537
+ case '/api/pending-requests/cancel':
538
+ return {
539
+ kind: 'api',
540
+ path,
541
+ payload: {
542
+ requestId: requireString(body, 'requestId')
543
+ }
544
+ };
545
+ case '/api/management/default-model':
546
+ return {
547
+ kind: 'api',
548
+ path,
549
+ payload: {
550
+ model: requireString(body, 'model')
551
+ }
552
+ };
553
+ case '/api/management/config-migration-warning/acknowledge':
554
+ return {
555
+ kind: 'api',
556
+ path,
557
+ payload: {}
558
+ };
559
+ }
560
+ }
561
+ function requireQueryString(url, key) {
562
+ const value = url.searchParams.get(key);
563
+ if (!value || value.trim().length === 0) {
564
+ throw new JsonBodyError(422, `${key} query parameter is required.`);
565
+ }
566
+ return value.trim();
567
+ }
568
+ export function parseHistoryShowQuery(url) {
569
+ return {
570
+ commitish: requireQueryString(url, 'commitish')
571
+ };
572
+ }
573
+ export function parseHistoryDiffQuery(url) {
574
+ const from = url.searchParams.get('from')?.trim();
575
+ const to = url.searchParams.get('to')?.trim();
576
+ const path = url.searchParams.get('path')?.trim();
577
+ return {
578
+ ...(from ? { from } : {}),
579
+ ...(to ? { to } : {}),
580
+ ...(path ? { path } : {})
581
+ };
582
+ }
583
+ export function parsePendingInspectQuery(url) {
584
+ return {
585
+ requestId: requireQueryString(url, 'requestId')
586
+ };
587
+ }
588
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../../../src/contracts/routes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,cAAc,EACd,aAAa,EACd,MAAM,kBAAkB,CAAC;AA6H1B,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9I,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,+EAA+E,CAAC,CAAC;AAChH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACxH,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,0EAA0E,CAAC,CAAC;AAC3G,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QAC7E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,2DAA2D,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAc;IACnD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,wCAAwC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,KAAa;IACtD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,GAAG,KAAK,oDAAoD,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,GAAG,KAAK,kCAAkC,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,oBAAoB,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,sBAAsB,KAAK,sBAAsB,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,OAAO;YACL,GAAG,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;YACjC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;SACzE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,IAA6B;IACvD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO;QACL,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAA6B;IAC5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACvD,CAAC;IACD,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAA6B;IACvD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACvD,CAAC;IACD,OAAO;QACL,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,mEAAmE,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,OAAO,GAAsC,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,8CAA8C,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,8BAA8B,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YACtG,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/C,SAAS;QACX,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,8CAA8C,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,sDAAsD,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,iBAAiB,CAAC;QACvB,KAAK,gBAAgB,CAAC;QACtB,KAAK,mBAAmB,CAAC;QACzB,KAAK,eAAe,CAAC;QACrB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,wBAAwB,CAAC;QAC9B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,0BAA0B,CAAC;QAChC,KAAK,0BAA0B,CAAC;QAChC,KAAK,2BAA2B,CAAC;QACjC,KAAK,0BAA0B,CAAC;QAChC,KAAK,0BAA0B,CAAC;QAChC,KAAK,yBAAyB,CAAC;QAC/B,KAAK,0BAA0B,CAAC;QAChC,KAAK,wBAAwB,CAAC;QAC9B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,2BAA2B,CAAC;QACjC,KAAK,0BAA0B,CAAC;QAChC,KAAK,uBAAuB,CAAC;QAC7B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,wBAAwB,CAAC;QAC9B,KAAK,0BAA0B,CAAC;QAChC,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,+BAA+B,CAAC;QACrC,KAAK,8BAA8B,CAAC;QACpC,KAAK,8BAA8B,CAAC;QACpC,KAAK,+BAA+B,CAAC;QACrC,KAAK,sDAAsD;YACzD,OAAO,QAAQ,CAAC;QAClB;YACE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAgB,EAAE,OAAgB;IACzE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAExC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,iBAAiB,CAAC;QACvB,KAAK,gBAAgB,CAAC;QACtB,KAAK,mBAAmB,CAAC;QACzB,KAAK,eAAe;YAClB,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE,EAAE;aACZ,CAAC;QAEJ,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,gBAAgB,CAAC;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,oBAAoB,EAAE,CAAC;gBACrF,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,kEAAkE,CAAC,CAAC;YACnG,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClF,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,8CAA8C,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,MAAM;oBACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChD;aACF,CAAC;QACJ,CAAC;QAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClF,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,8CAA8C,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,OAAO;oBACP,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChD;aACF,CAAC;QACJ,CAAC;QAED,KAAK,qBAAqB;YACxB,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,OAAO,EAAE,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC;iBACxC;aACF,CAAC;QAEJ,KAAK,wBAAwB;YAC3B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC;iBAC7C;aACF,CAAC;QAEJ,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClE,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,mDAAmD,CAAC,CAAC;YACpF,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAsB;iBACrE;aACF,CAAC;QACJ,CAAC;QAED,KAAK,qBAAqB;YACxB,CAAC;gBACC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAClD,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,IAAI;oBACJ,OAAO,EAAE;wBACP,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClC;iBACF,CAAC;YACJ,CAAC;QAEH,KAAK,oBAAoB;YACvB,CAAC;gBACC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC5D,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,2CAA2C,CAAC,CAAC;gBAC5E,CAAC;gBACD,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,IAAI;oBACJ,OAAO,EAAE;wBACP,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAChD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC9B;iBACF,CAAC;YACJ,CAAC;QAEH,KAAK,oBAAoB;YACvB,CAAC;gBACC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAClD,OAAO;oBACL,IAAI,EAAE,KAAK;oBACX,IAAI;oBACJ,OAAO,EAAE;wBACP,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClC;iBACF,CAAC;YACJ,CAAC;QAEH,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACpD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC;oBACnD,WAAW,EAAE,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;oBACxE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpC;aACF,CAAC;QACJ,CAAC;QAED,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC9C,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,GAAG,kBAAkB,CAAC,IAAI,CAAC;oBAC3B,WAAW,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC;oBAC/C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9B;aACF,CAAC;QACJ,CAAC;QAED,KAAK,2BAA2B;YAC9B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC;aACvC,CAAC;QAEJ,KAAK,0BAA0B;YAC7B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC;aACvC,CAAC;QAEJ,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACpD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;oBACnC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;oBACjC,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;oBACzC,WAAW,EAAE,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;oBACxE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpC;aACF,CAAC;QACJ,CAAC;QAED,KAAK,yBAAyB;YAC5B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,GAAG,kBAAkB,CAAC,IAAI,CAAC;iBAC5B;aACF,CAAC;QAEJ,KAAK,0BAA0B;YAC7B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,GAAG,kBAAkB,CAAC,IAAI,CAAC;iBAC5B;aACF,CAAC;QAEJ,KAAK,wBAAwB;YAC3B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,GAAG,kBAAkB,CAAC,IAAI,CAAC;iBAC5B;aACF,CAAC;QAEJ,KAAK,uBAAuB;YAC1B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,GAAG,kBAAkB,CAAC,IAAI,CAAC;iBAC5B;aACF,CAAC;QAEJ,KAAK,2BAA2B;YAC9B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,GAAG,kBAAkB,CAAC,IAAI,CAAC;iBAC5B;aACF,CAAC;QAEJ,KAAK,0BAA0B;YAC7B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,GAAG,kBAAkB,CAAC,IAAI,CAAC;iBAC5B;aACF,CAAC;QAEJ,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC9C,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;oBACjD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9B;aACF,CAAC;QACJ,CAAC;QAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1D,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;oBACjD,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;oBAC3C,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/C;aACF,CAAC;QACJ,CAAC;QAED,KAAK,sBAAsB;YACzB,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,OAAO,EAAE,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;oBACpD,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;iBAC5C;aACF,CAAC;QAEJ,KAAK,uBAAuB;YAC1B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,OAAO,EAAE,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;oBACpD,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;iBAC5C;aACF,CAAC;QAEJ,KAAK,wBAAwB,CAAC;QAC9B,KAAK,0BAA0B;YAC7B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC1C,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;iBAC5C;aACF,CAAC;QAEJ,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACxD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,iDAAiD,CAAC,CAAC;YAClF,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,OAAO,EAAE,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC;oBACnD,SAAS;iBACV;aACF,CAAC;QACJ,CAAC;QAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBAC9E,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,8DAA8D,CAAC,CAAC;YAC/F,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC1C,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;oBAC3C,MAAM;oBACN,kBAAkB,EAAE,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,CAAC;iBACrE;aACF,CAAC;QACJ,CAAC;QAED,KAAK,qBAAqB;YACxB,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE,EAAE;aACZ,CAAC;QAEJ,KAAK,uBAAuB;YAC1B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;iBACpC;aACF,CAAC;QAEJ,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;oBAC3C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9C;aACF,CAAC;QACJ,CAAC;QAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9C;aACF,CAAC;QACJ,CAAC;QAED,KAAK,+BAA+B,CAAC,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7E,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,mDAAmD,CAAC,CAAC;YACpF,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;oBAC3C,QAAQ;iBACT;aACF,CAAC;QACJ,CAAC;QAED,KAAK,8BAA8B;YACjC,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;oBAC3C,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;iBAC3C;aACF,CAAC;QAEJ,KAAK,8BAA8B;YACjC,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;iBAC5C;aACF,CAAC;QAEJ,KAAK,+BAA+B;YAClC,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE;oBACP,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;iBACpC;aACF,CAAC;QAEJ,KAAK,sDAAsD;YACzD,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,IAAI;gBACJ,OAAO,EAAE,EAAE;aACZ,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAQ,EAAE,GAAW;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,+BAA+B,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAQ;IAC5C,OAAO;QACL,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAQ;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;IAClD,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;IAClD,OAAO;QACL,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAQ;IAC/C,OAAO;QACL,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC;KAChD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare class JsonBodyError extends Error {
2
+ readonly statusCode: number;
3
+ constructor(statusCode: number, message: string);
4
+ }
package/dist/errors.js ADDED
@@ -0,0 +1,9 @@
1
+ export class JsonBodyError extends Error {
2
+ statusCode;
3
+ constructor(statusCode, message) {
4
+ super(message);
5
+ this.statusCode = statusCode;
6
+ this.name = 'JsonBodyError';
7
+ }
8
+ }
9
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAE3B;IADX,YACW,UAAkB,EAC3B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,eAAU,GAAV,UAAU,CAAQ;QAI3B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export * from './contracts/api.js';
2
+ export * from './contracts/routes.js';
3
+ export * from './client.js';
4
+ export * from './bootstrap.js';
5
+ export * from './errors.js';
6
+ export * from './validation.js';
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from './contracts/api.js';
2
+ export * from './contracts/routes.js';
3
+ export * from './client.js';
4
+ export * from './bootstrap.js';
5
+ export * from './errors.js';
6
+ export * from './validation.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type RuntimeModeName } from '@moorline/contracts';
2
+ export declare function parseControlApiRuntimeMode(value: unknown, field: string): RuntimeModeName;
3
+ export declare function requireString(body: Record<string, unknown>, field: string, options?: {
4
+ trim?: boolean;
5
+ allowEmpty?: boolean;
6
+ }): string;
7
+ export declare function optionalString(body: Record<string, unknown>, field: string, options?: {
8
+ trim?: boolean;
9
+ allowEmpty?: boolean;
10
+ }): string | undefined;
11
+ export declare function requireBoolean(body: Record<string, unknown>, field: string): boolean;
12
+ export declare function optionalNullableId(body: Record<string, unknown>, field: string): string | null | undefined;