@authrim/setup 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +303 -0
  2. package/dist/__tests__/config.test.d.ts +5 -0
  3. package/dist/__tests__/config.test.d.ts.map +1 -0
  4. package/dist/__tests__/config.test.js +115 -0
  5. package/dist/__tests__/config.test.js.map +1 -0
  6. package/dist/__tests__/keys.test.d.ts +5 -0
  7. package/dist/__tests__/keys.test.d.ts.map +1 -0
  8. package/dist/__tests__/keys.test.js +87 -0
  9. package/dist/__tests__/keys.test.js.map +1 -0
  10. package/dist/__tests__/naming.test.d.ts +5 -0
  11. package/dist/__tests__/naming.test.d.ts.map +1 -0
  12. package/dist/__tests__/naming.test.js +84 -0
  13. package/dist/__tests__/naming.test.js.map +1 -0
  14. package/dist/cli/commands/config.d.ts +13 -0
  15. package/dist/cli/commands/config.d.ts.map +1 -0
  16. package/dist/cli/commands/config.js +231 -0
  17. package/dist/cli/commands/config.js.map +1 -0
  18. package/dist/cli/commands/deploy.d.ts +21 -0
  19. package/dist/cli/commands/deploy.d.ts.map +1 -0
  20. package/dist/cli/commands/deploy.js +304 -0
  21. package/dist/cli/commands/deploy.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +14 -0
  23. package/dist/cli/commands/init.d.ts.map +1 -0
  24. package/dist/cli/commands/init.js +1248 -0
  25. package/dist/cli/commands/init.js.map +1 -0
  26. package/dist/core/admin.d.ts +64 -0
  27. package/dist/core/admin.d.ts.map +1 -0
  28. package/dist/core/admin.js +247 -0
  29. package/dist/core/admin.js.map +1 -0
  30. package/dist/core/cloudflare.d.ts +157 -0
  31. package/dist/core/cloudflare.d.ts.map +1 -0
  32. package/dist/core/cloudflare.js +452 -0
  33. package/dist/core/cloudflare.js.map +1 -0
  34. package/dist/core/config.d.ts +891 -0
  35. package/dist/core/config.d.ts.map +1 -0
  36. package/dist/core/config.js +208 -0
  37. package/dist/core/config.js.map +1 -0
  38. package/dist/core/deploy.d.ts +81 -0
  39. package/dist/core/deploy.d.ts.map +1 -0
  40. package/dist/core/deploy.js +389 -0
  41. package/dist/core/deploy.js.map +1 -0
  42. package/dist/core/keys.d.ts +111 -0
  43. package/dist/core/keys.d.ts.map +1 -0
  44. package/dist/core/keys.js +287 -0
  45. package/dist/core/keys.js.map +1 -0
  46. package/dist/core/lock.d.ts +220 -0
  47. package/dist/core/lock.d.ts.map +1 -0
  48. package/dist/core/lock.js +230 -0
  49. package/dist/core/lock.js.map +1 -0
  50. package/dist/core/naming.d.ts +151 -0
  51. package/dist/core/naming.d.ts.map +1 -0
  52. package/dist/core/naming.js +209 -0
  53. package/dist/core/naming.js.map +1 -0
  54. package/dist/core/source.d.ts +68 -0
  55. package/dist/core/source.d.ts.map +1 -0
  56. package/dist/core/source.js +285 -0
  57. package/dist/core/source.js.map +1 -0
  58. package/dist/core/wrangler.d.ts +87 -0
  59. package/dist/core/wrangler.d.ts.map +1 -0
  60. package/dist/core/wrangler.js +398 -0
  61. package/dist/core/wrangler.js.map +1 -0
  62. package/dist/index.d.ts +11 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +117 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/web/api.d.ts +21 -0
  67. package/dist/web/api.d.ts.map +1 -0
  68. package/dist/web/api.js +423 -0
  69. package/dist/web/api.js.map +1 -0
  70. package/dist/web/server.d.ts +12 -0
  71. package/dist/web/server.d.ts.map +1 -0
  72. package/dist/web/server.js +112 -0
  73. package/dist/web/server.js.map +1 -0
  74. package/dist/web/ui.d.ts +7 -0
  75. package/dist/web/ui.d.ts.map +1 -0
  76. package/dist/web/ui.js +765 -0
  77. package/dist/web/ui.js.map +1 -0
  78. package/package.json +61 -0
