@owlmeans/client-auth 0.1.18 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +2 -2
  2. package/agent-meta/manifest.json +4 -2
  3. package/agent-meta/skills/client-auth/SKILL.md +36 -3
  4. package/agent-meta/skills/client-auth/parts/login.md +2 -1
  5. package/build/components/dispatcher/component.d.ts.map +1 -1
  6. package/build/components/dispatcher/component.js +44 -5
  7. package/build/components/dispatcher/component.js.map +1 -1
  8. package/build/entrypoints.d.ts +2 -4
  9. package/build/entrypoints.d.ts.map +1 -1
  10. package/build/login/consts.local.d.ts +4 -0
  11. package/build/login/consts.local.d.ts.map +1 -1
  12. package/build/login/consts.local.js +8 -0
  13. package/build/login/consts.local.js.map +1 -1
  14. package/build/login/failure/consts.d.ts +17 -0
  15. package/build/login/failure/consts.d.ts.map +1 -0
  16. package/build/login/failure/consts.js +18 -0
  17. package/build/login/failure/consts.js.map +1 -0
  18. package/build/login/failure/consts.local.d.ts +17 -0
  19. package/build/login/failure/consts.local.d.ts.map +1 -0
  20. package/build/login/failure/consts.local.js +30 -0
  21. package/build/login/failure/consts.local.js.map +1 -0
  22. package/build/login/failure/types.d.ts +57 -0
  23. package/build/login/failure/types.d.ts.map +1 -0
  24. package/build/login/failure/types.js +2 -0
  25. package/build/login/failure/types.js.map +1 -0
  26. package/build/login/failure-view.d.ts +14 -0
  27. package/build/login/failure-view.d.ts.map +1 -0
  28. package/build/login/failure-view.js +19 -0
  29. package/build/login/failure-view.js.map +1 -0
  30. package/build/login/failure.d.ts +4 -0
  31. package/build/login/failure.d.ts.map +1 -0
  32. package/build/login/failure.js +50 -0
  33. package/build/login/failure.js.map +1 -0
  34. package/build/login/i18n/be.json +7 -1
  35. package/build/login/i18n/de.json +7 -1
  36. package/build/login/i18n/en.json +7 -1
  37. package/build/login/i18n/es.json +7 -1
  38. package/build/login/i18n/fr.json +7 -1
  39. package/build/login/i18n/pl.json +7 -1
  40. package/build/login/i18n/ru.json +7 -1
  41. package/build/login/i18n/uk.json +7 -1
  42. package/build/login/index.d.ts +5 -0
  43. package/build/login/index.d.ts.map +1 -1
  44. package/build/login/index.js +4 -0
  45. package/build/login/index.js.map +1 -1
  46. package/build/login/screen.d.ts.map +1 -1
  47. package/build/login/screen.js +9 -2
  48. package/build/login/screen.js.map +1 -1
  49. package/build/login/translate.d.ts +15 -0
  50. package/build/login/translate.d.ts.map +1 -0
  51. package/build/login/translate.js +26 -0
  52. package/build/login/translate.js.map +1 -0
  53. package/build/login/types.d.ts +7 -0
  54. package/build/login/types.d.ts.map +1 -1
  55. package/build/manager/entrypoints.d.ts +1 -9
  56. package/build/manager/entrypoints.d.ts.map +1 -1
  57. package/package.json +28 -25
  58. package/src/components/dispatcher/component.tsx +48 -5
  59. package/src/login/consts.local.ts +10 -0
  60. package/src/login/failure/consts.local.ts +35 -0
  61. package/src/login/failure/consts.ts +16 -0
  62. package/src/login/failure/types.ts +60 -0
  63. package/src/login/failure-view.tsx +35 -0
  64. package/src/login/failure.ts +67 -0
  65. package/src/login/i18n/be.json +7 -1
  66. package/src/login/i18n/de.json +7 -1
  67. package/src/login/i18n/en.json +7 -1
  68. package/src/login/i18n/es.json +7 -1
  69. package/src/login/i18n/fr.json +7 -1
  70. package/src/login/i18n/pl.json +7 -1
  71. package/src/login/i18n/ru.json +7 -1
  72. package/src/login/i18n/uk.json +7 -1
  73. package/src/login/index.ts +5 -0
  74. package/src/login/screen.tsx +13 -1
  75. package/src/login/translate.ts +32 -0
  76. package/src/login/types.ts +8 -0
  77. package/src/manager/README.md +1 -1
  78. package/tests/failure.spec.tsx +176 -0
  79. package/build/manager/modules.d.ts +0 -2
  80. package/build/manager/modules.d.ts.map +0 -1
  81. package/build/manager/modules.js +0 -16
  82. package/build/manager/modules.js.map +0 -1
  83. package/build/modules.d.ts +0 -4
  84. package/build/modules.d.ts.map +0 -1
  85. package/build/modules.js +0 -9
  86. package/build/modules.js.map +0 -1
@@ -34,7 +34,13 @@
34
34
  },
