@authrim/setup 0.1.3 → 0.1.5
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.
- package/dist/cli/commands/init.js +1 -1
- package/dist/index.js +1 -1
- package/dist/web/server.js +1 -1
- package/dist/web/server.js.map +1 -1
- package/dist/web/ui.d.ts +1 -0
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +387 -47
- package/dist/web/ui.js.map +1 -1
- package/package.json +1 -1
|
@@ -23,7 +23,7 @@ function printBanner() {
|
|
|
23
23
|
console.log('');
|
|
24
24
|
console.log(chalk.blue('╔═══════════════════════════════════════════════════════════╗'));
|
|
25
25
|
console.log(chalk.blue('║') +
|
|
26
|
-
chalk.bold.white(' 🔐 Authrim Setup v0.1.
|
|
26
|
+
chalk.bold.white(' 🔐 Authrim Setup v0.1.5 ') +
|
|
27
27
|
chalk.blue('║'));
|
|
28
28
|
console.log(chalk.blue('║') +
|
|
29
29
|
chalk.gray(' OIDC Provider on Cloudflare Workers ') +
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ const program = new Command();
|
|
|
15
15
|
program
|
|
16
16
|
.name('authrim-setup')
|
|
17
17
|
.description('CLI tool for setting up Authrim OIDC Provider on Cloudflare Workers')
|
|
18
|
-
.version('0.1.
|
|
18
|
+
.version('0.1.5');
|
|
19
19
|
program
|
|
20
20
|
.command('init', { isDefault: true })
|
|
21
21
|
.description('Initialize a new Authrim setup')
|
package/dist/web/server.js
CHANGED
|
@@ -56,8 +56,8 @@ export async function startWebServer(options = {}) {
|
|
|
56
56
|
* Check if a port is available
|
|
57
57
|
*/
|
|
58
58
|
async function isPortAvailable(port, host) {
|
|
59
|
+
const net = await import('node:net');
|
|
59
60
|
return new Promise((resolve) => {
|
|
60
|
-
const net = require('node:net');
|
|
61
61
|
const server = net.createServer();
|
|
62
62
|
server.once('error', (err) => {
|
|
63
63
|
if (err.code === 'EADDRINUSE') {
|
package/dist/web/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAY1C,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAA4B,EAAE;IACjE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,EAAE,IAAI,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IAEnE,gCAAgC;IAChC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAE1D,kDAAkD;IAClD,oBAAoB,EAAE,CAAC;IAEvB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,yCAAyC;IACzC,GAAG,CAAC,GAAG,CACL,QAAQ,EACR,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,oBAAoB,IAAI,EAAE,EAAE,oBAAoB,IAAI,EAAE,CAAC;QAChE,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC;QAC9C,YAAY,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;KAClD,CAAC,CACH,CAAC;IAEF,aAAa;IACb,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IACpC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE7B,uCAAuC;IACvC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,0CAA0C;IAC1C,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEpD,eAAe;IACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,aAAa,sBAAsB,IAAI,WAAW,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEpD,4BAA4B;IAC5B,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC;QACrC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC;QACJ,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI;QACJ,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY;IACvD,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
|
package/dist/web/ui.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* HTML Template for Authrim Setup Web UI
|
|
3
3
|
*
|
|
4
4
|
* A simple, self-contained UI for the setup wizard.
|
|
5
|
+
* Follows the setup flow defined in the design document.
|
|
5
6
|
*/
|
|
6
7
|
export declare function getHtmlTemplate(sessionToken?: string): string;
|
|
7
8
|
//# sourceMappingURL=ui.d.ts.map
|
package/dist/web/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CA0kC7D"}
|
package/dist/web/ui.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* HTML Template for Authrim Setup Web UI
|
|
3
3
|
*
|
|
4
4
|
* A simple, self-contained UI for the setup wizard.
|
|
5
|
+
* Follows the setup flow defined in the design document.
|
|
5
6
|
*/
|
|
6
7
|
export function getHtmlTemplate(sessionToken) {
|
|
7
8
|
// Escape token for safe embedding in JavaScript
|
|
@@ -90,6 +91,71 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
90
91
|
.status-success { background: #d1fae5; color: var(--success); }
|
|
91
92
|
.status-error { background: #fee2e2; color: var(--error); }
|
|
92
93
|
|
|
94
|
+
/* Mode selection cards */
|
|
95
|
+
.mode-cards {
|
|
96
|
+
display: grid;
|
|
97
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
98
|
+
gap: 1rem;
|
|
99
|
+
margin-bottom: 1rem;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.mode-card {
|
|
103
|
+
border: 2px solid var(--border);
|
|
104
|
+
border-radius: 12px;
|
|
105
|
+
padding: 1.5rem;
|
|
106
|
+
cursor: pointer;
|
|
107
|
+
transition: all 0.2s;
|
|
108
|
+
position: relative;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.mode-card:hover {
|
|
112
|
+
border-color: var(--primary);
|
|
113
|
+
background: #f8fafc;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.mode-card.selected {
|
|
117
|
+
border-color: var(--primary);
|
|
118
|
+
background: #eff6ff;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.mode-card .mode-icon {
|
|
122
|
+
font-size: 2rem;
|
|
123
|
+
margin-bottom: 0.5rem;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.mode-card h3 {
|
|
127
|
+
font-size: 1.1rem;
|
|
128
|
+
margin-bottom: 0.5rem;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.mode-card p {
|
|
132
|
+
font-size: 0.875rem;
|
|
133
|
+
color: var(--text-muted);
|
|
134
|
+
margin-bottom: 0.75rem;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.mode-card ul {
|
|
138
|
+
font-size: 0.8rem;
|
|
139
|
+
color: var(--text-muted);
|
|
140
|
+
margin-left: 1rem;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.mode-card ul li {
|
|
144
|
+
margin-bottom: 0.25rem;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.mode-badge {
|
|
148
|
+
position: absolute;
|
|
149
|
+
top: -8px;
|
|
150
|
+
right: 10px;
|
|
151
|
+
background: var(--primary);
|
|
152
|
+
color: white;
|
|
153
|
+
font-size: 0.7rem;
|
|
154
|
+
padding: 0.2rem 0.5rem;
|
|
155
|
+
border-radius: 4px;
|
|
156
|
+
font-weight: 500;
|
|
157
|
+
}
|
|
158
|
+
|
|
93
159
|
.form-group {
|
|
94
160
|
margin-bottom: 1rem;
|
|
95
161
|
}
|
|
@@ -102,6 +168,7 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
102
168
|
|
|
103
169
|
input[type="text"],
|
|
104
170
|
input[type="password"],
|
|
171
|
+
input[type="file"],
|
|
105
172
|
select {
|
|
106
173
|
width: 100%;
|
|
107
174
|
padding: 0.75rem;
|
|
@@ -257,6 +324,46 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
257
324
|
color: var(--primary);
|
|
258
325
|
}
|
|
259
326
|
|
|
327
|
+
.file-input-wrapper {
|
|
328
|
+
position: relative;
|
|
329
|
+
overflow: hidden;
|
|
330
|
+
display: inline-block;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.file-input-wrapper input[type=file] {
|
|
334
|
+
position: absolute;
|
|
335
|
+
left: 0;
|
|
336
|
+
top: 0;
|
|
337
|
+
opacity: 0;
|
|
338
|
+
cursor: pointer;
|
|
339
|
+
width: 100%;
|
|
340
|
+
height: 100%;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.file-input-btn {
|
|
344
|
+
display: inline-block;
|
|
345
|
+
padding: 0.75rem 1.5rem;
|
|
346
|
+
background: var(--border);
|
|
347
|
+
color: var(--text);
|
|
348
|
+
border-radius: 8px;
|
|
349
|
+
cursor: pointer;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.file-input-btn:hover {
|
|
353
|
+
background: #cbd5e1;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.config-preview {
|
|
357
|
+
background: var(--bg);
|
|
358
|
+
border-radius: 8px;
|
|
359
|
+
padding: 1rem;
|
|
360
|
+
margin-top: 1rem;
|
|
361
|
+
font-family: 'Monaco', 'Menlo', monospace;
|
|
362
|
+
font-size: 0.8rem;
|
|
363
|
+
max-height: 200px;
|
|
364
|
+
overflow-y: auto;
|
|
365
|
+
}
|
|
366
|
+
|
|
260
367
|
.hidden { display: none; }
|
|
261
368
|
</style>
|
|
262
369
|
</head>
|
|
@@ -267,7 +374,7 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
267
374
|
<p class="subtitle">OIDC Provider on Cloudflare Workers</p>
|
|
268
375
|
</header>
|
|
269
376
|
|
|
270
|
-
<div class="step-indicator">
|
|
377
|
+
<div class="step-indicator" id="step-indicator">
|
|
271
378
|
<div class="step step-active" id="step-1">1</div>
|
|
272
379
|
<div class="step-connector"></div>
|
|
273
380
|
<div class="step step-pending" id="step-2">2</div>
|
|
@@ -288,6 +395,85 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
288
395
|
</div>
|
|
289
396
|
</div>
|
|
290
397
|
|
|
398
|
+
<!-- Step 1.5: Top Menu (New Setup / Load Config) -->
|
|
399
|
+
<div id="section-top-menu" class="card hidden">
|
|
400
|
+
<h2 class="card-title">Get Started</h2>
|
|
401
|
+
<p style="margin-bottom: 1.5rem; color: var(--text-muted);">Choose an option to continue:</p>
|
|
402
|
+
|
|
403
|
+
<div class="mode-cards">
|
|
404
|
+
<div class="mode-card" id="menu-new-setup">
|
|
405
|
+
<div class="mode-icon">🆕</div>
|
|
406
|
+
<h3>New Setup</h3>
|
|
407
|
+
<p>Create a new Authrim deployment from scratch</p>
|
|
408
|
+
</div>
|
|
409
|
+
|
|
410
|
+
<div class="mode-card" id="menu-load-config">
|
|
411
|
+
<div class="mode-icon">📂</div>
|
|
412
|
+
<h3>Load Existing Config</h3>
|
|
413
|
+
<p>Resume or redeploy using an existing authrim-config.json</p>
|
|
414
|
+
</div>
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
|
|
418
|
+
<!-- Step 1.6: Setup Mode Selection (Quick / Custom) -->
|
|
419
|
+
<div id="section-mode" class="card hidden">
|
|
420
|
+
<h2 class="card-title">Setup Mode</h2>
|
|
421
|
+
<p style="margin-bottom: 1.5rem; color: var(--text-muted);">Choose how you want to set up Authrim:</p>
|
|
422
|
+
|
|
423
|
+
<div class="mode-cards">
|
|
424
|
+
<div class="mode-card" id="mode-quick">
|
|
425
|
+
<div class="mode-icon">⚡</div>
|
|
426
|
+
<h3>Quick Setup</h3>
|
|
427
|
+
<p>Get started in ~5 minutes</p>
|
|
428
|
+
<ul>
|
|
429
|
+
<li>Environment selection</li>
|
|
430
|
+
<li>Optional custom domain</li>
|
|
431
|
+
<li>Default components</li>
|
|
432
|
+
</ul>
|
|
433
|
+
<span class="mode-badge">Recommended</span>
|
|
434
|
+
</div>
|
|
435
|
+
|
|
436
|
+
<div class="mode-card" id="mode-custom">
|
|
437
|
+
<div class="mode-icon">🔧</div>
|
|
438
|
+
<h3>Custom Setup</h3>
|
|
439
|
+
<p>Full control over configuration</p>
|
|
440
|
+
<ul>
|
|
441
|
+
<li>Component selection</li>
|
|
442
|
+
<li>URL configuration</li>
|
|
443
|
+
<li>Advanced settings</li>
|
|
444
|
+
</ul>
|
|
445
|
+
</div>
|
|
446
|
+
</div>
|
|
447
|
+
|
|
448
|
+
<div class="button-group">
|
|
449
|
+
<button class="btn-secondary" id="btn-back-top">Back</button>
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
|
|
453
|
+
<!-- Step 1.7: Load Config -->
|
|
454
|
+
<div id="section-load-config" class="card hidden">
|
|
455
|
+
<h2 class="card-title">Load Configuration</h2>
|
|
456
|
+
<p style="margin-bottom: 1rem; color: var(--text-muted);">Select your authrim-config.json file:</p>
|
|
457
|
+
|
|
458
|
+
<div class="form-group">
|
|
459
|
+
<div class="file-input-wrapper">
|
|
460
|
+
<span class="file-input-btn">📁 Choose File</span>
|
|
461
|
+
<input type="file" id="config-file" accept=".json">
|
|
462
|
+
</div>
|
|
463
|
+
<span id="config-file-name" style="margin-left: 1rem; color: var(--text-muted);"></span>
|
|
464
|
+
</div>
|
|
465
|
+
|
|
466
|
+
<div id="config-preview-section" class="hidden">
|
|
467
|
+
<h3 style="font-size: 1rem; margin-bottom: 0.5rem;">Configuration Preview</h3>
|
|
468
|
+
<div class="config-preview" id="config-preview"></div>
|
|
469
|
+
</div>
|
|
470
|
+
|
|
471
|
+
<div class="button-group">
|
|
472
|
+
<button class="btn-secondary" id="btn-back-top-2">Back</button>
|
|
473
|
+
<button class="btn-primary" id="btn-load-config" disabled>Load & Continue</button>
|
|
474
|
+
</div>
|
|
475
|
+
</div>
|
|
476
|
+
|
|
291
477
|
<!-- Step 2: Configuration -->
|
|
292
478
|
<div id="section-config" class="card hidden">
|
|
293
479
|
<h2 class="card-title">Configuration</h2>
|
|
@@ -298,40 +484,55 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
298
484
|
<option value="prod">Production (prod)</option>
|
|
299
485
|
<option value="staging">Staging</option>
|
|
300
486
|
<option value="dev">Development (dev)</option>
|
|
487
|
+
<option value="custom">Custom...</option>
|
|
301
488
|
</select>
|
|
302
489
|
</div>
|
|
303
490
|
|
|
491
|
+
<div class="form-group hidden" id="custom-env-group">
|
|
492
|
+
<label for="custom-env">Custom Environment Name</label>
|
|
493
|
+
<input type="text" id="custom-env" placeholder="e.g., test, demo, myenv">
|
|
494
|
+
<small style="color: var(--text-muted)">Lowercase letters, numbers, and hyphens only</small>
|
|
495
|
+
</div>
|
|
496
|
+
|
|
304
497
|
<div class="form-group">
|
|
305
498
|
<label for="domain">Custom Domain (optional)</label>
|
|
306
499
|
<input type="text" id="domain" placeholder="auth.example.com">
|
|
307
500
|
<small style="color: var(--text-muted)">Leave empty to use workers.dev / pages.dev</small>
|
|
308
501
|
</div>
|
|
309
502
|
|
|
310
|
-
|
|
311
|
-
<div
|
|
312
|
-
<
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
503
|
+
<!-- Advanced options (shown in custom mode) -->
|
|
504
|
+
<div id="advanced-options" class="hidden">
|
|
505
|
+
<h3 style="margin: 1.5rem 0 1rem; font-size: 1rem;">Components</h3>
|
|
506
|
+
<div class="checkbox-group">
|
|
507
|
+
<label class="checkbox-item">
|
|
508
|
+
<input type="checkbox" id="comp-api" checked disabled>
|
|
509
|
+
API (required)
|
|
510
|
+
</label>
|
|
511
|
+
<label class="checkbox-item">
|
|
512
|
+
<input type="checkbox" id="comp-login-ui" checked>
|
|
513
|
+
Login UI
|
|
514
|
+
</label>
|
|
515
|
+
<label class="checkbox-item">
|
|
516
|
+
<input type="checkbox" id="comp-admin-ui" checked>
|
|
517
|
+
Admin UI
|
|
518
|
+
</label>
|
|
519
|
+
<label class="checkbox-item">
|
|
520
|
+
<input type="checkbox" id="comp-saml">
|
|
521
|
+
SAML IdP
|
|
522
|
+
</label>
|
|
523
|
+
<label class="checkbox-item">
|
|
524
|
+
<input type="checkbox" id="comp-async">
|
|
525
|
+
Device Flow / CIBA
|
|
526
|
+
</label>
|
|
527
|
+
<label class="checkbox-item">
|
|
528
|
+
<input type="checkbox" id="comp-vc">
|
|
529
|
+
Verifiable Credentials
|
|
530
|
+
</label>
|
|
531
|
+
</div>
|
|
332
532
|
</div>
|
|
333
533
|
|
|
334
534
|
<div class="button-group">
|
|
535
|
+
<button class="btn-secondary" id="btn-back-mode">Back</button>
|
|
335
536
|
<button class="btn-primary" id="btn-configure">Continue</button>
|
|
336
537
|
</div>
|
|
337
538
|
</div>
|
|
@@ -382,7 +583,7 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
382
583
|
<!-- Complete -->
|
|
383
584
|
<div id="section-complete" class="card hidden">
|
|
384
585
|
<h2 class="card-title" style="color: var(--success);">
|
|
385
|
-
Setup Complete!
|
|
586
|
+
✅ Setup Complete!
|
|
386
587
|
</h2>
|
|
387
588
|
|
|
388
589
|
<p>Authrim has been successfully deployed.</p>
|
|
@@ -394,7 +595,8 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
394
595
|
<div class="alert alert-info" style="margin-top: 1rem;">
|
|
395
596
|
<strong>Next Steps:</strong>
|
|
396
597
|
<ol style="margin-left: 1.5rem; margin-top: 0.5rem;">
|
|
397
|
-
<li>Visit the
|
|
598
|
+
<li>Visit the setup URL to create your first admin account</li>
|
|
599
|
+
<li>Log in to the Admin UI to create OAuth clients</li>
|
|
398
600
|
<li>Configure your application to use the OIDC endpoints</li>
|
|
399
601
|
</ol>
|
|
400
602
|
</div>
|
|
@@ -407,7 +609,9 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
407
609
|
|
|
408
610
|
// State
|
|
409
611
|
let currentStep = 1;
|
|
612
|
+
let setupMode = 'quick'; // 'quick' or 'custom'
|
|
410
613
|
let config = {};
|
|
614
|
+
let loadedConfig = null;
|
|
411
615
|
|
|
412
616
|
// Elements
|
|
413
617
|
const steps = {
|
|
@@ -419,6 +623,9 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
419
623
|
|
|
420
624
|
const sections = {
|
|
421
625
|
prerequisites: document.getElementById('section-prerequisites'),
|
|
626
|
+
topMenu: document.getElementById('section-top-menu'),
|
|
627
|
+
mode: document.getElementById('section-mode'),
|
|
628
|
+
loadConfig: document.getElementById('section-load-config'),
|
|
422
629
|
config: document.getElementById('section-config'),
|
|
423
630
|
provision: document.getElementById('section-provision'),
|
|
424
631
|
deploy: document.getElementById('section-deploy'),
|
|
@@ -512,6 +719,9 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
512
719
|
const code = document.createElement('code');
|
|
513
720
|
code.style.display = 'block';
|
|
514
721
|
code.style.marginTop = '0.5rem';
|
|
722
|
+
code.style.padding = '0.5rem';
|
|
723
|
+
code.style.background = '#f1f5f9';
|
|
724
|
+
code.style.borderRadius = '4px';
|
|
515
725
|
code.textContent = 'npm install -g wrangler';
|
|
516
726
|
alertDiv.appendChild(code);
|
|
517
727
|
|
|
@@ -537,6 +747,9 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
537
747
|
const code = document.createElement('code');
|
|
538
748
|
code.style.display = 'block';
|
|
539
749
|
code.style.marginTop = '0.5rem';
|
|
750
|
+
code.style.padding = '0.5rem';
|
|
751
|
+
code.style.background = '#f1f5f9';
|
|
752
|
+
code.style.borderRadius = '4px';
|
|
540
753
|
code.textContent = 'wrangler login';
|
|
541
754
|
alertDiv.appendChild(code);
|
|
542
755
|
|
|
@@ -556,11 +769,11 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
556
769
|
alertDiv.className = 'alert alert-success';
|
|
557
770
|
|
|
558
771
|
const p1 = document.createElement('p');
|
|
559
|
-
p1.textContent = 'Wrangler installed';
|
|
772
|
+
p1.textContent = '✓ Wrangler installed';
|
|
560
773
|
alertDiv.appendChild(p1);
|
|
561
774
|
|
|
562
775
|
const p2 = document.createElement('p');
|
|
563
|
-
p2.textContent = 'Logged in as ' + (result.auth.email || 'Unknown');
|
|
776
|
+
p2.textContent = '✓ Logged in as ' + (result.auth.email || 'Unknown');
|
|
564
777
|
alertDiv.appendChild(p2);
|
|
565
778
|
|
|
566
779
|
prereqContent.appendChild(alertDiv);
|
|
@@ -570,8 +783,8 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
570
783
|
|
|
571
784
|
const btn = document.createElement('button');
|
|
572
785
|
btn.className = 'btn-primary';
|
|
573
|
-
btn.textContent = '
|
|
574
|
-
btn.addEventListener('click',
|
|
786
|
+
btn.textContent = 'Continue';
|
|
787
|
+
btn.addEventListener('click', showTopMenu);
|
|
575
788
|
buttonGroup.appendChild(btn);
|
|
576
789
|
|
|
577
790
|
prereqContent.appendChild(buttonGroup);
|
|
@@ -586,15 +799,134 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
586
799
|
}
|
|
587
800
|
}
|
|
588
801
|
|
|
589
|
-
//
|
|
590
|
-
function
|
|
802
|
+
// Show top menu
|
|
803
|
+
function showTopMenu() {
|
|
804
|
+
showSection('topMenu');
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
// Top menu handlers
|
|
808
|
+
document.getElementById('menu-new-setup').addEventListener('click', () => {
|
|
809
|
+
showSection('mode');
|
|
810
|
+
});
|
|
811
|
+
|
|
812
|
+
document.getElementById('menu-load-config').addEventListener('click', () => {
|
|
813
|
+
showSection('loadConfig');
|
|
814
|
+
});
|
|
815
|
+
|
|
816
|
+
// Setup mode handlers
|
|
817
|
+
document.getElementById('mode-quick').addEventListener('click', () => {
|
|
818
|
+
setupMode = 'quick';
|
|
819
|
+
document.getElementById('mode-quick').classList.add('selected');
|
|
820
|
+
document.getElementById('mode-custom').classList.remove('selected');
|
|
821
|
+
document.getElementById('advanced-options').classList.add('hidden');
|
|
591
822
|
setStep(2);
|
|
592
823
|
showSection('config');
|
|
593
|
-
}
|
|
824
|
+
});
|
|
825
|
+
|
|
826
|
+
document.getElementById('mode-custom').addEventListener('click', () => {
|
|
827
|
+
setupMode = 'custom';
|
|
828
|
+
document.getElementById('mode-custom').classList.add('selected');
|
|
829
|
+
document.getElementById('mode-quick').classList.remove('selected');
|
|
830
|
+
document.getElementById('advanced-options').classList.remove('hidden');
|
|
831
|
+
setStep(2);
|
|
832
|
+
showSection('config');
|
|
833
|
+
});
|
|
834
|
+
|
|
835
|
+
document.getElementById('btn-back-top').addEventListener('click', () => {
|
|
836
|
+
showSection('topMenu');
|
|
837
|
+
});
|
|
838
|
+
|
|
839
|
+
document.getElementById('btn-back-top-2').addEventListener('click', () => {
|
|
840
|
+
showSection('topMenu');
|
|
841
|
+
});
|
|
842
|
+
|
|
843
|
+
// Load config handlers
|
|
844
|
+
document.getElementById('config-file').addEventListener('change', (e) => {
|
|
845
|
+
const file = e.target.files[0];
|
|
846
|
+
if (!file) return;
|
|
847
|
+
|
|
848
|
+
document.getElementById('config-file-name').textContent = file.name;
|
|
849
|
+
|
|
850
|
+
const reader = new FileReader();
|
|
851
|
+
reader.onload = (event) => {
|
|
852
|
+
try {
|
|
853
|
+
loadedConfig = JSON.parse(event.target.result);
|
|
854
|
+
document.getElementById('config-preview').textContent = JSON.stringify(loadedConfig, null, 2);
|
|
855
|
+
document.getElementById('config-preview-section').classList.remove('hidden');
|
|
856
|
+
document.getElementById('btn-load-config').disabled = false;
|
|
857
|
+
} catch (err) {
|
|
858
|
+
alert('Invalid JSON file: ' + err.message);
|
|
859
|
+
loadedConfig = null;
|
|
860
|
+
document.getElementById('btn-load-config').disabled = true;
|
|
861
|
+
}
|
|
862
|
+
};
|
|
863
|
+
reader.readAsText(file);
|
|
864
|
+
});
|
|
865
|
+
|
|
866
|
+
document.getElementById('btn-load-config').addEventListener('click', async () => {
|
|
867
|
+
if (!loadedConfig) return;
|
|
868
|
+
|
|
869
|
+
// Use loaded config
|
|
870
|
+
config = {
|
|
871
|
+
env: loadedConfig.environment?.prefix || 'prod',
|
|
872
|
+
domain: loadedConfig.urls?.api?.custom || null,
|
|
873
|
+
components: loadedConfig.components || {
|
|
874
|
+
api: true,
|
|
875
|
+
loginUi: true,
|
|
876
|
+
adminUi: true,
|
|
877
|
+
saml: false,
|
|
878
|
+
async: false,
|
|
879
|
+
vc: false,
|
|
880
|
+
},
|
|
881
|
+
};
|
|
882
|
+
|
|
883
|
+
// Set form values
|
|
884
|
+
const envSelect = document.getElementById('env');
|
|
885
|
+
if (['prod', 'staging', 'dev'].includes(config.env)) {
|
|
886
|
+
envSelect.value = config.env;
|
|
887
|
+
} else {
|
|
888
|
+
envSelect.value = 'custom';
|
|
889
|
+
document.getElementById('custom-env').value = config.env;
|
|
890
|
+
document.getElementById('custom-env-group').classList.remove('hidden');
|
|
891
|
+
}
|
|
892
|
+
document.getElementById('domain').value = config.domain || '';
|
|
893
|
+
|
|
894
|
+
// Skip to provisioning if resources already exist
|
|
895
|
+
if (loadedConfig.resources) {
|
|
896
|
+
setStep(4);
|
|
897
|
+
showSection('deploy');
|
|
898
|
+
} else {
|
|
899
|
+
setStep(3);
|
|
900
|
+
showSection('provision');
|
|
901
|
+
}
|
|
902
|
+
});
|
|
903
|
+
|
|
904
|
+
// Environment dropdown handler
|
|
905
|
+
document.getElementById('env').addEventListener('change', (e) => {
|
|
906
|
+
const customGroup = document.getElementById('custom-env-group');
|
|
907
|
+
if (e.target.value === 'custom') {
|
|
908
|
+
customGroup.classList.remove('hidden');
|
|
909
|
+
} else {
|
|
910
|
+
customGroup.classList.add('hidden');
|
|
911
|
+
}
|
|
912
|
+
});
|
|
913
|
+
|
|
914
|
+
// Configuration handlers
|
|
915
|
+
document.getElementById('btn-back-mode').addEventListener('click', () => {
|
|
916
|
+
setStep(1);
|
|
917
|
+
showSection('mode');
|
|
918
|
+
});
|
|
594
919
|
|
|
595
|
-
// Configure
|
|
596
920
|
document.getElementById('btn-configure').addEventListener('click', async () => {
|
|
597
|
-
|
|
921
|
+
let env = document.getElementById('env').value;
|
|
922
|
+
if (env === 'custom') {
|
|
923
|
+
env = document.getElementById('custom-env').value.toLowerCase().replace(/[^a-z0-9-]/g, '');
|
|
924
|
+
if (!env) {
|
|
925
|
+
alert('Please enter a valid environment name');
|
|
926
|
+
return;
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
|
|
598
930
|
const domain = document.getElementById('domain').value;
|
|
599
931
|
|
|
600
932
|
config = {
|
|
@@ -602,10 +934,11 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
602
934
|
domain: domain || null,
|
|
603
935
|
components: {
|
|
604
936
|
api: true,
|
|
605
|
-
loginUi: document.getElementById('comp-login-ui').checked,
|
|
606
|
-
adminUi: document.getElementById('comp-admin-ui').checked,
|
|
607
|
-
saml: document.getElementById('comp-saml').checked,
|
|
608
|
-
|
|
937
|
+
loginUi: setupMode === 'quick' || document.getElementById('comp-login-ui').checked,
|
|
938
|
+
adminUi: setupMode === 'quick' || document.getElementById('comp-admin-ui').checked,
|
|
939
|
+
saml: setupMode === 'custom' && document.getElementById('comp-saml').checked,
|
|
940
|
+
async: setupMode === 'custom' && document.getElementById('comp-async').checked,
|
|
941
|
+
vc: setupMode === 'custom' && document.getElementById('comp-vc').checked,
|
|
609
942
|
},
|
|
610
943
|
};
|
|
611
944
|
|
|
@@ -644,7 +977,7 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
644
977
|
method: 'POST',
|
|
645
978
|
body: { keyId: config.env + '-key-' + Date.now() },
|
|
646
979
|
});
|
|
647
|
-
output.textContent += 'Keys generated\\n\\n';
|
|
980
|
+
output.textContent += '✓ Keys generated\\n\\n';
|
|
648
981
|
|
|
649
982
|
// Provision resources
|
|
650
983
|
output.textContent += 'Provisioning Cloudflare resources...\\n';
|
|
@@ -654,7 +987,7 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
654
987
|
});
|
|
655
988
|
|
|
656
989
|
if (result.success) {
|
|
657
|
-
output.textContent += '\\
|
|
990
|
+
output.textContent += '\\n✓ Provisioning complete!\\n';
|
|
658
991
|
status.textContent = 'Complete';
|
|
659
992
|
status.className = 'status-badge status-success';
|
|
660
993
|
|
|
@@ -664,7 +997,7 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
664
997
|
throw new Error(result.error);
|
|
665
998
|
}
|
|
666
999
|
} catch (error) {
|
|
667
|
-
output.textContent += '\\
|
|
1000
|
+
output.textContent += '\\n✗ Error: ' + error.message + '\\n';
|
|
668
1001
|
status.textContent = 'Error';
|
|
669
1002
|
status.className = 'status-badge status-error';
|
|
670
1003
|
btn.disabled = false;
|
|
@@ -696,7 +1029,7 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
696
1029
|
method: 'POST',
|
|
697
1030
|
body: { env: config.env },
|
|
698
1031
|
});
|
|
699
|
-
output.textContent += 'Config files generated\\n\\n';
|
|
1032
|
+
output.textContent += '✓ Config files generated\\n\\n';
|
|
700
1033
|
|
|
701
1034
|
// Start deployment
|
|
702
1035
|
output.textContent += 'Deploying workers...\\n';
|
|
@@ -704,7 +1037,7 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
704
1037
|
// Poll for status updates
|
|
705
1038
|
const pollInterval = setInterval(async () => {
|
|
706
1039
|
const statusResult = await api('/deploy/status');
|
|
707
|
-
if (statusResult.progress.length > 0) {
|
|
1040
|
+
if (statusResult.progress && statusResult.progress.length > 0) {
|
|
708
1041
|
output.textContent = statusResult.progress.join('\\n') + '\\n';
|
|
709
1042
|
}
|
|
710
1043
|
}, 1000);
|
|
@@ -720,17 +1053,17 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
720
1053
|
clearInterval(pollInterval);
|
|
721
1054
|
|
|
722
1055
|
if (result.success) {
|
|
723
|
-
output.textContent += '\\
|
|
1056
|
+
output.textContent += '\\n✓ Deployment complete!\\n';
|
|
724
1057
|
status.textContent = 'Complete';
|
|
725
1058
|
status.className = 'status-badge status-success';
|
|
726
1059
|
|
|
727
1060
|
// Show completion
|
|
728
|
-
showComplete();
|
|
1061
|
+
showComplete(result);
|
|
729
1062
|
} else {
|
|
730
1063
|
throw new Error(result.error || 'Deployment failed');
|
|
731
1064
|
}
|
|
732
1065
|
} catch (error) {
|
|
733
|
-
output.textContent += '\\
|
|
1066
|
+
output.textContent += '\\n✗ Error: ' + error.message + '\\n';
|
|
734
1067
|
status.textContent = 'Error';
|
|
735
1068
|
status.className = 'status-badge status-error';
|
|
736
1069
|
btn.disabled = false;
|
|
@@ -738,7 +1071,7 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
738
1071
|
});
|
|
739
1072
|
|
|
740
1073
|
// Show completion
|
|
741
|
-
function showComplete() {
|
|
1074
|
+
function showComplete(result) {
|
|
742
1075
|
const urlsEl = document.getElementById('urls');
|
|
743
1076
|
const env = config.env;
|
|
744
1077
|
const domain = config.domain;
|
|
@@ -753,6 +1086,13 @@ export function getHtmlTemplate(sessionToken) {
|
|
|
753
1086
|
urlsEl.appendChild(createUrlItem('Login UI:', loginUrl));
|
|
754
1087
|
urlsEl.appendChild(createUrlItem('Admin UI:', adminUrl));
|
|
755
1088
|
|
|
1089
|
+
// Add setup URL if available
|
|
1090
|
+
if (result && result.setupUrl) {
|
|
1091
|
+
const setupItem = createUrlItem('Admin Setup:', result.setupUrl);
|
|
1092
|
+
setupItem.querySelector('a').style.fontWeight = 'bold';
|
|
1093
|
+
urlsEl.appendChild(setupItem);
|
|
1094
|
+
}
|
|
1095
|
+
|
|
756
1096
|
showSection('complete');
|
|
757
1097
|
}
|
|
758
1098
|
|
package/dist/web/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,eAAe,CAAC,YAAqB;IACnD,gDAAgD;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1E,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAslBoB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+e9B,CAAC;AACT,CAAC"}
|