@@ -0,0 +1,389 @@
1
+ /**
2
+ * Authrim Deployment Module
3
+ *
4
+ * Handles the deployment order, parallel execution, and retry logic
5
+ * for Authrim Workers.
6
+ */
7
+ import { execa } from 'execa';
8
+ import { join } from 'node:path';
9
+ import { existsSync } from 'node:fs';
10
+ import { getWorkerName, getDeploymentOrder, CORE_WORKER_COMPONENTS, WORKER_COMPONENTS, } from './naming.js';
11
+ // =============================================================================
12
+ // Validation Helpers
13
+ // =============================================================================
14
+ /**
15
+ * Validate that a component is a valid WorkerComponent
16
+ * Prevents path traversal attacks by ensuring component is from allowed list
17
+ */
18
+ function isValidComponent(component) {
19
+ return WORKER_COMPONENTS.includes(component);
20
+ }
21
+ /**
22
+ * Validate environment name to prevent injection
23
+ */
24
+ function isValidEnv(env) {
25
+ return /^[a-z][a-z0-9-]*$/.test(env);
26
+ }
27
+ // =============================================================================
28
+ // Deployment Order
29
+ // =============================================================================
30
+ /**
31
+ * Get deployment levels - components that can be deployed in parallel
32
+ */
33
+ export function getDeploymentLevels(enabledComponents) {
34
+ // Convert array to Set for getDeploymentOrder
35
+ const componentSet = enabledComponents
36
+ ? new Set(enabledComponents)
37
+ : new Set(CORE_WORKER_COMPONENTS);
38
+ // getDeploymentOrder already returns components grouped by level
39
+ return getDeploymentOrder(componentSet);
40
+ }
41
+ // =============================================================================
42
+ // Single Worker Deployment
43
+ // =============================================================================
44
+ /**
45
+ * Deploy a single worker with retry logic
46
+ */
47
+ export async function deployWorker(component, options) {
48
+ const { env, rootDir, maxRetries = 3, retryDelayMs = 5000, onProgress } = options;
49
+ const startTime = Date.now();
50
+ // Security: Validate component to prevent path traversal
51
+ if (!isValidComponent(component)) {
52
+ return {
53
+ component,
54
+ workerName: '',
55
+ success: false,
56
+ error: 'Invalid component name',
57
+ duration: Date.now() - startTime,
58
+ };
59
+ }
60
+ // Security: Validate environment name
61
+ if (!isValidEnv(env)) {
62
+ return {
63
+ component,
64
+ workerName: '',
65
+ success: false,
66
+ error: 'Invalid environment name',
67
+ duration: Date.now() - startTime,
68
+ };
69
+ }
70
+ const workerName = getWorkerName(env, component);
71
+ const packageDir = join(rootDir, 'packages', component);
72
+ const wranglerConfig = options.configFile || `wrangler.${env}.toml`;
73
+ const wranglerConfigPath = join(packageDir, wranglerConfig);
74
+ // Check if package directory exists
75
+ if (!existsSync(packageDir)) {
76
+ return {
77
+ component,
78
+ workerName,
79
+ success: false,
80
+ error: 'Package directory not found', // Don't expose full path
81
+ duration: Date.now() - startTime,
82
+ };
83
+ }
84
+ // Check if wrangler config exists
85
+ if (!existsSync(wranglerConfigPath)) {
86
+ return {
87
+ component,
88
+ workerName,
89
+ success: false,
90
+ error: 'Wrangler config not found', // Don't expose full path
91
+ duration: Date.now() - startTime,
92
+ };
93
+ }
94
+ let lastError;
95
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
96
+ try {
97
+ onProgress?.(`[${attempt}/${maxRetries}] Deploying ${workerName}...`);
98
+ if (options.dryRun) {
99
+ onProgress?.(` [DRY RUN] Would deploy ${component} with config ${wranglerConfig}`);
100
+ return {
101
+ component,
102
+ workerName,
103
+ success: true,
104
+ deployedAt: new Date().toISOString(),
105
+ duration: Date.now() - startTime,
106
+ };
107
+ }
108
+ // Use deploy script if available for version management
109
+ const deployScript = join(rootDir, 'scripts', 'deploy-with-retry.sh');
110
+ let result;
111
+ if (existsSync(deployScript)) {
112
+ // Use deploy script (handles version management)
113
+ result = await execa(deployScript, [component, env], {
114
+ cwd: rootDir,
115
+ reject: true,
116
+ });
117
+ }
118
+ else {
119
+ // Fall back to direct wrangler deploy
120
+ result = await execa('wrangler', ['deploy', '--config', wranglerConfig], {
121
+ cwd: packageDir,
122
+ reject: true,
123
+ });
124
+ }
125
+ // Extract version from output if available
126
+ const versionMatch = result.stdout.match(/Deployed.*version[:\s]+([a-f0-9-]+)/i);
127
+ onProgress?.(` ✓ ${workerName} deployed successfully`);
128
+ return {
129
+ component,
130
+ workerName,
131
+ success: true,
132
+ deployedAt: new Date().toISOString(),
133
+ version: versionMatch?.[1],
134
+ duration: Date.now() - startTime,
135
+ };
136
+ }
137
+ catch (error) {
138
+ lastError = error;
139
+ const execaError = error;
140
+ onProgress?.(` ✗ Attempt ${attempt} failed: ${execaError.message || String(error)}`);
141
+ if (attempt < maxRetries) {
142
+ const delay = retryDelayMs * attempt; // Exponential backoff
143
+ onProgress?.(` ⏳ Retrying in ${delay / 1000}s...`);
144
+ await new Promise((resolve) => setTimeout(resolve, delay));
145
+ }
146
+ }
147
+ }
148
+ return {
149
+ component,
150
+ workerName,
151
+ success: false,
152
+ error: lastError?.message || 'Unknown error',
153
+ duration: Date.now() - startTime,
154
+ };
155
+ }
156
+ // =============================================================================
157
+ // Parallel Deployment
158
+ // =============================================================================
159
+ /**
160
+ * Deploy multiple workers in parallel
161
+ */
162
+ export async function deployParallel(components, options) {
163
+ const { onProgress } = options;
164
+ if (components.length === 0) {
165
+ return [];
166
+ }
167
+ onProgress?.(`Deploying ${components.length} component(s) in parallel: ${components.join(', ')}`);
168
+ const results = await Promise.all(components.map((component) => deployWorker(component, options)));
169
+ return results;
170
+ }
171
+ // =============================================================================
172
+ // Full Deployment
173
+ // =============================================================================
174
+ /**
175
+ * Deploy all workers in the correct order
176
+ */
177
+ export async function deployAll(options, enabledComponents) {
178
+ const { onProgress, onError } = options;
179
+ const startedAt = new Date().toISOString();
180
+ const startTime = Date.now();
181
+ const levels = getDeploymentLevels(enabledComponents);
182
+ const allResults = [];
183
+ onProgress?.('Starting Authrim deployment...\n');
184
+ onProgress?.(`Environment: ${options.env}`);
185
+ onProgress?.(`Root directory: ${options.rootDir}`);
186
+ onProgress?.(`Deployment levels: ${levels.length}\n`);
187
+ for (let levelIndex = 0; levelIndex < levels.length; levelIndex++) {
188
+ const level = levels[levelIndex];
189
+ onProgress?.(`\n━━━ Level ${levelIndex} ━━━`);
190
+ // Level 0 and 4 are sequential (single component)
191
+ // Levels 1-3 can be parallel
192
+ const isParallel = level.length > 1;
193
+ if (isParallel) {
194
+ const results = await deployParallel(level, options);
195
+ allResults.push(...results);
196
+ // Check for failures
197
+ const failures = results.filter((r) => !r.success);
198
+ if (failures.length > 0) {
199
+ for (const failure of failures) {
200
+ onError?.(failure.component, new Error(failure.error));
201
+ }
202
+ }
203
+ }
204
+ else {
205
+ for (const component of level) {
206
+ const result = await deployWorker(component, options);
207
+ allResults.push(result);
208
+ if (!result.success) {
209
+ onError?.(component, new Error(result.error));
210
+ // Stop deployment if critical component fails
211
+ if (['ar-lib-core', 'ar-discovery'].includes(component)) {
212
+ onProgress?.(`\n⚠️ Critical component ${component} failed. Stopping deployment.`);
213
+ break;
214
+ }
215
+ }
216
+ }
217
+ }
218
+ }
219
+ const completedAt = new Date().toISOString();
220
+ const successCount = allResults.filter((r) => r.success).length;
221
+ const failedCount = allResults.filter((r) => !r.success).length;
222
+ const summary = {
223
+ totalComponents: allResults.length,
224
+ successCount,
225
+ failedCount,
226
+ results: allResults,
227
+ startedAt,
228
+ completedAt,
229
+ duration: Date.now() - startTime,
230
+ };
231
+ // Print summary
232
+ onProgress?.('\n━━━ Deployment Summary ━━━');
233
+ onProgress?.(`Total: ${summary.totalComponents}`);
234
+ onProgress?.(`Success: ${successCount}`);
235
+ onProgress?.(`Failed: ${failedCount}`);
236
+ onProgress?.(`Duration: ${(summary.duration / 1000).toFixed(1)}s`);
237
+ if (failedCount > 0) {
238
+ onProgress?.('\nFailed components:');
239
+ for (const result of allResults.filter((r) => !r.success)) {
240
+ onProgress?.(` • ${result.component}: ${result.error}`);
241
+ }
242
+ }
243
+ return summary;
244
+ }
245
+ // =============================================================================
246
+ // Lock File Update
247
+ // =============================================================================
248
+ /**
249
+ * Update lock file with deployment results
250
+ */
251
+ export function updateLockWithDeployments(lock, results) {
252
+ const workers = { ...lock.workers };
253
+ for (const result of results) {
254
+ if (result.success && result.deployedAt) {
255
+ workers[result.component] = {
256
+ name: result.workerName,
257
+ deployedAt: result.deployedAt,
258
+ version: result.version,
259
+ };
260
+ }
261
+ }
262
+ return {
263
+ ...lock,
264
+ workers,
265
+ updatedAt: new Date().toISOString(),
266
+ };
267
+ }
268
+ // =============================================================================
269
+ // Secrets Upload
270
+ // =============================================================================
271
+ /**
272
+ * Upload secrets to all workers that need them
273
+ */
274
+ export async function uploadSecrets(secrets, options, workers) {
275
+ const { env, rootDir, onProgress, dryRun } = options;
276
+ const errors = [];
277
+ // Workers that need secrets
278
+ const targetWorkers = workers || [
279
+ 'ar-auth',
280
+ 'ar-token',
281
+ 'ar-userinfo',
282
+ 'ar-management',
283
+ 'ar-lib-core',
284
+ ];
285
+ const wranglerConfig = options.configFile || `wrangler.${env}.toml`;
286
+ for (const component of targetWorkers) {
287
+ const workerName = getWorkerName(env, component);
288
+ const packageDir = join(rootDir, 'packages', component);
289
+ if (!existsSync(packageDir)) {
290
+ continue;
291
+ }
292
+ for (const [secretName, secretValue] of Object.entries(secrets)) {
293
+ try {
294
+ onProgress?.(`Uploading ${secretName} to ${workerName}...`);
295
+ if (dryRun) {
296
+ onProgress?.(` [DRY RUN] Would upload ${secretName}`);
297
+ continue;
298
+ }
299
+ await execa('wrangler', ['secret', 'put', secretName, '--config', wranglerConfig], {
300
+ cwd: packageDir,
301
+ input: secretValue,
302
+ });
303
+ onProgress?.(` ✓ ${secretName} uploaded`);
304
+ }
305
+ catch (error) {
306
+ const errorMsg = `Failed to upload ${secretName} to ${workerName}: ${error}`;
307
+ errors.push(errorMsg);
308
+ onProgress?.(` ✗ ${errorMsg}`);
309
+ }
310
+ }
311
+ }
312
+ return {
313
+ success: errors.length === 0,
314
+ errors,
315
+ };
316
+ }
317
+ /**
318
+ * Deploy UI to Cloudflare Pages
319
+ */
320
+ export async function deployPages(options) {
321
+ const { env, rootDir, projectName, onProgress, dryRun } = options;
322
+ // Security: Validate environment name
323
+ if (!isValidEnv(env)) {
324
+ return {
325
+ component: 'ar-ui',
326
+ projectName: projectName || `${env}-ar-ui`,
327
+ success: false,
328
+ error: 'Invalid environment name',
329
+ duration: 0,
330
+ };
331
+ }
332
+ const uiDir = join(rootDir, 'packages', 'ar-ui');
333
+ const distDir = join(uiDir, 'dist');
334
+ const startTime = Date.now();
335
+ if (!existsSync(uiDir)) {
336
+ return {
337
+ component: 'ar-ui',
338
+ projectName: projectName || `${env}-ar-ui`,
339
+ success: false,
340
+ error: 'ar-ui package not found',
341
+ duration: Date.now() - startTime,
342
+ };
343
+ }
344
+ try {
345
+ // Build the UI first
346
+ onProgress?.('Building ar-ui...');
347
+ if (!dryRun) {
348
+ await execa('pnpm', ['run', 'build'], {
349
+ cwd: uiDir,
350
+ });
351
+ }
352
+ onProgress?.('Deploying to Cloudflare Pages...');
353
+ if (dryRun) {
354
+ onProgress?.('[DRY RUN] Would deploy ar-ui to Pages');
355
+ return {
356
+ component: 'ar-ui',
357
+ projectName: projectName || `${env}-ar-ui`,
358
+ success: true,
359
+ deployedAt: new Date().toISOString(),
360
+ duration: Date.now() - startTime,
361
+ };
362
+ }
363
+ const pagesProjectName = projectName || `${env}-ar-ui`;
364
+ await execa('wrangler', ['pages', 'deploy', distDir, '--project-name', pagesProjectName], {
365
+ cwd: uiDir,
366
+ });
367
+ onProgress?.(`✓ ar-ui deployed to Pages: ${pagesProjectName}`);
368
+ return {
369
+ component: 'ar-ui',
370
+ projectName: pagesProjectName,
371
+ success: true,
372
+ deployedAt: new Date().toISOString(),
373
+ duration: Date.now() - startTime,
374
+ };
375
+ }
376
+ catch (error) {
377
+ // Sanitize error message to prevent path exposure
378
+ const errorMsg = error instanceof Error ? error.message : String(error);
379
+ const sanitizedError = errorMsg.replace(/\/[^\s:]+/g, '[path]').replace(/\\[^\s:]+/g, '[path]');
380
+ return {
381
+ component: 'ar-ui',
382
+ projectName: projectName || `${env}-ar-ui`,
383
+ success: false,
384
+ error: sanitizedError,
385
+ duration: Date.now() - startTime,
386
+ };
387
+ }
388
+ }
389
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/core/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Authrim Key Generation Module
3
+ *
4
+ * Generates RSA key pairs for JWT signing and other cryptographic secrets.
5
+ * Based on the existing setup-keys.sh script functionality.
6
+ */
7
+ /**
8
+ * JSON Web Key structure (subset of W3C spec for RSA keys)
9
+ */
10
+ export interface JWK {
11
+ kty: string;
12
+ n?: string;
13
+ e?: string;
14
+ d?: string;
15
+ p?: string;
16
+ q?: string;
17
+ dp?: string;
18
+ dq?: string;
19
+ qi?: string;
20
+ kid?: string;
21
+ use?: string;
22
+ alg?: string;
23
+ [key: string]: unknown;
24
+ }
25
+ export interface KeyPair {
26
+ /** Private key in PEM format */
27
+ privateKeyPem: string;
28
+ /** Public key in JWK format */
29
+ publicKeyJwk: JWK;
30
+ /** Key ID (kid) */
31
+ keyId: string;
32
+ /** Creation timestamp */
33
+ createdAt: string;
34
+ }
35
+ export interface KeyMetadata {
36
+ kid: string;
37
+ algorithm: string;
38
+ keySize: number;
39
+ createdAt: string;
40
+ files: {
41
+ privateKey: string;
42
+ publicKey: string;
43
+ rpTokenEncryptionKey?: string;
44
+ };
45
+ }
46
+ export interface GeneratedSecrets {
47
+ /** RSA key pair for JWT signing */
48
+ keyPair: KeyPair;
49
+ /** RP Token encryption key (hex encoded) */
50
+ rpTokenEncryptionKey: string;
51
+ /** Admin API secret */
52
+ adminApiSecret: string;
53
+ /** Key Manager secret */
54
+ keyManagerSecret: string;
55
+ /** Setup token for initial admin creation */
56
+ setupToken?: string;
57
+ }
58
+ /**
59
+ * Generate a unique key ID (kid)
60
+ *
61
+ * Format: {prefix}-key-{timestamp}-{random}
62
+ */
63
+ export declare function generateKeyId(prefix?: string): string;
64
+ /**
65
+ * Generate an RSA key pair for JWT signing
66
+ *
67
+ * @param keyId - Custom key ID or auto-generated
68
+ * @param keySize - RSA key size in bits (default: 2048)
69
+ */
70
+ export declare function generateRsaKeyPair(keyId?: string, keySize?: number): KeyPair;
71
+ /**
72
+ * Generate a random hex-encoded secret
73
+ *
74
+ * @param bytes - Number of random bytes (default: 32 = 256 bits)
75
+ */
76
+ export declare function generateHexSecret(bytes?: number): string;
77
+ /**
78
+ * Generate a random base64url-encoded secret
79
+ *
80
+ * @param bytes - Number of random bytes (default: 32 = 256 bits)
81
+ */
82
+ export declare function generateBase64Secret(bytes?: number): string;
83
+ /**
84
+ * Generate all required secrets for Authrim
85
+ */
86
+ export declare function generateAllSecrets(keyId?: string): GeneratedSecrets;
87
+ /**
88
+ * Save keys and secrets to the .keys directory
89
+ */
90
+ export declare function saveKeysToDirectory(secrets: GeneratedSecrets, keysDir?: string): Promise<void>;
91
+ /**
92
+ * Load existing keys from directory
93
+ */
94
+ export declare function loadKeysFromDirectory(keysDir?: string): Promise<{
95
+ keyPair?: Partial<KeyPair>;
96
+ metadata?: KeyMetadata;
97
+ }>;
98
+ /**
99
+ * Generate wrangler commands for uploading secrets
100
+ * @deprecated Use uploadSecrets from deploy.ts instead for programmatic upload
101
+ */
102
+ export declare function generateWranglerSecretCommands(secrets: GeneratedSecrets, keysDir?: string, env?: string): string[];
103
+ /**
104
+ * Validate that a private key PEM is valid RSA
105
+ */
106
+ export declare function validatePrivateKey(pem: string): boolean;
107
+ /**
108
+ * Validate that a public key JWK has required properties
109
+ */
110
+ export declare function validatePublicKeyJwk(jwk: JWK): boolean;
111
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/core/keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,YAAY,EAAE,GAAG,CAAC;IAClB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,MAAc,GAAG,MAAM,CAI5D;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAa,GAAG,OAAO,CAsClF;AAMD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAUnE;AAyCD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,MAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,MAAgB,GAAG,OAAO,CAAC;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB,CAAC,CA+BD;AA6BD;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,MAAgB,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,EAAE,CA+BV;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAKtD"}