@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,398 @@
1
+ /**
2
+ * Wrangler Configuration Generator
3
+ *
4
+ * Generates wrangler.toml files for each component based on environment
5
+ * configuration and resource IDs from authrim-lock.json.
6
+ */
7
+ import { getWorkerName, getDOScriptName, DURABLE_OBJECTS, D1_DATABASES, } from './naming.js';
8
+ // =============================================================================
9
+ // Component-specific KV Requirements
10
+ // =============================================================================
11
+ const COMPONENT_KV_BINDINGS = {
12
+ 'ar-lib-core': ['AUTHRIM_CONFIG'],
13
+ 'ar-discovery': ['AUTHRIM_CONFIG'],
14
+ 'ar-auth': ['CLIENTS_CACHE', 'SETTINGS', 'USER_CACHE', 'CONSENT_CACHE', 'AUTHRIM_CONFIG'],
15
+ 'ar-token': ['CLIENTS_CACHE', 'SETTINGS', 'AUTHRIM_CONFIG'],
16
+ 'ar-userinfo': ['SETTINGS', 'AUTHRIM_CONFIG'],
17
+ 'ar-management': [
18
+ 'CLIENTS_CACHE',
19
+ 'SETTINGS',
20
+ 'USER_CACHE',
21
+ 'INITIAL_ACCESS_TOKENS',
22
+ 'AUTHRIM_CONFIG',
23
+ ],
24
+ 'ar-router': ['AUTHRIM_CONFIG'],
25
+ 'ar-async': ['AUTHRIM_CONFIG'],
26
+ 'ar-policy': ['REBAC_CACHE', 'AUTHRIM_CONFIG'],
27
+ 'ar-saml': ['SETTINGS', 'AUTHRIM_CONFIG'],
28
+ 'ar-bridge': ['SETTINGS', 'AUTHRIM_CONFIG'],
29
+ 'ar-vc': ['AUTHRIM_CONFIG'],
30
+ };
31
+ // =============================================================================
32
+ // Component-specific DO Requirements
33
+ // =============================================================================
34
+ const COMPONENT_DO_BINDINGS = {
35
+ 'ar-lib-core': [], // Defines DOs, doesn't reference external
36
+ 'ar-discovery': ['KEY_MANAGER'],
37
+ 'ar-auth': [
38
+ 'KEY_MANAGER',
39
+ 'SESSION_STORE',
40
+ 'AUTH_CODE_STORE',
41
+ 'CHALLENGE_STORE',
42
+ 'RATE_LIMITER',
43
+ 'PAR_REQUEST_STORE',
44
+ 'VERSION_MANAGER',
45
+ ],
46
+ 'ar-token': [
47
+ 'KEY_MANAGER',
48
+ 'AUTH_CODE_STORE',
49
+ 'REFRESH_TOKEN_ROTATOR',
50
+ 'DPOP_JTI_STORE',
51
+ 'DEVICE_CODE_STORE',
52
+ 'CIBA_REQUEST_STORE',
53
+ 'TOKEN_REVOCATION_STORE',
54
+ ],
55
+ 'ar-userinfo': ['KEY_MANAGER', 'SESSION_STORE'],
56
+ 'ar-management': ['KEY_MANAGER', 'VERSION_MANAGER', 'RATE_LIMITER'],
57
+ 'ar-router': ['VERSION_MANAGER'],
58
+ 'ar-async': [],
59
+ 'ar-policy': ['PERMISSION_CHANGE_HUB'],
60
+ 'ar-saml': ['KEY_MANAGER', 'SAML_REQUEST_STORE', 'SESSION_STORE'],
61
+ 'ar-bridge': ['SESSION_STORE'],
62
+ 'ar-vc': ['KEY_MANAGER'],
63
+ };
64
+ // =============================================================================
65
+ // Component Entry Points
66
+ // =============================================================================
67
+ const COMPONENT_ENTRY_POINTS = {
68
+ 'ar-lib-core': 'src/durable-objects/index.ts',
69
+ 'ar-discovery': 'src/index.ts',
70
+ 'ar-auth': 'src/index.ts',
71
+ 'ar-token': 'src/index.ts',
72
+ 'ar-userinfo': 'src/index.ts',
73
+ 'ar-management': 'src/index.ts',
74
+ 'ar-router': 'src/index.ts',
75
+ 'ar-async': 'src/index.ts',
76
+ 'ar-policy': 'src/index.ts',
77
+ 'ar-saml': 'src/index.ts',
78
+ 'ar-bridge': 'src/index.ts',
79
+ 'ar-vc': 'src/index.ts',
80
+ };
81
+ // =============================================================================
82
+ // Generator Functions
83
+ // =============================================================================
84
+ /**
85
+ * Generate wrangler.toml configuration for a component
86
+ */
87
+ export function generateWranglerConfig(component, config, resourceIds) {
88
+ const env = config.environment.prefix;
89
+ const workerName = getWorkerName(env, component);
90
+ // Base configuration
91
+ const wranglerConfig = {
92
+ name: workerName,
93
+ main: COMPONENT_ENTRY_POINTS[component],
94
+ compatibility_date: '2024-09-23',
95
+ compatibility_flags: ['nodejs_compat'],
96
+ workers_dev: !config.urls?.api?.custom, // Enable workers_dev if no custom domain
97
+ vars: generateEnvVars(component, config),
98
+ };
99
+ // Placement (off for better performance with sharded DOs)
100
+ wranglerConfig.placement = { mode: 'off' };
101
+ // KV Namespaces
102
+ const kvBindings = COMPONENT_KV_BINDINGS[component];
103
+ if (kvBindings.length > 0) {
104
+ wranglerConfig.kv_namespaces = kvBindings
105
+ .filter((binding) => resourceIds.kv[binding])
106
+ .map((binding) => ({
107
+ binding,
108
+ id: resourceIds.kv[binding].id,
109
+ }));
110
+ }
111
+ // D1 Databases (most components need both)
112
+ if (component !== 'ar-router' && component !== 'ar-async') {
113
+ wranglerConfig.d1_databases = D1_DATABASES.map((db) => ({
114
+ binding: db.binding,
115
+ database_name: resourceIds.d1[db.binding]?.name || '',
116
+ database_id: resourceIds.d1[db.binding]?.id || '',
117
+ })).filter((db) => db.database_id);
118
+ }
119
+ // Durable Objects
120
+ if (component === 'ar-lib-core') {
121
+ // ar-lib-core defines all DOs
122
+ wranglerConfig.durable_objects = {
123
+ bindings: DURABLE_OBJECTS.map((dob) => ({
124
+ name: dob.name,
125
+ class_name: dob.className,
126
+ })),
127
+ };
128
+ // Migrations for ar-lib-core
129
+ wranglerConfig.migrations = generateDOMigrations();
130
+ }
131
+ else {
132
+ // Other components reference DOs from ar-lib-core
133
+ const doBindings = COMPONENT_DO_BINDINGS[component];
134
+ if (doBindings.length > 0) {
135
+ const scriptName = getDOScriptName(env);
136
+ wranglerConfig.durable_objects = {
137
+ bindings: doBindings.map((doName) => {
138
+ const doDef = DURABLE_OBJECTS.find((d) => d.name === doName);
139
+ return {
140
+ name: doName,
141
+ class_name: doDef?.className || doName,
142
+ script_name: scriptName,
143
+ };
144
+ }),
145
+ };
146
+ }
147
+ }
148
+ // R2 Buckets (optional)
149
+ if (config.features.r2?.enabled && resourceIds.r2) {
150
+ if (component === 'ar-auth' || component === 'ar-management') {
151
+ wranglerConfig.r2_buckets = [
152
+ {
153
+ binding: 'AVATARS',
154
+ bucket_name: resourceIds.r2['AVATARS']?.name || `${env}-authrim-avatars`,
155
+ },
156
+ ];
157
+ }
158
+ }
159
+ // Queues (optional)
160
+ if (config.features.queue?.enabled && resourceIds.queues) {
161
+ if (component === 'ar-auth' || component === 'ar-token') {
162
+ wranglerConfig.queues = {
163
+ producers: [
164
+ {
165
+ queue: resourceIds.queues['AUDIT_QUEUE']?.name || `${env}-audit-queue`,
166
+ binding: 'AUDIT_QUEUE',
167
+ },
168
+ ],
169
+ };
170
+ }
171
+ }
172
+ return wranglerConfig;
173
+ }
174
+ /**
175
+ * Generate environment variables for a component
176
+ */
177
+ function generateEnvVars(component, config) {
178
+ const vars = {};
179
+ // Common variables
180
+ const issuerUrl = config.urls?.api?.custom || config.urls?.api?.auto || '';
181
+ const uiUrl = config.urls?.loginUi?.custom || config.urls?.loginUi?.auto || issuerUrl;
182
+ if (component === 'ar-auth' || component === 'ar-token' || component === 'ar-discovery') {
183
+ vars['ISSUER_URL'] = issuerUrl;
184
+ }
185
+ if (component === 'ar-auth') {
186
+ vars['UI_URL'] = uiUrl;
187
+ vars['CONFORMANCE_MODE'] = 'false';
188
+ }
189
+ // OIDC settings
190
+ if (component === 'ar-auth' || component === 'ar-token') {
191
+ vars['TOKEN_EXPIRY'] = config.oidc.accessTokenTtl.toString();
192
+ vars['CODE_EXPIRY'] = config.oidc.authCodeTtl.toString();
193
+ vars['STATE_EXPIRY'] = '300';
194
+ vars['NONCE_EXPIRY'] = '300';
195
+ vars['REFRESH_TOKEN_EXPIRY'] = config.oidc.refreshTokenTtl.toString();
196
+ }
197
+ // Key configuration
198
+ if (config.keys.keyId) {
199
+ vars['KEY_ID'] = config.keys.keyId;
200
+ }
201
+ // Security settings
202
+ vars['ALLOW_HTTP_REDIRECT'] = 'false';
203
+ vars['OPEN_REGISTRATION'] = 'false';
204
+ // Sharding configuration
205
+ if (component === 'ar-lib-core' || component === 'ar-auth' || component === 'ar-token') {
206
+ vars['AUTHRIM_CODE_SHARDS'] = config.sharding.authCodeShards.toString();
207
+ vars['AUTHRIM_SESSION_SHARDS'] = '32';
208
+ }
209
+ // Secrets placeholders (will be set via wrangler secret put)
210
+ if (component === 'ar-lib-core' || component === 'ar-management') {
211
+ vars['KEY_MANAGER_SECRET'] = ''; // Set via secret
212
+ vars['ADMIN_API_SECRET'] = ''; // Set via secret
213
+ }
214
+ return vars;
215
+ }
216
+ /**
217
+ * Generate DO migrations for ar-lib-core
218
+ */
219
+ function generateDOMigrations() {
220
+ return [
221
+ {
222
+ tag: 'v1',
223
+ new_sqlite_classes: [
224
+ 'SessionStore',
225
+ 'AuthorizationCodeStore',
226
+ 'RefreshTokenRotator',
227
+ 'KeyManager',
228
+ 'ChallengeStore',
229
+ 'RateLimiterCounter',
230
+ 'PARRequestStore',
231
+ 'DPoPJTIStore',
232
+ ],
233
+ },
234
+ { tag: 'v2' },
235
+ {
236
+ tag: 'v3',
237
+ new_sqlite_classes: ['DeviceCodeStore', 'CIBARequestStore'],
238
+ },
239
+ {
240
+ tag: 'v4',
241
+ new_sqlite_classes: ['TokenRevocationStore'],
242
+ },
243
+ {
244
+ tag: 'v5',
245
+ new_sqlite_classes: ['VersionManager'],
246
+ },
247
+ {
248
+ tag: 'v6',
249
+ new_sqlite_classes: ['SAMLRequestStore'],
250
+ },
251
+ {
252
+ tag: 'v7',
253
+ new_sqlite_classes: ['PermissionChangeHub'],
254
+ },
255
+ ];
256
+ }
257
+ // =============================================================================
258
+ // TOML Serialization
259
+ // =============================================================================
260
+ /**
261
+ * Convert WranglerConfig to TOML string
262
+ */
263
+ export function toToml(config) {
264
+ const lines = [];
265
+ // Basic fields
266
+ lines.push(`name = "${config.name}"`);
267
+ lines.push(`main = "${config.main}"`);
268
+ lines.push(`compatibility_date = "${config.compatibility_date}"`);
269
+ lines.push(`compatibility_flags = [${config.compatibility_flags.map((f) => `"${f}"`).join(', ')}]`);
270
+ lines.push(`workers_dev = ${config.workers_dev}`);
271
+ lines.push('');
272
+ // Placement
273
+ if (config.placement) {
274
+ lines.push('[placement]');
275
+ lines.push(`mode = "${config.placement.mode}"`);
276
+ lines.push('');
277
+ }
278
+ // KV Namespaces
279
+ if (config.kv_namespaces && config.kv_namespaces.length > 0) {
280
+ lines.push('# KV Namespaces');
281
+ for (const kv of config.kv_namespaces) {
282
+ lines.push('[[kv_namespaces]]');
283
+ lines.push(`binding = "${kv.binding}"`);
284
+ lines.push(`id = "${kv.id}"`);
285
+ if (kv.preview_id) {
286
+ lines.push(`preview_id = "${kv.preview_id}"`);
287
+ }
288
+ lines.push('');
289
+ }
290
+ }
291
+ // D1 Databases
292
+ if (config.d1_databases && config.d1_databases.length > 0) {
293
+ lines.push('# D1 Databases');
294
+ for (const db of config.d1_databases) {
295
+ lines.push('[[d1_databases]]');
296
+ lines.push(`binding = "${db.binding}"`);
297
+ lines.push(`database_name = "${db.database_name}"`);
298
+ lines.push(`database_id = "${db.database_id}"`);
299
+ lines.push('');
300
+ }
301
+ }
302
+ // R2 Buckets
303
+ if (config.r2_buckets && config.r2_buckets.length > 0) {
304
+ lines.push('# R2 Buckets');
305
+ for (const r2 of config.r2_buckets) {
306
+ lines.push('[[r2_buckets]]');
307
+ lines.push(`binding = "${r2.binding}"`);
308
+ lines.push(`bucket_name = "${r2.bucket_name}"`);
309
+ lines.push('');
310
+ }
311
+ }
312
+ // Queues
313
+ if (config.queues?.producers && config.queues.producers.length > 0) {
314
+ lines.push('# Cloudflare Queues');
315
+ for (const producer of config.queues.producers) {
316
+ lines.push('[[queues.producers]]');
317
+ lines.push(`queue = "${producer.queue}"`);
318
+ lines.push(`binding = "${producer.binding}"`);
319
+ lines.push('');
320
+ }
321
+ }
322
+ // Durable Objects
323
+ if (config.durable_objects?.bindings && config.durable_objects.bindings.length > 0) {
324
+ lines.push('# Durable Objects Bindings');
325
+ for (const dob of config.durable_objects.bindings) {
326
+ lines.push('[[durable_objects.bindings]]');
327
+ lines.push(`name = "${dob.name}"`);
328
+ lines.push(`class_name = "${dob.class_name}"`);
329
+ if (dob.script_name) {
330
+ lines.push(`script_name = "${dob.script_name}"`);
331
+ }
332
+ lines.push('');
333
+ }
334
+ }
335
+ // Migrations
336
+ if (config.migrations && config.migrations.length > 0) {
337
+ lines.push('# Durable Objects Migrations');
338
+ for (const migration of config.migrations) {
339
+ lines.push('[[migrations]]');
340
+ lines.push(`tag = "${migration.tag}"`);
341
+ if (migration.new_sqlite_classes && migration.new_sqlite_classes.length > 0) {
342
+ lines.push('new_sqlite_classes = [');
343
+ for (const cls of migration.new_sqlite_classes) {
344
+ lines.push(` "${cls}",`);
345
+ }
346
+ lines.push(']');
347
+ }
348
+ lines.push('');
349
+ }
350
+ }
351
+ // Environment variables
352
+ if (Object.keys(config.vars).length > 0) {
353
+ lines.push('# Environment Variables');
354
+ lines.push('[vars]');
355
+ for (const [key, value] of Object.entries(config.vars)) {
356
+ if (value) {
357
+ lines.push(`${key} = "${value}"`);
358
+ }
359
+ }
360
+ lines.push('');
361
+ }
362
+ // Routes
363
+ if (config.routes && config.routes.length > 0) {
364
+ lines.push('# Routes');
365
+ for (const route of config.routes) {
366
+ lines.push('[[routes]]');
367
+ lines.push(`pattern = "${route.pattern}"`);
368
+ lines.push(`zone_name = "${route.zone_name}"`);
369
+ lines.push('');
370
+ }
371
+ }
372
+ return lines.join('\n');
373
+ }
374
+ /**
375
+ * Generate route configurations for custom domains
376
+ */
377
+ export function generateRoutes(component, domain, zoneName) {
378
+ const routes = [];
379
+ switch (component) {
380
+ case 'ar-auth':
381
+ routes.push({ pattern: `${domain}/authorize*`, zone_name: zoneName }, { pattern: `${domain}/flow/*`, zone_name: zoneName }, { pattern: `${domain}/par`, zone_name: zoneName }, { pattern: `${domain}/session/check`, zone_name: zoneName }, { pattern: `${domain}/as/*`, zone_name: zoneName }, { pattern: `${domain}/api/auth/*`, zone_name: zoneName }, { pattern: `${domain}/api/sessions/*`, zone_name: zoneName }, { pattern: `${domain}/logout*`, zone_name: zoneName }, { pattern: `${domain}/logged-out`, zone_name: zoneName }, { pattern: `${domain}/auth/consent*`, zone_name: zoneName }, { pattern: `${domain}/_internal/*`, zone_name: zoneName });
382
+ break;
383
+ case 'ar-token':
384
+ routes.push({ pattern: `${domain}/token`, zone_name: zoneName }, { pattern: `${domain}/revoke`, zone_name: zoneName }, { pattern: `${domain}/introspect`, zone_name: zoneName }, { pattern: `${domain}/device*`, zone_name: zoneName });
385
+ break;
386
+ case 'ar-userinfo':
387
+ routes.push({ pattern: `${domain}/userinfo`, zone_name: zoneName });
388
+ break;
389
+ case 'ar-discovery':
390
+ routes.push({ pattern: `${domain}/.well-known/openid-configuration`, zone_name: zoneName }, { pattern: `${domain}/.well-known/jwks.json`, zone_name: zoneName }, { pattern: `${domain}/.well-known/oauth-authorization-server`, zone_name: zoneName });
391
+ break;
392
+ case 'ar-management':
393
+ routes.push({ pattern: `${domain}/api/admin/*`, zone_name: zoneName }, { pattern: `${domain}/register`, zone_name: zoneName });
394
+ break;
395
+ }
396
+ return routes;
397
+ }
398
+ //# sourceMappingURL=wrangler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrangler.js","sourceRoot":"","sources":["../../src/core/wrangler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EAEf,YAAY,GAGb,MAAM,aAAa,CAAC;AAkCrB,gFAAgF;AAChF,qCAAqC;AACrC,gFAAgF;AAEhF,MAAM,qBAAqB,GAA2C;IACpE,aAAa,EAAE,CAAC,gBAAgB,CAAC;IACjC,cAAc,EAAE,CAAC,gBAAgB,CAAC;IAClC,SAAS,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,CAAC;IACzF,UAAU,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,gBAAgB,CAAC;IAC3D,aAAa,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAC7C,eAAe,EAAE;QACf,eAAe;QACf,UAAU;QACV,YAAY;QACZ,uBAAuB;QACvB,gBAAgB;KACjB;IACD,WAAW,EAAE,CAAC,gBAAgB,CAAC;IAC/B,UAAU,EAAE,CAAC,gBAAgB,CAAC;IAC9B,WAAW,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC;IAC9C,SAAS,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACzC,WAAW,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAC3C,OAAO,EAAE,CAAC,gBAAgB,CAAC;CAC5B,CAAC;AAEF,gFAAgF;AAChF,qCAAqC;AACrC,gFAAgF;AAEhF,MAAM,qBAAqB,GAAsC;IAC/D,aAAa,EAAE,EAAE,EAAE,0CAA0C;IAC7D,cAAc,EAAE,CAAC,aAAa,CAAC;IAC/B,SAAS,EAAE;QACT,aAAa;QACb,eAAe;QACf,iBAAiB;QACjB,iBAAiB;QACjB,cAAc;QACd,mBAAmB;QACnB,iBAAiB;KAClB;IACD,UAAU,EAAE;QACV,aAAa;QACb,iBAAiB;QACjB,uBAAuB;QACvB,gBAAgB;QAChB,mBAAmB;QACnB,oBAAoB;QACpB,wBAAwB;KACzB;IACD,aAAa,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;IAC/C,eAAe,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,cAAc,CAAC;IACnE,WAAW,EAAE,CAAC,iBAAiB,CAAC;IAChC,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,CAAC,uBAAuB,CAAC;IACtC,SAAS,EAAE,CAAC,aAAa,EAAE,oBAAoB,EAAE,eAAe,CAAC;IACjE,WAAW,EAAE,CAAC,eAAe,CAAC;IAC9B,OAAO,EAAE,CAAC,aAAa,CAAC;CACzB,CAAC;AAEF,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF,MAAM,sBAAsB,GAAoC;IAC9D,aAAa,EAAE,8BAA8B;IAC7C,cAAc,EAAE,cAAc;IAC9B,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,cAAc;IAC1B,aAAa,EAAE,cAAc;IAC7B,eAAe,EAAE,cAAc;IAC/B,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,cAAc;IAC1B,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,cAAc;IACzB,WAAW,EAAE,cAAc;IAC3B,OAAO,EAAE,cAAc;CACxB,CAAC;AAEF,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAA0B,EAC1B,MAAqB,EACrB,WAAwB;IAExB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;IACtC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAEjD,qBAAqB;IACrB,MAAM,cAAc,GAAmB;QACrC,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,sBAAsB,CAAC,SAAS,CAAC;QACvC,kBAAkB,EAAE,YAAY;QAChC,mBAAmB,EAAE,CAAC,eAAe,CAAC;QACtC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,yCAAyC;QACjF,IAAI,EAAE,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC;KACzC,CAAC;IAEF,0DAA0D;IAC1D,cAAc,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAE3C,gBAAgB;IAChB,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,cAAc,CAAC,aAAa,GAAG,UAAU;aACtC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;aAC5C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACjB,OAAO;YACP,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE;SAC/B,CAAC,CAAC,CAAC;IACR,CAAC;IAED,2CAA2C;IAC3C,IAAI,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC1D,cAAc,CAAC,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtD,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,aAAa,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,EAAE;YACrD,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE;SAClD,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,kBAAkB;IAClB,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QAChC,8BAA8B;QAC9B,cAAc,CAAC,eAAe,GAAG;YAC/B,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,UAAU,EAAE,GAAG,CAAC,SAAS;aAC1B,CAAC,CAAC;SACJ,CAAC;QAEF,6BAA6B;QAC7B,cAAc,CAAC,UAAU,GAAG,oBAAoB,EAAE,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACxC,cAAc,CAAC,eAAe,GAAG;gBAC/B,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAClC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;oBAC7D,OAAO;wBACL,IAAI,EAAE,MAAM;wBACZ,UAAU,EAAE,KAAK,EAAE,SAAS,IAAI,MAAM;wBACtC,WAAW,EAAE,UAAU;qBACxB,CAAC;gBACJ,CAAC,CAAC;aACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC;QAClD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;YAC7D,cAAc,CAAC,UAAU,GAAG;gBAC1B;oBACE,OAAO,EAAE,SAAS;oBAClB,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,GAAG,GAAG,kBAAkB;iBACzE;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACzD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YACxD,cAAc,CAAC,MAAM,GAAG;gBACtB,SAAS,EAAE;oBACT;wBACE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,GAAG,GAAG,cAAc;wBACtE,OAAO,EAAE,aAAa;qBACvB;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,SAA0B,EAC1B,MAAqB;IAErB,MAAM,IAAI,GAA2B,EAAE,CAAC;IAExC,mBAAmB;IACnB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;IAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC;IAEtF,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;QACxF,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACjC,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC;IACrC,CAAC;IAED,gBAAgB;IAChB,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC7D,IAAI,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzD,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;IACxE,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC;IACtC,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC;IAEpC,yBAAyB;IACzB,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACvF,IAAI,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QACxE,IAAI,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC;IACxC,CAAC;IAED,6DAA6D;IAC7D,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QACjE,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,iBAAiB;QAClD,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,iBAAiB;IAClD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB;IAC3B,OAAO;QACL;YACE,GAAG,EAAE,IAAI;YACT,kBAAkB,EAAE;gBAClB,cAAc;gBACd,wBAAwB;gBACxB,qBAAqB;gBACrB,YAAY;gBACZ,gBAAgB;gBAChB,oBAAoB;gBACpB,iBAAiB;gBACjB,cAAc;aACf;SACF;QACD,EAAE,GAAG,EAAE,IAAI,EAAE;QACb;YACE,GAAG,EAAE,IAAI;YACT,kBAAkB,EAAE,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC5D;QACD;YACE,GAAG,EAAE,IAAI;YACT,kBAAkB,EAAE,CAAC,sBAAsB,CAAC;SAC7C;QACD;YACE,GAAG,EAAE,IAAI;YACT,kBAAkB,EAAE,CAAC,gBAAgB,CAAC;SACvC;QACD;YACE,GAAG,EAAE,IAAI;YACT,kBAAkB,EAAE,CAAC,kBAAkB,CAAC;SACzC;QACD;YACE,GAAG,EAAE,IAAI;YACT,kBAAkB,EAAE,CAAC,qBAAqB,CAAC;SAC5C;KACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,MAAsB;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,eAAe;IACf,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CACR,0BAA0B,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACxF,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,YAAY;IACZ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9B,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC;YAChD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,aAAa,GAAG,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,aAAa;IACb,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,SAAS;IACT,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,MAAM,CAAC,eAAe,EAAE,QAAQ,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnF,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;YAC/C,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YACnD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,aAAa;IACb,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,UAAU,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;YACvC,IAAI,SAAS,CAAC,kBAAkB,IAAI,SAAS,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5E,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBACrC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC;oBAC/C,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;gBAC5B,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,SAAS;IACT,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,SAA0B,EAC1B,MAAc,EACd,QAAgB;IAEhB,MAAM,MAAM,GAAkD,EAAE,CAAC;IAEjE,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,MAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EACxD,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,EACpD,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EACjD,EAAE,OAAO,EAAE,GAAG,MAAM,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,EAC3D,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAClD,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EACxD,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,EAC5D,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,EACrD,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EACxD,EAAE,OAAO,EAAE,GAAG,MAAM,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,EAC3D,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,CAC1D,CAAC;YACF,MAAM;QACR,KAAK,UAAU;YACb,MAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EACnD,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,EACpD,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EACxD,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CACtD,CAAC;YACF,MAAM;QACR,KAAK,aAAa;YAChB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpE,MAAM;QACR,KAAK,cAAc;YACjB,MAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,GAAG,MAAM,mCAAmC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAC9E,EAAE,OAAO,EAAE,GAAG,MAAM,wBAAwB,EAAE,SAAS,EAAE,QAAQ,EAAE,EACnE,EAAE,OAAO,EAAE,GAAG,MAAM,yCAAyC,EAAE,SAAS,EAAE,QAAQ,EAAE,CACrF,CAAC;YACF,MAAM;QACR,KAAK,eAAe;YAClB,MAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,EACzD,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CACvD,CAAC;YACF,MAAM;IACV,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @authrim/setup - CLI tool for setting up Authrim OIDC Provider
4
+ *
5
+ * Usage:
6
+ * npx @authrim/setup # Start Web UI (default)
7
+ * npx @authrim/setup --cli # Start CLI mode
8
+ * npx @authrim/setup --config ./authrim-config.json # Load existing config
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
package/dist/index.js ADDED
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @authrim/setup - CLI tool for setting up Authrim OIDC Provider
4
+ *
5
+ * Usage:
6
+ * npx @authrim/setup # Start Web UI (default)
7
+ * npx @authrim/setup --cli # Start CLI mode
8
+ * npx @authrim/setup --config ./authrim-config.json # Load existing config
9
+ */
10
+ import { Command } from 'commander';
11
+ import { initCommand } from './cli/commands/init.js';
12
+ import { deployCommand, statusCommand } from './cli/commands/deploy.js';
13
+ import { configCommand } from './cli/commands/config.js';
14
+ const program = new Command();
15
+ program
16
+ .name('authrim-setup')
17
+ .description('CLI tool for setting up Authrim OIDC Provider on Cloudflare Workers')
18
+ .version('0.1.0');
19
+ program
20
+ .command('init', { isDefault: true })
21
+ .description('Initialize a new Authrim setup')
22
+ .option('--cli', 'Use CLI mode instead of Web UI')
23
+ .option('--config <path>', 'Load existing configuration file')
24
+ .option('--keep <path>', 'Keep source files at specified path')
25
+ .option('--env <name>', 'Environment name (prod, staging, dev)', 'prod')
26
+ .action(initCommand);
27
+ program
28
+ .command('deploy')
29
+ .description('Deploy Authrim to Cloudflare')
30
+ .option('--env <name>', 'Environment name')
31
+ .option('--config <path>', 'Configuration file path', 'authrim-config.json')
32
+ .option('--component <name>', 'Deploy a single component')
33
+ .option('--dry-run', 'Show what would be deployed without actually deploying')
34
+ .option('--skip-secrets', 'Skip uploading secrets')
35
+ .option('--skip-ui', 'Skip UI deployment to Cloudflare Pages')
36
+ .option('-y, --yes', 'Skip confirmation prompts')
37
+ .action(deployCommand);
38
+ program
39
+ .command('status')
40
+ .description('Show deployment status')
41
+ .option('--config <path>', 'Configuration file path', 'authrim-config.json')
42
+ .action(statusCommand);
43
+ program
44
+ .command('secrets')
45
+ .description('Upload secrets to Cloudflare')
46
+ .option('--env <name>', 'Environment name')
47
+ .option('--config <path>', 'Configuration file path', 'authrim-config.json')
48
+ .option('--keys-dir <path>', 'Keys directory', '.keys')
49
+ .action(async (options) => {
50
+ const { deployCommand: deploy } = await import('./cli/commands/deploy.js');
51
+ await deploy({ ...options, skipUi: true });
52
+ });
53
+ program
54
+ .command('config')
55
+ .description('Manage Authrim configuration')
56
+ .option('--show', 'Show current configuration')
57
+ .option('--validate', 'Validate configuration file')
58
+ .option('--json', 'Output in JSON format for scripting')
59
+ .option('--config <path>', 'Configuration file path', 'authrim-config.json')
60
+ .action(configCommand);
61
+ program
62
+ .command('download')
63
+ .description('Download Authrim source code')
64
+ .option('-o, --output <path>', 'Output directory', './authrim')
65
+ .option('--repo <repository>', 'GitHub repository', 'sgrastar/authrim')
66
+ .option('--ref <gitRef>', 'Git tag or branch (default: latest release)')
67
+ .option('--force', 'Overwrite existing directory')
68
+ .action(async (options) => {
69
+ const chalk = await import('chalk').then((m) => m.default);
70
+ const ora = await import('ora').then((m) => m.default);
71
+ const { downloadSource, verifySourceStructure } = await import('./core/source.js');
72
+ console.log(chalk.bold('\n📦 Authrim Source Download\n'));
73
+ const spinner = ora('Downloading source...').start();
74
+ try {
75
+ const result = await downloadSource({
76
+ targetDir: options.output,
77
+ repository: options.repo,
78
+ gitRef: options.ref,
79
+ force: options.force,
80
+ onProgress: (msg) => {
81
+ spinner.text = msg;
82
+ },
83
+ });
84
+ spinner.succeed('Source downloaded successfully');
85
+ console.log(chalk.bold('\nSource Information:'));
86
+ console.log(` Repository: ${chalk.cyan(result.repository)}`);
87
+ console.log(` Ref: ${chalk.cyan(result.gitRef)}`);
88
+ if (result.commitHash) {
89
+ console.log(` Commit: ${chalk.gray(result.commitHash.slice(0, 8))}`);
90
+ }
91
+ console.log(` Method: ${chalk.gray(result.method)}`);
92
+ console.log(` Location: ${chalk.cyan(options.output)}`);
93
+ // Verify structure
94
+ const verification = await verifySourceStructure(options.output);
95
+ if (!verification.valid) {
96
+ console.log(chalk.yellow('\n⚠️ Source verification warnings:'));
97
+ for (const error of verification.errors) {
98
+ console.log(chalk.yellow(` • ${error}`));
99
+ }
100
+ }
101
+ else {
102
+ console.log(chalk.green('\n✓ Source structure verified'));
103
+ }
104
+ console.log(chalk.bold('\nNext steps:'));
105
+ console.log(` cd ${options.output}`);
106
+ console.log(' pnpm install');
107
+ console.log(' pnpm setup');
108
+ console.log('');
109
+ }
110
+ catch (error) {
111
+ spinner.fail('Download failed');
112
+ console.error(chalk.red(`\nError: ${error}`));
113
+ process.exitCode = 1;
114
+ }
115
+ });
116
+ program.parse();
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * API Routes for Authrim Setup Web UI
3
+ *
4
+ * Provides REST API endpoints for the setup wizard.
5
+ *
6
+ * Security Notes:
7
+ * - This API is designed to be accessed from localhost only
8
+ * - A session token is generated on server start to prevent unauthorized access
9
+ * - Operations are serialized to prevent race conditions
10
+ */
11
+ import { Hono } from 'hono';
12
+ /**
13
+ * Generate a new session token
14
+ */
15
+ export declare function generateSessionToken(): string;
16
+ /**
17
+ * Get current session token (for embedding in HTML)
18
+ */
19
+ export declare function getSessionToken(): string;
20
+ export declare function createApiRoutes(): Hono;
21
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAgC5B;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AA0ED,wBAAgB,eAAe,IAAI,IAAI,CA+XtC"}