@arcblock/did-connect-service 4.1.33 → 4.1.34

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 (60) hide show
  1. package/dist/_generated/asset-bytes.js +1 -1
  2. package/dist/_generated/asset-manifest.js +4 -4
  3. package/dist/_generated/login-bundle-string.d.ts +1 -1
  4. package/dist/_generated/login-bundle-string.d.ts.map +1 -1
  5. package/dist/_generated/login-bundle-string.js +1 -1
  6. package/dist/_generated/login-bundle-string.js.map +1 -1
  7. package/dist/assets/admin-core.667d2962.js +2094 -0
  8. package/dist/assets/admin-core.69147606.js +2143 -0
  9. package/dist/assets/admin-core.880e42df.js +2090 -0
  10. package/dist/assets/admin-extra.979f5e56.js +2605 -0
  11. package/dist/assets/admin.21a6c77e.css +2324 -0
  12. package/dist/assets/admin.76aa0931.css +2323 -0
  13. package/dist/assets/login.566f858e.js +720 -0
  14. package/dist/pages/admin/scripts/dialog.d.ts +1 -1
  15. package/dist/pages/admin/scripts/dialog.d.ts.map +1 -1
  16. package/dist/pages/admin/scripts/dialog.js +29 -2
  17. package/dist/pages/admin/scripts/dialog.js.map +1 -1
  18. package/dist/pages/admin/scripts/utils.d.ts +1 -1
  19. package/dist/pages/admin/scripts/utils.d.ts.map +1 -1
  20. package/dist/pages/admin/scripts/utils.js +35 -0
  21. package/dist/pages/admin/scripts/utils.js.map +1 -1
  22. package/dist/pages/admin/styles.d.ts +1 -1
  23. package/dist/pages/admin/styles.d.ts.map +1 -1
  24. package/dist/pages/admin/styles.js +11 -0
  25. package/dist/pages/admin/styles.js.map +1 -1
  26. package/dist/pages/admin/tab-access.d.ts.map +1 -1
  27. package/dist/pages/admin/tab-access.js +6 -0
  28. package/dist/pages/admin/tab-access.js.map +1 -1
  29. package/dist/pages/admin/tab-appearance.d.ts.map +1 -1
  30. package/dist/pages/admin/tab-appearance.js +4 -0
  31. package/dist/pages/admin/tab-appearance.js.map +1 -1
  32. package/dist/pages/admin/tab-branding.d.ts.map +1 -1
  33. package/dist/pages/admin/tab-branding.js +4 -0
  34. package/dist/pages/admin/tab-branding.js.map +1 -1
  35. package/dist/pages/admin/tab-federation.d.ts +1 -1
  36. package/dist/pages/admin/tab-federation.d.ts.map +1 -1
  37. package/dist/pages/admin/tab-federation.js +21 -11
  38. package/dist/pages/admin/tab-federation.js.map +1 -1
  39. package/dist/pages/admin/tab-invitations.d.ts +1 -1
  40. package/dist/pages/admin/tab-invitations.d.ts.map +1 -1
  41. package/dist/pages/admin/tab-invitations.js +4 -0
  42. package/dist/pages/admin/tab-invitations.js.map +1 -1
  43. package/dist/pages/admin/tab-members.d.ts +1 -1
  44. package/dist/pages/admin/tab-members.d.ts.map +1 -1
  45. package/dist/pages/admin/tab-members.js +7 -0
  46. package/dist/pages/admin/tab-members.js.map +1 -1
  47. package/dist/pages/admin/tab-profile-accounts.d.ts.map +1 -1
  48. package/dist/pages/admin/tab-profile-accounts.js +10 -0
  49. package/dist/pages/admin/tab-profile-accounts.js.map +1 -1
  50. package/dist/pages/admin/tab-profile.d.ts +1 -1
  51. package/dist/pages/admin/tab-profile.d.ts.map +1 -1
  52. package/dist/pages/admin/tab-profile.js +6 -0
  53. package/dist/pages/admin/tab-profile.js.map +1 -1
  54. package/dist/pages/admin/tab-settings.d.ts.map +1 -1
  55. package/dist/pages/admin/tab-settings.js +11 -3
  56. package/dist/pages/admin/tab-settings.js.map +1 -1
  57. package/dist/pages/admin-instances-page.d.ts.map +1 -1
  58. package/dist/pages/admin-instances-page.js +5 -1
  59. package/dist/pages/admin-instances-page.js.map +1 -1
  60. package/package.json +3 -3
