@positronic/spec 0.0.56 → 0.0.57

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 (68) hide show
  1. package/dist/{api.d.ts → api/brains.d.ts} +2 -160
  2. package/dist/api/brains.d.ts.map +1 -0
  3. package/dist/{api.js → api/brains.js} +18 -1234
  4. package/dist/api/brains.js.map +1 -0
  5. package/dist/api/bundle.d.ts +17 -0
  6. package/dist/api/bundle.d.ts.map +1 -0
  7. package/dist/api/bundle.js +56 -0
  8. package/dist/api/bundle.js.map +1 -0
  9. package/dist/api/index.d.ts +12 -0
  10. package/dist/api/index.d.ts.map +1 -0
  11. package/dist/api/index.js +11 -0
  12. package/dist/api/index.js.map +1 -0
  13. package/dist/api/pages.d.ts +46 -0
  14. package/dist/api/pages.d.ts.map +1 -0
  15. package/dist/api/pages.js +338 -0
  16. package/dist/api/pages.js.map +1 -0
  17. package/dist/api/resources.d.ts +28 -0
  18. package/dist/api/resources.d.ts.map +1 -0
  19. package/dist/api/resources.js +272 -0
  20. package/dist/api/resources.js.map +1 -0
  21. package/dist/api/schedules.d.ts +20 -0
  22. package/dist/api/schedules.d.ts.map +1 -0
  23. package/dist/api/schedules.js +159 -0
  24. package/dist/api/schedules.js.map +1 -0
  25. package/dist/api/secrets.d.ts +27 -0
  26. package/dist/api/secrets.d.ts.map +1 -0
  27. package/dist/api/secrets.js +175 -0
  28. package/dist/api/secrets.js.map +1 -0
  29. package/dist/api/signals.d.ts +53 -0
  30. package/dist/api/signals.d.ts.map +1 -0
  31. package/dist/api/signals.js +276 -0
  32. package/dist/api/signals.js.map +1 -0
  33. package/dist/api/status.d.ts +3 -0
  34. package/dist/api/status.d.ts.map +1 -0
  35. package/dist/api/status.js +23 -0
  36. package/dist/api/status.js.map +1 -0
  37. package/dist/api/types.d.ts +2 -0
  38. package/dist/api/types.d.ts.map +1 -0
  39. package/dist/api/types.js +2 -0
  40. package/dist/api/types.js.map +1 -0
  41. package/dist/api/users.d.ts +43 -0
  42. package/dist/api/users.d.ts.map +1 -0
  43. package/dist/api/users.js +221 -0
  44. package/dist/api/users.js.map +1 -0
  45. package/dist/api/webhooks.d.ts +30 -0
  46. package/dist/api/webhooks.d.ts.map +1 -0
  47. package/dist/api/webhooks.js +208 -0
  48. package/dist/api/webhooks.js.map +1 -0
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/src/{api.js → api/brains.js} +1378 -4108
  54. package/dist/src/api/bundle.js +228 -0
  55. package/dist/src/api/index.js +10 -0
  56. package/dist/src/api/pages.js +840 -0
  57. package/dist/src/api/resources.js +707 -0
  58. package/dist/src/api/schedules.js +479 -0
  59. package/dist/src/api/secrets.js +518 -0
  60. package/dist/src/api/signals.js +778 -0
  61. package/dist/src/api/status.js +180 -0
  62. package/dist/src/api/types.js +1 -0
  63. package/dist/src/api/users.js +650 -0
  64. package/dist/src/api/webhooks.js +639 -0
  65. package/dist/src/index.js +1 -1
  66. package/package.json +1 -1
  67. package/dist/api.d.ts.map +0 -1
  68. package/dist/api.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/api/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,SAAS;IACpB;;OAEG;gBACe,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAyE1C;;OAEG;kBACiB,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAwE5C;;OAEG;kBACiB,KAAK,OAAO,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBzD;;OAEG;qBACoB,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IA0C/C;;OAEG;mCACkC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAgG7D;;OAEG;iCACgC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;CA2E5D,CAAC"}