35
35
  "error": {
36
36
  "failed": "Die Anmeldung wurde nicht abgeschlossen. Bitte versuchen Sie es erneut.",
37
- "blocked": "Das Anmeldefenster wurde blockiert. Klicken Sie auf das Symbol für blockierte Pop-ups in der Adressleiste Ihres Browsers, um es zu öffnen."
37
+ "blocked": "Das Anmeldefenster wurde blockiert. Klicken Sie auf das Symbol für blockierte Pop-ups in der Adressleiste Ihres Browsers, um es zu öffnen.",
38
+ "refused": "Mit diesem Konto ist hier keine Anmeldung möglich.",
39
+ "account-disabled": "Dieses Konto wurde deaktiviert; eine Anmeldung ist hier nicht möglich.",
40
+ "profile-disabled": "Der Zugang dieses Kontos zu dieser Anwendung wurde gesperrt; eine Anmeldung ist hier nicht möglich.",
41
+ "retry": "Erneut versuchen",
42
+ "back": "Zurück zur Anmeldung",
43
+ "incident": "Referenz: {{incident}}"
38
44
  },
39
45
  "orphaned": "Angemeldet. Sie können dieses Fenster schließen und in der Anwendung fortfahren."
40
46
  }
@@ -34,7 +34,13 @@
34
34
  },
35
35
  "error": {
36
36
  "failed": "Sign-in did not complete. Please try again.",
37
- "blocked": "The sign-in window was blocked. Click the blocked pop-up icon in your browser's address bar to open it."
37
+ "blocked": "The sign-in window was blocked. Click the blocked pop-up icon in your browser's address bar to open it.",
38
+ "refused": "This account cannot sign in here.",
39
+ "account-disabled": "This account has been disabled and cannot sign in here.",
40
+ "profile-disabled": "This account’s access to this application has been blocked, so it cannot sign in here.",
41
+ "retry": "Try again",
42
+ "back": "Back to sign-in",
43
+ "incident": "Reference: {{incident}}"
38
44
  },
39
45
  "orphaned": "Signed in. You can close this window and continue in the application."
40
46
  }
@@ -34,7 +34,13 @@
34
34
  },
35
35
  "error": {
36
36
  "failed": "El inicio de sesión no se completó. Inténtalo de nuevo.",
37
- "blocked": "Se bloqueó la ventana de inicio de sesión. Haz clic en el icono de ventana emergente bloqueada en la barra de direcciones del navegador para abrirla."
37
+ "blocked": "Se bloqueó la ventana de inicio de sesión. Haz clic en el icono de ventana emergente bloqueada en la barra de direcciones del navegador para abrirla.",
38
+ "refused": "Esta cuenta no puede iniciar sesión aquí.",
39
+ "account-disabled": "Esta cuenta ha sido desactivada y no puede iniciar sesión aquí.",
40
+ "profile-disabled": "El acceso de esta cuenta a esta aplicación ha sido bloqueado, por lo que no puede iniciar sesión aquí.",
41
+ "retry": "Intentar de nuevo",
42
+ "back": "Volver al inicio de sesión",
43
+ "incident": "Referencia: {{incident}}"
38
44
  },
39
45
  "orphaned": "Sesión iniciada. Puedes cerrar esta ventana y continuar en la aplicación."
40
46
  }
@@ -34,7 +34,13 @@
34
34
  },
35
35
  "error": {
36
36
  "failed": "La connexion n’a pas abouti. Réessayez.",
37
- "blocked": "La fenêtre de connexion a été bloquée. Cliquez sur l’icône de fenêtre contextuelle bloquée dans la barre d’adresse pour l’ouvrir."
37
+ "blocked": "La fenêtre de connexion a été bloquée. Cliquez sur l’icône de fenêtre contextuelle bloquée dans la barre d’adresse pour l’ouvrir.",
38
+ "refused": "Ce compte ne peut pas se connecter ici.",
39
+ "account-disabled": "Ce compte a été désactivé et ne peut pas se connecter ici.",
40
+ "profile-disabled": "L’accès de ce compte à cette application a été bloqué ; il ne peut donc pas se connecter ici.",
41
+ "retry": "Réessayer",
42
+ "back": "Retour à la connexion",
43
+ "incident": "Référence : {{incident}}"
38
44
  },
39
45
  "orphaned": "Vous êtes connecté. Vous pouvez fermer cette fenêtre et continuer dans l’application."
40
46
  }
@@ -34,7 +34,13 @@
34
34
  },
35
35
  "error": {
36
36
  "failed": "Logowanie nie zostało ukończone. Spróbuj ponownie.",
37
- "blocked": "Okno logowania zostało zablokowane. Kliknij ikonę zablokowanego okienka w pasku adresu przeglądarki, aby je otworzyć."
37
+ "blocked": "Okno logowania zostało zablokowane. Kliknij ikonę zablokowanego okienka w pasku adresu przeglądarki, aby je otworzyć.",
38
+ "refused": "To konto nie może się tutaj zalogować.",
39
+ "account-disabled": "To konto zostało wyłączone i nie może się tutaj zalogować.",
40
+ "profile-disabled": "Dostęp tego konta do tej aplikacji został zablokowany, więc nie może się ono tutaj zalogować.",
41
+ "retry": "Spróbuj ponownie",
42
+ "back": "Wróć do logowania",
43
+ "incident": "Kod zgłoszenia: {{incident}}"
38
44
  },
