@arcblock/did-connect-core 4.1.53 → 4.1.54
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/ui/i18n.d.ts.map +1 -1
- package/dist/ui/i18n.js +32 -4
- package/dist/ui/i18n.js.map +1 -1
- package/dist/ui/index.bundle.js +300 -148
- package/dist/ui/login-dialog.d.ts.map +1 -1
- package/dist/ui/login-dialog.js +4 -0
- package/dist/ui/login-dialog.js.map +1 -1
- package/dist/ui/login-page.d.ts +4 -0
- package/dist/ui/login-page.d.ts.map +1 -1
- package/dist/ui/login-page.js +227 -138
- package/dist/ui/login-page.js.map +1 -1
- package/dist/ui/styles.d.ts.map +1 -1
- package/dist/ui/styles.js +36 -21
- package/dist/ui/styles.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-dialog.d.ts","sourceRoot":"","sources":["../../src/ui/login-dialog.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAyBnE,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,sFAAsF;IACtF,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,WAAW;IAQV,OAAO,CAAC,MAAM;IAAiB,OAAO,CAAC,IAAI;IAAe,OAAO,CAAC,OAAO;IAPrF,OAAO,CAAC,IAAI,CAAC,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAc;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAmB;IACzC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,SAAS,CAA2C;gBACxC,MAAM,EAAE,aAAa,EAAU,IAAI,EAAE,WAAW,EAAU,OAAO,GAAE,kBAAuB;IAC9G,KAAK,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"login-dialog.d.ts","sourceRoot":"","sources":["../../src/ui/login-dialog.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAyBnE,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,sFAAsF;IACtF,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,WAAW;IAQV,OAAO,CAAC,MAAM;IAAiB,OAAO,CAAC,IAAI;IAAe,OAAO,CAAC,OAAO;IAPrF,OAAO,CAAC,IAAI,CAAC,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAc;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAmB;IACzC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,SAAS,CAA2C;gBACxC,MAAM,EAAE,aAAa,EAAU,IAAI,EAAE,WAAW,EAAU,OAAO,GAAE,kBAAuB;IAC9G,KAAK,IAAI,IAAI;IAwFb,OAAO,CAAC,SAAS;IAuBjB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAIvC,OAAO,CAAC,UAAU;IAIlB,OAAO,IAAI,IAAI;CAQhB"}
|
package/dist/ui/login-dialog.js
CHANGED
|
@@ -42,6 +42,10 @@ export class LoginDialog {
|
|
|
42
42
|
mount() {
|
|
43
43
|
if (this.dialog)
|
|
44
44
|
return;
|
|
45
|
+
// The page language is authoritative for an in-context dialog.
|
|
46
|
+
const hostLocale = document.documentElement.lang;
|
|
47
|
+
if (hostLocale)
|
|
48
|
+
this.options.locale = hostLocale;
|
|
45
49
|
let focused = document.activeElement;
|
|
46
50
|
while (focused?.shadowRoot?.activeElement)
|
|
47
51
|
focused = focused.shadowRoot.activeElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-dialog.js","sourceRoot":"","sources":["../../src/ui/login-dialog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"login-dialog.js","sourceRoot":"","sources":["../../src/ui/login-dialog.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/login-page.d.ts
CHANGED
|
@@ -32,6 +32,8 @@ export interface LoginPageOptions {
|
|
|
32
32
|
oauthProviders?: OAuthProvider[];
|
|
33
33
|
/** Locale for UI text (default: 'en') */
|
|
34
34
|
locale?: string;
|
|
35
|
+
/** Defaults to hidden in a dialog, visible on the standalone page. */
|
|
36
|
+
showLocaleSelector?: boolean;
|
|
35
37
|
/** Callback when the user switches locale. */
|
|
36
38
|
onLocaleChange?: (locale: string) => void;
|
|
37
39
|
/**
|
|
@@ -160,6 +162,8 @@ export declare class LoginPage {
|
|
|
160
162
|
private detachLocaleMenu;
|
|
161
163
|
/** Switch the card content between views. */
|
|
162
164
|
private switchView;
|
|
165
|
+
/** Keep recognition next to the action, without a second page subtitle. */
|
|
166
|
+
private markLastUsed;
|
|
163
167
|
private renderMethodsView;
|
|
164
168
|
/** Full QR view — replaces card content */
|
|
165
169
|
private renderQRView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-page.d.ts","sourceRoot":"","sources":["../../src/ui/login-page.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"login-page.d.ts","sourceRoot":"","sources":["../../src/ui/login-page.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/login-page.js
CHANGED
|
@@ -268,6 +268,8 @@ export class LoginPage {
|
|
|
268
268
|
}
|
|
269
269
|
/** Locale sits on the card's top-right row, level with Back / Cancel. */
|
|
270
270
|
renderCardTools(card) {
|
|
271
|
+
if (!(this.options.showLocaleSelector ?? this.options.mode !== 'dialog'))
|
|
272
|
+
return;
|
|
271
273
|
const tools = document.createElement('div');
|
|
272
274
|
tools.className = 'card-tools';
|
|
273
275
|
this.renderLocaleSwitcher(tools);
|
|
@@ -325,6 +327,8 @@ export class LoginPage {
|
|
|
325
327
|
trigger.addEventListener('click', (event) => {
|
|
326
328
|
event.stopPropagation();
|
|
327
329
|
setOpen(menu.hidden);
|
|
330
|
+
if (!menu.hidden)
|
|
331
|
+
menu.querySelector('[aria-checked="true"]')?.focus();
|
|
328
332
|
});
|
|
329
333
|
for (const item of locales) {
|
|
330
334
|
const checked = item.code === current.code;
|
|
@@ -334,12 +338,13 @@ export class LoginPage {
|
|
|
334
338
|
btn.setAttribute('role', 'menuitemradio');
|
|
335
339
|
btn.setAttribute('aria-checked', checked ? 'true' : 'false');
|
|
336
340
|
btn.dataset.locale = item.code;
|
|
341
|
+
btn.tabIndex = -1;
|
|
337
342
|
btn.title = item.label;
|
|
338
|
-
|
|
343
|
+
{
|
|
339
344
|
const mark = document.createElement('span');
|
|
340
345
|
mark.className = 'locale-check';
|
|
341
346
|
mark.setAttribute('aria-hidden', 'true');
|
|
342
|
-
mark.textContent = '✓';
|
|
347
|
+
mark.textContent = checked ? '✓' : '';
|
|
343
348
|
btn.appendChild(mark);
|
|
344
349
|
}
|
|
345
350
|
const label = document.createElement('span');
|
|
@@ -351,6 +356,25 @@ export class LoginPage {
|
|
|
351
356
|
});
|
|
352
357
|
menu.appendChild(btn);
|
|
353
358
|
}
|
|
359
|
+
wrapper.addEventListener('keydown', (event) => {
|
|
360
|
+
const items = [...menu.querySelectorAll('.locale-btn')];
|
|
361
|
+
const active = this.shadow?.activeElement ?? document.activeElement;
|
|
362
|
+
const index = items.indexOf(active);
|
|
363
|
+
if (event.key === 'Escape') {
|
|
364
|
+
event.preventDefault();
|
|
365
|
+
event.stopPropagation();
|
|
366
|
+
setOpen(false);
|
|
367
|
+
trigger.focus();
|
|
368
|
+
}
|
|
369
|
+
else if (event.key === 'Tab')
|
|
370
|
+
setOpen(false);
|
|
371
|
+
else if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) {
|
|
372
|
+
event.preventDefault();
|
|
373
|
+
setOpen(true);
|
|
374
|
+
const next = event.key === 'Home' ? 0 : event.key === 'End' ? items.length - 1 : index < 0 ? (event.key === 'ArrowUp' ? items.length - 1 : 0) : (index + (event.key === 'ArrowUp' ? -1 : 1) + items.length) % items.length;
|
|
375
|
+
items[next]?.focus();
|
|
376
|
+
}
|
|
377
|
+
});
|
|
354
378
|
const onOutsideClick = (event) => {
|
|
355
379
|
const path = event.composedPath();
|
|
356
380
|
if (path.includes(wrapper))
|
|
@@ -406,6 +430,21 @@ export class LoginPage {
|
|
|
406
430
|
break;
|
|
407
431
|
}
|
|
408
432
|
}
|
|
433
|
+
/** Keep recognition next to the action, without a second page subtitle. */
|
|
434
|
+
markLastUsed(button, method, locale) {
|
|
435
|
+
if (!this.options.preferenceKey)
|
|
436
|
+
return;
|
|
437
|
+
try {
|
|
438
|
+
if (localStorage.getItem(`did-login-method:${this.options.preferenceKey}`) !== method)
|
|
439
|
+
return;
|
|
440
|
+
const hint = document.createElement('span');
|
|
441
|
+
hint.className = 'last-used';
|
|
442
|
+
hint.textContent = t('lastUsed', locale);
|
|
443
|
+
button.classList.add('has-last-used');
|
|
444
|
+
button.appendChild(hint);
|
|
445
|
+
}
|
|
446
|
+
catch { /* Storage may be unavailable in private mode. */ }
|
|
447
|
+
}
|
|
409
448
|
renderMethodsView(card, locale, methods) {
|
|
410
449
|
// ── Escape hatch ("Cancel") — top-left, mirrors the locale switcher
|
|
411
450
|
// (top-right). Standard placement for a standalone auth card. ──
|
|
@@ -413,21 +452,6 @@ export class LoginPage {
|
|
|
413
452
|
this.renderHomeLink(card, locale);
|
|
414
453
|
// ── Brand header ──
|
|
415
454
|
this.renderBrandHeader(card, locale);
|
|
416
|
-
if (this.options.preferenceKey) {
|
|
417
|
-
try {
|
|
418
|
-
const last = localStorage.getItem(`did-login-method:${this.options.preferenceKey}`);
|
|
419
|
-
const labels = { passkey: 'Passkey', oauth: 'OAuth', email: t('emailButton', locale), 'did-connect': 'DID Wallet' };
|
|
420
|
-
const provider = last?.startsWith('oauth:') ? this.options.oauthProviders?.find(p => p.enabled && `oauth:${p.id}` === last) : undefined;
|
|
421
|
-
const label = provider?.name ?? (last ? labels[last] : undefined);
|
|
422
|
-
if (last && label && (methods.includes(last) || (provider && methods.includes('oauth')))) {
|
|
423
|
-
const hint = document.createElement('p');
|
|
424
|
-
hint.className = 'subtitle';
|
|
425
|
-
hint.textContent = t('lastUsed', locale, { method: label });
|
|
426
|
-
card.appendChild(hint);
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
catch { /* private mode */ }
|
|
430
|
-
}
|
|
431
455
|
// Passkey unsupported warning
|
|
432
456
|
const requestedPasskey = this.options.methods.includes('passkey');
|
|
433
457
|
if (requestedPasskey && !methods.includes('passkey')) {
|
|
@@ -721,11 +745,12 @@ export class LoginPage {
|
|
|
721
745
|
}
|
|
722
746
|
});
|
|
723
747
|
}
|
|
724
|
-
renderBackButton(parent, locale) {
|
|
748
|
+
renderBackButton(parent, locale, onBack = () => this.switchView('methods')) {
|
|
725
749
|
const btn = document.createElement('button');
|
|
750
|
+
btn.type = 'button';
|
|
726
751
|
btn.className = 'back-btn';
|
|
727
752
|
btn.innerHTML = `${ICON_BACK_ARROW} ${escapeHtml(t('back', locale))}`;
|
|
728
|
-
btn.addEventListener('click',
|
|
753
|
+
btn.addEventListener('click', onBack);
|
|
729
754
|
parent.appendChild(btn);
|
|
730
755
|
}
|
|
731
756
|
/**
|
|
@@ -943,11 +968,8 @@ export class LoginPage {
|
|
|
943
968
|
createBtn.id = 'passkey-btn';
|
|
944
969
|
createBtn.innerHTML = `${ICON_PASSKEY} ${escapeHtml(t('passkeyCreate', locale))}`;
|
|
945
970
|
section.appendChild(createBtn);
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
backLink.className = 'passkey-alt';
|
|
949
|
-
backLink.textContent = t('passkeyBackToSignIn', locale);
|
|
950
|
-
section.appendChild(backLink);
|
|
971
|
+
parent.querySelector('.back-btn')?.remove();
|
|
972
|
+
this.renderBackButton(parent, locale, () => renderSignInState());
|
|
951
973
|
const doCreate = async () => {
|
|
952
974
|
if (createBtn.disabled)
|
|
953
975
|
return; // Enter-key auto-repeat on the name input
|
|
@@ -976,7 +998,6 @@ export class LoginPage {
|
|
|
976
998
|
createBtn.addEventListener('click', doCreate);
|
|
977
999
|
nameInput.addEventListener('keydown', (e) => { if (e.key === 'Enter')
|
|
978
1000
|
doCreate(); });
|
|
979
|
-
backLink.addEventListener('click', () => renderSignInState());
|
|
980
1001
|
createBtn.focus();
|
|
981
1002
|
};
|
|
982
1003
|
// ── State 0: sign-in (default) ──
|
|
@@ -1015,6 +1036,7 @@ export class LoginPage {
|
|
|
1015
1036
|
};
|
|
1016
1037
|
const renderSignInState = () => {
|
|
1017
1038
|
this.cardEl?.classList.remove('passkey-creating');
|
|
1039
|
+
parent.querySelector('.back-btn')?.remove();
|
|
1018
1040
|
this.abort?.abort();
|
|
1019
1041
|
this.generation++;
|
|
1020
1042
|
const heading = this.cardEl?.querySelector('h1');
|
|
@@ -1026,6 +1048,7 @@ export class LoginPage {
|
|
|
1026
1048
|
signInBtn.className = this.cardEl?.classList.contains('social-first') ? 'btn btn-secondary' : 'btn';
|
|
1027
1049
|
signInBtn.id = 'passkey-btn';
|
|
1028
1050
|
signInBtn.innerHTML = `${ICON_PASSKEY} ${escapeHtml(t('passkeySignIn', locale))}`;
|
|
1051
|
+
this.markLastUsed(signInBtn, 'passkey', locale);
|
|
1029
1052
|
section.appendChild(signInBtn);
|
|
1030
1053
|
signInBtn.addEventListener('click', () => doSignIn());
|
|
1031
1054
|
const createLink = document.createElement('button');
|
|
@@ -1049,172 +1072,235 @@ export class LoginPage {
|
|
|
1049
1072
|
startOAuthPopup(providerId, btn) {
|
|
1050
1073
|
this.oauthCleanup?.();
|
|
1051
1074
|
const epoch = this.generation;
|
|
1075
|
+
const locale = this.options.locale;
|
|
1052
1076
|
const servicePrefix = this.config.servicePrefix ?? '/.well-known/service';
|
|
1053
|
-
// Federation: popup opens Master's OAuth login URL (cross-domain callback)
|
|
1054
1077
|
const oauthBase = this.options.masterOAuthOrigin
|
|
1055
|
-
? `${this.options.masterOAuthOrigin}${servicePrefix}`
|
|
1056
|
-
: servicePrefix;
|
|
1078
|
+
? `${this.options.masterOAuthOrigin}${servicePrefix}` : servicePrefix;
|
|
1057
1079
|
const oauthOrigin = new URL(oauthBase, window.location.href).origin;
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
return;
|
|
1080
|
+
let returnUrl = window.location.href;
|
|
1081
|
+
if (this.options.mode !== 'dialog' && window.location.pathname === `${servicePrefix}/login`) {
|
|
1082
|
+
const requested = new URLSearchParams(window.location.search).get('return_to');
|
|
1083
|
+
try {
|
|
1084
|
+
const target = new URL(requested || '/', window.location.origin);
|
|
1085
|
+
returnUrl = target.origin === window.location.origin && !/^\/[/\\]/.test(target.pathname) ? target.href : `${window.location.origin}/`;
|
|
1086
|
+
}
|
|
1087
|
+
catch {
|
|
1088
|
+
returnUrl = `${window.location.origin}/`;
|
|
1089
|
+
}
|
|
1069
1090
|
}
|
|
1070
|
-
|
|
1091
|
+
const loginUrl = `${oauthBase}/api/oauth/${encodeURIComponent(providerId)}/login?returnUrl=${encodeURIComponent(returnUrl)}`;
|
|
1092
|
+
const provider = this.options.oauthProviders?.find(p => p.id === providerId)?.name ?? providerId;
|
|
1071
1093
|
const originalHTML = btn.innerHTML;
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1094
|
+
let popup = null;
|
|
1095
|
+
let settled = false;
|
|
1096
|
+
let exchanging = false;
|
|
1097
|
+
let probing = false;
|
|
1098
|
+
let pollTimer;
|
|
1099
|
+
let sessionTimer;
|
|
1100
|
+
let abandonTimer;
|
|
1101
|
+
const current = () => !settled && this.mounted && epoch === this.generation;
|
|
1102
|
+
const locked = [];
|
|
1103
|
+
const lockMethods = () => {
|
|
1104
|
+
for (const button of this.cardEl?.querySelectorAll('.method-btn, .passkey-create-entry, #passkey-btn, .locale-trigger, .locale-btn') ?? []) {
|
|
1105
|
+
locked.push({ button, disabled: button.disabled });
|
|
1106
|
+
button.disabled = true;
|
|
1107
|
+
}
|
|
1108
|
+
};
|
|
1075
1109
|
const recovery = document.createElement('div');
|
|
1076
1110
|
recovery.className = 'oauth-recovery';
|
|
1077
1111
|
recovery.setAttribute('role', 'status');
|
|
1078
1112
|
const hint = document.createElement('p');
|
|
1079
|
-
|
|
1113
|
+
const actions = document.createElement('div');
|
|
1114
|
+
actions.className = 'oauth-recovery-actions';
|
|
1115
|
+
const reopen = document.createElement('button');
|
|
1116
|
+
reopen.type = 'button';
|
|
1117
|
+
reopen.className = 'oauth-retry';
|
|
1118
|
+
reopen.textContent = t('oauthReopen', locale);
|
|
1119
|
+
reopen.hidden = true;
|
|
1120
|
+
reopen.onclick = () => { this.select('oauth'); this.activeProvider = providerId; this.startOAuthPopup(providerId, btn); };
|
|
1080
1121
|
const fullPage = document.createElement('a');
|
|
1081
1122
|
fullPage.href = loginUrl;
|
|
1082
|
-
fullPage.textContent = t('oauthFullPage',
|
|
1083
|
-
fullPage.addEventListener('click',
|
|
1084
|
-
|
|
1085
|
-
|
|
1123
|
+
fullPage.textContent = t('oauthFullPage', locale);
|
|
1124
|
+
fullPage.addEventListener('click', event => {
|
|
1125
|
+
const reconcile = recovery.dataset.state === 'oauthUnconfirmed';
|
|
1126
|
+
if (exchanging && !settled) {
|
|
1127
|
+
event.preventDefault();
|
|
1128
|
+
return;
|
|
1129
|
+
}
|
|
1130
|
+
if (reconcile)
|
|
1131
|
+
event.preventDefault();
|
|
1132
|
+
this.options.onBeforeRedirect?.();
|
|
1133
|
+
this.oauthCleanup?.();
|
|
1134
|
+
if (reconcile)
|
|
1135
|
+
window.location.reload();
|
|
1136
|
+
});
|
|
1137
|
+
const cancel = document.createElement('button');
|
|
1138
|
+
cancel.type = 'button';
|
|
1139
|
+
cancel.className = 'oauth-cancel';
|
|
1140
|
+
cancel.textContent = t('cancel', locale);
|
|
1141
|
+
actions.append(reopen, fullPage, cancel);
|
|
1142
|
+
recovery.append(hint, actions);
|
|
1086
1143
|
btn.parentElement?.after(recovery);
|
|
1087
|
-
const
|
|
1088
|
-
recovery.hidden = false;
|
|
1089
|
-
this.emit('incomplete');
|
|
1144
|
+
const restoreButton = () => {
|
|
1090
1145
|
btn.innerHTML = originalHTML;
|
|
1091
1146
|
btn.disabled = false;
|
|
1092
1147
|
btn.classList.remove('oauth-btn-loading');
|
|
1093
1148
|
};
|
|
1094
|
-
|
|
1095
|
-
|
|
1149
|
+
const closePopup = () => { try {
|
|
1150
|
+
popup?.close();
|
|
1151
|
+
}
|
|
1152
|
+
catch { /* COOP can sever the window reference. */ } };
|
|
1153
|
+
const cleanup = () => {
|
|
1154
|
+
settled = true;
|
|
1155
|
+
clearInterval(pollTimer);
|
|
1156
|
+
clearInterval(sessionTimer);
|
|
1157
|
+
clearTimeout(abandonTimer);
|
|
1158
|
+
window.removeEventListener('message', onMessage);
|
|
1159
|
+
for (const item of locked.splice(0))
|
|
1160
|
+
item.button.disabled = item.disabled;
|
|
1161
|
+
restoreButton();
|
|
1162
|
+
};
|
|
1163
|
+
const showRecovery = (key) => {
|
|
1164
|
+
hint.textContent = t(key, locale, { provider });
|
|
1165
|
+
recovery.dataset.state = key;
|
|
1166
|
+
actions.hidden = false;
|
|
1167
|
+
reopen.hidden = false;
|
|
1168
|
+
cancel.hidden = true;
|
|
1169
|
+
restoreButton();
|
|
1170
|
+
};
|
|
1171
|
+
const fail = (key) => {
|
|
1172
|
+
if (!current())
|
|
1173
|
+
return;
|
|
1174
|
+
cleanup();
|
|
1175
|
+
closePopup();
|
|
1176
|
+
showRecovery(key);
|
|
1177
|
+
this.emit('incomplete');
|
|
1178
|
+
};
|
|
1096
1179
|
const succeed = () => {
|
|
1097
|
-
if (
|
|
1180
|
+
if (!current())
|
|
1098
1181
|
return;
|
|
1099
|
-
settled = true;
|
|
1100
1182
|
cleanup();
|
|
1101
|
-
|
|
1183
|
+
closePopup();
|
|
1184
|
+
recovery.remove();
|
|
1185
|
+
btn.textContent = t('success', locale);
|
|
1186
|
+
btn.disabled = true;
|
|
1102
1187
|
this.handleSuccess();
|
|
1103
1188
|
};
|
|
1189
|
+
cancel.onclick = () => { if (exchanging)
|
|
1190
|
+
return; fail('oauthCancelled'); btn.focus(); };
|
|
1104
1191
|
const onMessage = async (event) => {
|
|
1105
|
-
if (event.origin !== oauthOrigin || event.source !== popup)
|
|
1106
|
-
return;
|
|
1107
|
-
if (!event.data || event.data.type !== 'authorization_response')
|
|
1192
|
+
if (event.origin !== oauthOrigin || event.source !== popup || !popup)
|
|
1108
1193
|
return;
|
|
1109
|
-
if (
|
|
1194
|
+
if (!event.data || event.data.type !== 'authorization_response' || !current() || exchanging)
|
|
1110
1195
|
return;
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
// and the callback also window.close()s itself after postMessage.
|
|
1114
|
-
if (pollTimer !== undefined) {
|
|
1115
|
-
clearInterval(pollTimer);
|
|
1116
|
-
pollTimer = undefined;
|
|
1117
|
-
}
|
|
1118
|
-
try {
|
|
1119
|
-
popup.close();
|
|
1120
|
-
}
|
|
1121
|
-
catch {
|
|
1122
|
-
/* ignore */
|
|
1123
|
-
}
|
|
1196
|
+
clearInterval(pollTimer);
|
|
1197
|
+
clearInterval(sessionTimer);
|
|
1124
1198
|
if (event.data.error) {
|
|
1125
|
-
|
|
1126
|
-
cleanup();
|
|
1199
|
+
fail(event.data.error === 'access_denied' ? 'oauthDenied' : event.data.error === 'cancelled' ? 'oauthCancelled' : 'oauthFailed');
|
|
1127
1200
|
return;
|
|
1128
1201
|
}
|
|
1129
1202
|
const { code, state } = event.data.response ?? event.data;
|
|
1130
|
-
if (!code) {
|
|
1131
|
-
|
|
1132
|
-
cleanup();
|
|
1203
|
+
if (typeof code !== 'string' || !code || typeof state !== 'string' || !state) {
|
|
1204
|
+
fail('oauthFailed');
|
|
1133
1205
|
return;
|
|
1134
1206
|
}
|
|
1135
|
-
|
|
1207
|
+
exchanging = true;
|
|
1208
|
+
lockMethods();
|
|
1209
|
+
actions.hidden = true;
|
|
1210
|
+
closePopup();
|
|
1211
|
+
hint.textContent = t('verifying', locale);
|
|
1212
|
+
btn.textContent = t('verifying', locale);
|
|
1136
1213
|
btn.disabled = true;
|
|
1137
1214
|
try {
|
|
1138
1215
|
const oauthBody = { provider: providerId, code, state };
|
|
1139
1216
|
if (this.options.invitationId)
|
|
1140
1217
|
oauthBody.invitationId = this.options.invitationId;
|
|
1141
|
-
await this.http.post(`${servicePrefix}/api/oauth/login`, oauthBody);
|
|
1218
|
+
await this.http.post(`${servicePrefix}/api/oauth/login`, oauthBody, { signal: this.abort?.signal });
|
|
1142
1219
|
succeed();
|
|
1143
1220
|
}
|
|
1144
|
-
catch (
|
|
1145
|
-
if (
|
|
1221
|
+
catch (err) {
|
|
1222
|
+
if (!current())
|
|
1146
1223
|
return;
|
|
1147
|
-
const
|
|
1148
|
-
const
|
|
1149
|
-
if (
|
|
1150
|
-
settled = true;
|
|
1224
|
+
const code = err instanceof Error && 'code' in err ? String(err.code) : '';
|
|
1225
|
+
const message = err instanceof Error ? err.message : '';
|
|
1226
|
+
if (code === 'FORBIDDEN' || code === 'registration_closed' || message === 'registration_closed') {
|
|
1151
1227
|
cleanup();
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
else {
|
|
1155
|
-
restore();
|
|
1228
|
+
recovery.remove();
|
|
1229
|
+
this.showFullError(friendlyError(err, locale));
|
|
1156
1230
|
}
|
|
1231
|
+
else
|
|
1232
|
+
fail('oauthFailed');
|
|
1157
1233
|
}
|
|
1158
1234
|
};
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1235
|
+
this.oauthCleanup = () => { cleanup(); recovery.remove(); closePopup(); };
|
|
1236
|
+
window.addEventListener('message', onMessage);
|
|
1237
|
+
try {
|
|
1238
|
+
popup = window.open(loginUrl, 'oauth-login:popup', `left=${window.screenX + (window.innerWidth - 500) / 2},top=${window.screenY + (window.innerHeight - 620) / 2},width=500,height=620,resizable,scrollbars=yes,status=1,popup`);
|
|
1239
|
+
}
|
|
1240
|
+
catch { /* Treat a browser refusal like a blocked popup. */ }
|
|
1241
|
+
if (!popup) {
|
|
1242
|
+
fail('oauthBlocked');
|
|
1243
|
+
return;
|
|
1244
|
+
}
|
|
1245
|
+
hint.textContent = t('oauthWaiting', locale, { provider });
|
|
1246
|
+
btn.textContent = t('oauthWaiting', locale, { provider });
|
|
1247
|
+
btn.disabled = true;
|
|
1248
|
+
btn.classList.add('oauth-btn-loading');
|
|
1249
|
+
// COOP can report closed before the callback arrives. Keep the listener,
|
|
1250
|
+
// but show recovery immediately and never overlap server session probes.
|
|
1251
|
+
const checkSession = async () => {
|
|
1252
|
+
if (!current() || exchanging || probing)
|
|
1253
|
+
return;
|
|
1254
|
+
probing = true;
|
|
1255
|
+
try {
|
|
1256
|
+
const session = await this.http.get(`${servicePrefix}/api/did/session`);
|
|
1257
|
+
if (current() && !exchanging && session?.authenticated === true)
|
|
1258
|
+
succeed();
|
|
1259
|
+
}
|
|
1260
|
+
catch { /* A later probe or callback may still complete this attempt. */ }
|
|
1261
|
+
finally {
|
|
1262
|
+
probing = false;
|
|
1263
|
+
}
|
|
1264
|
+
};
|
|
1265
|
+
pollTimer = setInterval(() => {
|
|
1163
1266
|
let closed = false;
|
|
1164
1267
|
try {
|
|
1165
|
-
closed = popup
|
|
1268
|
+
closed = !!popup?.closed;
|
|
1166
1269
|
}
|
|
1167
1270
|
catch {
|
|
1168
1271
|
return;
|
|
1169
1272
|
}
|
|
1170
|
-
if (!closed)
|
|
1273
|
+
if (!closed || !current())
|
|
1171
1274
|
return;
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
void this.http
|
|
1179
|
-
.get(`${servicePrefix}/api/did/session`)
|
|
1180
|
-
.then((session) => {
|
|
1181
|
-
if (session?.authenticated)
|
|
1182
|
-
succeed();
|
|
1183
|
-
})
|
|
1184
|
-
.catch(() => {
|
|
1185
|
-
/* keep waiting for postMessage or the next session probe */
|
|
1186
|
-
});
|
|
1187
|
-
};
|
|
1188
|
-
checkSession();
|
|
1189
|
-
sessionPollTimer = setInterval(checkSession, 500);
|
|
1275
|
+
clearInterval(pollTimer);
|
|
1276
|
+
showRecovery('oauthIncomplete');
|
|
1277
|
+
// Remain explicitly cancellable while a COOP callback may still arrive.
|
|
1278
|
+
cancel.hidden = false;
|
|
1279
|
+
void checkSession();
|
|
1280
|
+
sessionTimer = setInterval(() => { void checkSession(); }, 2000);
|
|
1190
1281
|
}, 500);
|
|
1191
|
-
|
|
1192
|
-
if (
|
|
1282
|
+
abandonTimer = setTimeout(() => {
|
|
1283
|
+
if (!current())
|
|
1193
1284
|
return;
|
|
1285
|
+
if (!exchanging) {
|
|
1286
|
+
fail('oauthTimedOut');
|
|
1287
|
+
return;
|
|
1288
|
+
}
|
|
1289
|
+
// A request may have reached the server even if its response never arrived.
|
|
1290
|
+
// Do not promise cancellation or start a second exchange in that ambiguity.
|
|
1291
|
+
this.abort?.abort();
|
|
1194
1292
|
cleanup();
|
|
1195
|
-
|
|
1293
|
+
closePopup();
|
|
1294
|
+
lockMethods();
|
|
1295
|
+
hint.textContent = t('oauthUnconfirmed', locale);
|
|
1296
|
+
recovery.dataset.state = 'oauthUnconfirmed';
|
|
1297
|
+
actions.hidden = false;
|
|
1298
|
+
reopen.hidden = true;
|
|
1299
|
+
cancel.hidden = true;
|
|
1300
|
+
fullPage.href = window.location.href;
|
|
1301
|
+
fullPage.textContent = t('oauthCheckSession', locale);
|
|
1302
|
+
this.emit('incomplete');
|
|
1196
1303
|
}, 5 * 60 * 1000);
|
|
1197
|
-
const cleanup = () => {
|
|
1198
|
-
settled = true;
|
|
1199
|
-
btn.innerHTML = originalHTML;
|
|
1200
|
-
btn.disabled = false;
|
|
1201
|
-
btn.classList.remove('oauth-btn-loading');
|
|
1202
|
-
if (pollTimer !== undefined) {
|
|
1203
|
-
clearInterval(pollTimer);
|
|
1204
|
-
pollTimer = undefined;
|
|
1205
|
-
}
|
|
1206
|
-
if (sessionPollTimer !== undefined) {
|
|
1207
|
-
clearInterval(sessionPollTimer);
|
|
1208
|
-
sessionPollTimer = undefined;
|
|
1209
|
-
}
|
|
1210
|
-
clearTimeout(abandonTimer);
|
|
1211
|
-
window.removeEventListener('message', onMessage);
|
|
1212
|
-
};
|
|
1213
|
-
this.oauthCleanup = () => { cleanup(); recovery.remove(); try {
|
|
1214
|
-
popup.close();
|
|
1215
|
-
}
|
|
1216
|
-
catch { /* COOP */ } };
|
|
1217
|
-
window.addEventListener('message', onMessage);
|
|
1218
1304
|
}
|
|
1219
1305
|
// (removed dead code: renderEmailButton — email now renders through renderSecondaryGrid)
|
|
1220
1306
|
/**
|
|
@@ -1240,6 +1326,7 @@ export class LoginPage {
|
|
|
1240
1326
|
btn.dataset.provider = provider.id;
|
|
1241
1327
|
const icon = getOAuthIcon(provider.id);
|
|
1242
1328
|
btn.innerHTML = `${icon} ${escapeHtml(t('continueWith', locale, { provider: provider.name }))}`;
|
|
1329
|
+
this.markLastUsed(btn, `oauth:${provider.id}`, locale);
|
|
1243
1330
|
grid.appendChild(btn);
|
|
1244
1331
|
btn.addEventListener('click', () => {
|
|
1245
1332
|
this.select('oauth');
|
|
@@ -1254,6 +1341,7 @@ export class LoginPage {
|
|
|
1254
1341
|
btn.className = 'method-btn';
|
|
1255
1342
|
btn.id = 'email-btn';
|
|
1256
1343
|
btn.innerHTML = `${ICON_EMAIL} ${escapeHtml(t('emailButton', locale))}`;
|
|
1344
|
+
this.markLastUsed(btn, 'email', locale);
|
|
1257
1345
|
grid.appendChild(btn);
|
|
1258
1346
|
btn.addEventListener('click', () => {
|
|
1259
1347
|
this.select('email');
|
|
@@ -1268,6 +1356,7 @@ export class LoginPage {
|
|
|
1268
1356
|
// Use short label when sharing grid with other methods
|
|
1269
1357
|
const walletLabel = grid.children.length > 0 ? t('didWalletButtonShort', locale) : t('didWalletButton', locale);
|
|
1270
1358
|
btn.innerHTML = `${ICON_DID_WALLET} ${escapeHtml(walletLabel)}`;
|
|
1359
|
+
this.markLastUsed(btn, 'did-connect', locale);
|
|
1271
1360
|
grid.appendChild(btn);
|
|
1272
1361
|
btn.addEventListener('click', () => {
|
|
1273
1362
|
this.select('did-connect');
|