@owlmeans/client-auth 0.1.19-rc.0 → 0.1.20-alpha.0

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 (74) 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/login/consts.local.d.ts +4 -0
  9. package/build/login/consts.local.d.ts.map +1 -1
  10. package/build/login/consts.local.js +8 -0
  11. package/build/login/consts.local.js.map +1 -1
  12. package/build/login/failure/consts.d.ts +17 -0
  13. package/build/login/failure/consts.d.ts.map +1 -0
  14. package/build/login/failure/consts.js +18 -0
  15. package/build/login/failure/consts.js.map +1 -0
  16. package/build/login/failure/consts.local.d.ts +17 -0
  17. package/build/login/failure/consts.local.d.ts.map +1 -0
  18. package/build/login/failure/consts.local.js +30 -0
  19. package/build/login/failure/consts.local.js.map +1 -0
  20. package/build/login/failure/types.d.ts +57 -0
  21. package/build/login/failure/types.d.ts.map +1 -0
  22. package/build/login/failure/types.js +2 -0
  23. package/build/login/failure/types.js.map +1 -0
  24. package/build/login/failure-view.d.ts +14 -0
  25. package/build/login/failure-view.d.ts.map +1 -0
  26. package/build/login/failure-view.js +19 -0
  27. package/build/login/failure-view.js.map +1 -0
  28. package/build/login/failure.d.ts +4 -0
  29. package/build/login/failure.d.ts.map +1 -0
  30. package/build/login/failure.js +50 -0
  31. package/build/login/failure.js.map +1 -0
  32. package/build/login/i18n/be.json +7 -1
  33. package/build/login/i18n/de.json +7 -1
  34. package/build/login/i18n/en.json +7 -1
  35. package/build/login/i18n/es.json +7 -1
  36. package/build/login/i18n/fr.json +7 -1
  37. package/build/login/i18n/pl.json +7 -1
  38. package/build/login/i18n/ru.json +7 -1
  39. package/build/login/i18n/uk.json +7 -1
  40. package/build/login/index.d.ts +5 -0
  41. package/build/login/index.d.ts.map +1 -1
  42. package/build/login/index.js +4 -0
  43. package/build/login/index.js.map +1 -1
  44. package/build/login/screen.d.ts.map +1 -1
  45. package/build/login/screen.js +9 -2
  46. package/build/login/screen.js.map +1 -1
  47. package/build/login/translate.d.ts +15 -0
  48. package/build/login/translate.d.ts.map +1 -0
  49. package/build/login/translate.js +26 -0
  50. package/build/login/translate.js.map +1 -0
  51. package/build/login/types.d.ts +7 -0
  52. package/build/login/types.d.ts.map +1 -1
  53. package/package.json +27 -24
  54. package/src/components/dispatcher/component.tsx +48 -5
  55. package/src/login/consts.local.ts +10 -0
  56. package/src/login/failure/consts.local.ts +35 -0
  57. package/src/login/failure/consts.ts +16 -0
  58. package/src/login/failure/types.ts +60 -0
  59. package/src/login/failure-view.tsx +35 -0
  60. package/src/login/failure.ts +67 -0
  61. package/src/login/i18n/be.json +7 -1
  62. package/src/login/i18n/de.json +7 -1
  63. package/src/login/i18n/en.json +7 -1
  64. package/src/login/i18n/es.json +7 -1
  65. package/src/login/i18n/fr.json +7 -1
  66. package/src/login/i18n/pl.json +7 -1
  67. package/src/login/i18n/ru.json +7 -1
  68. package/src/login/i18n/uk.json +7 -1
  69. package/src/login/index.ts +5 -0
  70. package/src/login/screen.tsx +13 -1
  71. package/src/login/translate.ts +32 -0
  72. package/src/login/types.ts +8 -0
  73. package/src/manager/README.md +1 -1
  74. package/tests/failure.spec.tsx +176 -0