39
45
  "orphaned": "Zalogowano. Możesz zamknąć to okno i kontynuować w aplikacji."
40
46
  }
@@ -34,7 +34,13 @@
34
34
  },
35
35
  "error": {
36
36
  "failed": "Вход не завершён. Попробуйте ещё раз.",
37
- "blocked": "Окно входа заблокировано. Нажмите на значок заблокированного всплывающего окна в адресной строке браузера, чтобы открыть его."
37
+ "blocked": "Окно входа заблокировано. Нажмите на значок заблокированного всплывающего окна в адресной строке браузера, чтобы открыть его.",
38
+ "refused": "С этим аккаунтом здесь войти нельзя.",
39
+ "account-disabled": "Этот аккаунт отключён, поэтому войти с ним здесь нельзя.",
40
+ "profile-disabled": "Доступ этого аккаунта к приложению заблокирован, поэтому войти с ним здесь нельзя.",
41
+ "retry": "Попробовать снова",
42
+ "back": "Вернуться ко входу",
43
+ "incident": "Код обращения: {{incident}}"
38
44
  },
39
45
  "orphaned": "Вход выполнен. Можете закрыть это окно и вернуться в приложение."
40
46
  }
@@ -34,7 +34,13 @@
34
34
  },
35
35
  "error": {
36
36
  "failed": "Вхід не завершено. Спробуйте ще раз.",
37
- "blocked": "Вікно входу заблоковано. Натисніть значок заблокованого спливаючого вікна в адресному рядку браузера, щоб відкрити його."
37
+ "blocked": "Вікно входу заблоковано. Натисніть значок заблокованого спливаючого вікна в адресному рядку браузера, щоб відкрити його.",
38
+ "refused": "З цим обліковим записом тут увійти не можна.",
39
+ "account-disabled": "Цей обліковий запис вимкнено, тому увійти з ним тут не можна.",
40
+ "profile-disabled": "Доступ цього облікового запису до застосунку заблоковано, тому увійти з ним тут не можна.",
41
+ "retry": "Спробувати ще раз",
42
+ "back": "Повернутися до входу",
43
+ "incident": "Код звернення: {{incident}}"
38
44
  },
39
45
  "orphaned": "Вхід виконано. Можете закрити це вікно й повернутися до застосунку."
40
46
  }
@@ -10,6 +10,11 @@ export type * from './credit/types.js';
10
10
  export type * from './surrogate/types.js';
11
11
  export type * from './land/types.js';
12
12
  export type * from './start/types.js';
13
+ export type * from './failure/types.js';
14
+ export * from './failure/consts.js';
15
+ export * from './failure.js';
16
+ export * from './failure-view.js';
17
+ export * from './translate.js';
13
18
  export * from './env.js';
14
19
  export * from './adopt.js';
15
20
  export * from './methods.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;AAElB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,mBAAmB,gBAAgB,CAAA;AACnC,mBAAmB,kBAAkB,CAAA;AACrC,mBAAmB,oBAAoB,CAAA;AACvC,mBAAmB,mBAAmB,CAAA;AACtC,mBAAmB,kBAAkB,CAAA;AACrC,mBAAmB,mBAAmB,CAAA;AACtC,mBAAmB,sBAAsB,CAAA;AACzC,mBAAmB,iBAAiB,CAAA;AACpC,mBAAmB,kBAAkB,CAAA;AACrC,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;AAElB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,mBAAmB,gBAAgB,CAAA;AACnC,mBAAmB,kBAAkB,CAAA;AACrC,mBAAmB,oBAAoB,CAAA;AACvC,mBAAmB,mBAAmB,CAAA;AACtC,mBAAmB,kBAAkB,CAAA;AACrC,mBAAmB,mBAAmB,CAAA;AACtC,mBAAmB,sBAAsB,CAAA;AACzC,mBAAmB,iBAAiB,CAAA;AACpC,mBAAmB,kBAAkB,CAAA;AACrC,mBAAmB,oBAAoB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
@@ -1,6 +1,10 @@
1
1
  import './i18n.js';
2
2
  export * from './consts.js';
3
3
  export * from './types.js';
4
+ export * from './failure/consts.js';
5
+ export * from './failure.js';
6
+ export * from './failure-view.js';
7
+ export * from './translate.js';
4
8
  export * from './env.js';
5
9
  export * from './adopt.js';
6
10
  export * from './methods.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;AAElB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAU1B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;AAElB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAW1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/login/screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAA;AAG1F,OAAO,KAAK,EAA6B,gBAAgB,EAAgB,MAAM,YAAY,CAAA;AAoB3F;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,gBAAgB,CAuGpD,CAAA"}
