@arcblock/did-connect-service 4.1.33 → 4.1.35

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 (118) 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.16704b2e.js → admin-core.69147606.js} +80 -2
  8. package/dist/assets/{admin-extra.8243c7f4.js → admin-extra.979f5e56.js} +57 -14
  9. package/dist/assets/{admin.7c5d5f04.css → admin.76aa0931.css} +11 -0
  10. package/dist/assets/{login.fb0bf7b4.js → login.566f858e.js} +1 -1
  11. package/dist/blocklet-service.d.ts +8 -1
  12. package/dist/blocklet-service.d.ts.map +1 -1
  13. package/dist/blocklet-service.js +6 -1
  14. package/dist/blocklet-service.js.map +1 -1
  15. package/dist/handlers/auth-handler.d.ts +7 -0
  16. package/dist/handlers/auth-handler.d.ts.map +1 -1
  17. package/dist/handlers/auth-handler.js +7 -2
  18. package/dist/handlers/auth-handler.js.map +1 -1
  19. package/dist/handlers/avatar-handler.d.ts.map +1 -1
  20. package/dist/handlers/avatar-handler.js +6 -0
  21. package/dist/handlers/avatar-handler.js.map +1 -1
  22. package/dist/handlers/did-connect-handler.d.ts +2 -0
  23. package/dist/handlers/did-connect-handler.d.ts.map +1 -1
  24. package/dist/handlers/did-connect-handler.js +2 -2
  25. package/dist/handlers/did-connect-handler.js.map +1 -1
  26. package/dist/handlers/email-login-handler.d.ts +2 -0
  27. package/dist/handlers/email-login-handler.d.ts.map +1 -1
  28. package/dist/handlers/email-login-handler.js +2 -2
  29. package/dist/handlers/email-login-handler.js.map +1 -1
  30. package/dist/handlers/oauth-handler.d.ts +2 -0
  31. package/dist/handlers/oauth-handler.d.ts.map +1 -1
  32. package/dist/handlers/oauth-handler.js +3 -4
  33. package/dist/handlers/oauth-handler.js.map +1 -1
  34. package/dist/handlers/passkey-handler.d.ts +1 -0
  35. package/dist/handlers/passkey-handler.d.ts.map +1 -1
  36. package/dist/handlers/passkey-handler.js +5 -4
  37. package/dist/handlers/passkey-handler.js.map +1 -1
  38. package/dist/handlers/ticket-handler.d.ts +2 -0
  39. package/dist/handlers/ticket-handler.d.ts.map +1 -1
  40. package/dist/handlers/ticket-handler.js +2 -2
  41. package/dist/handlers/ticket-handler.js.map +1 -1
  42. package/dist/identity/session-cookie.d.ts +11 -0
  43. package/dist/identity/session-cookie.d.ts.map +1 -0
  44. package/dist/identity/session-cookie.js +17 -0
  45. package/dist/identity/session-cookie.js.map +1 -0
  46. package/dist/pages/admin/scripts/dialog.d.ts +1 -1
  47. package/dist/pages/admin/scripts/dialog.d.ts.map +1 -1
  48. package/dist/pages/admin/scripts/dialog.js +29 -2
  49. package/dist/pages/admin/scripts/dialog.js.map +1 -1
  50. package/dist/pages/admin/scripts/utils.d.ts +1 -1
  51. package/dist/pages/admin/scripts/utils.d.ts.map +1 -1
  52. package/dist/pages/admin/scripts/utils.js +35 -0
  53. package/dist/pages/admin/scripts/utils.js.map +1 -1
  54. package/dist/pages/admin/styles.d.ts +1 -1
  55. package/dist/pages/admin/styles.d.ts.map +1 -1
  56. package/dist/pages/admin/styles.js +11 -0
  57. package/dist/pages/admin/styles.js.map +1 -1
  58. package/dist/pages/admin/tab-access.d.ts.map +1 -1
  59. package/dist/pages/admin/tab-access.js +6 -0
  60. package/dist/pages/admin/tab-access.js.map +1 -1
  61. package/dist/pages/admin/tab-appearance.d.ts.map +1 -1
  62. package/dist/pages/admin/tab-appearance.js +4 -0
  63. package/dist/pages/admin/tab-appearance.js.map +1 -1
  64. package/dist/pages/admin/tab-branding.d.ts.map +1 -1
  65. package/dist/pages/admin/tab-branding.js +4 -0
  66. package/dist/pages/admin/tab-branding.js.map +1 -1
  67. package/dist/pages/admin/tab-federation.d.ts +1 -1
  68. package/dist/pages/admin/tab-federation.d.ts.map +1 -1
  69. package/dist/pages/admin/tab-federation.js +21 -11
  70. package/dist/pages/admin/tab-federation.js.map +1 -1
  71. package/dist/pages/admin/tab-invitations.d.ts +1 -1
  72. package/dist/pages/admin/tab-invitations.d.ts.map +1 -1
  73. package/dist/pages/admin/tab-invitations.js +4 -0
  74. package/dist/pages/admin/tab-invitations.js.map +1 -1
  75. package/dist/pages/admin/tab-members.d.ts +1 -1
  76. package/dist/pages/admin/tab-members.d.ts.map +1 -1
  77. package/dist/pages/admin/tab-members.js +7 -0
  78. package/dist/pages/admin/tab-members.js.map +1 -1
  79. package/dist/pages/admin/tab-profile-accounts.d.ts.map +1 -1
  80. package/dist/pages/admin/tab-profile-accounts.js +10 -0
  81. package/dist/pages/admin/tab-profile-accounts.js.map +1 -1
  82. package/dist/pages/admin/tab-profile.d.ts +1 -1
  83. package/dist/pages/admin/tab-profile.d.ts.map +1 -1
  84. package/dist/pages/admin/tab-profile.js +6 -0
  85. package/dist/pages/admin/tab-profile.js.map +1 -1
  86. package/dist/pages/admin/tab-settings.d.ts.map +1 -1
  87. package/dist/pages/admin/tab-settings.js +11 -3
  88. package/dist/pages/admin/tab-settings.js.map +1 -1
  89. package/dist/pages/admin-instances-page.d.ts.map +1 -1
  90. package/dist/pages/admin-instances-page.js +5 -1
  91. package/dist/pages/admin-instances-page.js.map +1 -1
  92. package/dist/types.d.ts +6 -0
  93. package/dist/types.d.ts.map +1 -1
  94. package/package.json +3 -3
  95. package/dist/assets/admin-core.1fc3260c.js +0 -1623
  96. package/dist/assets/admin-core.5a2d69b0.js +0 -2067
  97. package/dist/assets/admin-core.9fff6042.js +0 -2083
  98. package/dist/assets/admin-core.a13c2729.js +0 -1461
  99. package/dist/assets/admin-core.a63bbc69.js +0 -1464
  100. package/dist/assets/admin-core.c0b5af61.js +0 -1393
  101. package/dist/assets/admin-core.cbbdbe6d.js +0 -1465
  102. package/dist/assets/admin-core.e83fd379.js +0 -1397
  103. package/dist/assets/admin-extra.143b5774.js +0 -2543
  104. package/dist/assets/admin-extra.35b91f98.js +0 -2543
  105. package/dist/assets/admin-extra.531b187f.js +0 -2552
  106. package/dist/assets/admin-extra.5b309e5e.js +0 -2547
  107. package/dist/assets/admin-extra.7ca9c16b.js +0 -2529
  108. package/dist/assets/admin-extra.841b2bbe.js +0 -2530
  109. package/dist/assets/admin-extra.afcb3651.js +0 -2528
  110. package/dist/assets/admin-extra.d12f05bb.js +0 -2553
  111. package/dist/assets/admin.c26bb17a.css +0 -2219
  112. package/dist/assets/admin.dfeedbe4.css +0 -2229
  113. package/dist/assets/login.0bf3d739.js +0 -720
  114. package/dist/assets/login.4404e695.js +0 -720
  115. package/dist/assets/login.76c483c2.js +0 -720
  116. package/dist/assets/login.bb9f8b03.js +0 -720
  117. package/dist/assets/login.d3f05790.js +0 -720
  118. package/dist/assets/login.fa25f37a.js +0 -720
@@ -117,6 +117,41 @@ function skeletonRows(rows) {
117
117
  return html;
118
118
  }
119
119
 