@@ -0,0 +1,272 @@
1
+ export const resources = {
2
+ /**
3
+ * Test GET /resources - List all resources
4
+ */
5
+ async list(fetch) {
6
+ try {
7
+ const request = new Request('http://example.com/resources', {
8
+ method: 'GET',
9
+ });
10
+ const response = await fetch(request);
11
+ if (!response.ok) {
12
+ console.error(`GET /resources returned ${response.status}`);
13
+ return false;
14
+ }
15
+ const data = (await response.json());
16
+ // Validate response structure
17
+ if (!Array.isArray(data.resources)) {
18
+ console.error(`Expected resources to be an array, got ${typeof data.resources}`);
19
+ return false;
20
+ }
21
+ if (typeof data.truncated !== 'boolean') {
22
+ console.error(`Expected truncated to be boolean, got ${typeof data.truncated}`);
23
+ return false;
24
+ }
25
+ if (typeof data.count !== 'number') {
26
+ console.error(`Expected count to be number, got ${typeof data.count}`);
27
+ return false;
28
+ }
29
+ // Validate each resource has required fields
30
+ for (const resource of data.resources) {
31
+ if (!resource.key ||
32
+ !resource.type ||
33
+ typeof resource.size !== 'number' ||
34
+ !resource.lastModified ||
35
+ typeof resource.local !== 'boolean') {
36
+ console.error(`Resource missing required fields: ${JSON.stringify(resource)}`);
37
+ return false;
38
+ }
39
+ if (!['text', 'binary'].includes(resource.type)) {
40
+ console.error(`Invalid resource type: ${resource.type}`);
41
+ return false;
42
+ }
43
+ }
44
+ return true;
45
+ }
46
+ catch (error) {
47
+ console.error(`Failed to test GET /resources:`, error);
48
+ return false;
49
+ }
50
+ },
51
+ /**
52
+ * Test POST /resources - Upload a resource
53
+ */
54
+ async upload(fetch) {
55
+ try {
56
+ const formData = new FormData();
57
+ formData.append('file', new Blob(['test content'], { type: 'text/plain' }), 'test.txt');
58
+ formData.append('type', 'text');
59
+ formData.append('key', 'test-resource.txt');
60
+ formData.append('local', 'false');
61
+ const request = new Request('http://example.com/resources', {
62
+ method: 'POST',
63
+ body: formData,
64
+ });
65
+ const response = await fetch(request);
66
+ if (response.status !== 201) {
67
+ console.error(`POST /resources returned ${response.status}, expected 201`);
68
+ return false;
69
+ }
70
+ const data = (await response.json());
71
+ // Validate response has required fields
72
+ if (!data.key ||
73
+ !data.type ||
74
+ typeof data.size !== 'number' ||
75
+ !data.lastModified ||
76
+ typeof data.local !== 'boolean') {
77
+ console.error(`Response missing required fields: ${JSON.stringify(data)}`);
78
+ return false;
79
+ }
80
+ if (data.key !== 'test-resource.txt') {
81
+ console.error(`Expected key to be 'test-resource.txt', got ${data.key}`);
82
+ return false;
83
+ }
84
+ if (data.type !== 'text') {
85
+ console.error(`Expected type to be 'text', got ${data.type}`);
86
+ return false;
87
+ }
88
+ if (data.local !== false) {
89
+ console.error(`Expected local to be false, got ${data.local}`);
90
+ return false;
91
+ }
92
+ return true;
93
+ }
94
+ catch (error) {
95
+ console.error(`Failed to test POST /resources:`, error);
96
+ return false;
97
+ }
98
+ },
99
+ /**
100
+ * Test DELETE /resources/:key - Delete a specific resource
101
+ */
102
+ async delete(fetch, key) {
103
+ try {
104
+ const request = new Request(`http://example.com/resources/${encodeURIComponent(key)}`, {
105
+ method: 'DELETE',
106
+ });
107
+ const response = await fetch(request);
108
+ if (response.status !== 204) {
109
+ console.error(`DELETE /resources/${key} returned ${response.status}, expected 204`);
110
+ return false;
111
+ }
112
+ return true;
113
+ }
114
+ catch (error) {
115
+ console.error(`Failed to test DELETE /resources/${key}:`, error);
116
+ return false;
117
+ }
118
+ },
119
+ /**
120
+ * Test DELETE /resources - Bulk delete all resources (dev mode only)
121
+ */
122
+ async deleteAll(fetch) {
123
+ try {
124
+ const request = new Request('http://example.com/resources', {
125
+ method: 'DELETE',
126
+ });
127
+ const response = await fetch(request);
128
+ // In production mode, this should return 403
129
+ if (response.status === 403) {
130
+ const data = (await response.json());
131
+ if (data.error === 'Bulk delete is only available in development mode') {
132
+ // This is expected behavior in production
133
+ return true;
134
+ }
135
+ }
136
+ if (response.status !== 200) {
137
+ console.error(`DELETE /resources returned ${response.status}, expected 200 or 403`);
138
+ return false;
139
+ }
140
+ const data = (await response.json());
141
+ if (typeof data.deletedCount !== 'number') {
142
+ console.error(`Expected deletedCount to be number, got ${typeof data.deletedCount}`);
143
+ return false;
144
+ }
145
+ return true;
146
+ }
147
+ catch (error) {
148
+ console.error(`Failed to test DELETE /resources:`, error);
149
+ return false;
150
+ }
151
+ },
152
+ /**
153
+ * Test DELETE /resources preserves pages - bulk delete should not delete pages
154
+ */
155
+ async deleteAllPreservesPages(fetch) {
156
+ try {
157
+ // First create a page
158
+ const pageSlug = `spec-test-page-${Date.now()}`;
159
+ const pageHtml = '<html><body>Test page for spec</body></html>';
160
+ const brainRunId = 'spec-test-brain-run-id';
161
+ const createPageRequest = new Request('http://example.com/pages', {
162
+ method: 'POST',
163
+ headers: {
164
+ 'Content-Type': 'application/json',
165
+ },
166
+ body: JSON.stringify({
167
+ slug: pageSlug,
168
+ html: pageHtml,
169
+ brainRunId,
170
+ }),
171
+ });
172
+ const createPageResponse = await fetch(createPageRequest);
173
+ if (createPageResponse.status !== 201) {
174
+ console.error(`Failed to create test page: ${createPageResponse.status}`);
175
+ return false;
176
+ }
177
+ // Now bulk delete all resources
178
+ const deleteRequest = new Request('http://example.com/resources', {
179
+ method: 'DELETE',
180
+ });
181
+ const deleteResponse = await fetch(deleteRequest);
182
+ // Skip test if in production mode (403)
183
+ if (deleteResponse.status === 403) {
184
+ // Clean up the page we created
185
+ await fetch(new Request(`http://example.com/pages/${encodeURIComponent(pageSlug)}`, { method: 'DELETE' }));
186
+ console.log('Skipping deleteAllPreservesPages test - bulk delete not available in production');
187
+ return true;
188
+ }
189
+ if (deleteResponse.status !== 200) {
190
+ console.error(`DELETE /resources returned ${deleteResponse.status}, expected 200`);
191
+ return false;
192
+ }
193
+ // Verify the page still exists
194
+ const getPageRequest = new Request(`http://example.com/pages/${encodeURIComponent(pageSlug)}`, { method: 'GET' });
195
+ const getPageResponse = await fetch(getPageRequest);
196
+ if (getPageResponse.status === 404) {
197
+ console.error('DELETE /resources incorrectly deleted pages - page not found after bulk delete');
198
+ return false;
199
+ }
200
+ if (!getPageResponse.ok) {
201
+ console.error(`GET /pages/${pageSlug} returned ${getPageResponse.status}`);
202
+ return false;
203
+ }
204
+ // Clean up: delete the test page
205
+ await fetch(new Request(`http://example.com/pages/${encodeURIComponent(pageSlug)}`, { method: 'DELETE' }));
206
+ return true;
207
+ }
208
+ catch (error) {
209
+ console.error(`Failed to test DELETE /resources preserves pages:`, error);
210
+ return false;
211
+ }
212
+ },
213
+ /**
214
+ * Test POST /resources/presigned-link - Generate presigned URL for upload
215
+ */
216
+ async generatePresignedLink(fetch) {
217
+ try {
218
+ const request = new Request('http://example.com/resources/presigned-link', {
219
+ method: 'POST',
220
+ headers: {
221
+ 'Content-Type': 'application/json',
222
+ },
223
+ body: JSON.stringify({
224
+ key: 'test-files/large-video.mp4',
225
+ type: 'binary',
226
+ size: 150 * 1024 * 1024, // 150MB - larger than Worker limit
227
+ }),
228
+ });
229
+ const response = await fetch(request);
230
+ // If credentials are not configured, expect 400
231
+ if (response.status === 400) {
232
+ const data = (await response.json());
233
+ // This is acceptable - implementation may not have credentials configured
234
+ console.log('Presigned URL generation not available - this is acceptable');
235
+ return true;
236
+ }
237
+ if (response.status !== 200) {
238
+ console.error(`POST /resources/presigned-link returned ${response.status}, expected 200 or 400`);
239
+ return false;
240
+ }
241
+ const data = (await response.json());
242
+ // Validate response structure (backend-agnostic)
243
+ if (!data.url || typeof data.url !== 'string') {
244
+ console.error(`Expected url to be string, got ${typeof data.url}`);
245
+ return false;
246
+ }
247
+ if (!data.method || data.method !== 'PUT') {
248
+ console.error(`Expected method to be 'PUT', got ${data.method}`);
249
+ return false;
250
+ }
251
+ if (typeof data.expiresIn !== 'number' || data.expiresIn <= 0) {
252
+ console.error(`Expected expiresIn to be positive number, got ${data.expiresIn}`);
253
+ return false;
254
+ }
255
+ // Basic URL validation - just ensure it's a valid URL
256
+ try {
257
+ new URL(data.url);
258
+ console.log('Presigned URL structure validated successfully');
259
+ }
260
+ catch (error) {
261
+ console.error(`Invalid URL returned: ${data.url}`);
262
+ return false;
263
+ }
264
+ return true;
265
+ }
266
+ catch (error) {
267
+ console.error(`Failed to test POST /resources/presigned-link:`, error);
268
+ return false;
269
+ }
270
+ },
271
+ };
272
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/api/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Fetch } from './types.js';
2
+ export declare const schedules: {
3
+ /**
4
+ * Test POST /brains/schedules - Create a new schedule
5
+ */
6
+ create(fetch: Fetch, identifier: string, cronExpression: string): Promise<string | null>;
7
+ /**
8
+ * Test GET /brains/schedules - List all schedules
9
+ */
10
+ list(fetch: Fetch): Promise<boolean>;
11
+ /**
12
+ * Test DELETE /brains/schedules/:scheduleId - Delete a schedule
13
+ */
14
+ delete(fetch: Fetch, scheduleId: string): Promise<boolean>;
15
+ /**
16
+ * Test GET /brains/schedules/runs - Get history of scheduled runs
17
+ */
18
+ runs(fetch: Fetch, scheduleId?: string, limit?: number): Promise<boolean>;
19
+ };
20
+ //# sourceMappingURL=schedules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../src/api/schedules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,SAAS;IACpB;;OAEG;kBAEM,KAAK,cACA,MAAM,kBACF,MAAM,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgEzB;;OAEG;gBACe,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IA4D1C;;OAEG;kBACiB,KAAK,cAAc,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BhE;;OAEG;gBAEM,KAAK,eACC,MAAM,UACX,MAAM,GACb,OAAO,CAAC,OAAO,CAAC;CAsEpB,CAAC"}
@@ -0,0 +1,159 @@
1
+ export const schedules = {
2
+ /**
3
+ * Test POST /brains/schedules - Create a new schedule
4
+ */
5
+ async create(fetch, identifier, cronExpression) {
6
+ try {
7
+ const request = new Request('http://example.com/brains/schedules', {
8
+ method: 'POST',
9
+ headers: {
10
+ 'Content-Type': 'application/json',
11
+ },
12
+ body: JSON.stringify({ identifier, cronExpression }),
13
+ });
14
+ const response = await fetch(request);
15
+ if (response.status !== 201) {
16
+ console.error(`POST /brains/schedules returned ${response.status}, expected 201`);
17
+ return null;
18
+ }
19
+ const data = (await response.json());
20
+ // Validate response structure
21
+ if (!data.id || typeof data.id !== 'string') {
22
+ console.error(`Expected id to be string, got ${typeof data.id}`);
23
+ return null;
24
+ }
25
+ // TODO: Once backend is updated, validate that the returned brain matches the identifier
26
+ // For now, we accept any valid response
27
+ if (data.cronExpression !== cronExpression) {
28
+ console.error(`Expected cronExpression to be '${cronExpression}', got ${data.cronExpression}`);
29
+ return null;
30
+ }
31
+ if (typeof data.enabled !== 'boolean') {
32
+ console.error(`Expected enabled to be boolean, got ${typeof data.enabled}`);
33
+ return null;
34
+ }
35
+ if (typeof data.createdAt !== 'number') {
36
+ console.error(`Expected createdAt to be number, got ${typeof data.createdAt}`);
37
+ return null;
38
+ }
39
+ return data.id;
40
+ }
41
+ catch (error) {
42
+ console.error(`Failed to test POST /brains/schedules:`, error);
43
+ return null;
44
+ }
45
+ },
46
+ /**
47
+ * Test GET /brains/schedules - List all schedules
48
+ */
49
+ async list(fetch) {
50
+ try {
51
+ const request = new Request('http://example.com/brains/schedules', {
52
+ method: 'GET',
53
+ });
54
+ const response = await fetch(request);
55
+ if (!response.ok) {
56
+ console.error(`GET /brains/schedules returned ${response.status}`);
57
+ return false;
58
+ }
59
+ const data = (await response.json());
60
+ // Validate response structure
61
+ if (!Array.isArray(data.schedules)) {
62
+ console.error(`Expected schedules to be an array, got ${typeof data.schedules}`);
63
+ return false;
64
+ }
65
+ if (typeof data.count !== 'number') {
66
+ console.error(`Expected count to be number, got ${typeof data.count}`);
67
+ return false;
68
+ }
69
+ // Validate each schedule has required fields
70
+ for (const schedule of data.schedules) {
71
+ if (!schedule.id ||
72
+ !schedule.brainTitle ||
73
+ !schedule.cronExpression ||
74
+ typeof schedule.enabled !== 'boolean' ||
75
+ typeof schedule.createdAt !== 'number') {
76
+ console.error(`Schedule missing required fields: ${JSON.stringify(schedule)}`);
77
+ return false;
78
+ }
79
+ }
80
+ return true;
81
+ }
82
+ catch (error) {
83
+ console.error(`Failed to test GET /brains/schedules:`, error);
84
+ return false;
85
+ }
86
+ },
87
+ /**
88
+ * Test DELETE /brains/schedules/:scheduleId - Delete a schedule
89
+ */
90
+ async delete(fetch, scheduleId) {
91
+ try {
92
+ const request = new Request(`http://example.com/brains/schedules/${scheduleId}`, {
93
+ method: 'DELETE',
94
+ });
95
+ const response = await fetch(request);
96
+ if (response.status !== 204) {
97
+ console.error(`DELETE /brains/schedules/${scheduleId} returned ${response.status}, expected 204`);
98
+ return false;
99
+ }
100
+ return true;
101
+ }
102
+ catch (error) {
103
+ console.error(`Failed to test DELETE /brains/schedules/${scheduleId}:`, error);
104
+ return false;
105
+ }
106
+ },
107
+ /**
108
+ * Test GET /brains/schedules/runs - Get history of scheduled runs
109
+ */
110
+ async runs(fetch, scheduleId, limit) {
111
+ try {
112
+ const url = new URL('http://example.com/brains/schedules/runs');
113
+ if (scheduleId !== undefined) {
114
+ url.searchParams.set('scheduleId', scheduleId);
115
+ }
116
+ if (limit !== undefined) {
117
+ url.searchParams.set('limit', limit.toString());
118
+ }
119
+ const request = new Request(url.toString(), {
120
+ method: 'GET',
121
+ });
122
+ const response = await fetch(request);
123
+ if (!response.ok) {
124
+ console.error(`GET /brains/schedules/runs returned ${response.status}`);
125
+ return false;
126
+ }
127
+ const data = (await response.json());
128
+ // Validate response structure
129
+ if (!Array.isArray(data.runs)) {
130
+ console.error(`Expected runs to be an array, got ${typeof data.runs}`);
131
+ return false;
132
+ }
133
+ if (typeof data.count !== 'number') {
134
+ console.error(`Expected count to be number, got ${typeof data.count}`);
135
+ return false;
136
+ }
137
+ // Validate each run has required fields
138
+ for (const run of data.runs) {
139
+ if (!run.id ||
140
+ !run.scheduleId ||
141
+ !run.status ||
142
+ typeof run.ranAt !== 'number') {
143
+ console.error(`Scheduled run missing required fields: ${JSON.stringify(run)}`);
144
+ return false;
145
+ }
146
+ if (!['triggered', 'failed'].includes(run.status)) {
147
+ console.error(`Invalid run status: ${run.status}`);
148
+ return false;
149
+ }
150
+ }
151
+ return true;
152
+ }
153
+ catch (error) {
154
+ console.error(`Failed to test GET /brains/schedules/runs:`, error);
155
+ return false;
156
+ }
157
+ },
158
+ };
159
+ //# sourceMappingURL=schedules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.js","sourceRoot":"","sources":["../../src/api/schedules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Fetch } from './types.js';
2
+ export declare const secrets: {
3
+ /**
4
+ * Test POST /secrets - Create or update a secret
5
+ */
6
+ create(fetch: Fetch, name: string, value: string): Promise<boolean>;
7
+ /**
8
+ * Test GET /secrets - List all secrets (names only, not values)
9
+ */
10
+ list(fetch: Fetch): Promise<boolean>;
11
+ /**
12
+ * Test DELETE /secrets/:name - Delete a specific secret
13
+ */
14
+ delete(fetch: Fetch, name: string): Promise<boolean>;
15
+ /**
16
+ * Test GET /secrets/:name/exists - Check if a secret exists
17
+ */
18
+ exists(fetch: Fetch, name: string): Promise<boolean>;
19
+ /**
20
+ * Test POST /secrets/bulk - Create multiple secrets
21
+ */
22
+ bulk(fetch: Fetch, secrets: Array<{
23
+ name: string;
24
+ value: string;
25
+ }>): Promise<boolean>;
26
+ };
27
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/api/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,OAAO;IAClB;;OAEG;kBACiB,KAAK,QAAQ,MAAM,SAAS,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyDzE;;OAEG;gBACe,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAiE1C;;OAEG;kBACiB,KAAK,QAAQ,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB1D;;OAEG;kBACiB,KAAK,QAAQ,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC1D;;OAEG;gBAEM,KAAK,WACH,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAC9C,OAAO,CAAC,OAAO,CAAC;CAuDpB,CAAC"}