1
+ {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/login/screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAA;AAG1F,OAAO,KAAK,EAA6B,gBAAgB,EAAgB,MAAM,YAAY,CAAA;AAuB3F;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,gBAAgB,CAgHpD,CAAA"}
@@ -6,6 +6,8 @@ import { loginMethodsHelper } from './methods.js';
6
6
  import { loginTermsHelper } from './terms.js';
7
7
  import { resolveCredit } from './credit.js';
8
8
  import { box, page } from './consts.local.js';
9
+ import { loginFailureHelper } from './failure.js';
10
+ import { LoginFailureView } from './failure-view.js';
9
11
  const renderParts = (parts) => parts.map((part, index) => part.href != null
10
12
  ? _jsx("a", { href: part.href, target: "_blank", rel: "noreferrer noopener", children: part.text }, index)
11
13
  : _jsx("span", { children: part.text }, index));
@@ -41,6 +43,8 @@ export const FallbackLoginScreen = props => {
41
43
  const deferred = loginTermsHelper.termsDeferred(context);
42
44
  const [accepted, setAccepted] = useState(() => loginTermsHelper.termsAccepted(resolved));
43
45
  const [attempted, setAttempted] = useState(false);
46
+ // A start that rejected — phrased, never the raw message; the method buttons are the retry.
47
+ const [failure, setFailure] = useState(null);
44
48
  const all = login.methods({ context, env });
45
49
  const methods = typeof props.methods === 'function'
46
50
  ? props.methods(all)
@@ -52,7 +56,10 @@ export const FallbackLoginScreen = props => {
52
56
  setAttempted(true);
53
57
  return;
54
58
  }
55
- void method.start({ context, env });
59
+ setFailure(null);
60
+ void method.start({ context, env }).catch((error) => {
61
+ setFailure(loginFailureHelper.failureOf(error));
62
+ });
56
63
  }, [blocked, context, env]);
57
64
  const onAccept = useCallback((value) => {
58
65
  setAccepted(value);
@@ -61,6 +68,6 @@ export const FallbackLoginScreen = props => {
61
68
  }, [resolved]);
62
69
  return _jsx("div", { "data-login-screen": true, style: page, children: _jsxs("div", { style: box, children: [_jsx("h1", { style: { fontSize: '1.25rem', marginBottom: '.25rem' }, children: props.title ?? t('login.title', 'Sign in') }), _jsx("p", { style: { opacity: .75, marginTop: 0 }, children: props.subtitle ?? t('login.subtitle', 'Choose how you would like to continue.') }), methods.length < 1
63
70
  ? _jsx("p", { role: "status", children: t('login.empty', 'No sign-in method is configured for this application.') })
64
- : methods.map(method => _jsx("button", { type: "button", "data-login-method": method.id, "aria-disabled": blocked, "data-blocked": blocked ? 'true' : undefined, style: { ...button(method.emphasis), opacity: blocked ? .6 : 1 }, autoFocus: method.id === primary?.id, onClick: () => select(method), children: method.label ?? t(`login.method.${method.i18nKey ?? method.id}`, method.id) }, method.id)), resolved != null && !deferred && _jsx("p", { style: { marginTop: '1rem', fontSize: '.875rem' }, children: _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: accepted, "data-login-terms": true, onChange: event => onAccept(event.target.checked) }), ' ', renderParts(loginTermsHelper.termsSentence(t('login.terms.accept', 'I have read and agree to the {{documents}}.'), resolved, props.locale, resolveLabel))] }) }), resolved?.revisedAt != null && !deferred && _jsx("p", { "data-login-revised": true, style: { fontSize: '.75rem', opacity: .7 }, children: t('login.terms.revised', 'Last updated: {{date}}').split('{{date}}').join(resolved.revisedAt) }), resolved != null && _jsx("p", { "data-login-privacy": true, style: { fontSize: '.875rem' }, children: renderParts(loginTermsHelper.termsSentence(t('login.terms.notice', 'How we handle your personal data: {{notices}}.'), resolved, props.locale, resolveLabel)) }), attempted && blocked && resolved != null && _jsx("p", { role: "alert", style: { color: '#b00', fontSize: '.875rem' }, children: renderParts(loginTermsHelper.termsSentence(t('login.terms.required', 'Please confirm the {{documents}} to continue.'), resolved, props.locale, resolveLabel)) }), props.footer ?? _jsxs("p", { style: { marginTop: '2rem', fontSize: '.75rem', opacity: .7 }, children: [credit.poweredBy && _jsx("span", { children: t('login.credit.powered', 'Powered by OwlMeans') }), credit.poweredBy && credit.line != null && ' · ', credit.line] })] }) });
71
+ : methods.map(method => _jsx("button", { type: "button", "data-login-method": method.id, "aria-disabled": blocked, "data-blocked": blocked ? 'true' : undefined, style: { ...button(method.emphasis), opacity: blocked ? .6 : 1 }, autoFocus: method.id === primary?.id, onClick: () => select(method), children: method.label ?? t(`login.method.${method.i18nKey ?? method.id}`, method.id) }, method.id)), resolved != null && !deferred && _jsx("p", { style: { marginTop: '1rem', fontSize: '.875rem' }, children: _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: accepted, "data-login-terms": true, onChange: event => onAccept(event.target.checked) }), ' ', renderParts(loginTermsHelper.termsSentence(t('login.terms.accept', 'I have read and agree to the {{documents}}.'), resolved, props.locale, resolveLabel))] }) }), resolved?.revisedAt != null && !deferred && _jsx("p", { "data-login-revised": true, style: { fontSize: '.75rem', opacity: .7 }, children: t('login.terms.revised', 'Last updated: {{date}}').split('{{date}}').join(resolved.revisedAt) }), resolved != null && _jsx("p", { "data-login-privacy": true, style: { fontSize: '.875rem' }, children: renderParts(loginTermsHelper.termsSentence(t('login.terms.notice', 'How we handle your personal data: {{notices}}.'), resolved, props.locale, resolveLabel)) }), attempted && blocked && resolved != null && _jsx("p", { role: "alert", style: { color: '#b00', fontSize: '.875rem' }, children: renderParts(loginTermsHelper.termsSentence(t('login.terms.required', 'Please confirm the {{documents}} to continue.'), resolved, props.locale, resolveLabel)) }), failure != null && _jsx(LoginFailureView, { failure: failure, translate: t, style: { padding: 0, marginTop: '1rem', color: '#b00', fontSize: '.875rem' } }), props.footer ?? _jsxs("p", { style: { marginTop: '2rem', fontSize: '.75rem', opacity: .7 }, children: [credit.poweredBy && _jsx("span", { children: t('login.credit.powered', 'Powered by OwlMeans') }), credit.poweredBy && credit.line != null && ' · ', credit.line] })] }) });
65
72
  };