@@ -1079,5 +1079,15 @@ function bufferToBase64url(buf) {
1079
1079
  for (var i = 0; i < bytes.length; i++) str += String.fromCharCode(bytes[i]);
1080
1080
  return btoa(str).replace(/\\+/g, "-").replace(/\\//g, "_").replace(/=+$/, "");
1081
1081
  }
1082
+
1083
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
1084
+ // OAuth/wallet bind flows are single-shot by construction (once-listeners,
1085
+ // polling stopped before the completing POST) and are not wrapped.
1086
+ unbindOAuth = submitOnce(unbindOAuth);
1087
+ unbindWallet = submitOnce(unbindWallet);
1088
+ addPasskey = submitOnce(addPasskey);
1089
+ removePasskey = submitOnce(removePasskey);
1090
+ openRenamePasskeyDialog = submitOnce(openRenamePasskeyDialog);
1091
+ startAccountMerge = submitOnce(startAccountMerge);
1082
1092
  `)();
1083
1093
  //# sourceMappingURL=tab-profile-accounts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab-profile-accounts.js","sourceRoot":"","sources":["../../../src/pages/admin/tab-profile-accounts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAIvE,uDAAuD;AACvD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;AAE/D,4DAA4D;AAC5D,SAAS,gBAAgB;IACvB,MAAM,GAAG,GAA2B;QAClC,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,eAAe;QACvB,aAAa,EAAE,eAAe;QAC9B,KAAK,EAAE,UAAU;KAClB,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,CAAM;IAC9C,OAAO,UAAU,CAAC;;;0CAGsB,CAAC,CAAC,2BAA2B,CAAC;;;;;CAKvE,CAAC;AACF,CAAC;AAED,mFAAmF;AACnF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;;;;;wBAKjD,gBAAgB,EAAE;0BAChB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;EAC7D,uBAAuB,CAAC,QAAQ,EAAE;EAClC,0BAA0B,CAAC,QAAQ,EAAE;EACrC,2BAA2B,CAAC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2gCvC,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"tab-profile-accounts.js","sourceRoot":"","sources":["../../../src/pages/admin/tab-profile-accounts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAIvE,uDAAuD;AACvD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;AAE/D,4DAA4D;AAC5D,SAAS,gBAAgB;IACvB,MAAM,GAAG,GAA2B;QAClC,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,eAAe;QACvB,aAAa,EAAE,eAAe;QAC9B,KAAK,EAAE,UAAU;KAClB,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,CAAM;IAC9C,OAAO,UAAU,CAAC;;;0CAGsB,CAAC,CAAC,2BAA2B,CAAC;;;;;CAKvE,CAAC;AACF,CAAC;AAED,mFAAmF;AACnF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;;;;;wBAKjD,gBAAgB,EAAE;0BAChB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;EAC7D,uBAAuB,CAAC,QAAQ,EAAE;EAClC,0BAA0B,CAAC,QAAQ,EAAE;EACrC,2BAA2B,CAAC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqhCvC,CAAC,EAAE,CAAC"}
@@ -3,6 +3,6 @@
3
3
  */
4
4
  type TFn = (key: string, params?: Record<string, string>) => string;
5
5
  export declare function profileTabHtml(t: TFn): string;
6
- export declare const PROFILE_TAB_SCRIPT = "\nvar profileData = null;\n\nasync function loadProfile() {\n document.getElementById(\"profile-card-skeleton\").style.display = \"\";\n document.getElementById(\"profile-card-content\").style.display = \"none\";\n var data = await api(\"GET\", \"/profile\");\n document.getElementById(\"profile-card-skeleton\").style.display = \"none\";\n document.getElementById(\"profile-card-content\").style.display = \"\";\n if (!data.ok) return;\n profileData = data.user;\n renderProfile(data.user);\n}\n\nfunction renderProfile(user) {\n var avatarEl = document.getElementById(\"profile-avatar\");\n if (user.avatar) {\n avatarEl.innerHTML = '<img src=\"' + escapeHtml(user.avatar) + '\" onerror=\"this.style.display=\\'none\\';this.nextSibling.style.display=\\'flex\\'\">'\n + '<span class=\"avatar-fallback\" style=\"display:none\">' + escapeHtml(initials(user.fullName)) + '</span>'\n + '<div class=\"avatar-overlay\"><span>Edit</span></div>';\n } else {\n avatarEl.innerHTML = '<span class=\"avatar-fallback\">' + escapeHtml(initials(user.fullName)) + '</span>'\n + '<div class=\"avatar-overlay\"><span>Edit</span></div>';\n }\n\n document.getElementById(\"profile-display-name\").textContent = user.fullName || __t(\"profile.unnamed\");\n\n var role = user.role || \"guest\";\n var badge = document.getElementById(\"profile-role-badge\");\n badge.textContent = __t(\"common.\" + role);\n badge.className = \"badge badge-\" + role;\n\n document.getElementById(\"profile-did\").setAttribute(\"did\", user.did);\n\n document.getElementById(\"profile-name\").value = user.fullName || \"\";\n cancelEditName();\n\n document.getElementById(\"profile-email-display\").textContent = user.email || \"\u2014\";\n\n var emailBadge = document.getElementById(\"profile-email-badge\");\n var emailVerifyBtn = document.getElementById(\"profile-email-verify-btn\");\n if (user.email) {\n emailBadge.style.display = \"\";\n if (user.emailVerified) {\n emailBadge.textContent = __t(\"profile.emailVerified\");\n emailBadge.className = \"badge badge-verified\";\n emailVerifyBtn.style.display = \"none\";\n } else {\n emailBadge.textContent = __t(\"profile.emailUnverified\");\n emailBadge.className = \"badge badge-unverified\";\n emailVerifyBtn.style.display = \"\";\n }\n } else {\n emailBadge.style.display = \"none\";\n emailVerifyBtn.style.display = \"none\";\n }\n\n if (user.createdAt) {\n document.getElementById(\"profile-joined-cell\").style.display = \"\";\n document.getElementById(\"profile-joined-value\").textContent = absoluteTime(user.createdAt);\n }\n}\n\nfunction startEditName() {\n document.getElementById(\"profile-header-info-view\").style.display = \"none\";\n document.getElementById(\"profile-name-editor\").style.display = \"\";\n document.getElementById(\"profile-name\").focus();\n}\n\nfunction cancelEditName() {\n document.getElementById(\"profile-name-editor\").style.display = \"none\";\n document.getElementById(\"profile-header-info-view\").style.display = \"\";\n if (profileData) document.getElementById(\"profile-name\").value = profileData.fullName || \"\";\n}\n\nasync function saveProfile() {\n var body = {\n fullName: document.getElementById(\"profile-name\").value.trim(),\n };\n var data = await api(\"PUT\", \"/profile\", body);\n if (data.ok) {\n profileData = data.user;\n renderProfile(data.user);\n showToast(__t(\"profile.updated\"), \"success\");\n var headerName = document.getElementById(\"header-user-name\");\n if (headerName) headerName.textContent = data.user.fullName || truncateDid(data.user.did);\n }\n}\n\nasync function changeEmail() {\n var currentEmail = profileData ? profileData.email || \"\" : \"\";\n var newEmail = await promptDialog({\n title: __t(\"profile.changeEmailTitle\"),\n message: __t(\"profile.changeEmailMsg\"),\n placeholder: __t(\"profile.emailPlaceholder\"),\n defaultValue: currentEmail,\n inputType: \"email\",\n });\n if (!newEmail || newEmail === currentEmail) return;\n var result = await api(\"PUT\", \"/profile/email\", { email: newEmail });\n if (result.ok) {\n profileData = result.user;\n renderProfile(result.user);\n showToast(__t(\"profile.emailUpdated\"), \"success\");\n }\n}\n\nvar _lastVerifySentAt = 0;\n\nfunction verifyEmail() {\n var email = profileData ? profileData.email : \"\";\n if (!email) return;\n\n var verifyBtn = document.getElementById(\"profile-email-verify-btn\");\n verifyBtn.disabled = true;\n\n // Build or reuse dialog\n var d = document.getElementById(\"verify-email-dialog\");\n if (!d) {\n d = document.createElement(\"dialog\");\n d.id = \"verify-email-dialog\";\n d.innerHTML = '<div class=\"dialog-content\">'\n + '<h3 id=\"verify-title\"></h3>'\n + '<p id=\"verify-message\" class=\"dialog-desc\"></p>'\n + '<input class=\"input\" id=\"verify-input\" placeholder=\"000000\" style=\"margin-top:12px;\" />'\n + '</div>'\n + '<div class=\"dialog-actions\">'\n + '<button class=\"btn-text\" id=\"verify-resend\" style=\"margin-right:auto\"></button>'\n + '<button class=\"btn btn-secondary\" id=\"verify-cancel\">' + __t(\"common.cancel\") + '</button>'\n + '<button class=\"btn\" id=\"verify-ok\">' + __t(\"common.confirm\") + '</button>'\n + '</div>';\n document.body.appendChild(d);\n }\n\n var titleEl = document.getElementById(\"verify-title\");\n var msgEl = document.getElementById(\"verify-message\");\n var inputEl = document.getElementById(\"verify-input\");\n var okBtn = document.getElementById(\"verify-ok\");\n var cancelBtn = document.getElementById(\"verify-cancel\");\n var resendBtn = document.getElementById(\"verify-resend\");\n var countdownTimer = null;\n\n titleEl.textContent = __t(\"profile.verifyCode\");\n inputEl.value = \"\";\n\n function cleanup() {\n if (countdownTimer) clearInterval(countdownTimer);\n verifyBtn.disabled = false;\n d.close();\n }\n\n function remainingCooldown() {\n if (!_lastVerifySentAt) return 0;\n return Math.max(0, Math.ceil((60000 - (Date.now() - _lastVerifySentAt)) / 1000));\n }\n\n function syncResendBtn() {\n var remain = remainingCooldown();\n resendBtn.style.display = \"\";\n if (remain > 0) {\n resendBtn.disabled = true;\n resendBtn.textContent = __t(\"profile.emailResendCountdown\", { seconds: remain });\n } else {\n resendBtn.disabled = false;\n resendBtn.textContent = __t(\"profile.emailResendBtn\");\n }\n }\n\n function startCountdown() {\n if (countdownTimer) clearInterval(countdownTimer);\n syncResendBtn();\n countdownTimer = setInterval(function() {\n if (remainingCooldown() <= 0) {\n clearInterval(countdownTimer);\n countdownTimer = null;\n }\n syncResendBtn();\n }, 1000);\n }\n\n function sendCode() {\n msgEl.textContent = __t(\"profile.emailSending\");\n inputEl.disabled = true;\n okBtn.disabled = true;\n resendBtn.style.display = \"none\";\n if (countdownTimer) { clearInterval(countdownTimer); countdownTimer = null; }\n\n api(\"POST\", \"/profile/email/verify\").then(function(sendResult) {\n if (!sendResult.ok) {\n msgEl.textContent = sendResult.error || __t(\"profile.emailSendFailed\");\n // If there's remaining cooldown, show countdown; otherwise show resend\n if (remainingCooldown() > 0) {\n startCountdown();\n } else {\n resendBtn.style.display = \"\";\n resendBtn.disabled = false;\n resendBtn.textContent = __t(\"profile.emailResendBtn\");\n }\n return;\n }\n _lastVerifySentAt = Date.now();\n msgEl.textContent = __t(\"profile.verifyCodeMsg\", { email: email });\n inputEl.disabled = false;\n okBtn.disabled = false;\n inputEl.focus();\n startCountdown();\n });\n }\n\n cancelBtn.onclick = function() { cleanup(); };\n d.onclose = function() {\n if (countdownTimer) clearInterval(countdownTimer);\n verifyBtn.disabled = false;\n };\n\n okBtn.onclick = function() {\n var code = inputEl.value.trim();\n if (!code) return;\n okBtn.disabled = true;\n api(\"PUT\", \"/profile/email/verify\", { code: code }).then(function(result) {\n if (result.ok) {\n cleanup();\n profileData = result.user;\n renderProfile(result.user);\n showToast(__t(\"profile.emailVerifiedSuccess\"), \"success\");\n } else {\n okBtn.disabled = false;\n msgEl.textContent = result.error || __t(\"profile.emailVerifyFailed\");\n }\n });\n };\n\n resendBtn.onclick = function() { sendCode(); };\n\n d.showModal();\n\n // If still in cooldown from a previous send, skip sending and show code input directly\n var remain = remainingCooldown();\n if (remain > 0) {\n msgEl.textContent = __t(\"profile.verifyCodeMsg\", { email: email });\n inputEl.disabled = false;\n okBtn.disabled = false;\n inputEl.focus();\n startCountdown();\n } else {\n sendCode();\n }\n}\n\nfunction triggerAvatarUpload() {\n document.getElementById(\"avatar-file-input\").click();\n}\n\nfunction resizeImage(file, maxSize) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n var canvas = document.createElement(\"canvas\");\n canvas.width = canvas.height = maxSize;\n var ctx = canvas.getContext(\"2d\");\n var s = Math.min(img.width, img.height);\n var sx = (img.width - s) / 2;\n var sy = (img.height - s) / 2;\n ctx.drawImage(img, sx, sy, s, s, 0, 0, maxSize, maxSize);\n resolve(canvas.toDataURL(\"image/jpeg\", 0.85));\n URL.revokeObjectURL(img.src);\n };\n img.onerror = function() {\n URL.revokeObjectURL(img.src);\n reject(new Error(\"Failed to load image\"));\n };\n img.src = URL.createObjectURL(file);\n });\n}\n\nasync function handleAvatarFile(input) {\n var file = input.files[0];\n if (!file) return;\n if (file.size > 10 * 1024 * 1024) {\n showToast(\"Image must be under 10MB\", \"error\");\n input.value = \"\";\n return;\n }\n try {\n var base64 = await resizeImage(file, 200);\n var data = await api(\"PUT\", \"/profile/avatar\", { avatar: base64 });\n if (data.ok) {\n showToast(\"Avatar updated\", \"success\");\n loadProfile();\n }\n } catch (e) {\n showToast(\"Failed to process image\", \"error\");\n }\n input.value = \"\";\n}\n\nasync function removeAvatar() {\n var ok = await confirmDialog({ title: \"Remove Avatar\", message: \"Remove your avatar? Your profile will show a default avatar.\", confirmLabel: \"Remove\" });\n if (!ok) return;\n var data = await api(\"DELETE\", \"/profile/avatar\");\n if (data.ok) {\n showToast(\"Avatar removed\", \"success\");\n loadProfile();\n }\n}\n\nregisterTab(\"profile\", function() {\n loadProfile();\n if (typeof loadConnectedAccounts === \"function\") loadConnectedAccounts();\n});\n";
6
+ export declare const PROFILE_TAB_SCRIPT = "\nvar profileData = null;\n\nasync function loadProfile() {\n document.getElementById(\"profile-card-skeleton\").style.display = \"\";\n document.getElementById(\"profile-card-content\").style.display = \"none\";\n var data = await api(\"GET\", \"/profile\");\n document.getElementById(\"profile-card-skeleton\").style.display = \"none\";\n document.getElementById(\"profile-card-content\").style.display = \"\";\n if (!data.ok) return;\n profileData = data.user;\n renderProfile(data.user);\n}\n\nfunction renderProfile(user) {\n var avatarEl = document.getElementById(\"profile-avatar\");\n if (user.avatar) {\n avatarEl.innerHTML = '<img src=\"' + escapeHtml(user.avatar) + '\" onerror=\"this.style.display=\\'none\\';this.nextSibling.style.display=\\'flex\\'\">'\n + '<span class=\"avatar-fallback\" style=\"display:none\">' + escapeHtml(initials(user.fullName)) + '</span>'\n + '<div class=\"avatar-overlay\"><span>Edit</span></div>';\n } else {\n avatarEl.innerHTML = '<span class=\"avatar-fallback\">' + escapeHtml(initials(user.fullName)) + '</span>'\n + '<div class=\"avatar-overlay\"><span>Edit</span></div>';\n }\n\n document.getElementById(\"profile-display-name\").textContent = user.fullName || __t(\"profile.unnamed\");\n\n var role = user.role || \"guest\";\n var badge = document.getElementById(\"profile-role-badge\");\n badge.textContent = __t(\"common.\" + role);\n badge.className = \"badge badge-\" + role;\n\n document.getElementById(\"profile-did\").setAttribute(\"did\", user.did);\n\n document.getElementById(\"profile-name\").value = user.fullName || \"\";\n cancelEditName();\n\n document.getElementById(\"profile-email-display\").textContent = user.email || \"\u2014\";\n\n var emailBadge = document.getElementById(\"profile-email-badge\");\n var emailVerifyBtn = document.getElementById(\"profile-email-verify-btn\");\n if (user.email) {\n emailBadge.style.display = \"\";\n if (user.emailVerified) {\n emailBadge.textContent = __t(\"profile.emailVerified\");\n emailBadge.className = \"badge badge-verified\";\n emailVerifyBtn.style.display = \"none\";\n } else {\n emailBadge.textContent = __t(\"profile.emailUnverified\");\n emailBadge.className = \"badge badge-unverified\";\n emailVerifyBtn.style.display = \"\";\n }\n } else {\n emailBadge.style.display = \"none\";\n emailVerifyBtn.style.display = \"none\";\n }\n\n if (user.createdAt) {\n document.getElementById(\"profile-joined-cell\").style.display = \"\";\n document.getElementById(\"profile-joined-value\").textContent = absoluteTime(user.createdAt);\n }\n}\n\nfunction startEditName() {\n document.getElementById(\"profile-header-info-view\").style.display = \"none\";\n document.getElementById(\"profile-name-editor\").style.display = \"\";\n document.getElementById(\"profile-name\").focus();\n}\n\nfunction cancelEditName() {\n document.getElementById(\"profile-name-editor\").style.display = \"none\";\n document.getElementById(\"profile-header-info-view\").style.display = \"\";\n if (profileData) document.getElementById(\"profile-name\").value = profileData.fullName || \"\";\n}\n\nasync function saveProfile() {\n var body = {\n fullName: document.getElementById(\"profile-name\").value.trim(),\n };\n var data = await api(\"PUT\", \"/profile\", body);\n if (data.ok) {\n profileData = data.user;\n renderProfile(data.user);\n showToast(__t(\"profile.updated\"), \"success\");\n var headerName = document.getElementById(\"header-user-name\");\n if (headerName) headerName.textContent = data.user.fullName || truncateDid(data.user.did);\n }\n}\n\nasync function changeEmail() {\n var currentEmail = profileData ? profileData.email || \"\" : \"\";\n var newEmail = await promptDialog({\n title: __t(\"profile.changeEmailTitle\"),\n message: __t(\"profile.changeEmailMsg\"),\n placeholder: __t(\"profile.emailPlaceholder\"),\n defaultValue: currentEmail,\n inputType: \"email\",\n });\n if (!newEmail || newEmail === currentEmail) return;\n var result = await api(\"PUT\", \"/profile/email\", { email: newEmail });\n if (result.ok) {\n profileData = result.user;\n renderProfile(result.user);\n showToast(__t(\"profile.emailUpdated\"), \"success\");\n }\n}\n\nvar _lastVerifySentAt = 0;\n\nfunction verifyEmail() {\n var email = profileData ? profileData.email : \"\";\n if (!email) return;\n\n var verifyBtn = document.getElementById(\"profile-email-verify-btn\");\n verifyBtn.disabled = true;\n\n // Build or reuse dialog\n var d = document.getElementById(\"verify-email-dialog\");\n if (!d) {\n d = document.createElement(\"dialog\");\n d.id = \"verify-email-dialog\";\n d.innerHTML = '<div class=\"dialog-content\">'\n + '<h3 id=\"verify-title\"></h3>'\n + '<p id=\"verify-message\" class=\"dialog-desc\"></p>'\n + '<input class=\"input\" id=\"verify-input\" placeholder=\"000000\" style=\"margin-top:12px;\" />'\n + '</div>'\n + '<div class=\"dialog-actions\">'\n + '<button class=\"btn-text\" id=\"verify-resend\" style=\"margin-right:auto\"></button>'\n + '<button class=\"btn btn-secondary\" id=\"verify-cancel\">' + __t(\"common.cancel\") + '</button>'\n + '<button class=\"btn\" id=\"verify-ok\">' + __t(\"common.confirm\") + '</button>'\n + '</div>';\n document.body.appendChild(d);\n }\n\n var titleEl = document.getElementById(\"verify-title\");\n var msgEl = document.getElementById(\"verify-message\");\n var inputEl = document.getElementById(\"verify-input\");\n var okBtn = document.getElementById(\"verify-ok\");\n var cancelBtn = document.getElementById(\"verify-cancel\");\n var resendBtn = document.getElementById(\"verify-resend\");\n var countdownTimer = null;\n\n titleEl.textContent = __t(\"profile.verifyCode\");\n inputEl.value = \"\";\n\n function cleanup() {\n if (countdownTimer) clearInterval(countdownTimer);\n verifyBtn.disabled = false;\n d.close();\n }\n\n function remainingCooldown() {\n if (!_lastVerifySentAt) return 0;\n return Math.max(0, Math.ceil((60000 - (Date.now() - _lastVerifySentAt)) / 1000));\n }\n\n function syncResendBtn() {\n var remain = remainingCooldown();\n resendBtn.style.display = \"\";\n if (remain > 0) {\n resendBtn.disabled = true;\n resendBtn.textContent = __t(\"profile.emailResendCountdown\", { seconds: remain });\n } else {\n resendBtn.disabled = false;\n resendBtn.textContent = __t(\"profile.emailResendBtn\");\n }\n }\n\n function startCountdown() {\n if (countdownTimer) clearInterval(countdownTimer);\n syncResendBtn();\n countdownTimer = setInterval(function() {\n if (remainingCooldown() <= 0) {\n clearInterval(countdownTimer);\n countdownTimer = null;\n }\n syncResendBtn();\n }, 1000);\n }\n\n function sendCode() {\n msgEl.textContent = __t(\"profile.emailSending\");\n inputEl.disabled = true;\n okBtn.disabled = true;\n resendBtn.style.display = \"none\";\n if (countdownTimer) { clearInterval(countdownTimer); countdownTimer = null; }\n\n api(\"POST\", \"/profile/email/verify\").then(function(sendResult) {\n if (!sendResult.ok) {\n msgEl.textContent = sendResult.error || __t(\"profile.emailSendFailed\");\n // If there's remaining cooldown, show countdown; otherwise show resend\n if (remainingCooldown() > 0) {\n startCountdown();\n } else {\n resendBtn.style.display = \"\";\n resendBtn.disabled = false;\n resendBtn.textContent = __t(\"profile.emailResendBtn\");\n }\n return;\n }\n _lastVerifySentAt = Date.now();\n msgEl.textContent = __t(\"profile.verifyCodeMsg\", { email: email });\n inputEl.disabled = false;\n okBtn.disabled = false;\n inputEl.focus();\n startCountdown();\n });\n }\n\n cancelBtn.onclick = function() { cleanup(); };\n d.onclose = function() {\n if (countdownTimer) clearInterval(countdownTimer);\n verifyBtn.disabled = false;\n };\n\n okBtn.onclick = function() {\n var code = inputEl.value.trim();\n if (!code) return;\n okBtn.disabled = true;\n api(\"PUT\", \"/profile/email/verify\", { code: code }).then(function(result) {\n if (result.ok) {\n cleanup();\n profileData = result.user;\n renderProfile(result.user);\n showToast(__t(\"profile.emailVerifiedSuccess\"), \"success\");\n } else {\n okBtn.disabled = false;\n msgEl.textContent = result.error || __t(\"profile.emailVerifyFailed\");\n }\n });\n };\n\n resendBtn.onclick = function() { sendCode(); };\n\n d.showModal();\n\n // If still in cooldown from a previous send, skip sending and show code input directly\n var remain = remainingCooldown();\n if (remain > 0) {\n msgEl.textContent = __t(\"profile.verifyCodeMsg\", { email: email });\n inputEl.disabled = false;\n okBtn.disabled = false;\n inputEl.focus();\n startCountdown();\n } else {\n sendCode();\n }\n}\n\nfunction triggerAvatarUpload() {\n document.getElementById(\"avatar-file-input\").click();\n}\n\nfunction resizeImage(file, maxSize) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n img.onload = function() {\n var canvas = document.createElement(\"canvas\");\n canvas.width = canvas.height = maxSize;\n var ctx = canvas.getContext(\"2d\");\n var s = Math.min(img.width, img.height);\n var sx = (img.width - s) / 2;\n var sy = (img.height - s) / 2;\n ctx.drawImage(img, sx, sy, s, s, 0, 0, maxSize, maxSize);\n resolve(canvas.toDataURL(\"image/jpeg\", 0.85));\n URL.revokeObjectURL(img.src);\n };\n img.onerror = function() {\n URL.revokeObjectURL(img.src);\n reject(new Error(\"Failed to load image\"));\n };\n img.src = URL.createObjectURL(file);\n });\n}\n\nasync function handleAvatarFile(input) {\n var file = input.files[0];\n if (!file) return;\n if (file.size > 10 * 1024 * 1024) {\n showToast(\"Image must be under 10MB\", \"error\");\n input.value = \"\";\n return;\n }\n try {\n var base64 = await resizeImage(file, 200);\n var data = await api(\"PUT\", \"/profile/avatar\", { avatar: base64 });\n if (data.ok) {\n showToast(\"Avatar updated\", \"success\");\n loadProfile();\n }\n } catch (e) {\n showToast(\"Failed to process image\", \"error\");\n }\n input.value = \"\";\n}\n\nasync function removeAvatar() {\n var ok = await confirmDialog({ title: \"Remove Avatar\", message: \"Remove your avatar? Your profile will show a default avatar.\", confirmLabel: \"Remove\" });\n if (!ok) return;\n var data = await api(\"DELETE\", \"/profile/avatar\");\n if (data.ok) {\n showToast(\"Avatar removed\", \"success\");\n loadProfile();\n }\n}\n\n// Button-driven mutations must not double-submit (submitOnce \u2014 utils.ts).\n// The email verify/resend dialog buttons lock themselves inline above.\nsaveProfile = submitOnce(saveProfile);\nchangeEmail = submitOnce(changeEmail);\nremoveAvatar = submitOnce(removeAvatar);\n\nregisterTab(\"profile\", function() {\n loadProfile();\n if (typeof loadConnectedAccounts === \"function\") loadConnectedAccounts();\n});\n";
7
7
  export {};
8
8
  //# sourceMappingURL=tab-profile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab-profile.d.ts","sourceRoot":"","sources":["../../../src/pages/admin/tab-profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;AAEpE,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAkE7C;AAED,eAAO,MAAM,kBAAkB,20VAsT9B,CAAC"}
1
+ {"version":3,"file":"tab-profile.d.ts","sourceRoot":"","sources":["../../../src/pages/admin/tab-profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;AAEpE,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAkE7C;AAED,eAAO,MAAM,kBAAkB,imWA4T9B,CAAC"}
@@ -375,6 +375,12 @@ async function removeAvatar() {
375
375
  }
376
376
  }
377
377
 
378
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
379
+ // The email verify/resend dialog buttons lock themselves inline above.
380
+ saveProfile = submitOnce(saveProfile);
381
+ changeEmail = submitOnce(changeEmail);
382
+ removeAvatar = submitOnce(removeAvatar);
383
+
378
384
  registerTab("profile", function() {
379
385
  loadProfile();
380
386
  if (typeof loadConnectedAccounts === "function") loadConnectedAccounts();
@@ -1 +1 @@
1
- {"version":3,"file":"tab-profile.js","sourceRoot":"","sources":["../../../src/pages/admin/tab-profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAItE,MAAM,UAAU,cAAc,CAAC,CAAM;IACnC,OAAO,UAAU,CAAC;;8BAEU,CAAC,CAAC,eAAe,CAAC;4BACpB,CAAC,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DA8BgB,CAAC,CAAC,aAAa,CAAC;;;oGAGuB,CAAC,CAAC,iBAAiB,CAAC;2DAC7D,CAAC,CAAC,aAAa,CAAC;mGACwB,CAAC,CAAC,eAAe,CAAC;;;;;;;;6CAQxE,CAAC,CAAC,eAAe,CAAC;;;;+DAIA,CAAC,CAAC,qBAAqB,CAAC;kHAC2B,CAAC,CAAC,qBAAqB,CAAC;;;;6CAI7F,CAAC,CAAC,gBAAgB,CAAC;;;;;;;IAO5D,yBAAyB,CAAC,CAAC,CAAC;;CAE/B,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsT1C,CAAC"}
1
+ {"version":3,"file":"tab-profile.js","sourceRoot":"","sources":["../../../src/pages/admin/tab-profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAItE,MAAM,UAAU,cAAc,CAAC,CAAM;IACnC,OAAO,UAAU,CAAC;;8BAEU,CAAC,CAAC,eAAe,CAAC;4BACpB,CAAC,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DA8BgB,CAAC,CAAC,aAAa,CAAC;;;oGAGuB,CAAC,CAAC,iBAAiB,CAAC;2DAC7D,CAAC,CAAC,aAAa,CAAC;mGACwB,CAAC,CAAC,eAAe,CAAC;;;;;;;;6CAQxE,CAAC,CAAC,eAAe,CAAC;;;;+DAIA,CAAC,CAAC,qBAAqB,CAAC;kHAC2B,CAAC,CAAC,qBAAqB,CAAC;;;;6CAI7F,CAAC,CAAC,gBAAgB,CAAC;;;;;;;IAO5D,yBAAyB,CAAC,CAAC,CAAC;;CAE/B,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4T1C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tab-settings.d.ts","sourceRoot":"","sources":["../../../src/pages/admin/tab-settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;AAgBpE,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CA0J9C;AAID,eAAO,MAAM,mBAAmB,QA0T5B,CAAC"}
1
+ {"version":3,"file":"tab-settings.d.ts","sourceRoot":"","sources":["../../../src/pages/admin/tab-settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;AAgBpE,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CA0J9C;AAID,eAAO,MAAM,mBAAmB,QAkU5B,CAAC"}
@@ -381,7 +381,7 @@ function saveOAuthProvider() {
381
381
  body.domain = document.getElementById("st-oauth-domain").value;
382
382
  }
383
383
 
384
- api("PUT", "/settings/oauth/" + provider, body).then(function(data) {
384
+ return api("PUT", "/settings/oauth/" + provider, body).then(function(data) {
385
385
  if (data.ok) {
386
386
  closeDialog("st-oauth-dialog");
387
387
  showToast(__t("settings.oauthSaved"), "success");
@@ -456,7 +456,7 @@ function renderSessionConfig() {
456
456
 
457
457
  function saveSessionConfig() {
458
458
  var ttl = parseInt(document.getElementById("st-session-ttl").value, 10);
459
- api("PUT", "/settings/session", { jwtTtlDays: ttl }).then(function(data) {
459
+ return api("PUT", "/settings/session", { jwtTtlDays: ttl }).then(function(data) {
460
460
  if (data.ok) showToast(__t("settings.sessionSaved"), "success");
461
461
  });
462
462
  }
@@ -475,7 +475,7 @@ function saveEmailConfig() {
475
475
  resendApiKey: document.getElementById("st-email-apikey").value,
476
476
  fromAddress: document.getElementById("st-email-from").value,
477
477
  };
478
- api("PUT", "/settings/email", body).then(function(data) {
478
+ return api("PUT", "/settings/email", body).then(function(data) {
479
479
  if (data.ok) {
480
480
  showToast(__t("settings.emailSaved"), "success");
481
481
  // Re-render builtin providers to update email toggle state
@@ -484,6 +484,14 @@ function saveEmailConfig() {
484
484
  });
485
485
  }
486
486
 
487
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
488
+ // saveBuiltinProviders is a checkbox onchange: dropping a toggle would desync
489
+ // the UI from the server, so it stays unwrapped.
490
+ saveOAuthProvider = submitOnce(saveOAuthProvider);
491
+ deleteOAuthProvider = submitOnce(deleteOAuthProvider);
492
+ saveSessionConfig = submitOnce(saveSessionConfig);
493
+ saveEmailConfig = submitOnce(saveEmailConfig);
494
+
487
495
  registerTab("settings", loadSettings);
488
496
 
489
497
  ${FEDERATION_SECTION_SCRIPT}
@@ -1 +1 @@
1
- {"version":3,"file":"tab-settings.js","sourceRoot":"","sources":["../../../src/pages/admin/tab-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tab-settings.js","sourceRoot":"","sources":["../../../src/pages/admin/tab-settings.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"admin-instances-page.d.ts","sourceRoot":"","sources":["../../src/pages/admin-instances-page.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsTH,wBAAgB,2BAA2B,CAAC,MAAM,SAAO,GAAG,MAAM,CAwWjE"}
1
+ {"version":3,"file":"admin-instances-page.d.ts","sourceRoot":"","sources":["../../src/pages/admin-instances-page.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsTH,wBAAgB,2BAA2B,CAAC,MAAM,SAAO,GAAG,MAAM,CA4WjE"}
@@ -592,8 +592,11 @@ export function buildAdminInstancesPageHTML(locale = "en") {
592
592
  });
593
593
  }
594
594
 
595
+ var deleting = null; // instanceDid whose DELETE is in flight — a second click must not resend
595
596
  window.deleteInstance = function(did) {
597
+ if (deleting) return;
596
598
  if (!confirm(I18N.confirmDeletePrefix + did + '?')) return;
599
+ deleting = did;
597
600
  fetch(adminApi + '/' + encodeURIComponent(did), {
598
601
  method: 'DELETE',
599
602
  credentials: 'include',
@@ -603,7 +606,8 @@ export function buildAdminInstancesPageHTML(locale = "en") {
603
606
  if (data.ok) loadInstances();
604
607
  else alert(data.error || I18N.deleteFailed);
605
608
  })
606
- .catch(function(err) { alert(err.message); });
609
+ .catch(function(err) { alert(err.message); })
610
+ .finally(function() { deleting = null; });
607
611
  };
608
612
 
609
613
  window.editInstance = function(did) {
@@ -1 +1 @@
1
- {"version":3,"file":"admin-instances-page.js","sourceRoot":"","sources":["../../src/pages/admin-instances-page.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-instances-page.js","sourceRoot":"","sources":["../../src/pages/admin-instances-page.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/did-connect-service",
3
- "version": "4.1.33",
3
+ "version": "4.1.34",
4
4
  "description": "Multi-runtime authentication service framework — Passkey, DID Connect, OAuth, Email, Team, RBAC",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -61,8 +61,8 @@
61
61
  "sharp": "^0.35.4",
62
62
  "ufo": "^1.6.4",
63
63
  "valibot": "^1.4.2",
64
- "@arcblock/did-connect-core": "^4.1.33",
65
- "@arcblock/did-connect-js": "^4.1.33"
64
+ "@arcblock/did-connect-core": "^4.1.34",
65
+ "@arcblock/did-connect-js": "^4.1.34"
66
66
  },
67
67
  "optionalDependencies": {
68
68
  "@aigne/afs": "^1.11.0-beta.13"