@authrim/setup 0.1.68 → 0.1.71
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/core/admin.d.ts.map +1 -1
- package/dist/core/admin.js +26 -3
- package/dist/core/admin.js.map +1 -1
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +102 -27
- package/dist/web/ui.js.map +1 -1
- package/package.json +1 -1
package/dist/core/admin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/core/admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAkBH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA8BD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAqC9F;
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/core/admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAkBH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA8BD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAqC9F;AAiDD;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAuIpF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQ3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B,GACL,IAAI,CAyBN;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,GAAG,OAAO,CAAC,SAAS,CAAC,CAiCrB"}
|
package/dist/core/admin.js
CHANGED
|
@@ -80,6 +80,7 @@ export async function isSetupCompleted(env, configPath = '.') {
|
|
|
80
80
|
/**
|
|
81
81
|
* Resolve setup token path based on options
|
|
82
82
|
* Supports both new (.authrim/{env}/keys/) and legacy (.keys/{env}/) structures
|
|
83
|
+
* Also searches in subdirectories (e.g., authrim/) for cases where setup is run from parent directory
|
|
83
84
|
*/
|
|
84
85
|
function resolveSetupTokenPath(options) {
|
|
85
86
|
const { env, baseDir = process.cwd(), keysDir, legacy } = options;
|
|
@@ -91,7 +92,18 @@ function resolveSetupTokenPath(options) {
|
|
|
91
92
|
if (legacy) {
|
|
92
93
|
return getLegacyPaths(baseDir, env).keyFiles.setupToken;
|
|
93
94
|
}
|
|
94
|
-
// Auto-detect structure
|
|
95
|
+
// Auto-detect structure - also check in 'authrim/' subdirectory
|
|
96
|
+
const dirsToCheck = [baseDir, join(baseDir, 'authrim')];
|
|
97
|
+
for (const dir of dirsToCheck) {
|
|
98
|
+
const resolved = resolvePaths({ baseDir: dir, env });
|
|
99
|
+
const tokenPath = resolved.type === 'legacy'
|
|
100
|
+
? resolved.paths.keyFiles.setupToken
|
|
101
|
+
: resolved.paths.keyFiles.setupToken;
|
|
102
|
+
if (existsSync(tokenPath)) {
|
|
103
|
+
return tokenPath;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Fall back to baseDir resolution (for error messaging)
|
|
95
107
|
const resolved = resolvePaths({ baseDir, env });
|
|
96
108
|
if (resolved.type === 'legacy') {
|
|
97
109
|
return resolved.paths.keyFiles.setupToken;
|
|
@@ -130,23 +142,34 @@ export async function storeSetupToken(options) {
|
|
|
130
142
|
onProgress?.('Checking if setup is already completed...');
|
|
131
143
|
// Find the ar-auth package directory for wrangler commands
|
|
132
144
|
// We need to use the ar-auth config because it has the AUTHRIM_CONFIG KV binding
|
|
145
|
+
// Search multiple locations to handle different project structures:
|
|
146
|
+
// 1. baseDir/packages/ar-auth (when running from authrim root)
|
|
147
|
+
// 2. baseDir/authrim/packages/ar-auth (when authrim is in a subdirectory)
|
|
148
|
+
// 3. cwd-relative paths for backward compatibility
|
|
133
149
|
const packageDirs = [
|
|
150
|
+
join(baseDir, 'packages', 'ar-auth'),
|
|
151
|
+
join(baseDir, 'authrim', 'packages', 'ar-auth'),
|
|
134
152
|
join('.', 'packages', 'ar-auth'),
|
|
153
|
+
join('.', 'authrim', 'packages', 'ar-auth'),
|
|
135
154
|
join('..', 'ar-auth'),
|
|
136
155
|
join('.', 'ar-auth'),
|
|
137
156
|
];
|
|
138
157
|
let workerDir = null;
|
|
139
158
|
const wranglerConfig = `wrangler.${env}.toml`;
|
|
140
159
|
for (const dir of packageDirs) {
|
|
141
|
-
|
|
160
|
+
const configPath = join(dir, wranglerConfig);
|
|
161
|
+
onProgress?.(`Checking for ar-auth at: ${configPath}`);
|
|
162
|
+
if (existsSync(configPath)) {
|
|
142
163
|
workerDir = dir;
|
|
164
|
+
onProgress?.(`Found ar-auth package at: ${dir}`);
|
|
143
165
|
break;
|
|
144
166
|
}
|
|
145
167
|
}
|
|
146
168
|
if (!workerDir) {
|
|
169
|
+
const searchedPaths = packageDirs.map((d) => join(d, wranglerConfig)).join(', ');
|
|
147
170
|
return {
|
|
148
171
|
success: false,
|
|
149
|
-
error: `Cannot find ar-auth package with ${wranglerConfig}. Deploy workers first.`,
|
|
172
|
+
error: `Cannot find ar-auth package with ${wranglerConfig}. Searched: ${searchedPaths}. Deploy workers first.`,
|
|
150
173
|
};
|
|
151
174
|
}
|
|
152
175
|
// Check if setup is already completed
|
package/dist/core/admin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/core/admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,YAAY,GAGb,MAAM,YAAY,CAAC;AAmCpB,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF;;GAEG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAa;IACvC,8CAA8C;IAC9C,wCAAwC;IACxC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,gCAAgC;AAChC,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,aAAqB,GAAG;IAC1E,WAAW,CAAC,GAAG,CAAC,CAAC;IAEjB,IAAI,CAAC;QACH,6CAA6C;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,CAAC;QAE9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YACjD,4CAA4C;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,UAAU,EACV;YACE,IAAI;YACJ,KAAK;YACL,KAAK;YACL,iBAAiB;YACjB,UAAU;YACV,cAAc;YACd,WAAW;YACX,gBAAgB;SACjB,EACD;YACE,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,KAAK;SACd,CACF,CAAC;QAEF,yCAAyC;QACzC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/core/admin.ts"],"names":[],"mappings":"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"}
|
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;;;;;GAKG;AAEH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,
|
|
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,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CA8tJnF"}
|
package/dist/web/ui.js
CHANGED
|
@@ -1338,6 +1338,29 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1338
1338
|
transform: translateY(-1px);
|
|
1339
1339
|
}
|
|
1340
1340
|
|
|
1341
|
+
.btn-warning {
|
|
1342
|
+
background: var(--warning);
|
|
1343
|
+
color: white;
|
|
1344
|
+
padding: 0.75rem 1.25rem;
|
|
1345
|
+
font-size: 0.9rem;
|
|
1346
|
+
border-radius: 10px;
|
|
1347
|
+
box-shadow: 0 2px 8px rgba(217, 119, 6, 0.25);
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
.btn-warning:hover {
|
|
1351
|
+
background: #b45309;
|
|
1352
|
+
transform: translateY(-1px);
|
|
1353
|
+
box-shadow: 0 4px 12px rgba(217, 119, 6, 0.35);
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
[data-theme="dark"] .btn-warning {
|
|
1357
|
+
box-shadow: 0 2px 8px rgba(251, 191, 36, 0.3);
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
[data-theme="dark"] .btn-warning:hover {
|
|
1361
|
+
box-shadow: 0 4px 12px rgba(251, 191, 36, 0.4);
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1341
1364
|
.btn-info {
|
|
1342
1365
|
background: var(--primary);
|
|
1343
1366
|
color: white;
|
|
@@ -2677,6 +2700,7 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2677
2700
|
const progressBar = document.getElementById(prefix + '-progress-bar');
|
|
2678
2701
|
const progressText = document.getElementById(prefix + '-progress-text');
|
|
2679
2702
|
const currentTaskEl = document.getElementById(prefix + '-current-task');
|
|
2703
|
+
const spinner = document.getElementById(prefix + '-spinner');
|
|
2680
2704
|
|
|
2681
2705
|
if (progressBar && total > 0) {
|
|
2682
2706
|
const percent = Math.round((current / total) * 100);
|
|
@@ -2688,6 +2712,10 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2688
2712
|
if (currentTaskEl && currentTask) {
|
|
2689
2713
|
currentTaskEl.textContent = currentTask;
|
|
2690
2714
|
}
|
|
2715
|
+
// Hide spinner when complete
|
|
2716
|
+
if (spinner) {
|
|
2717
|
+
spinner.style.display = (current >= total && total > 0) ? 'none' : 'block';
|
|
2718
|
+
}
|
|
2691
2719
|
}
|
|
2692
2720
|
|
|
2693
2721
|
// Parse progress message to extract current task
|
|
@@ -3548,6 +3576,21 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3548
3576
|
const keysPath = document.getElementById('keys-path');
|
|
3549
3577
|
const progressUI = document.getElementById('provision-progress-ui');
|
|
3550
3578
|
|
|
3579
|
+
// Confirmation dialog for re-provisioning
|
|
3580
|
+
if (provisioningCompleted) {
|
|
3581
|
+
const confirmed = confirm(
|
|
3582
|
+
'⚠️ Re-provision will DELETE all existing resources and create new ones.\\n\\n' +
|
|
3583
|
+
'This action will:\\n' +
|
|
3584
|
+
'• Delete existing D1 databases (all data will be lost)\\n' +
|
|
3585
|
+
'• Delete existing KV namespaces\\n' +
|
|
3586
|
+
'• Generate new encryption keys\\n\\n' +
|
|
3587
|
+
'Are you sure you want to continue?'
|
|
3588
|
+
);
|
|
3589
|
+
if (!confirmed) {
|
|
3590
|
+
return;
|
|
3591
|
+
}
|
|
3592
|
+
}
|
|
3593
|
+
|
|
3551
3594
|
btn.disabled = true;
|
|
3552
3595
|
btn.classList.add('hidden');
|
|
3553
3596
|
btnGotoDeploy.classList.add('hidden');
|
|
@@ -3647,9 +3690,10 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3647
3690
|
// Show keys saved info
|
|
3648
3691
|
keysSavedInfo.classList.remove('hidden');
|
|
3649
3692
|
|
|
3650
|
-
// Update buttons
|
|
3693
|
+
// Update buttons - change to warning style for re-provision
|
|
3651
3694
|
btn.textContent = 'Re-provision (Delete & Create)';
|
|
3652
|
-
btn.classList.remove('hidden');
|
|
3695
|
+
btn.classList.remove('hidden', 'btn-primary');
|
|
3696
|
+
btn.classList.add('btn-warning');
|
|
3653
3697
|
btn.disabled = false;
|
|
3654
3698
|
btnGotoDeploy.classList.remove('hidden');
|
|
3655
3699
|
} else {
|
|
@@ -3708,7 +3752,20 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3708
3752
|
output.textContent = 'Starting deployment...\\n\\n';
|
|
3709
3753
|
|
|
3710
3754
|
let completedCount = 0;
|
|
3711
|
-
|
|
3755
|
+
// Calculate total components dynamically
|
|
3756
|
+
// Workers: 5 core workers (auth, token, userinfo, management, lib-core)
|
|
3757
|
+
// Secrets: 4 secrets per worker = 20 uploads
|
|
3758
|
+
// Pages: login-ui + admin-ui (if enabled)
|
|
3759
|
+
// Router: 1
|
|
3760
|
+
const coreWorkers = 5;
|
|
3761
|
+
const secretsPerWorker = 4;
|
|
3762
|
+
const secretUploads = coreWorkers * secretsPerWorker;
|
|
3763
|
+
const hasLoginUI = config.components?.loginUI !== false;
|
|
3764
|
+
const hasAdminUI = config.components?.adminUI !== false;
|
|
3765
|
+
const pagesCount = (hasLoginUI ? 1 : 0) + (hasAdminUI ? 1 : 0);
|
|
3766
|
+
const routerCount = 1;
|
|
3767
|
+
const configGeneration = 1;
|
|
3768
|
+
const totalComponents = secretUploads + coreWorkers + pagesCount + routerCount + configGeneration;
|
|
3712
3769
|
updateProgressUI('deploy', 0, totalComponents, 'Initializing...');
|
|
3713
3770
|
|
|
3714
3771
|
try {
|
|
@@ -3886,38 +3943,52 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3886
3943
|
urlsEl.appendChild(createUrlItem('Login UI:', loginUrl));
|
|
3887
3944
|
urlsEl.appendChild(createUrlItem('Admin UI:', adminUrl));
|
|
3888
3945
|
|
|
3889
|
-
//
|
|
3946
|
+
// Create Admin Setup section (separate, prominent box)
|
|
3947
|
+
const adminSetupSection = document.createElement('div');
|
|
3948
|
+
adminSetupSection.style.cssText = 'margin-top: 1.5rem; padding: 1.25rem; background: linear-gradient(135deg, rgba(37, 99, 235, 0.1) 0%, rgba(59, 130, 246, 0.05) 100%); border: 2px solid var(--primary); border-radius: 12px;';
|
|
3949
|
+
|
|
3890
3950
|
if (result && result.setupUrl) {
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3951
|
+
adminSetupSection.innerHTML = \`
|
|
3952
|
+
<div style="display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem;">
|
|
3953
|
+
<span style="font-size: 1.5rem;">🔐</span>
|
|
3954
|
+
<h4 style="margin: 0; font-size: 1.1rem; font-weight: 600; color: var(--primary);">Admin Account Setup</h4>
|
|
3955
|
+
<span style="background: var(--warning); color: white; font-size: 0.7rem; padding: 0.2rem 0.5rem; border-radius: 4px; font-weight: 600;">IMPORTANT</span>
|
|
3956
|
+
</div>
|
|
3957
|
+
<p style="margin: 0 0 0.75rem; font-size: 0.9rem; color: var(--text-muted);">
|
|
3958
|
+
Register your first administrator account with Passkey authentication:
|
|
3959
|
+
</p>
|
|
3960
|
+
<div style="display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap;">
|
|
3961
|
+
<input type="text" value="\${result.setupUrl}" readonly style="flex: 1; min-width: 200px; padding: 0.625rem 0.75rem; border: 1px solid var(--border); border-radius: 8px; font-family: var(--font-mono); font-size: 0.8rem; background: var(--card-bg); color: var(--text);">
|
|
3962
|
+
<button class="btn-secondary" onclick="navigator.clipboard.writeText('\${result.setupUrl}'); this.textContent='✓ Copied'; setTimeout(() => this.textContent='📋 Copy', 2000);" style="white-space: nowrap;">📋 Copy</button>
|
|
3963
|
+
<a href="\${result.setupUrl}" target="_blank" class="btn-primary" style="text-decoration: none; white-space: nowrap;">🔗 Open Setup</a>
|
|
3964
|
+
</div>
|
|
3965
|
+
<div class="hint-box" style="margin-top: 0.75rem;">
|
|
3966
|
+
⚠️ This URL can only be used <strong>once</strong> and expires in <strong>1 hour</strong>.
|
|
3967
|
+
</div>
|
|
3968
|
+
\`;
|
|
3901
3969
|
} else {
|
|
3902
|
-
// Show
|
|
3903
|
-
|
|
3904
|
-
debugDiv.className = 'hint-box';
|
|
3905
|
-
debugDiv.style.cssText = 'margin-top: 1rem;';
|
|
3906
|
-
debugDiv.innerHTML = '<strong>⚠️ Admin Setup URL not generated</strong><br>';
|
|
3970
|
+
// Show message when setup URL is missing
|
|
3971
|
+
let debugInfo = '';
|
|
3907
3972
|
if (result && result.adminSetupDebug) {
|
|
3908
3973
|
const debug = result.adminSetupDebug;
|
|
3909
|
-
if (debug.error) {
|
|
3910
|
-
debugDiv.innerHTML += '<span style="color: #dc2626;">Error: ' + debug.error + '</span><br>';
|
|
3911
|
-
}
|
|
3912
3974
|
if (debug.alreadyCompleted) {
|
|
3913
|
-
|
|
3975
|
+
debugInfo = '<p style="margin: 0.5rem 0 0; font-size: 0.85rem; color: var(--text-muted);">Admin setup has already been completed for this environment.</p>';
|
|
3976
|
+
} else if (debug.error) {
|
|
3977
|
+
debugInfo = '<p style="margin: 0.5rem 0 0; font-size: 0.85rem; color: var(--error);">Error: ' + debug.error + '</p>';
|
|
3914
3978
|
}
|
|
3915
|
-
debugDiv.innerHTML += '<br><small>Debug: ' + JSON.stringify(debug) + '</small>';
|
|
3916
|
-
} else {
|
|
3917
|
-
debugDiv.innerHTML += 'No debug information available';
|
|
3918
3979
|
}
|
|
3919
|
-
|
|
3980
|
+
adminSetupSection.innerHTML = \`
|
|
3981
|
+
<div style="display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.5rem;">
|
|
3982
|
+
<span style="font-size: 1.5rem;">🔐</span>
|
|
3983
|
+
<h4 style="margin: 0; font-size: 1.1rem; font-weight: 600; color: var(--text-muted);">Admin Account Setup</h4>
|
|
3984
|
+
</div>
|
|
3985
|
+
<p style="margin: 0; font-size: 0.9rem; color: var(--text-muted);">
|
|
3986
|
+
Setup URL not available. You can configure admin access from the Admin UI later.
|
|
3987
|
+
</p>
|
|
3988
|
+
\${debugInfo}
|
|
3989
|
+
\`;
|
|
3920
3990
|
}
|
|
3991
|
+
urlsEl.parentNode.insertBefore(adminSetupSection, urlsEl.nextSibling);
|
|
3921
3992
|
|
|
3922
3993
|
setStep(8);
|
|
3923
3994
|
showSection('complete');
|
|
@@ -4018,11 +4089,15 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
4018
4089
|
|
|
4019
4090
|
if (provisioningCompleted) {
|
|
4020
4091
|
btnProvision.textContent = 'Re-provision (Delete & Create)';
|
|
4092
|
+
btnProvision.classList.remove('btn-primary');
|
|
4093
|
+
btnProvision.classList.add('btn-warning');
|
|
4021
4094
|
btnProvision.disabled = false;
|
|
4022
4095
|
btnGotoDeploy.classList.remove('hidden');
|
|
4023
4096
|
btnSaveConfig.classList.remove('hidden');
|
|
4024
4097
|
} else {
|
|
4025
4098
|
btnProvision.textContent = 'Create Resources';
|
|
4099
|
+
btnProvision.classList.remove('btn-warning');
|
|
4100
|
+
btnProvision.classList.add('btn-primary');
|
|
4026
4101
|
btnProvision.disabled = false;
|
|
4027
4102
|
btnGotoDeploy.classList.add('hidden');
|
|
4028
4103
|
btnSaveConfig.classList.add('hidden');
|
package/dist/web/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,eAAe,CAAC,YAAqB,EAAE,UAAoB;IACzE,gDAAgD;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAErD,OAAO
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,eAAe,CAAC,YAAqB,EAAE,UAAoB;IACzE,gDAAgD;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAErD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAqhFoB,SAAS;0BACZ,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAksEhC,CAAC;AACT,CAAC"}
|