66
73
  //# sourceMappingURL=screen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/login/screen.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/login/screen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ClientConfig } from '@owlmeans/client-context';
2
+ import type { LoginTranslate } from './types.js';
3
+ /**
4
+ * A translate over the `auth` library resource that reads no React context.
5
+ *
6
+ * For a sign-in surface that renders outside any screen binding a `translate` — a dispatcher's
7
+ * failed exchange, a plugin's own form — where a hook that reaches for an i18n provider would throw
8
+ * inside render in an app mounted without one. It reads the app's one i18next instance
9
+ * (`i18nInstanceHelper.getI18nInstance`, the same instance `useI18nLib` drives) and drains the
10
+ * `auth` bundle into it when no component has yet: `initI18nResource` is one-shot per slot, so
11
+ * whichever of the two runs first loads it and the other no-ops. App-tier overrides of the `auth`
12
+ * keys (`addI18nApp(lng, 'auth', …, { ns: LIB_NAMESPACE })`) resolve here as everywhere else.
13
+ */
14
+ export declare const makeAuthTranslate: (cfg: ClientConfig) => LoginTranslate;
15
+ //# sourceMappingURL=translate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../src/login/translate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,QAAS,YAAY,KAAG,cAcrD,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { DEFAULT_LNG, LIB_NAMESPACE, i18nHelper } from '@owlmeans/i18n';
2
+ import { i18nInstanceHelper } from '@owlmeans/client-i18n/utils';
3
+ import { LOGIN_I18N_RESOURCE } from './consts.local.js';
4
+ /**
5
+ * A translate over the `auth` library resource that reads no React context.
6
+ *
7
+ * For a sign-in surface that renders outside any screen binding a `translate` — a dispatcher's
8
+ * failed exchange, a plugin's own form — where a hook that reaches for an i18n provider would throw
9
+ * inside render in an app mounted without one. It reads the app's one i18next instance
10
+ * (`i18nInstanceHelper.getI18nInstance`, the same instance `useI18nLib` drives) and drains the
11
+ * `auth` bundle into it when no component has yet: `initI18nResource` is one-shot per slot, so
12
+ * whichever of the two runs first loads it and the other no-ops. App-tier overrides of the `auth`
13
+ * keys (`addI18nApp(lng, 'auth', …, { ns: LIB_NAMESPACE })`) resolve here as everywhere else.
14
+ */
15
+ export const makeAuthTranslate = (cfg) => {
16
+ const i18n = i18nInstanceHelper.getI18nInstance(cfg);
17
+ const fallback = typeof i18n.options?.fallbackLng === 'string' ? i18n.options.fallbackLng : DEFAULT_LNG;
18
+ for (const lng of new Set([i18n.language, fallback])) {
19
+ if (lng == null) {
20
+ continue;
21
+ }
22
+ i18nHelper.initI18nResource(lng, LOGIN_I18N_RESOURCE, LIB_NAMESPACE)?.forEach(resource => i18n.addResourceBundle(lng, LIB_NAMESPACE, { [LOGIN_I18N_RESOURCE]: resource.data }, true, true));
23
+ }
24
+ return (key, defaultValue) => i18n.t(`${LOGIN_I18N_RESOURCE}.${key}`, { ns: LIB_NAMESPACE, defaultValue });
25
+ };
26
+ //# sourceMappingURL=translate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/login/translate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAGvD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAiB,EAAkB,EAAE;IACrE,MAAM,IAAI,GAAG,kBAAkB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAA;IACvG,KAAK,MAAM,GAAG,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QACrD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,SAAQ;QACV,CAAC;QACD,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAC9G,GAAG,EAAE,aAAa,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CACzE,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,CAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,mBAAmB,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAA;AAChF,CAAC,CAAA"}
@@ -160,6 +160,13 @@ export interface LoginMethodSource {
160
160
  alias: string;
161
161
  list: (ctx: LoginMethodContext) => LoginMethod[];
162
162
  }