120
+ // ─── Submit lock ─────────────────────────────────────────────────────
121
+ // Busy state for a button: disabled + aria-busy + the .btn-loading spinner.
122
+ function setButtonBusy(btn, busy) {
123
+ if (!btn) return;
124
+ btn.disabled = busy;
125
+ btn.setAttribute("aria-busy", busy ? "true" : "false");
126
+ if (busy) btn.classList.add("btn-loading");
127
+ else btn.classList.remove("btn-loading");
128
+ }
129
+
130
+ // Wrap a mutation handler so it can never run concurrently with itself: while
131
+ // one run is pending, further calls are dropped, and the button that fired it
132
+ // (the live event's currentTarget when invoked from an inline onclick) shows
133
+ // the busy state until the run settles. Every button-driven handler that sends
134
+ // a POST/PUT/DELETE goes through this — a double-click must never send twice.
135
+ // The handler must return its promise (async function, or "return api(...)").
136
+ function submitOnce(fn) {
137
+ var pending = false;
138
+ return function() {
139
+ if (pending) return;
140
+ var evt = window.event;
141
+ var target = evt && evt.currentTarget;
142
+ var btn = target && target.tagName === "BUTTON" ? target : null;
143
+ pending = true;
144
+ setButtonBusy(btn, true);
145
+ var self = this;
146
+ var args = arguments;
147
+ var done = function() { pending = false; setButtonBusy(btn, false); };
148
+ return Promise.resolve().then(function() { return fn.apply(self, args); }).then(
149
+ function(result) { done(); return result; },
150
+ function(err) { done(); console.error("submit failed", err); }
151
+ );
152
+ };
153
+ }
154
+
120
155
  function renderAvatar(avatarUrl, fullName, size) {
121
156
  size = size || "";
122
157
  var cls = "avatar" + (size ? " avatar-" + size : "");
@@ -193,13 +228,40 @@ function openDialog(title, bodyHtml, confirmLabel, onConfirm) {
193
228
  document.getElementById("gd-title").textContent = title;
194
229
  document.getElementById("gd-body").innerHTML = bodyHtml;
195
230
  var okBtn = document.getElementById("gd-ok");
231
+ var cancelBtn = document.getElementById("gd-cancel");
196
232
  okBtn.textContent = confirmLabel || "Confirm";
197
233
  okBtn.className = (confirmLabel === "Delete") ? "btn btn-danger" : "btn btn-primary";
198
- okBtn.onclick = function() { onConfirm(); };
199
- document.getElementById("gd-cancel").onclick = function() { d.close(); };
234
+ setDialogBusy(false);
235
+ // onConfirm is usually an async request (POST /access-keys, …). Lock both
236
+ // buttons until it settles, otherwise a double-click submits twice and, e.g.,
237
+ // mints two access keys. The dialog element is reused, so always unlock —
238
+ // even when the callback closed it or threw.
239
+ okBtn.onclick = function() {
240
+ if (okBtn.disabled) return;
241
+ setDialogBusy(true);
242
+ var unlock = function() { setDialogBusy(false); };
243
+ Promise.resolve().then(function() { return onConfirm(); }).then(unlock, function(err) {
244
+ unlock();
245
+ console.error("dialog confirm failed", err);
246
+ });
247
+ };
248
+ cancelBtn.onclick = function() { d.close(); };
249
+ // The second mousedown of a double-click lands on the action bar (the locked
250
+ // button has pointer-events:none by then) and would word-select nearby text.
251
+ var actions = d.querySelector(".dialog-actions");
252
+ if (actions) actions.onmousedown = function(e) { if (e.detail > 1) e.preventDefault(); };
200
253
  d.showModal();
201
254
  }
202
255
 
256
+ // setButtonBusy comes from UTILS_SCRIPT (bundled ahead of this script).
257
+ function setDialogBusy(busy) {
258
+ var okBtn = document.getElementById("gd-ok");
259
+ var cancelBtn = document.getElementById("gd-cancel");
260
+ if (!okBtn || !cancelBtn) return;
261
+ setButtonBusy(okBtn, busy);
262
+ cancelBtn.disabled = busy;
263
+ }
264
+
203
265
  function confirmDialog(opts) {
204
266
  return new Promise(function(resolve) {
205
267
  var d = document.getElementById("confirm-dialog");
@@ -613,6 +675,12 @@ async function removeAvatar() {
613
675
  }
614
676
  }
615
677
 
678
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
679
+ // The email verify/resend dialog buttons lock themselves inline above.
680
+ saveProfile = submitOnce(saveProfile);
681
+ changeEmail = submitOnce(changeEmail);
682
+ removeAvatar = submitOnce(removeAvatar);
683
+
616
684
  registerTab("profile", function() {
617
685
  loadProfile();
618
686
  if (typeof loadConnectedAccounts === "function") loadConnectedAccounts();
@@ -1769,6 +1837,16 @@ function bufferToBase64url(buf) {
1769
1837
  return btoa(str).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
1770
1838
  }
1771
1839
 
1840
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
1841
+ // OAuth/wallet bind flows are single-shot by construction (once-listeners,
1842
+ // polling stopped before the completing POST) and are not wrapped.
1843
+ unbindOAuth = submitOnce(unbindOAuth);
1844
+ unbindWallet = submitOnce(unbindWallet);
1845
+ addPasskey = submitOnce(addPasskey);
1846
+ removePasskey = submitOnce(removePasskey);
1847
+ openRenamePasskeyDialog = submitOnce(openRenamePasskeyDialog);
1848
+ startAccountMerge = submitOnce(startAccountMerge);
1849
+
1772
1850
  ;
1773
1851
 
1774
1852
  var akPage = 1;
@@ -468,6 +468,13 @@ async function handleTransferOwnership() {
468
468
  }
469
469
  }
470
470
 
471
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
472
+ saveRoleChange = submitOnce(saveRoleChange);
473
+ blockMember = submitOnce(blockMember);
474
+ unblockMember = submitOnce(unblockMember);
475
+ removeMember = submitOnce(removeMember);
476
+ handleTransferOwnership = submitOnce(handleTransferOwnership);
477
+
471
478
  // Close action menus on outside click
472
479
  document.addEventListener("click", function() {
473
480
  document.querySelectorAll(".action-menu.open").forEach(function(m) { m.classList.remove("open"); });
@@ -588,6 +595,10 @@ function initInviteRoleOptions() {
588
595
  }
589
596
  }
590
597
 
598
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
599
+ // createInvitation locks its own button (#create-invite-btn) already.
600
+ deleteInvitation = submitOnce(deleteInvitation);
601
+
591
602
  registerTab("invitations", function() {
592
603
  initInviteRoleOptions();
593
604
  loadInvitations(1);
@@ -1124,6 +1135,12 @@ async function apDeleteRule(id) {
1124
1135
  if (res.ok) { showToast(__t("access.ruleDeleted"), "success"); apLoadAll(); }
1125
1136
  }
1126
1137
 
1138
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
1139
+ apSavePolicy = submitOnce(apSavePolicy);
1140
+ apDeletePolicy = submitOnce(apDeletePolicy);
1141
+ apSaveRule = submitOnce(apSaveRule);
1142
+ apDeleteRule = submitOnce(apDeleteRule);
1143
+
1127
1144
  // ─── Register Tab ──────────────────────────────────────────────────────────
1128
1145
  registerTab("access", function() { apLoadAll(); });
1129
1146
 
@@ -1633,6 +1650,10 @@ async function saveBrandingLanguages() {
1633
1650
  else showToast(__t("branding.langUpdateFailed"), "error");
1634
1651
  }
1635
1652
 
1653
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
1654
+ // Logo uploads are driven by <input type=file> change events, not clicks.
1655
+ saveBrandingInfo = submitOnce(saveBrandingInfo);
1656
+
1636
1657
  registerTab("branding", loadBranding);
1637
1658
 
1638
1659
  ;
@@ -1860,6 +1881,10 @@ async function saveNavigation() {
1860
1881
  else showToast((res && res.error) || "Failed to update navigation", "error");
1861
1882
  }
1862
1883
 
1884
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
1885
+ saveTheme = submitOnce(saveTheme);
1886
+ saveNavigation = submitOnce(saveNavigation);
1887
+
1863
1888
  registerTab("appearance", loadAppearance);
1864
1889
 
1865
1890
  ;
@@ -2071,7 +2096,7 @@ function saveOAuthProvider() {
2071
2096
  body.domain = document.getElementById("st-oauth-domain").value;
2072
2097
  }
2073
2098
 
2074
- api("PUT", "/settings/oauth/" + provider, body).then(function(data) {
2099
+ return api("PUT", "/settings/oauth/" + provider, body).then(function(data) {
2075
2100
  if (data.ok) {
2076
2101
  closeDialog("st-oauth-dialog");
2077
2102
  showToast(__t("settings.oauthSaved"), "success");
@@ -2146,7 +2171,7 @@ function renderSessionConfig() {
2146
2171
 
2147
2172
  function saveSessionConfig() {
2148
2173
  var ttl = parseInt(document.getElementById("st-session-ttl").value, 10);
2149
- api("PUT", "/settings/session", { jwtTtlDays: ttl }).then(function(data) {
2174
+ return api("PUT", "/settings/session", { jwtTtlDays: ttl }).then(function(data) {
2150
2175
  if (data.ok) showToast(__t("settings.sessionSaved"), "success");
2151
2176
  });
2152
2177
  }
@@ -2165,7 +2190,7 @@ function saveEmailConfig() {
2165
2190
  resendApiKey: document.getElementById("st-email-apikey").value,
2166
2191
  fromAddress: document.getElementById("st-email-from").value,
2167
2192
  };
2168
- api("PUT", "/settings/email", body).then(function(data) {
2193
+ return api("PUT", "/settings/email", body).then(function(data) {
2169
2194
  if (data.ok) {
2170
2195
  showToast(__t("settings.emailSaved"), "success");
2171
2196
  // Re-render builtin providers to update email toggle state
@@ -2174,6 +2199,14 @@ function saveEmailConfig() {
2174
2199
  });
2175
2200
  }
2176
2201
 
2202
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
2203
+ // saveBuiltinProviders is a checkbox onchange: dropping a toggle would desync
2204
+ // the UI from the server, so it stays unwrapped.
2205
+ saveOAuthProvider = submitOnce(saveOAuthProvider);
2206
+ deleteOAuthProvider = submitOnce(deleteOAuthProvider);
2207
+ saveSessionConfig = submitOnce(saveSessionConfig);
2208
+ saveEmailConfig = submitOnce(saveEmailConfig);
2209
+
2177
2210
  registerTab("settings", loadSettings);
2178
2211
 
2179
2212
 
@@ -2399,14 +2432,14 @@ function fedSetLoading(loading) {
2399
2432
  }
2400
2433
 
2401
2434
  function fedEnable() {
2402
- confirmDialog({
2435
+ return confirmDialog({
2403
2436
  title: __t("federation.enableConfirm"),
2404
2437
  message: __t("federation.enableMasterDesc"),
2405
2438
  confirmLabel: __t("federation.enableMaster"),
2406
2439
  }).then(function(ok) {
2407
2440
  if (!ok) return;
2408
2441
  fedSetLoading(true);
2409
- api("POST", "/admin/federation/enable", { url: location.origin, name: document.title || "App" }).then(function(data) {
2442
+ return api("POST", "/admin/federation/enable", { url: location.origin, name: document.title || "App" }).then(function(data) {
2410
2443
  __fedLoading = false;
2411
2444
  if (data && !data.error) { __fedData = data; fedRender(); showToast(__t("federation.enabled"), "success"); }
2412
2445
  else { showToast(data.error || "Failed", "error"); fedRender(); }
@@ -2464,7 +2497,7 @@ function fedToggle(enabled) {
2464
2497
  }
2465
2498
 
2466
2499
  function fedApproveSite(did) {
2467
- api("POST", "/admin/federation/sites/" + encodeURIComponent(did) + "/approve").then(function(data) {
2500
+ return api("POST", "/admin/federation/sites/" + encodeURIComponent(did) + "/approve").then(function(data) {
2468
2501
  if (data && !data.error) {
2469
2502
  __fedData = data;
2470
2503
  fedRender();
@@ -2476,14 +2509,14 @@ function fedApproveSite(did) {
2476
2509
  }
2477
2510
 
2478
2511
  function fedRejectSite(did, name) {
2479
- confirmDialog({
2512
+ return confirmDialog({
2480
2513
  title: __t("federation.rejectTitle"),
2481
2514
  message: __t("federation.rejectDesc"),
2482
2515
  confirmLabel: __t("federation.reject"),
2483
2516
  danger: true,
2484
2517
  }).then(function(ok) {
2485
2518
  if (!ok) return;
2486
- api("DELETE", "/admin/federation/sites/" + encodeURIComponent(did)).then(function(data) {
2519
+ return api("DELETE", "/admin/federation/sites/" + encodeURIComponent(did)).then(function(data) {
2487
2520
  if (data && !data.error) { __fedData = data; fedRender(); showToast(__t("federation.reject") + " \u2713", "success"); }
2488
2521
  });
2489
2522
  });
@@ -2519,44 +2552,54 @@ function fedToggleMember(did, enabled) {
2519
2552
  }
2520
2553
 
2521
2554
  function fedUnbindSite(did, name) {
2522
- confirmDialog({
2555
+ return confirmDialog({
2523
2556
  title: __t("federation.unbindTitle"),
2524
2557
  message: __t("federation.unbindDesc") + " " + __t("federation.walletSafe") + " " + __t("federation.sessionWarning"),
2525
2558
  confirmLabel: __t("federation.unbind"),
2526
2559
  danger: true,
2527
2560
  }).then(function(ok) {
2528
2561
  if (!ok) return;
2529
- api("DELETE", "/admin/federation/sites/" + encodeURIComponent(did)).then(function(data) {
2562
+ return api("DELETE", "/admin/federation/sites/" + encodeURIComponent(did)).then(function(data) {
2530
2563
  if (data && !data.error) { __fedData = data; fedRender(); showToast(__t("federation.unbind") + " \u2713", "success"); }
2531
2564
  });
2532
2565
  });
2533
2566
  }
2534
2567
 
2535
2568
  function fedDisband() {
2536
- confirmDialog({
2569
+ return confirmDialog({
2537
2570
  title: __t("federation.disbandTitle"),
2538
2571
  message: __t("federation.disbandDesc") + " " + __t("federation.sessionWarning"),
2539
2572
  confirmLabel: __t("federation.disband"),
2540
2573
  danger: true,
2541
2574
  }).then(function(ok) {
2542
2575
  if (!ok) return;
2543
- api("POST", "/admin/federation/disband").then(function(data) {
2576
+ return api("POST", "/admin/federation/disband").then(function(data) {
2544
2577
  if (data && !data.error) { __fedData = data; fedRender(); showToast(__t("federation.disband") + " \u2713", "success"); }
2545
2578
  });
2546
2579
  });
2547
2580
  }
2548
2581
 
2549
2582
  function fedLeave() {
2550
- confirmDialog({
2583
+ return confirmDialog({
2551
2584
  title: __t("federation.leaveTitle"),
2552
2585
  message: __t("federation.leaveDesc") + " " + __t("federation.sessionWarning"),
2553
2586
  confirmLabel: __t("federation.leave"),
2554
2587
  danger: true,
2555
2588
  }).then(function(ok) {
2556
2589
  if (!ok) return;
2557
- api("POST", "/admin/federation/leave").then(function(data) {
2590
+ return api("POST", "/admin/federation/leave").then(function(data) {
2558
2591
  if (data && !data.error) { __fedData = data; fedRender(); showToast(__t("federation.leave") + " \u2713", "success"); }
2559
2592
  });
2560
2593
  });
2561
2594
  }
2562
2595
 
2596
+ // Button-driven mutations must not double-submit (submitOnce — utils.ts).
2597
+ // fedJoinSubmit locks its own button; fedToggle / fedToggleMember are
2598
+ // checkbox toggles and stay unwrapped (dropping a toggle would desync the UI).
2599
+ fedEnable = submitOnce(fedEnable);
2600
+ fedApproveSite = submitOnce(fedApproveSite);
2601
+ fedRejectSite = submitOnce(fedRejectSite);
2602
+ fedUnbindSite = submitOnce(fedUnbindSite);
2603
+ fedDisband = submitOnce(fedDisband);
2604
+ fedLeave = submitOnce(fedLeave);
2605
+
@@ -47,6 +47,17 @@
47
47
  .btn:hover { background: var(--blue-hover); }
48
48
  .btn:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; }
49
49
  .btn:focus-visible { box-shadow: var(--shadow-focus); }
50
+ /* In-flight submit (openDialog): keep the label readable and show a spinner. */
51
+ .btn.btn-loading { opacity: 0.8; }
52
+ .btn.btn-loading::before {
53
+ content: "";
54
+ flex: none;
55
+ width: 14px; height: 14px;
56
+ border: 2px solid currentColor;
57
+ border-right-color: transparent;
58
+ border-radius: 50%;
59
+ animation: spin 0.6s linear infinite;
60
+ }
50
61
  .btn svg { width: 18px; height: 18px; }
51
62
  .btn-secondary {
52
63
  background: transparent;
@@ -712,7 +712,7 @@ h1 {
712
712
  }
713
713
  .locale-btn svg { width: 14px; height: 14px; flex-shrink: 0; }
714
714
  .card { position: relative; }
715
- `;function G(o){let e=new Uint8Array(o),r="";for(let t=0;t<e.length;t++)r+=String.fromCharCode(e[t]);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function te(o){let e=o.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),t=new Uint8Array(r.length);for(let n=0;n<r.length;n++)t[n]=r.charCodeAt(n);return t.buffer}function tt(o){let e=o.response;return{id:o.id,rawId:G(o.rawId),type:o.type,response:{attestationObject:G(e.attestationObject),clientDataJSON:G(e.clientDataJSON)},clientExtensionResults:o.getClientExtensionResults(),authenticatorAttachment:o.authenticatorAttachment}}function nt(o){let e=o.response;return{id:o.id,rawId:G(o.rawId),type:o.type,response:{authenticatorData:G(e.authenticatorData),clientDataJSON:G(e.clientDataJSON),signature:G(e.signature),userHandle:e.userHandle?G(e.userHandle):void 0},clientExtensionResults:o.getClientExtensionResults(),authenticatorAttachment:o.authenticatorAttachment}}async function se(o){let e=o.prefix||"/.well-known/service/api/passkey",r=o.onStatus||(()=>{}),t=o.authOnly||!1,n=o.registerOnly||!1,a=o.invitationId||void 0,s=o.locale,i=o.texts||{},d=i.waiting||x("passkeyWaiting",s),m=i.creating||x("passkeyCreating",s),y=i.verifying||x("verifying",s);async function f(){let E=await fetch(`${e}/auth`,{method:"GET"});if(!E.ok)throw new Error(x("authFailed",s));return E.json()}async function u(E){let D=[];E&&D.push(`name=${encodeURIComponent(E)}`),a&&D.push(`invitationId=${encodeURIComponent(a)}`);let S=D.length?`?${D.join("&")}`:"",R=await fetch(`${e}/register${S}`,{method:"GET"});if(!R.ok)throw new Error(x("registrationFailed",s));return R.json()}function b(E,D){let S=new Error(E);throw D&&(S.code=D),S}async function A(E,D){let S=await fetch(`${e}/auth`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({challengeId:E,credential:D})});if(!S.ok){let R=await S.json().catch(()=>({}));b(R.error||x("authFailed",s),R.code)}return S.json()}async function _(E,D,S){let R=await fetch(`${e}/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({challengeId:E,credential:D,name:S||void 0})});if(!R.ok){let L=await R.json().catch(()=>({}));b(L.error||x("registrationFailed",s),L.code)}return R.json()}if(!n){r(d,!1);try{let E=await f(),{challengeId:D}=E,S=E.authentication||E,R={publicKey:{...S,challenge:te(S.challenge),allowCredentials:(S.allowCredentials||[]).map(V=>({...V,id:te(V.id)}))}},L;try{L=await navigator.credentials.get(R)}catch{if(t)return{success:!1,error:"no_passkey"}}if(L){let V=nt(L);return r(y,!1),await A(D,V),{success:!0}}}catch(E){let D=E instanceof Error?E.message:x("authFailed",s),S=E instanceof Error?E.code:void 0;return r(D,!0),{success:!1,error:D,code:S}}}let T=await u(o.name||"");if(T.registrationAllowed===!1)return r(x("regClosed",s),!0),{success:!1,error:"registration_closed"};r(m,!1);try{let E=T.registration||T,D={publicKey:{...E,challenge:te(E.challenge),user:{...E.user,id:te(E.user.id)},excludeCredentials:(E.excludeCredentials||[]).map(L=>({...L,id:te(L.id)}))}},S=await navigator.credentials.create(D),R=tt(S);return r(y,!1),await _(T.challengeId,R,o.name||""),{success:!0}}catch(E){let D=E instanceof Error?E.message:x("passkeySetupFailed",s),S=E instanceof Error?E.code:void 0;return r(D,!0),{success:!1,error:D,code:S}}}function Q(o,e){let r=o instanceof Error?o.message:"",t=o instanceof Error&&"code"in o?o.code:"";return t==="FORBIDDEN"?x("accessDenied",e):r==="registration_closed"||t==="registration_closed"?x("regClosed",e):r||x("authFailed",e)}var rt="https://web.abtwallet.io/";function ot(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function st(){return typeof window>"u"?null:window.ABT_DEV??window.ABT??null}function W(o){return o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}var Ce=class{container;config;http;options;tokenSession=null;styleEl=null;mounted=!1;currentView="methods";cardEl=null;mediaQuery=null;mediaListener=null;constructor(o,e,r,t){if(this.container=o,this.config=e,this.http=r,this.options={methods:["passkey","did-connect"],locale:"en",...t},!this.options.invitationId&&typeof document<"u"){let n=document.cookie.match(/(?:^|;\s*)pending_invitation=([^;]*)/);if(n)try{this.options.invitationId=decodeURIComponent(n[1])}catch{}}}mount(){if(this.mounted)return;this.mounted=!0,this.styleEl=document.createElement("style"),this.styleEl.textContent=et,this.container.appendChild(this.styleEl),this.applyTheme();let o=this.filterMethods(this.options.methods);this.renderCard(o)}destroy(){this.tokenSession&&(this.tokenSession.destroy(),this.tokenSession=null),this.mediaQuery&&this.mediaListener&&(this.mediaQuery.removeEventListener("change",this.mediaListener),this.mediaQuery=null,this.mediaListener=null),document.documentElement.removeAttribute("data-theme"),this.container.innerHTML="",this.styleEl=null,this.cardEl=null,this.currentView="methods",this.mounted=!1}update(o){Object.assign(this.options,o),this.mounted&&(this.destroy(),this.mount())}applyTheme(){let o=this.options.theme??"dark";if(o==="light")document.documentElement.dataset.theme="light";else if(o==="auto"&&typeof window.matchMedia=="function"){let e=window.matchMedia("(prefers-color-scheme: light)");this.mediaQuery=e;let r=t=>{t?document.documentElement.dataset.theme="light":document.documentElement.removeAttribute("data-theme")};r(e.matches),this.mediaListener=t=>r(t.matches),e.addEventListener("change",this.mediaListener)}}filterMethods(o){return o.filter(e=>e==="passkey"?typeof window<"u"&&window.PublicKeyCredential!==void 0&&typeof window.PublicKeyCredential=="function":!0)}renderCard(o){let e=document.createElement("div");e.className="card",this.cardEl=e,this.container.appendChild(e),this.switchView("methods",o)}renderLocaleSwitcher(o){if(le.length<2)return;let e=document.createElement("div");e.className="locale-switcher";let r=this.options.locale,t=le.find(a=>a.code!==r)??le[0],n=document.createElement("button");n.type="button",n.className="locale-btn",n.innerHTML=`${Ke} ${W(t.label)}`,n.title=t.label,n.addEventListener("click",()=>{this.options.onLocaleChange?.(t.code),this.update({locale:t.code})}),e.appendChild(n),o.appendChild(e)}switchView(o,e){if(!this.cardEl)return;let r=this.options.locale;switch(this.currentView==="qr"&&o!=="qr"&&this.tokenSession&&(this.tokenSession.destroy(),this.tokenSession=null),this.currentView=o,this.cardEl.innerHTML="",this.cardEl.dataset.view=o,this.renderLocaleSwitcher(this.cardEl),o){case"methods":this.renderMethodsView(this.cardEl,r,e??this.filterMethods(this.options.methods));break;case"qr":this.renderQRView(this.cardEl,r);break;case"email":this.renderEmailView(this.cardEl,r);break}}renderMethodsView(o,e,r){this.renderHomeLink(o,e),this.renderBrandHeader(o,e);let t=this.options.methods.includes("passkey");if(t&&!r.includes("passkey")){let s=document.createElement("div");s.className="compat-warning",s.textContent=x("passkeyUnsupported",e),o.appendChild(s)}let n=r.includes("passkey");n&&this.renderPasskeySection(o,e);let a=r.filter(s=>s!=="passkey");if(n&&a.length>0&&this.renderDivider(o,e),a.length>0&&this.renderSecondaryGrid(o,e,r),r.length===0&&!t){let s=document.createElement("p");s.className="subtitle",s.textContent="No authentication methods available.",o.appendChild(s)}this.renderTrustFooter(o,e)}renderQRView(o,e){this.renderBackButton(o,e);let r=document.createElement("h2");r.className="view-title",r.textContent=x("scanTitle",e),o.appendChild(r);let t=document.createElement("div");t.id="did-connect-qr",t.className="qr-view",t.innerHTML='<div class="qr-placeholder"><span class="qr-spinner"></span></div>',o.appendChild(t);let n=document.createElement("button");n.className="btn btn-secondary deep-link-btn",n.id="did-wallet-open-btn",n.textContent=x("openInWallet",e),n.disabled=!0,o.appendChild(n);let a=document.createElement("div");a.id="did-connect-status",a.className="status",o.appendChild(a),this.renderTrustFooter(o,e),this.startDIDConnectInView(a,t,n,e)}renderEmailView(o,e){this.renderBackButton(o,e);let r=document.createElement("h2");r.className="view-title",r.textContent=x("emailTitle",e),o.appendChild(r);let t=document.createElement("input");t.className="input",t.type="email",t.placeholder=x("emailPlaceholder",e),o.appendChild(t);let n=document.createElement("button");n.className="btn",n.textContent=x("emailSubmit",e),o.appendChild(n);let a=document.createElement("div");a.className="status",o.appendChild(a);let s=document.createElement("div");s.className="email-code-section",s.style.display="none";let i=document.createElement("input");i.className="input",i.type="text",i.inputMode="numeric",i.maxLength=8,i.autocomplete="one-time-code",i.placeholder=x("emailCodePlaceholder",e),s.appendChild(i);let d=document.createElement("button");d.className="btn",d.textContent=x("emailVerify",e),s.appendChild(d);let m=document.createElement("button");m.className="btn btn-secondary",m.textContent=x("emailResend",e),m.style.marginTop="8px",s.appendChild(m),o.insertBefore(s,a),this.renderTrustFooter(o,e);let y="",f,u=this.config.servicePrefix??"/.well-known/service",b=async()=>{let _=t.value.trim();if(!_?.includes("@")){a.textContent=x("emailInvalid",e),a.className="status error";return}n.disabled=!0,a.textContent=x("emailSending",e),a.className="status";try{let T=await this.http.post(`${u}/api/email/sendCode`,{email:_,locale:e});y=_,f=T?.id,t.style.display="none",n.style.display="none",s.style.display="",r.textContent=x("emailVerify",e),a.textContent=x("emailSent",e,{email:_}),a.className="status",i.focus()}catch(T){let E=T instanceof Error?T.message:"Failed to send email";a.textContent=E,a.className="status error",n.disabled=!1}},A=async()=>{let _=i.value.trim();if(!_||_.length!==8){a.textContent=x("emailCodeInvalid",e),a.className="status error";return}d.disabled=!0,a.textContent=x("verifying",e),a.className="status";try{await this.http.post(`${u}/api/email/login`,{code:_,id:f}),a.textContent=x("success",e),a.className="status",this.handleSuccess()}catch(T){T instanceof Error&&"code"in T&&T.code==="FORBIDDEN"?this.showFullError(Q(T,e)):(a.textContent=Q(T,e),a.className="status error",d.disabled=!1,i.value="",i.focus())}};n.addEventListener("click",b),t.addEventListener("keydown",_=>{_.key==="Enter"&&b()}),d.addEventListener("click",A),i.addEventListener("keydown",_=>{_.key==="Enter"&&A()}),m.addEventListener("click",async()=>{m.disabled=!0,a.textContent=x("emailSending",e),a.className="status";try{f=(await this.http.post(`${u}/api/email/sendCode`,{email:y,locale:e}))?.id,a.textContent=x("emailSent",e,{email:y}),a.className="status"}catch(_){let T=_ instanceof Error?_.message:"Failed to resend";a.textContent=T,a.className="status error"}m.disabled=!1})}renderBackButton(o,e){let r=document.createElement("button");r.className="back-btn",r.innerHTML=`${Ee} ${W(x("back",e))}`,r.addEventListener("click",()=>this.switchView("methods")),o.appendChild(r)}renderHomeLink(o,e){let{homeUrl:r,onCancel:t}=this.options;if(!t&&!r)return;let n=`${Ee} ${W(x("cancel",e))}`;if(t){let a=document.createElement("button");a.type="button",a.className="home-link",a.innerHTML=n,a.addEventListener("click",()=>this.options.onCancel?.()),o.appendChild(a)}else{let a=document.createElement("a");a.className="home-link",a.href=r,a.innerHTML=n,o.appendChild(a)}}renderBrandHeader(o,e){let r=document.createElement("div");if(r.className="brand-header",this.options.appLogo){let n=document.createElement("img");n.className="app-logo",n.src=W(this.options.appLogo),n.alt=this.options.appName?W(this.options.appName):"",n.width=48,n.height=48,r.appendChild(n)}let t=document.createElement("h1");if(this.options.appName?t.textContent=x("signInTo",e,{appName:this.options.appName}):t.textContent=x("signIn",e),r.appendChild(t),this.options.masterAppName){let n=document.createElement("p");n.className="federated-hint",n.textContent=x("federatedBy",e,{masterName:this.options.masterAppName}),r.appendChild(n)}o.appendChild(r)}renderTrustFooter(o,e){let r=document.createElement("div");r.className="login-footer";let t=document.createElement("div");t.className="secured-badge",t.innerHTML=`${Ue} ${W(x("securedBy",e))}`,r.appendChild(t);let{privacyUrl:n,termsUrl:a}=this.options;if(n||a){let s=document.createElement("div");if(s.className="footer-links",n){let i=document.createElement("a");i.href=n,i.target="_blank",i.rel="noopener noreferrer",i.textContent=x("privacy",e),s.appendChild(i)}if(n&&a&&s.appendChild(document.createTextNode(" \xB7 ")),a){let i=document.createElement("a");i.href=a,i.target="_blank",i.rel="noopener noreferrer",i.textContent=x("terms",e),s.appendChild(i)}r.appendChild(s)}o.appendChild(r)}renderDivider(o,e){let r=document.createElement("div");r.className="divider",r.textContent=x("or",e),o.appendChild(r)}renderPasskeySection(o,e){let r=document.createElement("div");r.className="passkey-section",o.appendChild(r);let t=document.createElement("div");t.className="status",t.id="passkey-status",o.appendChild(t);let n=(u,b)=>{t.textContent=u,t.className=`status${b?" error":""}`},a=()=>n("",!1),s={waiting:x("passkeyWaiting",e),creating:x("passkeyCreating",e),verifying:x("verifying",e)},i=u=>u.success?(n(x("success",e),!1),this.handleSuccess(),!0):u.code==="FORBIDDEN"||u.error==="registration_closed"?(this.showFullError(Q({message:u.error,code:u.code||u.error},e)),!0):!1,d=()=>{r.innerHTML="",n(x("passkeyNoLocal",e),!1);let u=document.createElement("button");u.className="btn",u.id="passkey-btn",u.innerHTML=`${ue} ${W(x("passkeyUseAnotherDevice",e))}`,r.appendChild(u),u.addEventListener("click",()=>y());let b=document.createElement("button");b.type="button",b.className="passkey-alt",b.textContent=x("passkeyCreateInstead",e),r.appendChild(b),b.addEventListener("click",()=>m())},m=()=>{r.innerHTML="",a();let u=document.createElement("div");u.className="name-row visible",u.id="passkey-name-row";let b=document.createElement("input");b.className="input",b.id="passkey-name-input",b.type="text",b.placeholder=x("namePlaceholder",e),b.autocomplete="name",u.appendChild(b),r.appendChild(u);let A=document.createElement("button");A.className="btn",A.id="passkey-btn",A.innerHTML=`${ue} ${W(x("passkeyCreate",e))}`,r.appendChild(A);let _=document.createElement("button");_.type="button",_.className="passkey-alt",_.textContent=x("passkeyBackToSignIn",e),r.appendChild(_);let T=async()=>{A.disabled=!0;let E=await se({registerOnly:!0,name:b.value.trim(),onStatus:n,texts:s,locale:e,prefix:this.options.passkeyPrefix,invitationId:this.options.invitationId});i(E)||(E.error&&n(E.error,!0),A.disabled=!1)};A.addEventListener("click",T),b.addEventListener("keydown",E=>{E.key==="Enter"&&T()}),_.addEventListener("click",()=>f()),b.focus()},y=async()=>{let u=r.querySelector("#passkey-btn");u&&(u.disabled=!0);let b=await se({authOnly:!0,onStatus:n,texts:s,locale:e,prefix:this.options.passkeyPrefix,invitationId:this.options.invitationId});if(!i(b)){if(b.error&&b.error!=="no_passkey"){n(b.error,!0),u&&(u.disabled=!1);return}d()}},f=()=>{r.innerHTML="",a();let u=document.createElement("button");u.className="btn",u.id="passkey-btn",u.innerHTML=`${ue} ${W(x("passkeySignIn",e))}`,r.appendChild(u),u.addEventListener("click",()=>y());let b=document.createElement("button");b.type="button",b.className="passkey-alt",b.textContent=x("passkeyFirstTime",e),r.appendChild(b),b.addEventListener("click",()=>m())};this.options.invitationId?m():f()}startOAuthPopup(o,e){let r=this.config.servicePrefix??"/.well-known/service",t=this.options.masterOAuthOrigin?`${this.options.masterOAuthOrigin}${r}`:r,n=new URL(t,window.location.href).origin,a=`${t}/api/oauth/${encodeURIComponent(o)}/login?returnUrl=${encodeURIComponent(window.location.href)}`,s=500,i=620,d=window.screenX+(window.innerWidth-s)/2,m=window.screenY+(window.innerHeight-i)/2,y=window.open(a,"oauth-login:popup",`left=${d},top=${m},width=${s},height=${i},resizable,scrollbars=yes,status=1,popup`);if(!y){window.location.href=a;return}let f=e.innerHTML;e.innerHTML='<span class="oauth-spinner"></span> Authorizing...',e.disabled=!0,e.classList.add("oauth-btn-loading");let u=()=>{e.innerHTML=f,e.disabled=!1,e.classList.remove("oauth-btn-loading")},b=!1,A,_=()=>{b||(b=!0,S(),e.innerHTML='<span class="oauth-check">\u2713</span> Success',this.handleSuccess())},T=async R=>{if(R.origin!==n||!R.data||R.data.type!=="authorization_response"||b)return;E!==void 0&&(clearInterval(E),E=void 0);try{y.close()}catch{}if(R.data.error){u(),S();return}let{code:L,state:V}=R.data.response??R.data;if(!L){u(),S();return}e.innerHTML='<span class="oauth-spinner"></span> Signing in...',e.disabled=!0;try{let l={provider:o,code:L,state:V};this.options.invitationId&&(l.invitationId=this.options.invitationId),await this.http.post(`${r}/api/oauth/login`,l),_()}catch(l){let g=l instanceof Error?l.message:"",c=l instanceof Error&&"code"in l?l.code:"";c==="FORBIDDEN"||g==="registration_closed"||c==="registration_closed"?(b=!0,S(),this.showFullError(Q(l,this.options.locale))):u()}},E=setInterval(()=>{let R=!1;try{R=y.closed}catch{return}if(!R)return;E!==void 0&&(clearInterval(E),E=void 0),u();let L=()=>{this.http.get(`${r}/api/did/session`).then(V=>{V?.authenticated&&_()}).catch(()=>{})};L(),A=setInterval(L,500)},500),D=setTimeout(()=>{b||(S(),u())},300*1e3),S=()=>{E!==void 0&&(clearInterval(E),E=void 0),A!==void 0&&(clearInterval(A),A=void 0),clearTimeout(D),window.removeEventListener("message",T)};window.addEventListener("message",T)}renderSecondaryGrid(o,e,r){let t=document.createElement("div");if(t.className="methods-grid",r.includes("oauth")&&this.options.oauthProviders?.length){let n=(this.options.oauthProviders??[]).filter(a=>a.enabled);for(let a of n){let s=document.createElement("button");s.className="method-btn",s.dataset.provider=a.id;let i=We(a.id);s.innerHTML=`${i} ${W(a.name)}`,t.appendChild(s),s.addEventListener("click",()=>{this.startOAuthPopup(a.id,s)})}}if(r.includes("email")){let n=document.createElement("button");n.className="method-btn",n.id="email-btn",n.innerHTML=`${Fe} ${W(x("emailButton",e))}`,t.appendChild(n),n.addEventListener("click",()=>{this.switchView("email")})}if(r.includes("did-connect")){let n=document.createElement("button");n.className="method-btn",n.id="did-wallet-btn";let a=t.children.length>0?x("didWalletButtonShort",e):x("didWalletButton",e);n.innerHTML=`${xe} ${W(a)}`,t.appendChild(n),n.addEventListener("click",()=>{this.switchView("qr")})}o.appendChild(t)}async startDIDConnectInView(o,e,r,t){o.textContent=x("connecting",t);try{this.tokenSession?.destroy(),this.tokenSession=new ee(this.config,this.http),this.tokenSession.on("succeed",async()=>{this.showConnectResult(e,r,o,x("verifying",t));try{let a=this.config.servicePrefix??"/.well-known/service";await this.http.post(`${a}/api/did/connect/complete`,{token:this.tokenSession.state.token}),this.showConnectSuccess(e,r,o,t),this.handleSuccess()}catch(a){this.showConnectResult(e,r,o,Q(a,t),!0)}}),this.tokenSession.on("timeout",()=>{o.textContent=x("timeout",t);let a=document.createElement("div");a.className="qr-timeout-overlay",a.innerHTML=`<span class="timeout-text">${W(x("timeout",t))}</span>`;let s=document.createElement("button");s.className="refresh-btn",s.textContent=x("refreshQR",t),s.addEventListener("click",()=>{a.remove(),de(e),e.innerHTML='<div class="qr-placeholder"><span class="qr-spinner"></span></div>',r.disabled=!0,this.startDIDConnectInView(o,e,r,t)}),a.appendChild(s),e.appendChild(a)}),this.tokenSession.on("error",a=>{this.showConnectResult(e,r,o,Q(a,t),!0)}),this.tokenSession.on("statusChange",a=>{a.status==="scanned"&&this.showConnectScanned(e,r,o,t)});let n=await this.tokenSession.create({locale:t});n.url&&(Ze(e,n.url),r.disabled=!1,r.addEventListener("click",()=>{this.showConnectScanned(e,r,o,t),this.openInWallet(n.url,t)})),o.textContent=x("scanWithWallet",t),this.tokenSession.startPolling()}catch(n){o.textContent=Q(n,t),de(e)}}showFullError(o){if(!this.cardEl)return;let e=this.options.locale;this.tokenSession&&(this.tokenSession.destroy(),this.tokenSession=null),this.cardEl.innerHTML="",this.cardEl.dataset.view="error",this.renderLocaleSwitcher(this.cardEl);let r=document.createElement("div");r.className="connect-result",r.innerHTML='<div class="result-icon result-error">\u2715</div>',this.cardEl.appendChild(r);let t=document.createElement("div");t.className="status error",t.textContent=o,this.cardEl.appendChild(t);let n=document.createElement("button");n.className="btn btn-secondary result-back-btn",n.textContent=x("back",e),n.addEventListener("click",()=>this.switchView("methods")),this.cardEl.appendChild(n),this.renderTrustFooter(this.cardEl,e)}showConnectScanned(o,e,r,t="en"){o.style.display="none",e.style.display="none";let n=o.parentElement?.querySelector(".connect-result");n||(n=document.createElement("div"),n.className="connect-result",o.parentElement?.insertBefore(n,r)),n.innerHTML=`<div class="connect-status-icon">
715
+ `;function G(o){let e=new Uint8Array(o),r="";for(let t=0;t<e.length;t++)r+=String.fromCharCode(e[t]);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function te(o){let e=o.replace(/-/g,"+").replace(/_/g,"/"),r=atob(e),t=new Uint8Array(r.length);for(let n=0;n<r.length;n++)t[n]=r.charCodeAt(n);return t.buffer}function tt(o){let e=o.response;return{id:o.id,rawId:G(o.rawId),type:o.type,response:{attestationObject:G(e.attestationObject),clientDataJSON:G(e.clientDataJSON)},clientExtensionResults:o.getClientExtensionResults(),authenticatorAttachment:o.authenticatorAttachment}}function nt(o){let e=o.response;return{id:o.id,rawId:G(o.rawId),type:o.type,response:{authenticatorData:G(e.authenticatorData),clientDataJSON:G(e.clientDataJSON),signature:G(e.signature),userHandle:e.userHandle?G(e.userHandle):void 0},clientExtensionResults:o.getClientExtensionResults(),authenticatorAttachment:o.authenticatorAttachment}}async function se(o){let e=o.prefix||"/.well-known/service/api/passkey",r=o.onStatus||(()=>{}),t=o.authOnly||!1,n=o.registerOnly||!1,a=o.invitationId||void 0,s=o.locale,i=o.texts||{},d=i.waiting||x("passkeyWaiting",s),m=i.creating||x("passkeyCreating",s),y=i.verifying||x("verifying",s);async function f(){let E=await fetch(`${e}/auth`,{method:"GET"});if(!E.ok)throw new Error(x("authFailed",s));return E.json()}async function u(E){let D=[];E&&D.push(`name=${encodeURIComponent(E)}`),a&&D.push(`invitationId=${encodeURIComponent(a)}`);let S=D.length?`?${D.join("&")}`:"",R=await fetch(`${e}/register${S}`,{method:"GET"});if(!R.ok)throw new Error(x("registrationFailed",s));return R.json()}function b(E,D){let S=new Error(E);throw D&&(S.code=D),S}async function A(E,D){let S=await fetch(`${e}/auth`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({challengeId:E,credential:D})});if(!S.ok){let R=await S.json().catch(()=>({}));b(R.error||x("authFailed",s),R.code)}return S.json()}async function _(E,D,S){let R=await fetch(`${e}/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({challengeId:E,credential:D,name:S||void 0})});if(!R.ok){let L=await R.json().catch(()=>({}));b(L.error||x("registrationFailed",s),L.code)}return R.json()}if(!n){r(d,!1);try{let E=await f(),{challengeId:D}=E,S=E.authentication||E,R={publicKey:{...S,challenge:te(S.challenge),allowCredentials:(S.allowCredentials||[]).map(V=>({...V,id:te(V.id)}))}},L;try{L=await navigator.credentials.get(R)}catch{if(t)return{success:!1,error:"no_passkey"}}if(L){let V=nt(L);return r(y,!1),await A(D,V),{success:!0}}}catch(E){let D=E instanceof Error?E.message:x("authFailed",s),S=E instanceof Error?E.code:void 0;return r(D,!0),{success:!1,error:D,code:S}}}let T=await u(o.name||"");if(T.registrationAllowed===!1)return r(x("regClosed",s),!0),{success:!1,error:"registration_closed"};r(m,!1);try{let E=T.registration||T,D={publicKey:{...E,challenge:te(E.challenge),user:{...E.user,id:te(E.user.id)},excludeCredentials:(E.excludeCredentials||[]).map(L=>({...L,id:te(L.id)}))}},S=await navigator.credentials.create(D),R=tt(S);return r(y,!1),await _(T.challengeId,R,o.name||""),{success:!0}}catch(E){let D=E instanceof Error?E.message:x("passkeySetupFailed",s),S=E instanceof Error?E.code:void 0;return r(D,!0),{success:!1,error:D,code:S}}}function Q(o,e){let r=o instanceof Error?o.message:"",t=o instanceof Error&&"code"in o?o.code:"";return t==="FORBIDDEN"?x("accessDenied",e):r==="registration_closed"||t==="registration_closed"?x("regClosed",e):r||x("authFailed",e)}var rt="https://web.abtwallet.io/";function ot(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function st(){return typeof window>"u"?null:window.ABT_DEV??window.ABT??null}function W(o){return o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}var Ce=class{container;config;http;options;tokenSession=null;styleEl=null;mounted=!1;currentView="methods";cardEl=null;mediaQuery=null;mediaListener=null;constructor(o,e,r,t){if(this.container=o,this.config=e,this.http=r,this.options={methods:["passkey","did-connect"],locale:"en",...t},!this.options.invitationId&&typeof document<"u"){let n=document.cookie.match(/(?:^|;\s*)pending_invitation=([^;]*)/);if(n)try{this.options.invitationId=decodeURIComponent(n[1])}catch{}}}mount(){if(this.mounted)return;this.mounted=!0,this.styleEl=document.createElement("style"),this.styleEl.textContent=et,this.container.appendChild(this.styleEl),this.applyTheme();let o=this.filterMethods(this.options.methods);this.renderCard(o)}destroy(){this.tokenSession&&(this.tokenSession.destroy(),this.tokenSession=null),this.mediaQuery&&this.mediaListener&&(this.mediaQuery.removeEventListener("change",this.mediaListener),this.mediaQuery=null,this.mediaListener=null),document.documentElement.removeAttribute("data-theme"),this.container.innerHTML="",this.styleEl=null,this.cardEl=null,this.currentView="methods",this.mounted=!1}update(o){Object.assign(this.options,o),this.mounted&&(this.destroy(),this.mount())}applyTheme(){let o=this.options.theme??"dark";if(o==="light")document.documentElement.dataset.theme="light";else if(o==="auto"&&typeof window.matchMedia=="function"){let e=window.matchMedia("(prefers-color-scheme: light)");this.mediaQuery=e;let r=t=>{t?document.documentElement.dataset.theme="light":document.documentElement.removeAttribute("data-theme")};r(e.matches),this.mediaListener=t=>r(t.matches),e.addEventListener("change",this.mediaListener)}}filterMethods(o){return o.filter(e=>e==="passkey"?typeof window<"u"&&window.PublicKeyCredential!==void 0&&typeof window.PublicKeyCredential=="function":!0)}renderCard(o){let e=document.createElement("div");e.className="card",this.cardEl=e,this.container.appendChild(e),this.switchView("methods",o)}renderLocaleSwitcher(o){if(le.length<2)return;let e=document.createElement("div");e.className="locale-switcher";let r=this.options.locale,t=le.find(a=>a.code!==r)??le[0],n=document.createElement("button");n.type="button",n.className="locale-btn",n.innerHTML=`${Ke} ${W(t.label)}`,n.title=t.label,n.addEventListener("click",()=>{this.options.onLocaleChange?.(t.code),this.update({locale:t.code})}),e.appendChild(n),o.appendChild(e)}switchView(o,e){if(!this.cardEl)return;let r=this.options.locale;switch(this.currentView==="qr"&&o!=="qr"&&this.tokenSession&&(this.tokenSession.destroy(),this.tokenSession=null),this.currentView=o,this.cardEl.innerHTML="",this.cardEl.dataset.view=o,this.renderLocaleSwitcher(this.cardEl),o){case"methods":this.renderMethodsView(this.cardEl,r,e??this.filterMethods(this.options.methods));break;case"qr":this.renderQRView(this.cardEl,r);break;case"email":this.renderEmailView(this.cardEl,r);break}}renderMethodsView(o,e,r){this.renderHomeLink(o,e),this.renderBrandHeader(o,e);let t=this.options.methods.includes("passkey");if(t&&!r.includes("passkey")){let s=document.createElement("div");s.className="compat-warning",s.textContent=x("passkeyUnsupported",e),o.appendChild(s)}let n=r.includes("passkey");n&&this.renderPasskeySection(o,e);let a=r.filter(s=>s!=="passkey");if(n&&a.length>0&&this.renderDivider(o,e),a.length>0&&this.renderSecondaryGrid(o,e,r),r.length===0&&!t){let s=document.createElement("p");s.className="subtitle",s.textContent="No authentication methods available.",o.appendChild(s)}this.renderTrustFooter(o,e)}renderQRView(o,e){this.renderBackButton(o,e);let r=document.createElement("h2");r.className="view-title",r.textContent=x("scanTitle",e),o.appendChild(r);let t=document.createElement("div");t.id="did-connect-qr",t.className="qr-view",t.innerHTML='<div class="qr-placeholder"><span class="qr-spinner"></span></div>',o.appendChild(t);let n=document.createElement("button");n.className="btn btn-secondary deep-link-btn",n.id="did-wallet-open-btn",n.textContent=x("openInWallet",e),n.disabled=!0,o.appendChild(n);let a=document.createElement("div");a.id="did-connect-status",a.className="status",o.appendChild(a),this.renderTrustFooter(o,e),this.startDIDConnectInView(a,t,n,e)}renderEmailView(o,e){this.renderBackButton(o,e);let r=document.createElement("h2");r.className="view-title",r.textContent=x("emailTitle",e),o.appendChild(r);let t=document.createElement("input");t.className="input",t.type="email",t.placeholder=x("emailPlaceholder",e),o.appendChild(t);let n=document.createElement("button");n.className="btn",n.textContent=x("emailSubmit",e),o.appendChild(n);let a=document.createElement("div");a.className="status",o.appendChild(a);let s=document.createElement("div");s.className="email-code-section",s.style.display="none";let i=document.createElement("input");i.className="input",i.type="text",i.inputMode="numeric",i.maxLength=8,i.autocomplete="one-time-code",i.placeholder=x("emailCodePlaceholder",e),s.appendChild(i);let d=document.createElement("button");d.className="btn",d.textContent=x("emailVerify",e),s.appendChild(d);let m=document.createElement("button");m.className="btn btn-secondary",m.textContent=x("emailResend",e),m.style.marginTop="8px",s.appendChild(m),o.insertBefore(s,a),this.renderTrustFooter(o,e);let y="",f,u=this.config.servicePrefix??"/.well-known/service",b=async()=>{if(n.disabled)return;let _=t.value.trim();if(!_?.includes("@")){a.textContent=x("emailInvalid",e),a.className="status error";return}n.disabled=!0,a.textContent=x("emailSending",e),a.className="status";try{let T=await this.http.post(`${u}/api/email/sendCode`,{email:_,locale:e});y=_,f=T?.id,t.style.display="none",n.style.display="none",s.style.display="",r.textContent=x("emailVerify",e),a.textContent=x("emailSent",e,{email:_}),a.className="status",i.focus()}catch(T){let E=T instanceof Error?T.message:"Failed to send email";a.textContent=E,a.className="status error",n.disabled=!1}},A=async()=>{if(d.disabled)return;let _=i.value.trim();if(!_||_.length!==8){a.textContent=x("emailCodeInvalid",e),a.className="status error";return}d.disabled=!0,a.textContent=x("verifying",e),a.className="status";try{await this.http.post(`${u}/api/email/login`,{code:_,id:f}),a.textContent=x("success",e),a.className="status",this.handleSuccess()}catch(T){T instanceof Error&&"code"in T&&T.code==="FORBIDDEN"?this.showFullError(Q(T,e)):(a.textContent=Q(T,e),a.className="status error",d.disabled=!1,i.value="",i.focus())}};n.addEventListener("click",b),t.addEventListener("keydown",_=>{_.key==="Enter"&&b()}),d.addEventListener("click",A),i.addEventListener("keydown",_=>{_.key==="Enter"&&A()}),m.addEventListener("click",async()=>{m.disabled=!0,a.textContent=x("emailSending",e),a.className="status";try{f=(await this.http.post(`${u}/api/email/sendCode`,{email:y,locale:e}))?.id,a.textContent=x("emailSent",e,{email:y}),a.className="status"}catch(_){let T=_ instanceof Error?_.message:"Failed to resend";a.textContent=T,a.className="status error"}m.disabled=!1})}renderBackButton(o,e){let r=document.createElement("button");r.className="back-btn",r.innerHTML=`${Ee} ${W(x("back",e))}`,r.addEventListener("click",()=>this.switchView("methods")),o.appendChild(r)}renderHomeLink(o,e){let{homeUrl:r,onCancel:t}=this.options;if(!t&&!r)return;let n=`${Ee} ${W(x("cancel",e))}`;if(t){let a=document.createElement("button");a.type="button",a.className="home-link",a.innerHTML=n,a.addEventListener("click",()=>this.options.onCancel?.()),o.appendChild(a)}else{let a=document.createElement("a");a.className="home-link",a.href=r,a.innerHTML=n,o.appendChild(a)}}renderBrandHeader(o,e){let r=document.createElement("div");if(r.className="brand-header",this.options.appLogo){let n=document.createElement("img");n.className="app-logo",n.src=W(this.options.appLogo),n.alt=this.options.appName?W(this.options.appName):"",n.width=48,n.height=48,r.appendChild(n)}let t=document.createElement("h1");if(this.options.appName?t.textContent=x("signInTo",e,{appName:this.options.appName}):t.textContent=x("signIn",e),r.appendChild(t),this.options.masterAppName){let n=document.createElement("p");n.className="federated-hint",n.textContent=x("federatedBy",e,{masterName:this.options.masterAppName}),r.appendChild(n)}o.appendChild(r)}renderTrustFooter(o,e){let r=document.createElement("div");r.className="login-footer";let t=document.createElement("div");t.className="secured-badge",t.innerHTML=`${Ue} ${W(x("securedBy",e))}`,r.appendChild(t);let{privacyUrl:n,termsUrl:a}=this.options;if(n||a){let s=document.createElement("div");if(s.className="footer-links",n){let i=document.createElement("a");i.href=n,i.target="_blank",i.rel="noopener noreferrer",i.textContent=x("privacy",e),s.appendChild(i)}if(n&&a&&s.appendChild(document.createTextNode(" \xB7 ")),a){let i=document.createElement("a");i.href=a,i.target="_blank",i.rel="noopener noreferrer",i.textContent=x("terms",e),s.appendChild(i)}r.appendChild(s)}o.appendChild(r)}renderDivider(o,e){let r=document.createElement("div");r.className="divider",r.textContent=x("or",e),o.appendChild(r)}renderPasskeySection(o,e){let r=document.createElement("div");r.className="passkey-section",o.appendChild(r);let t=document.createElement("div");t.className="status",t.id="passkey-status",o.appendChild(t);let n=(u,b)=>{t.textContent=u,t.className=`status${b?" error":""}`},a=()=>n("",!1),s={waiting:x("passkeyWaiting",e),creating:x("passkeyCreating",e),verifying:x("verifying",e)},i=u=>u.success?(n(x("success",e),!1),this.handleSuccess(),!0):u.code==="FORBIDDEN"||u.error==="registration_closed"?(this.showFullError(Q({message:u.error,code:u.code||u.error},e)),!0):!1,d=()=>{r.innerHTML="",n(x("passkeyNoLocal",e),!1);let u=document.createElement("button");u.className="btn",u.id="passkey-btn",u.innerHTML=`${ue} ${W(x("passkeyUseAnotherDevice",e))}`,r.appendChild(u),u.addEventListener("click",()=>y());let b=document.createElement("button");b.type="button",b.className="passkey-alt",b.textContent=x("passkeyCreateInstead",e),r.appendChild(b),b.addEventListener("click",()=>m())},m=()=>{r.innerHTML="",a();let u=document.createElement("div");u.className="name-row visible",u.id="passkey-name-row";let b=document.createElement("input");b.className="input",b.id="passkey-name-input",b.type="text",b.placeholder=x("namePlaceholder",e),b.autocomplete="name",u.appendChild(b),r.appendChild(u);let A=document.createElement("button");A.className="btn",A.id="passkey-btn",A.innerHTML=`${ue} ${W(x("passkeyCreate",e))}`,r.appendChild(A);let _=document.createElement("button");_.type="button",_.className="passkey-alt",_.textContent=x("passkeyBackToSignIn",e),r.appendChild(_);let T=async()=>{if(A.disabled)return;A.disabled=!0;let E=await se({registerOnly:!0,name:b.value.trim(),onStatus:n,texts:s,locale:e,prefix:this.options.passkeyPrefix,invitationId:this.options.invitationId});i(E)||(E.error&&n(E.error,!0),A.disabled=!1)};A.addEventListener("click",T),b.addEventListener("keydown",E=>{E.key==="Enter"&&T()}),_.addEventListener("click",()=>f()),b.focus()},y=async()=>{let u=r.querySelector("#passkey-btn");u&&(u.disabled=!0);let b=await se({authOnly:!0,onStatus:n,texts:s,locale:e,prefix:this.options.passkeyPrefix,invitationId:this.options.invitationId});if(!i(b)){if(b.error&&b.error!=="no_passkey"){n(b.error,!0),u&&(u.disabled=!1);return}d()}},f=()=>{r.innerHTML="",a();let u=document.createElement("button");u.className="btn",u.id="passkey-btn",u.innerHTML=`${ue} ${W(x("passkeySignIn",e))}`,r.appendChild(u),u.addEventListener("click",()=>y());let b=document.createElement("button");b.type="button",b.className="passkey-alt",b.textContent=x("passkeyFirstTime",e),r.appendChild(b),b.addEventListener("click",()=>m())};this.options.invitationId?m():f()}startOAuthPopup(o,e){let r=this.config.servicePrefix??"/.well-known/service",t=this.options.masterOAuthOrigin?`${this.options.masterOAuthOrigin}${r}`:r,n=new URL(t,window.location.href).origin,a=`${t}/api/oauth/${encodeURIComponent(o)}/login?returnUrl=${encodeURIComponent(window.location.href)}`,s=500,i=620,d=window.screenX+(window.innerWidth-s)/2,m=window.screenY+(window.innerHeight-i)/2,y=window.open(a,"oauth-login:popup",`left=${d},top=${m},width=${s},height=${i},resizable,scrollbars=yes,status=1,popup`);if(!y){window.location.href=a;return}let f=e.innerHTML;e.innerHTML='<span class="oauth-spinner"></span> Authorizing...',e.disabled=!0,e.classList.add("oauth-btn-loading");let u=()=>{e.innerHTML=f,e.disabled=!1,e.classList.remove("oauth-btn-loading")},b=!1,A,_=()=>{b||(b=!0,S(),e.innerHTML='<span class="oauth-check">\u2713</span> Success',this.handleSuccess())},T=async R=>{if(R.origin!==n||!R.data||R.data.type!=="authorization_response"||b)return;E!==void 0&&(clearInterval(E),E=void 0);try{y.close()}catch{}if(R.data.error){u(),S();return}let{code:L,state:V}=R.data.response??R.data;if(!L){u(),S();return}e.innerHTML='<span class="oauth-spinner"></span> Signing in...',e.disabled=!0;try{let l={provider:o,code:L,state:V};this.options.invitationId&&(l.invitationId=this.options.invitationId),await this.http.post(`${r}/api/oauth/login`,l),_()}catch(l){let g=l instanceof Error?l.message:"",c=l instanceof Error&&"code"in l?l.code:"";c==="FORBIDDEN"||g==="registration_closed"||c==="registration_closed"?(b=!0,S(),this.showFullError(Q(l,this.options.locale))):u()}},E=setInterval(()=>{let R=!1;try{R=y.closed}catch{return}if(!R)return;E!==void 0&&(clearInterval(E),E=void 0),u();let L=()=>{this.http.get(`${r}/api/did/session`).then(V=>{V?.authenticated&&_()}).catch(()=>{})};L(),A=setInterval(L,500)},500),D=setTimeout(()=>{b||(S(),u())},300*1e3),S=()=>{E!==void 0&&(clearInterval(E),E=void 0),A!==void 0&&(clearInterval(A),A=void 0),clearTimeout(D),window.removeEventListener("message",T)};window.addEventListener("message",T)}renderSecondaryGrid(o,e,r){let t=document.createElement("div");if(t.className="methods-grid",r.includes("oauth")&&this.options.oauthProviders?.length){let n=(this.options.oauthProviders??[]).filter(a=>a.enabled);for(let a of n){let s=document.createElement("button");s.className="method-btn",s.dataset.provider=a.id;let i=We(a.id);s.innerHTML=`${i} ${W(a.name)}`,t.appendChild(s),s.addEventListener("click",()=>{this.startOAuthPopup(a.id,s)})}}if(r.includes("email")){let n=document.createElement("button");n.className="method-btn",n.id="email-btn",n.innerHTML=`${Fe} ${W(x("emailButton",e))}`,t.appendChild(n),n.addEventListener("click",()=>{this.switchView("email")})}if(r.includes("did-connect")){let n=document.createElement("button");n.className="method-btn",n.id="did-wallet-btn";let a=t.children.length>0?x("didWalletButtonShort",e):x("didWalletButton",e);n.innerHTML=`${xe} ${W(a)}`,t.appendChild(n),n.addEventListener("click",()=>{this.switchView("qr")})}o.appendChild(t)}async startDIDConnectInView(o,e,r,t){o.textContent=x("connecting",t);try{this.tokenSession?.destroy(),this.tokenSession=new ee(this.config,this.http),this.tokenSession.on("succeed",async()=>{this.showConnectResult(e,r,o,x("verifying",t));try{let a=this.config.servicePrefix??"/.well-known/service";await this.http.post(`${a}/api/did/connect/complete`,{token:this.tokenSession.state.token}),this.showConnectSuccess(e,r,o,t),this.handleSuccess()}catch(a){this.showConnectResult(e,r,o,Q(a,t),!0)}}),this.tokenSession.on("timeout",()=>{o.textContent=x("timeout",t);let a=document.createElement("div");a.className="qr-timeout-overlay",a.innerHTML=`<span class="timeout-text">${W(x("timeout",t))}</span>`;let s=document.createElement("button");s.className="refresh-btn",s.textContent=x("refreshQR",t),s.addEventListener("click",()=>{a.remove(),de(e),e.innerHTML='<div class="qr-placeholder"><span class="qr-spinner"></span></div>',r.disabled=!0,this.startDIDConnectInView(o,e,r,t)}),a.appendChild(s),e.appendChild(a)}),this.tokenSession.on("error",a=>{this.showConnectResult(e,r,o,Q(a,t),!0)}),this.tokenSession.on("statusChange",a=>{a.status==="scanned"&&this.showConnectScanned(e,r,o,t)});let n=await this.tokenSession.create({locale:t});n.url&&(Ze(e,n.url),r.disabled=!1,r.addEventListener("click",()=>{this.showConnectScanned(e,r,o,t),this.openInWallet(n.url,t)})),o.textContent=x("scanWithWallet",t),this.tokenSession.startPolling()}catch(n){o.textContent=Q(n,t),de(e)}}showFullError(o){if(!this.cardEl)return;let e=this.options.locale;this.tokenSession&&(this.tokenSession.destroy(),this.tokenSession=null),this.cardEl.innerHTML="",this.cardEl.dataset.view="error",this.renderLocaleSwitcher(this.cardEl);let r=document.createElement("div");r.className="connect-result",r.innerHTML='<div class="result-icon result-error">\u2715</div>',this.cardEl.appendChild(r);let t=document.createElement("div");t.className="status error",t.textContent=o,this.cardEl.appendChild(t);let n=document.createElement("button");n.className="btn btn-secondary result-back-btn",n.textContent=x("back",e),n.addEventListener("click",()=>this.switchView("methods")),this.cardEl.appendChild(n),this.renderTrustFooter(this.cardEl,e)}showConnectScanned(o,e,r,t="en"){o.style.display="none",e.style.display="none";let n=o.parentElement?.querySelector(".connect-result");n||(n=document.createElement("div"),n.className="connect-result",o.parentElement?.insertBefore(n,r)),n.innerHTML=`<div class="connect-status-icon">
716
716
  <div class="connect-spinner-ring"></div>
717
717
  <span class="connect-status-badge">${xe}</span>
718
718
  </div>`,r.textContent=x("waitingWallet",t),r.className="status";let a=r.parentElement?.querySelector(".connect-subtitle");a||(a=document.createElement("p"),a.className="connect-subtitle",r.parentElement?.insertBefore(a,r.nextSibling)),a.textContent=x("walletContinue",t);let s=r.parentElement?.querySelector(".result-back-btn");s||(s=document.createElement("button"),s.className="btn btn-secondary result-back-btn",s.textContent=x("back",t),s.addEventListener("click",()=>this.switchView("methods")),a.parentElement?.insertBefore(s,a.nextSibling))}showConnectSuccess(o,e,r,t="en"){o.style.display="none",e.style.display="none";let n=o.parentElement?.querySelector(".connect-result");n||(n=document.createElement("div"),n.className="connect-result",o.parentElement?.insertBefore(n,r)),n.innerHTML=`<div class="connect-status-icon connect-success">
@@ -28,6 +28,12 @@ export interface BuildHandlerOptions {
28
28
  packageBranding?: PackageBranding;
29
29
  ogRenderer?: OgWorkerRenderer;
30
30
  capabilityKey?: string;
31
+ /**
32
+ * Session cookies omit the Domain attribute. Must be part of the handler
33
+ * cache key: the same rpID with the opposite flag is a different cookie
34
+ * scope and cannot share one AuthHandler. Default false.
35
+ */
36
+ hostOnlyCookie?: boolean;
31
37
  }
32
38
  /** Clear cached config + handler for an instance (called after registerApp). */
33
39
  export declare function invalidateConfigCache(instanceDid: string): void;
@@ -41,7 +47,8 @@ export declare function _resetConfigCacheForTesting(): void;
41
47
  * - Multi-tenant: instanceDid → load from D1 settings
42
48
  *
43
49
  * @param rpDomain - Root domain for cross-subdomain cookie sharing (e.g. "afsd.dev").
44
- * When set, cookies are issued with `Domain=<rpDomain>` so all subdomains share the session.
50
+ * When set, cookies are scoped to that parent domain so subdomains share the session,
51
+ * unless `options.hostOnlyCookie` is true (the Domain attribute is then omitted).
45
52
  * Passed via X-Arc-Domain header from arc-computer.
46
53
  */
47
54
  export declare function buildHandler(instanceDid: string | undefined, env: BlockletServiceEnv, rpDomain?: string, options?: BuildHandlerOptions): Promise<AuthHandler>;
@@ -1 +1 @@
1
- {"version":3,"file":"blocklet-service.d.ts","sourceRoot":"","sources":["../src/blocklet-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,KAAK,kBAAkB,EAAoD,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,4BAA4B,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,KAAK,eAAe,EAKrB,MAAM,uBAAuB,CAAC;AAK/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA0FD,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAI/D;AAOD,gFAAgF;AAChF,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED,2CAA2C;AAC3C,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD;AAyLD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,EAAE,kBAAkB,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CA6FtB;AAkCD,mEAAmE;AACnE,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,EAAE,kBAAkB,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CA0BtB;;mBAGsB,OAAO,OAAO,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;;AAD3E,wBAyBE"}
1
+ {"version":3,"file":"blocklet-service.d.ts","sourceRoot":"","sources":["../src/blocklet-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,KAAK,kBAAkB,EAAoD,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,4BAA4B,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,KAAK,eAAe,EAKrB,MAAM,uBAAuB,CAAC;AAK/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA0FD,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAI/D;AAOD,gFAAgF;AAChF,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED,2CAA2C;AAC3C,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD;AAyLD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,EAAE,kBAAkB,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CA+FtB;AAkCD,mEAAmE;AACnE,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,EAAE,kBAAkB,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CA4BtB;;mBAGsB,OAAO,OAAO,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;;AAD3E,wBAyBE"}
@@ -273,7 +273,8 @@ async function resolveFederationConfig(effectiveDid, store, cfg) {
273
273
  * - Multi-tenant: instanceDid → load from D1 settings
274
274
  *
275
275
  * @param rpDomain - Root domain for cross-subdomain cookie sharing (e.g. "afsd.dev").
276
- * When set, cookies are issued with `Domain=<rpDomain>` so all subdomains share the session.
276
+ * When set, cookies are scoped to that parent domain so subdomains share the session,
277
+ * unless `options.hostOnlyCookie` is true (the Domain attribute is then omitted).
277
278
  * Passed via X-Arc-Domain header from arc-computer.
278
279
  */
279
280
  export async function buildHandler(instanceDid, env, rpDomain, options) {
@@ -321,6 +322,7 @@ export async function buildHandler(instanceDid, env, rpDomain, options) {
321
322
  resendApiKey: cfg.resendApiKey,
322
323
  emailFrom: cfg.emailFrom,
323
324
  rpID: rpDomain,
325
+ hostOnlyCookie: options?.hostOnlyCookie,
324
326
  readSession: options?.readSession,
325
327
  logger,
326
328
  getAccountState: options?.getAccountState,
@@ -353,6 +355,7 @@ export async function buildHandler(instanceDid, env, rpDomain, options) {
353
355
  instanceDid,
354
356
  r2: cfg.bucket,
355
357
  rpID: rpDomain,
358
+ hostOnlyCookie: options?.hostOnlyCookie,
356
359
  readSession: options?.readSession,
357
360
  logger,
358
361
  getAccountState: options?.getAccountState,
@@ -395,11 +398,13 @@ export async function getOrBuildHandler(instanceDid, env, rpDomain, options) {
395
398
  const normalizedRPDomain = normalizeRPDomain(rpDomain);
396
399
  const packageBranding = sanitizePackageBranding(options?.packageBranding);
397
400
  const capabilityKey = options?.capabilityKey ?? (options?.ogRenderer ? "og-renderer" : "default");
401
+ const hostOnlyKey = options?.hostOnlyCookie === true ? "host-only" : "parent-domain";
398
402
  const cacheKey = [
399
403
  instanceDid ?? SINGLE_TENANT_KEY,
400
404
  normalizedRPDomain ?? "",
401
405
  packageBrandingCacheToken(packageBranding),
402
406
  capabilityKey,
407
+ hostOnlyKey,
403
408
  ].join("::");
404
409
  const cached = _handlerCache.get(cacheKey);
405
410
  if (cached && Date.now() - cached.at < CONFIG_TTL) {
@@ -1 +1 @@
1
- {"version":3,"file":"blocklet-service.js","sourceRoot":"","sources":["../src/blocklet-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAuD,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAoB,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,OAAO,EAAgC,cAAc,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAEzD,OAAO,EAEL,yBAAyB,EACzB,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAyB9C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkD,CAAC;AAC/E,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAE9C,SAAS,mBAAmB,CAAC,GAA0B;IACrD,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,IAAI;QACnB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,WAAmB,EACnB,KAAc,EACd,QAAyB;IAEzB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,UAAU;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAExE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9D,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC;QACvC,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC;QACxC,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,cAAc,CAAC;QAC7C,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;KAC1C,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,QAAQ,EAAE,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAmB;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,WAAW;YACX,aAAa,EAAE,OAAO;YACtB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;QACF,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAmB;QAC7B,KAAK;QACL,WAAW;QACX,aAAa,EAAE,OAAO;QACtB,GAAG,CAAC,MAAM;YACR,CAAC,CAAC,EAAE,MAAM,EAAE;YACZ,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACpF,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;gBAC7B,CAAC,CAAC,EAAE,CAAC;KACV,CAAC;IACF,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,yEAAyE;AACzE,wEAAwE;AACxE,kEAAkE;AAClE,qFAAqF;AAErF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAgD,CAAC;AAC9E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAEvC,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc;IAC/C,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC;YACpD,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACjC,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACvC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;AAC/C,CAAC;AAED,yEAAyE;AAEzE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAqD,CAAC;AACrF,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,sCAAsC;AAE5E,gFAAgF;AAChF,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC1D,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpC,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACvC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;AAC/C,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,2BAA2B;IACzC,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,eAAe,CAAC,KAAK,EAAE,CAAC;IACxB,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,yEAAyE;AAEzE,2EAA2E;AAC3E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;AAEvC;;;;;;;;;GASG;AACH,KAAK,UAAU,sBAAsB,CACnC,KAAa,EACb,UAAkB,EAClB,KAAc,EACd,EAAc,EACd,MAAc;IAEd,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IACpC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAExB,qDAAqD;IACrD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,2CAA2C;IAC3C,IAAI,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAiB,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACjF,mEAAmE;IACnE,IAAI,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,OAAiB,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IAClG,sDAAsD;IACtD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE3B,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAE/B,MAAM,MAAM,GAAG;QACb,aAAa,EAAE,gBAAgB,EAAE,mBAAmB;QACpD,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB;KAC1E,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,4BAA4B;QAC5B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;YAAE,SAAS;QAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,KAAK,yBAAyB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC;gBACvF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,8CAA8C,CAAC;qBAC3F,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;qBACxB,GAAG,EAAE,CAAC;gBACT,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC;wBACV,OAAO,EAAE,kBAAkB,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,gBAAgB;wBACxE,GAAG,EAAE,SAAS;wBACd,KAAK;wBACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;wBAC5B,IAAI,EAAE,MAAM;wBACZ,EAAE,EAAE,UAAU;qBACf,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;QAED,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,6BAA6B;YACtC,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,UAAU;SACf,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAED,yEAAyE;AAEzE,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B;;;;GAIG;AACH,KAAK,UAAU,+BAA+B,CAAC,EAAc,EAAE,MAAc;IAC3E,IAAI,iBAAiB;QAAE,OAAO;IAC9B,iBAAiB,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B,qFAAqF,CACtF,CAAC,GAAG,EAAE,CAAC;QACR,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,qEAAqE;gBAC9E,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;aAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;AACH,CAAC;AAYD,KAAK,UAAU,uBAAuB,CACpC,YAAoB,EACpB,KAAc,EACd,GAA0B;IAE1B,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,cAAc;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAE5E,mFAAmF;IACnF,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC;IAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC;IAE5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,UAAU,EAAE,CAAC;IACpD,MAAM,MAAM,GAAsB,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAEpE,uDAAuD;IACvD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uEAAuE;IACvE,IAAI,OAAO,KAAK,QAAQ,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAClD,qEAAqE;QACrE,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC;gBAAC,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,CAAC,iBAAiB,GAAG,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,IAAI,SAAS,CAAC;QAE1F,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC;QAE/E,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QACrC,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,CAAC,UAAU,GAAG;gBAClB,SAAS,CAAC,GAAW,IAAI,OAAO,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAChE,aAAa,KAAK,OAAO,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;aACpE,CAAC;QACJ,CAAC;QAED,0FAA0F;QAC1F,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,cAAc,YAAY,EAAE,CAAC,CAAC;QAC1F,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,CAAC,oBAAoB,GAAG,gBAAgB,CAAC;QACjD,CAAC;IACH,CAAC;IAED,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0EAA0E;AAE1E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAA+B,EAC/B,GAAuB,EACvB,QAAiB,EACjB,OAA6B;IAE7B,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,aAAa,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,aAAa,CAAC;IAChD,MAAM,eAAe,GAAG,uBAAuB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;QAChC,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,6EAA6E;QAC7E,cAAc,EAAE,GAAG,CAAC,kBAAkB;KACvC,CAAC,CAAC;IAEH,mFAAmF;IACnF,MAAM,+BAA+B,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAEtD,+EAA+E;IAC/E,mFAAmF;IACnF,qFAAqF;IACrF,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9B,wDAAwD;QACxD,MAAM,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,CAAC,OAAiB,CAAC;QAEnG,uEAAuE;QACvE,0DAA0D;QAC1D,iEAAiE;QACjE,MAAM,sBAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAE3E,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvD,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,cAAc,CAAC;YAC5C,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC;SACzC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC;YAC7B,WAAW;YACX,aAAa,EAAE,eAAe;YAC9B,eAAe;YACf,cAAc,EAAE,GAAG,CAAC,OAAO;SAC5B,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAElE,OAAO,iBAAiB,CAAC;YACvB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO;YACP,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,OAAO;YACP,EAAE,EAAE,GAAG,CAAC,MAAM;YACd,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,MAAM;YACN,eAAe,EAAE,OAAO,EAAE,eAAe;YACzC,UAAU,EAAE,OAAO,EAAE,UAAU;YAC/B,GAAG,GAAG;SACP,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEvF,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IACzF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,CAAC;QAC7B,WAAW,EAAE,cAAc,CAAC,WAAW;QACvC,aAAa,EAAE,cAAc,CAAC,aAAa;QAC3C,eAAe;QACf,cAAc,EAAE,GAAG,CAAC,OAAO;KAC5B,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAEnE,OAAO,iBAAiB,CAAC;QACvB,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,OAAO;QACP,KAAK;QACL,MAAM;QACN,0EAA0E;QAC1E,iEAAiE;QACjE,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,OAAO;QACP,WAAW;QACX,EAAE,EAAE,GAAG,CAAC,MAAM;QACd,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,MAAM;QACN,eAAe,EAAE,OAAO,EAAE,eAAe;QACzC,UAAU,EAAE,OAAO,EAAE,UAAU;QAC/B,GAAG,GAAG;KACP,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,EAAE;AACF,yDAAyD;AACzD,EAAE;AACF,2DAA2D;AAC3D,wEAAwE;AACxE,EAAE;AACF,mFAAmF;AACnF,8CAA8C;AAC9C,uBAAuB;AACvB,qGAAqG;AACrG,2BAA2B;AAC3B,QAAQ;AACR,8DAA8D;AAC9D,sEAAsE;AACtE,wFAAwF;AACxF,qDAAqD;AACrD,QAAQ;AACR,oFAAoF;AACpF,mDAAmD;AACnD,QAAQ;AACR,+EAA+E;AAC/E,MAAM;AACN,EAAE;AACF,0BAA0B;AAC1B,iBAAiB;AACjB,iCAAiC;AACjC,iCAAiC;AACjC,sCAAsC;AAEtC,0EAA0E;AAE1E,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAA+B,EAC/B,GAAuB,EACvB,QAAiB,EACjB,OAA6B;IAE7B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,uBAAuB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClG,MAAM,QAAQ,GAAG;QACf,WAAW,IAAI,iBAAiB;QAChC,kBAAkB,IAAI,EAAE;QACxB,yBAAyB,CAAC,eAAe,CAAC;QAC1C,aAAa;KACd,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAChG,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACzD,sCAAsC;IACtC,IAAI,aAAa,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC;QAC3C,IAAI,SAA6B,CAAC;QAClC,IAAI,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;gBAAC,SAAS,GAAG,CAAC,CAAC;YAAC,CAAC;QAC1D,CAAC;QACD,IAAI,SAAS;YAAE,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,eAAe;IACb,KAAK,CAAC,KAAK,CAAC,OAAgB,EAAE,GAAuB;QACnD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,SAAS,CAAC;YACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;YAClE,MAAM,eAAe,GAAG,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC9F,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;YACtF,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChB,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAClE,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAClE,0EAA0E;YAC1E,2EAA2E;YAC3E,iEAAiE;YACjE,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBAClB,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YACvF,CAAC;YACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;gBAClD,MAAM;gBACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"blocklet-service.js","sourceRoot":"","sources":["../src/blocklet-service.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,13 @@ export interface AuthHandlerOptions {
32
32
  * Use a string for static rpID (e.g. "example.com" for cross-subdomain passkeys),
33
33
  * or a function for dynamic resolution based on the request. */
34
34
  rpID?: string | ((request: Request) => string);
35
+ /**
36
+ * When true, session cookies are host-only: issue and clear omit the
37
+ * Domain attribute even if rpID is a dotted string or a function. Default
38
+ * false keeps today's parent-domain cookie for string rpIDs (and for
39
+ * passkey's resolved rpID). Does not change the WebAuthn RP ID.
40
+ */
41
+ hostOnlyCookie?: boolean;
35
42
  /** JWT expiration in seconds (default: 7 days). */
36
43
  jwtExpiresIn?: number;
37
44
  /** Cookie name for the auth JWT (default: "login_token"). */
@@ -1 +1 @@
1
- {"version":3,"file":"auth-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/auth-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/auth-handler.ts"],"names":[],"mappings":"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"}