@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.
- package/dist/_generated/asset-bytes.js +1 -1
- package/dist/_generated/asset-manifest.js +4 -4
- package/dist/_generated/login-bundle-string.d.ts +1 -1
- package/dist/_generated/login-bundle-string.d.ts.map +1 -1
- package/dist/_generated/login-bundle-string.js +1 -1
- package/dist/_generated/login-bundle-string.js.map +1 -1
- package/dist/assets/{admin-core.16704b2e.js → admin-core.69147606.js} +80 -2
- package/dist/assets/{admin-extra.8243c7f4.js → admin-extra.979f5e56.js} +57 -14
- package/dist/assets/{admin.7c5d5f04.css → admin.76aa0931.css} +11 -0
- package/dist/assets/{login.fb0bf7b4.js → login.566f858e.js} +1 -1
- package/dist/blocklet-service.d.ts +8 -1
- package/dist/blocklet-service.d.ts.map +1 -1
- package/dist/blocklet-service.js +6 -1
- package/dist/blocklet-service.js.map +1 -1
- package/dist/handlers/auth-handler.d.ts +7 -0
- package/dist/handlers/auth-handler.d.ts.map +1 -1
- package/dist/handlers/auth-handler.js +7 -2
- package/dist/handlers/auth-handler.js.map +1 -1
- package/dist/handlers/avatar-handler.d.ts.map +1 -1
- package/dist/handlers/avatar-handler.js +6 -0
- package/dist/handlers/avatar-handler.js.map +1 -1
- package/dist/handlers/did-connect-handler.d.ts +2 -0
- package/dist/handlers/did-connect-handler.d.ts.map +1 -1
- package/dist/handlers/did-connect-handler.js +2 -2
- package/dist/handlers/did-connect-handler.js.map +1 -1
- package/dist/handlers/email-login-handler.d.ts +2 -0
- package/dist/handlers/email-login-handler.d.ts.map +1 -1
- package/dist/handlers/email-login-handler.js +2 -2
- package/dist/handlers/email-login-handler.js.map +1 -1
- package/dist/handlers/oauth-handler.d.ts +2 -0
- package/dist/handlers/oauth-handler.d.ts.map +1 -1
- package/dist/handlers/oauth-handler.js +3 -4
- package/dist/handlers/oauth-handler.js.map +1 -1
- package/dist/handlers/passkey-handler.d.ts +1 -0
- package/dist/handlers/passkey-handler.d.ts.map +1 -1
- package/dist/handlers/passkey-handler.js +5 -4
- package/dist/handlers/passkey-handler.js.map +1 -1
- package/dist/handlers/ticket-handler.d.ts +2 -0
- package/dist/handlers/ticket-handler.d.ts.map +1 -1
- package/dist/handlers/ticket-handler.js +2 -2
- package/dist/handlers/ticket-handler.js.map +1 -1
- package/dist/identity/session-cookie.d.ts +11 -0
- package/dist/identity/session-cookie.d.ts.map +1 -0
- package/dist/identity/session-cookie.js +17 -0
- package/dist/identity/session-cookie.js.map +1 -0
- package/dist/pages/admin/scripts/dialog.d.ts +1 -1
- package/dist/pages/admin/scripts/dialog.d.ts.map +1 -1
- package/dist/pages/admin/scripts/dialog.js +29 -2
- package/dist/pages/admin/scripts/dialog.js.map +1 -1
- package/dist/pages/admin/scripts/utils.d.ts +1 -1
- package/dist/pages/admin/scripts/utils.d.ts.map +1 -1
- package/dist/pages/admin/scripts/utils.js +35 -0
- package/dist/pages/admin/scripts/utils.js.map +1 -1
- package/dist/pages/admin/styles.d.ts +1 -1
- package/dist/pages/admin/styles.d.ts.map +1 -1
- package/dist/pages/admin/styles.js +11 -0
- package/dist/pages/admin/styles.js.map +1 -1
- package/dist/pages/admin/tab-access.d.ts.map +1 -1
- package/dist/pages/admin/tab-access.js +6 -0
- package/dist/pages/admin/tab-access.js.map +1 -1
- package/dist/pages/admin/tab-appearance.d.ts.map +1 -1
- package/dist/pages/admin/tab-appearance.js +4 -0
- package/dist/pages/admin/tab-appearance.js.map +1 -1
- package/dist/pages/admin/tab-branding.d.ts.map +1 -1
- package/dist/pages/admin/tab-branding.js +4 -0
- package/dist/pages/admin/tab-branding.js.map +1 -1
- package/dist/pages/admin/tab-federation.d.ts +1 -1
- package/dist/pages/admin/tab-federation.d.ts.map +1 -1
- package/dist/pages/admin/tab-federation.js +21 -11
- package/dist/pages/admin/tab-federation.js.map +1 -1
- package/dist/pages/admin/tab-invitations.d.ts +1 -1
- package/dist/pages/admin/tab-invitations.d.ts.map +1 -1
- package/dist/pages/admin/tab-invitations.js +4 -0
- package/dist/pages/admin/tab-invitations.js.map +1 -1
- package/dist/pages/admin/tab-members.d.ts +1 -1
- package/dist/pages/admin/tab-members.d.ts.map +1 -1
- package/dist/pages/admin/tab-members.js +7 -0
- package/dist/pages/admin/tab-members.js.map +1 -1
- package/dist/pages/admin/tab-profile-accounts.d.ts.map +1 -1
- package/dist/pages/admin/tab-profile-accounts.js +10 -0
- package/dist/pages/admin/tab-profile-accounts.js.map +1 -1
- package/dist/pages/admin/tab-profile.d.ts +1 -1
- package/dist/pages/admin/tab-profile.d.ts.map +1 -1
- package/dist/pages/admin/tab-profile.js +6 -0
- package/dist/pages/admin/tab-profile.js.map +1 -1
- package/dist/pages/admin/tab-settings.d.ts.map +1 -1
- package/dist/pages/admin/tab-settings.js +11 -3
- package/dist/pages/admin/tab-settings.js.map +1 -1
- package/dist/pages/admin-instances-page.d.ts.map +1 -1
- package/dist/pages/admin-instances-page.js +5 -1
- package/dist/pages/admin-instances-page.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/assets/admin-core.1fc3260c.js +0 -1623
- package/dist/assets/admin-core.5a2d69b0.js +0 -2067
- package/dist/assets/admin-core.9fff6042.js +0 -2083
- package/dist/assets/admin-core.a13c2729.js +0 -1461
- package/dist/assets/admin-core.a63bbc69.js +0 -1464
- package/dist/assets/admin-core.c0b5af61.js +0 -1393
- package/dist/assets/admin-core.cbbdbe6d.js +0 -1465
- package/dist/assets/admin-core.e83fd379.js +0 -1397
- package/dist/assets/admin-extra.143b5774.js +0 -2543
- package/dist/assets/admin-extra.35b91f98.js +0 -2543
- package/dist/assets/admin-extra.531b187f.js +0 -2552
- package/dist/assets/admin-extra.5b309e5e.js +0 -2547
- package/dist/assets/admin-extra.7ca9c16b.js +0 -2529
- package/dist/assets/admin-extra.841b2bbe.js +0 -2530
- package/dist/assets/admin-extra.afcb3651.js +0 -2528
- package/dist/assets/admin-extra.d12f05bb.js +0 -2553
- package/dist/assets/admin.c26bb17a.css +0 -2219
- package/dist/assets/admin.dfeedbe4.css +0 -2229
- package/dist/assets/login.0bf3d739.js +0 -720
- package/dist/assets/login.4404e695.js +0 -720
- package/dist/assets/login.76c483c2.js +0 -720
- package/dist/assets/login.bb9f8b03.js +0 -720
- package/dist/assets/login.d3f05790.js +0 -720
- 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
|
-
|
|
199
|
-
|
|
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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}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
|
|
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;
|
|
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"}
|
package/dist/blocklet-service.js
CHANGED
|
@@ -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
|
|
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":"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"}
|
|
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":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/auth-handler.ts"],"names":[],"mappings":"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"}
|