163
+ /**
164
+ * `(key, defaultValue) => string` over the `auth` library resource — the one translate contract
165
+ * every sign-in renderer shares. Placeholders (`{{incident}}`) are filled after it answers.
166
+ */
167
+ export interface LoginTranslate {
168
+ (key: string, defaultValue: string): string;
169
+ }
163
170
  /** What every rendering of the sign-in screen accepts, whatever its UI family. */
164
171
  export interface LoginScreenProps {
165
172
  /** The one thing a consuming application is expected to supply. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/login/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/login/types.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,3 @@
1
1
  /** Browser entrypoints for the manager's authentication flows. */
2
- export declare const entrypoints: (import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<import("@owlmeans/entrypoint").OpenRequest, import("@owlmeans/entrypoint").OpenValue>> | import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<{
3
- body: import("@owlmeans/auth").AllowanceRequest;
4
- }, import("@owlmeans/auth").AllowanceResponse>> | import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<{
5
- body: import("@owlmeans/auth").AuthCredentials;
6
- }, import("@owlmeans/auth").AuthToken>> | import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<{
7
- query: Partial<import("@owlmeans/auth").AuthToken>;
8
- }, undefined>> | import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<{
9
- query: import("@owlmeans/auth").AuthToken;
10
- }, unknown>>)[];
2
+ export declare const entrypoints: import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<any>[];
11
3
  //# sourceMappingURL=entrypoints.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entrypoints.d.ts","sourceRoot":"","sources":["../../src/manager/entrypoints.ts"],"names":[],"mappings":"AAMA,kEAAkE;AAClE,eAAO,MAAM,WAAW;;;;;;;;eAUvB,CAAA"}
1
+ {"version":3,"file":"entrypoints.d.ts","sourceRoot":"","sources":["../../src/manager/entrypoints.ts"],"names":[],"mappings":"AAMA,kEAAkE;AAClE,eAAO,MAAM,WAAW,uEAUvB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/client-auth",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -50,27 +50,29 @@
50
50
  }
51
51
  },
52
52
  "dependencies": {
53
- "@owlmeans/auth": "^0.1.18",
54
- "@owlmeans/auth-common": "^0.1.18",
55
- "@owlmeans/basic-envelope": "^0.1.18",
56
- "@owlmeans/basic-keys": "^0.1.18",
57
- "@owlmeans/client": "^0.1.18",
58
- "@owlmeans/client-context": "^0.1.18",
59
- "@owlmeans/client-entrypoint": "^0.1.18",
60
- "@owlmeans/client-flow": "^0.1.18",
61
- "@owlmeans/client-resource": "^0.1.18",
62
- "@owlmeans/client-socket": "^0.1.18",
63
- "@owlmeans/config": "^0.1.18",
64
- "@owlmeans/context": "^0.1.18",
65
- "@owlmeans/did": "^0.1.18",
66
- "@owlmeans/entrypoint": "^0.1.18",
67
- "@owlmeans/error": "^0.1.18",
68
- "@owlmeans/flow": "^0.1.18",
69
- "@owlmeans/i18n": "^0.1.18",
70
- "@owlmeans/log": "^0.1.18",
71
- "@owlmeans/resource": "^0.1.18",
72
- "@owlmeans/socket": "^0.1.18",
73
- "@owlmeans/web-flow": "^0.1.18",
53
+ "@owlmeans/api": "^0.1.19",
54
+ "@owlmeans/auth": "^0.1.19",
55
+ "@owlmeans/auth-common": "^0.1.19",
56
+ "@owlmeans/basic-envelope": "^0.1.19",
57
+ "@owlmeans/basic-keys": "^0.1.19",
58
+ "@owlmeans/client": "^0.1.19",
59
+ "@owlmeans/client-context": "^0.1.19",
60
+ "@owlmeans/client-entrypoint": "^0.1.19",
61
+ "@owlmeans/client-flow": "^0.1.19",
62
+ "@owlmeans/client-i18n": "^0.1.19",
63
+ "@owlmeans/client-resource": "^0.1.19",
64
+ "@owlmeans/client-socket": "^0.1.19",
65
+ "@owlmeans/config": "^0.1.19",
66
+ "@owlmeans/context": "^0.1.19",
67
+ "@owlmeans/did": "^0.1.19",
68
+ "@owlmeans/entrypoint": "^0.1.19",
69
+ "@owlmeans/error": "^0.1.19",
70
+ "@owlmeans/flow": "^0.1.19",
71
+ "@owlmeans/i18n": "^0.1.19",
72
+ "@owlmeans/log": "^0.1.19",
73
+ "@owlmeans/resource": "^0.1.19",
74
+ "@owlmeans/socket": "^0.1.19",
75
+ "@owlmeans/web-flow": "^0.1.19",
74
76
  "@scure/base": "^2.4.0"
75
77
  },
76
78
  "peerDependencies": {
@@ -78,11 +80,12 @@
78
80
  "react": "*"
79
81
  },