@@ -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":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAA;IAClB,kGAAkG;IAClG,QAAQ,EAAE,OAAO,CAAA;IACjB,yFAAyF;IACzF,SAAS,EAAE,OAAO,CAAA;IAClB,uFAAuF;IACvF,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,wFAAwF;IACxF,GAAG,EAAE,MAAM,CAAA;IACX;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAA;IACX,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uDAAuD;IACvD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,YAAY,KAAK,OAAO,CAAA;IAEtD;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAA;IAElD;;;;;OAKG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAEzF,qEAAqE;IACrE,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAEnF,yEAAyE;IACzE,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAEpF;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAEnF;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAE5F,6EAA6E;IAC7E,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;CAC7E;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAA;CAC5E;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAA;IACrB,GAAG,EAAE,QAAQ,CAAA;IACb,uDAAuD;IACvD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpF;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,mBAAmB,CAAA;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,KAAK,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,WAAW,EAAE,CAAA;CACjD;AAED,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,SAAS,CAAA;IACxD,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAA;IACzD;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC,CAAA;IACrE,KAAK,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAA;IAChC,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,kDAAkD;IAClD,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAA;AAElE;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAAG,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAE;AAE/E,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IAC7C,uEAAuE;IACvE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,KAAK,WAAW,CAAA;IACvC,6DAA6D;IAC7D,GAAG,EAAE,MAAM,QAAQ,CAAA;IACnB,0FAA0F;IAC1F,oBAAoB,EAAE,CAAC,YAAY,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAC/D,qEAAqE;IACrE,oBAAoB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACzD,OAAO,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,WAAW,EAAE,CAAA;IACnD;;;;;OAKG;IACH,cAAc,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAA;IACtD,MAAM,EAAE,MAAM,oBAAoB,GAAG,IAAI,CAAA;IACzC,8EAA8E;IAC9E,gBAAgB,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAA;IACnD,oFAAoF;IACpF,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IACvC,6DAA6D;IAC7D,KAAK,EAAE,MAAM,SAAS,EAAE,CAAA;IACxB,sGAAsG;IACtG,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC1C,qEAAqE;IACrE,YAAY,EAAE,MAAM,gBAAgB,EAAE,CAAA;IAItC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IACvD,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAClD,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAChD,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IACzD,cAAc,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAA;IAC3C,qEAAqE;IACrE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,wEAAwE;IACxE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAA;AAE7F;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,kBAAkB,GAAG,SAAS,CAAA;IAC7D,gFAAgF;IAChF,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAChD;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,YAAY,CAAA;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/login/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/client-auth",
3
- "version": "0.1.19-rc.0",
3
+ "version": "0.1.20-alpha.0",
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.19-rc.0",
54
- "@owlmeans/auth-common": "^0.1.19-rc.0",
55
- "@owlmeans/basic-envelope": "^0.1.19-rc.0",
56
- "@owlmeans/basic-keys": "^0.1.19-rc.0",
57
- "@owlmeans/client": "^0.1.19-rc.0",
58
- "@owlmeans/client-context": "^0.1.19-rc.0",
59
- "@owlmeans/client-entrypoint": "^0.1.19-rc.0",
60
- "@owlmeans/client-flow": "^0.1.19-rc.0",
61
- "@owlmeans/client-resource": "^0.1.19-rc.0",
62
- "@owlmeans/client-socket": "^0.1.19-rc.0",
63
- "@owlmeans/config": "^0.1.19-rc.0",
64
- "@owlmeans/context": "^0.1.18",
65
- "@owlmeans/did": "^0.1.19-rc.0",
66
- "@owlmeans/entrypoint": "^0.1.19-rc.0",
67
- "@owlmeans/error": "^0.1.18",
68
- "@owlmeans/flow": "^0.1.19-rc.0",
69
- "@owlmeans/i18n": "^0.1.18",
70
- "@owlmeans/log": "^0.1.19-rc.0",
71
- "@owlmeans/resource": "^0.1.19-rc.0",
72
- "@owlmeans/socket": "^0.1.19-rc.0",
73
- "@owlmeans/web-flow": "^0.1.19-rc.0",
53
+ "@owlmeans/api": "0.1.20-alpha.0",
54
+ "@owlmeans/auth": "^0.1.19",
55
+ "@owlmeans/auth-common": "0.1.20-alpha.0",
56
+ "@owlmeans/basic-envelope": "0.1.20-alpha.0",
57
+ "@owlmeans/basic-keys": "0.1.20-alpha.0",
58
+ "@owlmeans/client": "0.1.20-alpha.0",
59
+ "@owlmeans/client-context": "0.1.20-alpha.0",
60
+ "@owlmeans/client-entrypoint": "0.1.20-alpha.0",
61
+ "@owlmeans/client-flow": "0.1.20-alpha.0",
62
+ "@owlmeans/client-i18n": "0.1.20-alpha.0",
63
+ "@owlmeans/client-resource": "0.1.20-alpha.0",
64
+ "@owlmeans/client-socket": "0.1.20-alpha.0",
65
+ "@owlmeans/config": "^0.1.19",
66
+ "@owlmeans/context": "^0.1.19",
67
+ "@owlmeans/did": "0.1.20-alpha.0",
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.20-alpha.0",
73
+ "@owlmeans/resource": "^0.1.19",
74
+ "@owlmeans/socket": "0.1.20-alpha.0",
75
+ "@owlmeans/web-flow": "0.1.20-alpha.0",
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.19-rc.0",
83
+ "@owlmeans/dep-config": "^0.1.19",
84
+ "@owlmeans/test-auth": "0.1.20-alpha.0",
83
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
+ }
@@ -0,0 +1,60 @@
1
+ import type { CSSProperties } from 'react'
2
+ import type { LoginFailureKind } from './consts.js'
3
+ import type { LoginTranslate } from '../types.js'
4
+
5
+ /** A failed sign-in, read for the person who has to act on it. */
6
+ export interface LoginFailure {
7
+ kind: LoginFailureKind
8
+ /** A refusal of this account — retrying with it changes nothing. */
9
+ refused: boolean
10
+ /** The `auth` library key that phrases it (`login.error.<kind>`); an app overrides it there. */
11
+ key: string
12
+ /** The English sentence used when no translation resolves the key. */
13
+ fallback: string
14
+ /** The server's incident id, when it sent one — what a person reports for a failure. */
15
+ incidentId: string | null
16
+ }
17
+
18
+ /** The three lines a failure view renders, already translated. */
19
+ export interface LoginFailurePhrase {
20
+ message: string
21
+ /** `Reference: <id>` for a failure that is not a refusal and carries an incident id. */
22
+ incident: string | null
23
+ /** The action's label: "Back to sign-in" for a refusal, "Try again" otherwise. */
24
+ action: string
25
+ }
26
+
27
+ /**
28
+ * How every OwlMeans sign-in surface reads a failed attempt — the Google callback, the supervisor
29
+ * form, the dispatcher's exchange and the sign-in screens — so they phrase it the same way.
30
+ */
31
+ export interface LoginFailureHelper {
32
+ /**
33
+ * What a caught sign-in error means.
34
+ *
35
+ * A visible refusal code comes first (`account:disabled`, `profile:disabled` — a development body
36
+ * rebuilt into its class, or a message that names it); then a refusal without one: an
37
+ * `AuthRefused` of any module copy, or the production answer `apiStatusHelper.isAccessDenied`
38
+ * recognises (403 with `X-OwlMeans-Denial: access-denied`). Anything else — a 403 without the
39
+ * marker included, since plan and entitlement refusals use that status too — is `Failed`.
40
+ */
41
+ failureOf: (error: unknown) => LoginFailure
42
+ /** `failureOf(error).refused`. */
43
+ isRefusal: (error: unknown) => boolean
44
+ /** The failure's sentences through `translate` (the `auth` library keys), English without one. */
45
+ phrase: (failure: LoginFailure, translate?: LoginTranslate) => LoginFailurePhrase
46
+ }
47
+
48
+ export interface LoginFailureViewProps {
49
+ failure: LoginFailure
50
+ /** `(key, defaultValue) => string` over the `auth` library — a prop, never an implicit i18n read. */
51
+ translate?: LoginTranslate
52
+ /**
53
+ * What the action button does — the way back to the sign-in choice for a refusal, the same
54
+ * attempt again otherwise. Omitted, no button is rendered.
55
+ */
56
+ onAction?: () => void
57
+ /** Wrap the notice in the centred full-viewport page of the plain sign-in screen. */
58
+ page?: boolean
59
+ style?: CSSProperties
60
+ }