@authrim/setup 0.1.62 → 0.1.63
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/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +330 -34
- package/dist/web/ui.js.map +1 -1
- package/package.json +1 -1
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,CA06HnF"}
|
package/dist/web/ui.js
CHANGED
|
@@ -382,6 +382,77 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
382
382
|
word-break: break-word;
|
|
383
383
|
}
|
|
384
384
|
|
|
385
|
+
/* Progress UI Components */
|
|
386
|
+
.progress-container {
|
|
387
|
+
margin: 1rem 0;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.progress-status {
|
|
391
|
+
display: flex;
|
|
392
|
+
align-items: center;
|
|
393
|
+
gap: 0.75rem;
|
|
394
|
+
margin-bottom: 0.75rem;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
.progress-status .spinner {
|
|
398
|
+
width: 20px;
|
|
399
|
+
height: 20px;
|
|
400
|
+
border: 2px solid #e2e8f0;
|
|
401
|
+
border-top-color: var(--primary);
|
|
402
|
+
border-radius: 50%;
|
|
403
|
+
animation: spin 0.8s linear infinite;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
@keyframes spin {
|
|
407
|
+
to { transform: rotate(360deg); }
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
.progress-bar-wrapper {
|
|
411
|
+
background: #e2e8f0;
|
|
412
|
+
border-radius: 4px;
|
|
413
|
+
height: 8px;
|
|
414
|
+
overflow: hidden;
|
|
415
|
+
margin-bottom: 0.5rem;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
.progress-bar {
|
|
419
|
+
height: 100%;
|
|
420
|
+
background: var(--primary);
|
|
421
|
+
border-radius: 4px;
|
|
422
|
+
transition: width 0.3s ease;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
.progress-text {
|
|
426
|
+
font-size: 0.875rem;
|
|
427
|
+
color: var(--text-muted);
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
.log-toggle {
|
|
431
|
+
display: flex;
|
|
432
|
+
align-items: center;
|
|
433
|
+
gap: 0.5rem;
|
|
434
|
+
padding: 0.5rem 0.75rem;
|
|
435
|
+
background: #f1f5f9;
|
|
436
|
+
border: 1px solid var(--border);
|
|
437
|
+
border-radius: 6px;
|
|
438
|
+
cursor: pointer;
|
|
439
|
+
font-size: 0.875rem;
|
|
440
|
+
color: var(--text-muted);
|
|
441
|
+
margin-top: 1rem;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.log-toggle:hover {
|
|
445
|
+
background: #e2e8f0;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.log-toggle .arrow {
|
|
449
|
+
transition: transform 0.2s;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.log-toggle.open .arrow {
|
|
453
|
+
transform: rotate(90deg);
|
|
454
|
+
}
|
|
455
|
+
|
|
385
456
|
.step-indicator {
|
|
386
457
|
display: flex;
|
|
387
458
|
justify-content: center;
|
|
@@ -1415,6 +1486,23 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1415
1486
|
</div>
|
|
1416
1487
|
</div>
|
|
1417
1488
|
|
|
1489
|
+
<!-- Progress UI (shown during provisioning) -->
|
|
1490
|
+
<div id="provision-progress-ui" class="progress-container hidden">
|
|
1491
|
+
<div class="progress-status">
|
|
1492
|
+
<div class="spinner" id="provision-spinner"></div>
|
|
1493
|
+
<span id="provision-current-task">Initializing...</span>
|
|
1494
|
+
</div>
|
|
1495
|
+
<div class="progress-bar-wrapper">
|
|
1496
|
+
<div class="progress-bar" id="provision-progress-bar" style="width: 0%"></div>
|
|
1497
|
+
</div>
|
|
1498
|
+
<div class="progress-text" id="provision-progress-text">0 / 0 resources</div>
|
|
1499
|
+
|
|
1500
|
+
<div class="log-toggle" id="provision-log-toggle">
|
|
1501
|
+
<span class="arrow">▶</span>
|
|
1502
|
+
<span>Show detailed log</span>
|
|
1503
|
+
</div>
|
|
1504
|
+
</div>
|
|
1505
|
+
|
|
1418
1506
|
<div class="progress-log hidden" id="provision-log">
|
|
1419
1507
|
<pre id="provision-output"></pre>
|
|
1420
1508
|
</div>
|
|
@@ -1443,7 +1531,24 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1443
1531
|
<span class="status-badge status-pending" id="deploy-status">Ready</span>
|
|
1444
1532
|
</h2>
|
|
1445
1533
|
|
|
1446
|
-
<p style="margin-bottom: 1rem;">Ready to deploy Authrim workers to Cloudflare.</p>
|
|
1534
|
+
<p id="deploy-ready-text" style="margin-bottom: 1rem;">Ready to deploy Authrim workers to Cloudflare.</p>
|
|
1535
|
+
|
|
1536
|
+
<!-- Progress UI (shown during deployment) -->
|
|
1537
|
+
<div id="deploy-progress-ui" class="progress-container hidden">
|
|
1538
|
+
<div class="progress-status">
|
|
1539
|
+
<div class="spinner" id="deploy-spinner"></div>
|
|
1540
|
+
<span id="deploy-current-task">Initializing...</span>
|
|
1541
|
+
</div>
|
|
1542
|
+
<div class="progress-bar-wrapper">
|
|
1543
|
+
<div class="progress-bar" id="deploy-progress-bar" style="width: 0%"></div>
|
|
1544
|
+
</div>
|
|
1545
|
+
<div class="progress-text" id="deploy-progress-text">0 / 0 components</div>
|
|
1546
|
+
|
|
1547
|
+
<div class="log-toggle" id="deploy-log-toggle">
|
|
1548
|
+
<span class="arrow">▶</span>
|
|
1549
|
+
<span>Show detailed log</span>
|
|
1550
|
+
</div>
|
|
1551
|
+
</div>
|
|
1447
1552
|
|
|
1448
1553
|
<div class="progress-log hidden" id="deploy-log">
|
|
1449
1554
|
<pre id="deploy-output"></pre>
|
|
@@ -1519,6 +1624,31 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1519
1624
|
<code id="detail-env-name" style="background: var(--bg); padding: 0.25rem 0.5rem; border-radius: 4px; font-size: 1rem;"></code>
|
|
1520
1625
|
</h2>
|
|
1521
1626
|
|
|
1627
|
+
<!-- Admin Setup Section -->
|
|
1628
|
+
<div id="admin-setup-section" class="hidden" style="margin-bottom: 1.5rem; padding: 1rem; background: #fef3c7; border-radius: 8px; border: 1px solid #fcd34d;">
|
|
1629
|
+
<div style="display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem;">
|
|
1630
|
+
<span style="font-size: 1.5rem;">⚠️</span>
|
|
1631
|
+
<div>
|
|
1632
|
+
<div style="font-weight: 600; color: #92400e;">Admin Account Not Configured</div>
|
|
1633
|
+
<div style="font-size: 0.875rem; color: #a16207;">Initial administrator has not been set up for this environment.</div>
|
|
1634
|
+
</div>
|
|
1635
|
+
</div>
|
|
1636
|
+
<button class="btn-primary" id="btn-start-admin-setup" style="margin-top: 0.5rem;">
|
|
1637
|
+
🔐 Start Admin Account Setup with Passkey
|
|
1638
|
+
</button>
|
|
1639
|
+
<div id="admin-setup-result" class="hidden" style="margin-top: 1rem; padding: 0.75rem; background: white; border-radius: 6px;">
|
|
1640
|
+
<div style="font-weight: 500; margin-bottom: 0.5rem;">Setup URL Generated:</div>
|
|
1641
|
+
<div style="display: flex; gap: 0.5rem; align-items: center;">
|
|
1642
|
+
<input type="text" id="admin-setup-url" readonly style="flex: 1; padding: 0.5rem; border: 1px solid #d1d5db; border-radius: 4px; font-family: monospace; font-size: 0.875rem;">
|
|
1643
|
+
<button class="btn-secondary" id="btn-copy-setup-url" style="white-space: nowrap;">📋 Copy</button>
|
|
1644
|
+
<a id="btn-open-setup-url" href="#" target="_blank" class="btn-primary" style="text-decoration: none; white-space: nowrap;">🔗 Open</a>
|
|
1645
|
+
</div>
|
|
1646
|
+
<div style="font-size: 0.75rem; color: #6b7280; margin-top: 0.5rem;">
|
|
1647
|
+
This URL is valid for 1 hour. Open it in a browser to register the first admin account.
|
|
1648
|
+
</div>
|
|
1649
|
+
</div>
|
|
1650
|
+
</div>
|
|
1651
|
+
|
|
1522
1652
|
<div id="detail-resources">
|
|
1523
1653
|
<!-- Workers -->
|
|
1524
1654
|
<div class="resource-section">
|
|
@@ -1569,31 +1699,6 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1569
1699
|
</div>
|
|
1570
1700
|
</div>
|
|
1571
1701
|
|
|
1572
|
-
<!-- Admin Setup Section -->
|
|
1573
|
-
<div id="admin-setup-section" class="resource-section hidden" style="margin-top: 1.5rem; padding: 1rem; background: #fef3c7; border-radius: 8px; border: 1px solid #fcd34d;">
|
|
1574
|
-
<div style="display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem;">
|
|
1575
|
-
<span style="font-size: 1.5rem;">⚠️</span>
|
|
1576
|
-
<div>
|
|
1577
|
-
<div style="font-weight: 600; color: #92400e;">Admin Account Not Configured</div>
|
|
1578
|
-
<div style="font-size: 0.875rem; color: #a16207;">Initial administrator has not been set up for this environment.</div>
|
|
1579
|
-
</div>
|
|
1580
|
-
</div>
|
|
1581
|
-
<button class="btn-primary" id="btn-start-admin-setup" style="margin-top: 0.5rem;">
|
|
1582
|
-
🔐 Start Admin Account Setup with Passkey
|
|
1583
|
-
</button>
|
|
1584
|
-
<div id="admin-setup-result" class="hidden" style="margin-top: 1rem; padding: 0.75rem; background: white; border-radius: 6px;">
|
|
1585
|
-
<div style="font-weight: 500; margin-bottom: 0.5rem;">Setup URL Generated:</div>
|
|
1586
|
-
<div style="display: flex; gap: 0.5rem; align-items: center;">
|
|
1587
|
-
<input type="text" id="admin-setup-url" readonly style="flex: 1; padding: 0.5rem; border: 1px solid #d1d5db; border-radius: 4px; font-family: monospace; font-size: 0.875rem;">
|
|
1588
|
-
<button class="btn-secondary" id="btn-copy-setup-url" style="white-space: nowrap;">📋 Copy</button>
|
|
1589
|
-
<a id="btn-open-setup-url" href="#" target="_blank" class="btn-primary" style="text-decoration: none; white-space: nowrap;">🔗 Open</a>
|
|
1590
|
-
</div>
|
|
1591
|
-
<div style="font-size: 0.75rem; color: #6b7280; margin-top: 0.5rem;">
|
|
1592
|
-
This URL is valid for 1 hour. Open it in a browser to register the first admin account.
|
|
1593
|
-
</div>
|
|
1594
|
-
</div>
|
|
1595
|
-
</div>
|
|
1596
|
-
|
|
1597
1702
|
<div class="button-group">
|
|
1598
1703
|
<button class="btn-secondary" id="btn-back-env-detail">← Back to List</button>
|
|
1599
1704
|
<button class="btn-danger" id="btn-delete-from-detail">🗑️ Delete Environment...</button>
|
|
@@ -1615,6 +1720,7 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1615
1720
|
Environment: <code id="delete-env-name" style="background: var(--bg); padding: 0.25rem 0.5rem; border-radius: 4px;"></code>
|
|
1616
1721
|
</h3>
|
|
1617
1722
|
|
|
1723
|
+
<div id="delete-options-section">
|
|
1618
1724
|
<p style="margin-bottom: 1rem; color: var(--text-muted);">Select resources to delete:</p>
|
|
1619
1725
|
|
|
1620
1726
|
<div class="delete-options">
|
|
@@ -1666,6 +1772,24 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1666
1772
|
</span>
|
|
1667
1773
|
</label>
|
|
1668
1774
|
</div>
|
|
1775
|
+
</div>
|
|
1776
|
+
</div>
|
|
1777
|
+
|
|
1778
|
+
<!-- Progress UI (shown during deletion) -->
|
|
1779
|
+
<div id="delete-progress-ui" class="progress-container hidden">
|
|
1780
|
+
<div class="progress-status">
|
|
1781
|
+
<div class="spinner" id="delete-spinner"></div>
|
|
1782
|
+
<span id="delete-current-task">Initializing...</span>
|
|
1783
|
+
</div>
|
|
1784
|
+
<div class="progress-bar-wrapper">
|
|
1785
|
+
<div class="progress-bar" id="delete-progress-bar" style="width: 0%"></div>
|
|
1786
|
+
</div>
|
|
1787
|
+
<div class="progress-text" id="delete-progress-text">0 / 0 resources</div>
|
|
1788
|
+
|
|
1789
|
+
<div class="log-toggle" id="delete-log-toggle">
|
|
1790
|
+
<span class="arrow">▶</span>
|
|
1791
|
+
<span>Show detailed log</span>
|
|
1792
|
+
</div>
|
|
1669
1793
|
</div>
|
|
1670
1794
|
|
|
1671
1795
|
<div class="progress-log hidden" id="delete-log">
|
|
@@ -1770,6 +1894,7 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1770
1894
|
function showSection(name) {
|
|
1771
1895
|
Object.values(sections).forEach(s => s.classList.add('hidden'));
|
|
1772
1896
|
sections[name].classList.remove('hidden');
|
|
1897
|
+
window.scrollTo(0, 0);
|
|
1773
1898
|
}
|
|
1774
1899
|
|
|
1775
1900
|
// Auto-scroll helper for progress logs
|
|
@@ -1779,6 +1904,106 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1779
1904
|
}
|
|
1780
1905
|
}
|
|
1781
1906
|
|
|
1907
|
+
// Log toggle functionality
|
|
1908
|
+
function setupLogToggle(toggleId, logId) {
|
|
1909
|
+
const toggle = document.getElementById(toggleId);
|
|
1910
|
+
const log = document.getElementById(logId);
|
|
1911
|
+
if (toggle && log) {
|
|
1912
|
+
toggle.addEventListener('click', () => {
|
|
1913
|
+
const isHidden = log.classList.contains('hidden');
|
|
1914
|
+
if (isHidden) {
|
|
1915
|
+
log.classList.remove('hidden');
|
|
1916
|
+
toggle.classList.add('open');
|
|
1917
|
+
toggle.querySelector('span:last-child').textContent = 'Hide detailed log';
|
|
1918
|
+
} else {
|
|
1919
|
+
log.classList.add('hidden');
|
|
1920
|
+
toggle.classList.remove('open');
|
|
1921
|
+
toggle.querySelector('span:last-child').textContent = 'Show detailed log';
|
|
1922
|
+
}
|
|
1923
|
+
});
|
|
1924
|
+
}
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1927
|
+
// Setup all log toggles
|
|
1928
|
+
setupLogToggle('deploy-log-toggle', 'deploy-log');
|
|
1929
|
+
setupLogToggle('provision-log-toggle', 'provision-log');
|
|
1930
|
+
setupLogToggle('delete-log-toggle', 'delete-log');
|
|
1931
|
+
|
|
1932
|
+
// Progress UI update helper
|
|
1933
|
+
function updateProgressUI(prefix, current, total, currentTask) {
|
|
1934
|
+
const progressBar = document.getElementById(prefix + '-progress-bar');
|
|
1935
|
+
const progressText = document.getElementById(prefix + '-progress-text');
|
|
1936
|
+
const currentTaskEl = document.getElementById(prefix + '-current-task');
|
|
1937
|
+
|
|
1938
|
+
if (progressBar && total > 0) {
|
|
1939
|
+
const percent = Math.round((current / total) * 100);
|
|
1940
|
+
progressBar.style.width = percent + '%';
|
|
1941
|
+
}
|
|
1942
|
+
if (progressText) {
|
|
1943
|
+
progressText.textContent = current + ' / ' + total + ' ' + (prefix === 'deploy' ? 'components' : 'resources');
|
|
1944
|
+
}
|
|
1945
|
+
if (currentTaskEl && currentTask) {
|
|
1946
|
+
currentTaskEl.textContent = currentTask;
|
|
1947
|
+
}
|
|
1948
|
+
}
|
|
1949
|
+
|
|
1950
|
+
// Parse progress message to extract current task
|
|
1951
|
+
function parseProgressMessage(message) {
|
|
1952
|
+
// Match patterns like "Deploying xxx...", "Creating xxx...", "Deleting xxx..."
|
|
1953
|
+
if (message.includes('Deploying ')) {
|
|
1954
|
+
const parts = message.split('Deploying ')[1];
|
|
1955
|
+
if (parts) {
|
|
1956
|
+
const name = parts.split('.')[0].split(' ')[0];
|
|
1957
|
+
if (name) return 'Deploying ' + name + '...';
|
|
1958
|
+
}
|
|
1959
|
+
}
|
|
1960
|
+
|
|
1961
|
+
if (message.includes('Creating ')) {
|
|
1962
|
+
const parts = message.split('Creating ')[1];
|
|
1963
|
+
if (parts) {
|
|
1964
|
+
const name = parts.split(' ')[0].split('.')[0];
|
|
1965
|
+
if (name) return 'Creating ' + name + '...';
|
|
1966
|
+
}
|
|
1967
|
+
}
|
|
1968
|
+
|
|
1969
|
+
if (message.includes('Deleting')) {
|
|
1970
|
+
const parts = message.split('Deleting')[1];
|
|
1971
|
+
if (parts) {
|
|
1972
|
+
const name = parts.trim().split(' ')[0].replace(':', '');
|
|
1973
|
+
if (name) return 'Deleting ' + name + '...';
|
|
1974
|
+
}
|
|
1975
|
+
}
|
|
1976
|
+
|
|
1977
|
+
if (message.includes('✓')) {
|
|
1978
|
+
const parts = message.split('✓')[1];
|
|
1979
|
+
if (parts) {
|
|
1980
|
+
const text = parts.trim().substring(0, 40);
|
|
1981
|
+
return '✓ ' + text;
|
|
1982
|
+
}
|
|
1983
|
+
}
|
|
1984
|
+
|
|
1985
|
+
if (message.includes('Level ')) {
|
|
1986
|
+
const parts = message.split('Level ')[1];
|
|
1987
|
+
if (parts) {
|
|
1988
|
+
const num = parts.trim().split(' ')[0];
|
|
1989
|
+
if (num) return 'Deployment Level ' + num;
|
|
1990
|
+
}
|
|
1991
|
+
}
|
|
1992
|
+
|
|
1993
|
+
if (message.includes('Generating')) {
|
|
1994
|
+
const parts = message.split('Generating')[1];
|
|
1995
|
+
if (parts) {
|
|
1996
|
+
const text = parts.trim().substring(0, 30);
|
|
1997
|
+
return 'Generating ' + text + '...';
|
|
1998
|
+
}
|
|
1999
|
+
}
|
|
2000
|
+
|
|
2001
|
+
if (message.includes('Uploading')) return 'Uploading secrets...';
|
|
2002
|
+
if (message.toLowerCase().includes('building')) return 'Building packages...';
|
|
2003
|
+
|
|
2004
|
+
return null;
|
|
2005
|
+
}
|
|
2006
|
+
|
|
1782
2007
|
// Safe DOM element creation helpers
|
|
1783
2008
|
function createAlert(type, content) {
|
|
1784
2009
|
const div = document.createElement('div');
|
|
@@ -2578,16 +2803,23 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2578
2803
|
const resourcePreview = document.getElementById('resource-preview');
|
|
2579
2804
|
const keysSavedInfo = document.getElementById('keys-saved-info');
|
|
2580
2805
|
const keysPath = document.getElementById('keys-path');
|
|
2806
|
+
const progressUI = document.getElementById('provision-progress-ui');
|
|
2581
2807
|
|
|
2582
2808
|
btn.disabled = true;
|
|
2809
|
+
btn.classList.add('hidden');
|
|
2583
2810
|
btnGotoDeploy.classList.add('hidden');
|
|
2584
2811
|
status.textContent = 'Running...';
|
|
2585
2812
|
status.className = 'status-badge status-running';
|
|
2586
|
-
|
|
2813
|
+
progressUI.classList.remove('hidden');
|
|
2814
|
+
log.classList.add('hidden'); // Log is hidden by default, toggled via button
|
|
2587
2815
|
resourcePreview.classList.add('hidden');
|
|
2588
2816
|
keysSavedInfo.classList.add('hidden');
|
|
2589
2817
|
output.textContent = '';
|
|
2590
2818
|
|
|
2819
|
+
let provisionCompleted = 0;
|
|
2820
|
+
const totalResources = 8; // D1 Core, D1 PII, KV Settings, KV Cache, KV Tokens, R2 (optional), Queues (optional), Keys
|
|
2821
|
+
updateProgressUI('provision', 0, totalResources, 'Initializing...');
|
|
2822
|
+
|
|
2591
2823
|
// Start polling for progress
|
|
2592
2824
|
let lastProgressLength = 0;
|
|
2593
2825
|
provisionPollInterval = setInterval(async () => {
|
|
@@ -2598,6 +2830,16 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2598
2830
|
const newMessages = statusResult.progress.slice(lastProgressLength);
|
|
2599
2831
|
newMessages.forEach(msg => {
|
|
2600
2832
|
output.textContent += msg + '\\n';
|
|
2833
|
+
// Update progress UI based on message content
|
|
2834
|
+
const taskInfo = parseProgressMessage(msg);
|
|
2835
|
+
if (taskInfo) {
|
|
2836
|
+
updateProgressUI('provision', provisionCompleted, totalResources, taskInfo);
|
|
2837
|
+
}
|
|
2838
|
+
// Count completed items (lines with checkmark)
|
|
2839
|
+
if (msg.includes('✓') || msg.includes('✅')) {
|
|
2840
|
+
provisionCompleted++;
|
|
2841
|
+
updateProgressUI('provision', provisionCompleted, totalResources, taskInfo || ('Completed ' + provisionCompleted + ' items'));
|
|
2842
|
+
}
|
|
2601
2843
|
});
|
|
2602
2844
|
lastProgressLength = statusResult.progress.length;
|
|
2603
2845
|
scrollToBottom(log);
|
|
@@ -2649,6 +2891,8 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2649
2891
|
}
|
|
2650
2892
|
|
|
2651
2893
|
if (result.success) {
|
|
2894
|
+
// Final progress update
|
|
2895
|
+
updateProgressUI('provision', totalResources, totalResources, '✅ Provisioning complete!');
|
|
2652
2896
|
output.textContent += '\\n✅ Provisioning complete!\\n';
|
|
2653
2897
|
scrollToBottom(log);
|
|
2654
2898
|
status.textContent = 'Complete';
|
|
@@ -2662,6 +2906,7 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2662
2906
|
|
|
2663
2907
|
// Update buttons
|
|
2664
2908
|
btn.textContent = 'Re-provision (Delete & Create)';
|
|
2909
|
+
btn.classList.remove('hidden');
|
|
2665
2910
|
btn.disabled = false;
|
|
2666
2911
|
btnGotoDeploy.classList.remove('hidden');
|
|
2667
2912
|
} else {
|
|
@@ -2678,6 +2923,7 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2678
2923
|
scrollToBottom(log);
|
|
2679
2924
|
status.textContent = 'Error';
|
|
2680
2925
|
status.className = 'status-badge status-error';
|
|
2926
|
+
btn.classList.remove('hidden');
|
|
2681
2927
|
btn.disabled = false;
|
|
2682
2928
|
resourcePreview.classList.remove('hidden');
|
|
2683
2929
|
}
|
|
@@ -2706,13 +2952,21 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2706
2952
|
const status = document.getElementById('deploy-status');
|
|
2707
2953
|
const log = document.getElementById('deploy-log');
|
|
2708
2954
|
const output = document.getElementById('deploy-output');
|
|
2955
|
+
const progressUI = document.getElementById('deploy-progress-ui');
|
|
2956
|
+
const readyText = document.getElementById('deploy-ready-text');
|
|
2709
2957
|
|
|
2710
2958
|
btn.disabled = true;
|
|
2959
|
+
btn.classList.add('hidden');
|
|
2711
2960
|
status.textContent = 'Deploying...';
|
|
2712
2961
|
status.className = 'status-badge status-running';
|
|
2713
|
-
|
|
2962
|
+
readyText.classList.add('hidden');
|
|
2963
|
+
progressUI.classList.remove('hidden');
|
|
2964
|
+
log.classList.add('hidden'); // Log is hidden by default, toggled via button
|
|
2714
2965
|
output.textContent = 'Starting deployment...\\n\\n';
|
|
2715
|
-
|
|
2966
|
+
|
|
2967
|
+
let completedCount = 0;
|
|
2968
|
+
const totalComponents = 10; // Approximate total components
|
|
2969
|
+
updateProgressUI('deploy', 0, totalComponents, 'Initializing...');
|
|
2716
2970
|
|
|
2717
2971
|
try {
|
|
2718
2972
|
// Generate wrangler configs first
|
|
@@ -2730,10 +2984,25 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2730
2984
|
scrollToBottom(log);
|
|
2731
2985
|
|
|
2732
2986
|
// Poll for status updates
|
|
2987
|
+
let lastProgressLength = 0;
|
|
2733
2988
|
const pollInterval = setInterval(async () => {
|
|
2734
2989
|
const statusResult = await api('/deploy/status');
|
|
2735
|
-
if (statusResult.progress && statusResult.progress.length >
|
|
2736
|
-
|
|
2990
|
+
if (statusResult.progress && statusResult.progress.length > lastProgressLength) {
|
|
2991
|
+
const newMessages = statusResult.progress.slice(lastProgressLength);
|
|
2992
|
+
newMessages.forEach(msg => {
|
|
2993
|
+
output.textContent += msg + '\\n';
|
|
2994
|
+
// Update progress UI based on message content
|
|
2995
|
+
const taskInfo = parseProgressMessage(msg);
|
|
2996
|
+
if (taskInfo) {
|
|
2997
|
+
updateProgressUI('deploy', completedCount, totalComponents, taskInfo);
|
|
2998
|
+
}
|
|
2999
|
+
// Count completed items (lines with checkmark)
|
|
3000
|
+
if (msg.includes('✓') || msg.includes('✅')) {
|
|
3001
|
+
completedCount++;
|
|
3002
|
+
updateProgressUI('deploy', completedCount, totalComponents, taskInfo || ('Completed ' + completedCount + ' items'));
|
|
3003
|
+
}
|
|
3004
|
+
});
|
|
3005
|
+
lastProgressLength = statusResult.progress.length;
|
|
2737
3006
|
scrollToBottom(log);
|
|
2738
3007
|
}
|
|
2739
3008
|
}, 1000);
|
|
@@ -2749,6 +3018,8 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2749
3018
|
clearInterval(pollInterval);
|
|
2750
3019
|
|
|
2751
3020
|
if (result.success) {
|
|
3021
|
+
// Final progress update
|
|
3022
|
+
updateProgressUI('deploy', totalComponents, totalComponents, '✓ Deployment complete!');
|
|
2752
3023
|
output.textContent += '\\n✓ Deployment complete!\\n';
|
|
2753
3024
|
scrollToBottom(log);
|
|
2754
3025
|
|
|
@@ -3510,9 +3781,11 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3510
3781
|
document.getElementById('delete-pages').checked = true;
|
|
3511
3782
|
|
|
3512
3783
|
// Reset UI state
|
|
3784
|
+
document.getElementById('delete-options-section').classList.remove('hidden');
|
|
3513
3785
|
document.getElementById('delete-log').classList.add('hidden');
|
|
3514
3786
|
document.getElementById('delete-result').classList.add('hidden');
|
|
3515
|
-
document.getElementById('delete-result').
|
|
3787
|
+
document.getElementById('delete-result').textContent = '';
|
|
3788
|
+
document.getElementById('btn-confirm-delete').classList.remove('hidden');
|
|
3516
3789
|
document.getElementById('btn-confirm-delete').disabled = false;
|
|
3517
3790
|
|
|
3518
3791
|
showSection('envDelete');
|
|
@@ -3636,9 +3909,13 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3636
3909
|
const log = document.getElementById('delete-log');
|
|
3637
3910
|
const output = document.getElementById('delete-output');
|
|
3638
3911
|
const result = document.getElementById('delete-result');
|
|
3912
|
+
const progressUI = document.getElementById('delete-progress-ui');
|
|
3639
3913
|
|
|
3640
3914
|
btn.disabled = true;
|
|
3641
|
-
|
|
3915
|
+
btn.classList.add('hidden');
|
|
3916
|
+
document.getElementById('delete-options-section').classList.add('hidden');
|
|
3917
|
+
progressUI.classList.remove('hidden');
|
|
3918
|
+
log.classList.add('hidden'); // Log is hidden by default, toggled via button
|
|
3642
3919
|
result.classList.add('hidden');
|
|
3643
3920
|
output.textContent = '';
|
|
3644
3921
|
|
|
@@ -3651,6 +3928,11 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3651
3928
|
deletePages: document.getElementById('delete-pages').checked,
|
|
3652
3929
|
};
|
|
3653
3930
|
|
|
3931
|
+
// Count selected options for progress tracking
|
|
3932
|
+
let deleteCompleted = 0;
|
|
3933
|
+
const totalToDelete = Object.values(deleteOptions).filter(v => v).length;
|
|
3934
|
+
updateProgressUI('delete', 0, totalToDelete, 'Starting deletion...');
|
|
3935
|
+
|
|
3654
3936
|
// Poll for progress
|
|
3655
3937
|
let lastProgressLength = 0;
|
|
3656
3938
|
const pollInterval = setInterval(async () => {
|
|
@@ -3660,9 +3942,19 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3660
3942
|
const newMessages = statusResult.progress.slice(lastProgressLength);
|
|
3661
3943
|
newMessages.forEach(msg => {
|
|
3662
3944
|
output.textContent += msg + '\\n';
|
|
3945
|
+
// Update progress UI based on message content
|
|
3946
|
+
const taskInfo = parseProgressMessage(msg);
|
|
3947
|
+
if (taskInfo) {
|
|
3948
|
+
updateProgressUI('delete', deleteCompleted, totalToDelete, taskInfo);
|
|
3949
|
+
}
|
|
3950
|
+
// Count completed items (lines with checkmark)
|
|
3951
|
+
if (msg.includes('✓') || msg.includes('✅') || msg.includes('Deleted')) {
|
|
3952
|
+
deleteCompleted++;
|
|
3953
|
+
updateProgressUI('delete', deleteCompleted, totalToDelete, taskInfo || ('Deleted ' + deleteCompleted + ' items'));
|
|
3954
|
+
}
|
|
3663
3955
|
});
|
|
3664
3956
|
lastProgressLength = statusResult.progress.length;
|
|
3665
|
-
log
|
|
3957
|
+
scrollToBottom(log);
|
|
3666
3958
|
}
|
|
3667
3959
|
} catch (e) {}
|
|
3668
3960
|
}, 500);
|
|
@@ -3683,6 +3975,8 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3683
3975
|
result.classList.remove('hidden');
|
|
3684
3976
|
|
|
3685
3977
|
if (deleteResult.success) {
|
|
3978
|
+
// Final progress update
|
|
3979
|
+
updateProgressUI('delete', totalToDelete, totalToDelete, '✅ Deletion complete!');
|
|
3686
3980
|
result.textContent = '';
|
|
3687
3981
|
result.appendChild(createAlert('success', '✅ Environment deleted successfully!'));
|
|
3688
3982
|
|
|
@@ -3694,6 +3988,7 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3694
3988
|
} else {
|
|
3695
3989
|
result.textContent = '';
|
|
3696
3990
|
result.appendChild(createAlert('error', '❌ Some errors occurred: ' + (deleteResult.errors || []).join(', ')));
|
|
3991
|
+
btn.classList.remove('hidden');
|
|
3697
3992
|
btn.disabled = false;
|
|
3698
3993
|
}
|
|
3699
3994
|
} catch (error) {
|
|
@@ -3701,6 +3996,7 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3701
3996
|
result.classList.remove('hidden');
|
|
3702
3997
|
result.textContent = '';
|
|
3703
3998
|
result.appendChild(createAlert('error', '❌ Error: ' + error.message));
|
|
3999
|
+
btn.classList.remove('hidden');
|
|
3704
4000
|
btn.disabled = false;
|
|
3705
4001
|
}
|
|
3706
4002
|
});
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAuxDoB,SAAS;0BACZ,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4oEhC,CAAC;AACT,CAAC"}
|