80
82
  "devDependencies": {
81
- "@owlmeans/dep-config": "^0.1.18",
82
- "@owlmeans/test-auth": "^0.1.18",
83
- "@types/bun": "^1.4.2",
83
+ "@owlmeans/dep-config": "^0.1.19",
84
+ "@owlmeans/test-auth": "^0.1.19",
85
+ "@types/bun": "^1.4.4",
84
86
  "@types/react": "^19.3.0",
85
87
  "nodemon": "^3.1.14",
88
+ "react-dom": "^19.3.0",
86
89
  "typescript": "^7.0.2"
87
90
  },
88
91
  "publishConfig": {
@@ -1,4 +1,4 @@
1
- import { useCallback, useEffect, useState } from 'react'
1
+ import { useCallback, useEffect, useMemo, useState } from 'react'
2
2
  import type { DispatcherRendererProps, TDispatcherHOC } from './types.js'
3
3
  import { AUTH_QUERY, DISPATCHER } from '@owlmeans/auth'
4
4
  import type { ClientEntrypoint } from '@owlmeans/client-entrypoint'
@@ -10,6 +10,11 @@ import { type FlowService, DEFAULT_ALIAS as FLOW_SERVICE } from '@owlmeans/clien
10
10
  import { FLOW_PLACEHOLDER, OidcAuthStep, STD_OIDC_FLOW } from '@owlmeans/flow'
11
11
  import { SERVICE_PARAM } from '@owlmeans/web-flow'
12
12
  import { loginLandingOf } from '../../login/land.js'
13
+ import { loginFailureHelper } from '../../login/failure.js'
14
+ import { LoginFailureView } from '../../login/failure-view.js'
15
+ import { makeAuthTranslate } from '../../login/translate.js'
16
+ import { ensureLoginService } from '../../login/service.js'
17
+ import type { LoginFailure } from '../../login/failure/types.js'
13
18
  import { logger } from '@owlmeans/log'
14
19
  import type { StateToken } from './types.local.js'
15
20
 
@@ -17,8 +22,41 @@ const log = logger('client-auth:dispatcher')
17
22
 
18
23
  export const DispatcherHOC: TDispatcherHOC = Renderer => ({ context, params, alias, query, payload }) => {
19
24
  const [forwarding, setForwarding] = useState<StateToken | undefined>()
25
+ // How the exchange of a supplied token ended, when it did not sign anyone in. Rendered here, in
26
+ // place of the renderer, so no renderer is left on its "loading" line forever.
27
+ const [failure, setFailure] = useState<LoginFailure | null>(null)
20
28
 
21
29
  const navigator = useNavigate()
30
+
31
+ const fail = useCallback((error: unknown) => {
32
+ const failed = loginFailureHelper.failureOf(error)
33
+ if (failed.refused) {
34
+ // The person's condition, not a fault: the server said so on purpose.
35
+ log.warn('Sign-in refused', { kind: failed.kind, incidentId: failed.incidentId }, { event: 'auth.refused' })
36
+ } else {
37
+ log.error('Authentication failed', error, { event: 'auth.refused' })
38
+ }
39
+ setFailure(failed)
40
+ }, [])
41
+
42
+ // Back to the start of signing in — the dispatcher with nothing to exchange. A supplied token is
43
+ // single-use, so sending it again could only fail again. A full load where there is a document,
44
+ // so the renderer starts from scratch; an in-app hop elsewhere.
45
+ const restart = useCallback(() => {
46
+ void (async () => {
47
+ if (ensureLoginService(context).env().hasWindow) {
48
+ window.location.replace(await loginLandingOf(context).landingUrl({ alias: DISPATCHER }))
49
+ return
50
+ }
51
+ setFailure(null)
52
+ setForwarding(undefined)
53
+ await navigator.navigate(context.entrypoint<ClientEntrypoint<string>>(DISPATCHER), { params: {}, query: {} })
54
+ })().catch((error: unknown) => {
55
+ log.warn('The sign-in screen could not be reopened', error)
56
+ })
57
+ }, [])
58
+
59
+ const translate = useMemo(() => failure != null ? makeAuthTranslate(context.cfg) : undefined, [failure])
22
60
  const navigate = useCallback(async () => {
23
61
  if (alias == null || alias === DISPATCHER) {
24
62
  // A sign-in that started elsewhere — a device or authorization-code consent screen, most
@@ -98,14 +136,15 @@ export const DispatcherHOC: TDispatcherHOC = Renderer => ({ context, params, ali
98
136
  }
99
137
  }
100
138
  await flow.proceed()
101
- })
139
+ }).catch(fail)
102
140
  } else {
103
141
  const auth = context.service<AuthService>(DEFAULT_ALIAS)
142
+ // A refused or failed exchange ends in the failure view; a navigation that fails after a
143
+ // successful one is only logged — the person IS signed in by then.
104
144
  auth.authenticate(forwarding.token).then(async () => {
105
145
  return await navigate()
106
- }).catch((e: Error) => {
107
- // @TODO Show error on the component
108
- log.error('Authentication failed', e, { event: 'auth.refused' })
146
+ }, fail).catch((e: unknown) => {
147
+ log.error('Navigation after sign-in failed', e)
109
148
  })
110
149
  }
111
150
  }
@@ -115,6 +154,10 @@ export const DispatcherHOC: TDispatcherHOC = Renderer => ({ context, params, ali
115
154
  setForwarding({ token, query })
116
155
  }, [])
117
156
 
157
+ if (failure != null) {
158
+ return <LoginFailureView failure={failure} translate={translate} onAction={restart} page />
159
+ }
160
+
118
161
  return <Renderer provideToken={provideToken} navigate={navigate} />
119
162
  }
120
163
 
@@ -19,6 +19,16 @@ export const box: CSSProperties = {
19
19
  width: '100%', maxWidth: '24rem', padding: '1.5rem', textAlign: 'center',
20
20
  }
21
21
 
22
+ /** The one action of a failed sign-in — the way back, or the retry. */
23
+ export const failureAction: CSSProperties = {
24
+ display: 'inline-block', marginTop: '1rem', padding: '.625rem 1rem', fontSize: '1rem',
25
+ cursor: 'pointer', borderRadius: '.375rem', border: '1px solid currentColor', background: 'transparent',
26
+ color: 'inherit',
27
+ }
28
+
29
+ /** The library resource the sign-in copy is registered in (`i18n.ts`), in the `lib` namespace. */
30
+ export const LOGIN_I18N_RESOURCE = 'auth'
31
+
22
32
  /** The same English fallback a document's `i18nKey` translates to when nothing else names it. */
23
33
  export const DEFAULT_LABEL: Record<string, string> = {
24
34
  terms: 'Terms & Conditions',
@@ -0,0 +1,35 @@
1
+ import { LoginFailureKind } from './consts.js'
2
+
3
+ /** The `auth` library key and English fallback phrasing each kind (`login.error.<kind>`). */
4
+ export const FAILURE_COPY: Readonly<Record<LoginFailureKind, readonly [string, string]>> = Object.freeze({
5
+ [LoginFailureKind.Refused]: ['login.error.refused', 'This account cannot sign in here.'],
6
+ [LoginFailureKind.AccountDisabled]: [
7
+ 'login.error.account-disabled', 'This account has been disabled and cannot sign in here.',
8
+ ],
9
+ [LoginFailureKind.ProfileDisabled]: [
10
+ 'login.error.profile-disabled',
11
+ 'This account’s access to this application has been blocked, so it cannot sign in here.',
12
+ ],
13
+ [LoginFailureKind.Failed]: ['login.error.failed', 'Sign-in did not complete. Please try again.'],
14
+ })
15
+
16
+ /** The action of a refusal: back to the choice of how to sign in. */
17
+ export const BACK_COPY: readonly [string, string] = Object.freeze(['login.error.back', 'Back to sign-in'] as const)
18
+
19
+ /** The action of any other failure: the same attempt once more. */
20
+ export const RETRY_COPY: readonly [string, string] = Object.freeze(['login.error.retry', 'Try again'] as const)
21
+
22
+ /** The incident id a person can report — filled AFTER translation, never as an i18next parameter. */
23
+ export const INCIDENT_COPY: readonly [string, string] = Object.freeze(['login.error.incident', 'Reference: {{incident}}'] as const)
24
+
25
+ export const INCIDENT_PLACEHOLDER = '{{incident}}'
26
+
27
+ /**
28
+ * A refusal code, wherever a message exposes it: the identity store's sign-in refusal
29
+ * (`auth:manager:authen:<code>`, `AuthRefused` and the `AuthenFailed` it extends) and the integrated
30
+ * IAM finalizer's (`auth:authorization:forbidden:<code>`). The lookahead keeps `…:disabled-x` out.
31
+ */
32
+ export const REFUSAL_CODES: ReadonlyArray<readonly [RegExp, LoginFailureKind]> = Object.freeze([
33
+ [/(?:authen|forbidden):account:disabled(?![\w-])/, LoginFailureKind.AccountDisabled],
34
+ [/(?:authen|forbidden):profile:disabled(?![\w-])/, LoginFailureKind.ProfileDisabled],
35
+ ] as const)
@@ -0,0 +1,16 @@
1
+ /**
2
+ * What a failed sign-in means for the person looking at it.
3
+ *
4
+ * Every kind but {@link LoginFailureKind.Failed} is a refusal of THIS account: trying again with it
5
+ * changes nothing, so a screen offers the way back to the sign-in choice instead of a retry.
6
+ */
7
+ export enum LoginFailureKind {
8
+ /** The server refused this account here (403 with the access-denied marker, or `AuthRefused`). */
9
+ Refused = 'refused',
10
+ /** The account is banned — the refusal code `account:disabled` was visible. */
11
+ AccountDisabled = 'account-disabled',
12
+ /** The account's access to this application is blocked — `profile:disabled` was visible. */
13
+ ProfileDisabled = 'profile-disabled',
14
+ /** Anything else: a fault, a timeout, a network error, an expired attempt. Worth a retry. */
15
+ Failed = 'failed',
16
+ }