@dudousxd/adonis-authkit-server 0.3.0 → 0.5.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 (58) hide show
  1. package/build/commands/commands.json +28 -0
  2. package/build/commands/doctor.d.ts +10 -0
  3. package/build/commands/doctor.js +66 -0
  4. package/build/commands/rotate_keys.d.ts +10 -0
  5. package/build/commands/rotate_keys.js +53 -0
  6. package/build/host/views/account/email-confirmed.edge +15 -0
  7. package/build/host/views/account/security.edge +83 -0
  8. package/build/host/views/account/tokens.edge +7 -4
  9. package/build/host/views/admin/sessions.edge +89 -0
  10. package/build/host/views/admin/users.edge +1 -0
  11. package/build/host/views/mfa-challenge.edge +29 -23
  12. package/build/index.d.ts +5 -4
  13. package/build/index.js +3 -3
  14. package/build/src/accounts/account_store.d.ts +46 -1
  15. package/build/src/accounts/account_store.js +4 -0
  16. package/build/src/accounts/lucid_store/core.d.ts +5 -4
  17. package/build/src/accounts/lucid_store/core.js +67 -2
  18. package/build/src/adapters/adapter_contract.d.ts +17 -0
  19. package/build/src/adapters/database_adapter.d.ts +9 -5
  20. package/build/src/adapters/database_adapter.js +13 -6
  21. package/build/src/adapters/redis_adapter.d.ts +11 -5
  22. package/build/src/adapters/redis_adapter.js +16 -7
  23. package/build/src/audit/audit_sink.d.ts +1 -1
  24. package/build/src/define_config.d.ts +102 -0
  25. package/build/src/define_config.js +46 -3
  26. package/build/src/doctor/checks.d.ts +51 -0
  27. package/build/src/doctor/checks.js +231 -0
  28. package/build/src/host/admin_clients_service.js +12 -5
  29. package/build/src/host/admin_sessions_service.d.ts +63 -0
  30. package/build/src/host/admin_sessions_service.js +127 -0
  31. package/build/src/host/controllers/account_mfa_controller.js +6 -2
  32. package/build/src/host/controllers/account_security_controller.d.ts +16 -0
  33. package/build/src/host/controllers/account_security_controller.js +119 -0
  34. package/build/src/host/controllers/account_session_controller.js +2 -1
  35. package/build/src/host/controllers/admin/admin_sessions_controller.d.ts +14 -0
  36. package/build/src/host/controllers/admin/admin_sessions_controller.js +64 -0
  37. package/build/src/host/controllers/interaction_controller.d.ts +11 -0
  38. package/build/src/host/controllers/interaction_controller.js +55 -12
  39. package/build/src/host/default_mailer.d.ts +17 -0
  40. package/build/src/host/default_mailer.js +94 -9
  41. package/build/src/host/email_templates.d.ts +4 -0
  42. package/build/src/host/email_templates.js +5 -2
  43. package/build/src/host/i18n.d.ts +358 -11
  44. package/build/src/host/i18n.js +393 -12
  45. package/build/src/host/login_notify.d.ts +20 -0
  46. package/build/src/host/login_notify.js +71 -0
  47. package/build/src/host/register_auth_host.js +12 -0
  48. package/build/src/host/validators.d.ts +32 -0
  49. package/build/src/host/validators.js +14 -0
  50. package/build/src/keys/keystore.d.ts +43 -0
  51. package/build/src/keys/keystore.js +74 -0
  52. package/build/src/observability/metrics_controller.js +4 -4
  53. package/build/src/provider/build_provider.js +23 -0
  54. package/build/src/provider/device_sources.d.ts +6 -0
  55. package/build/src/provider/device_sources.js +65 -0
  56. package/build/src/provider/interaction_actions.d.ts +6 -1
  57. package/build/src/provider/interaction_actions.js +9 -2
  58. package/package.json +2 -2
@@ -3,26 +3,29 @@
3
3
  *
4
4
  * Todas as strings visíveis ao usuário das views Edge (e as mensagens de
5
5
  * flash/erro produzidas pelos controllers) vivem num catálogo achatado de
6
- * chaves pontilhadas. O default embutido é pt-BR — os apps continuam
7
- * funcionando SEM nenhuma configuração. O host pode sobrescrever chaves
8
- * pontuais ou fornecer locales inteiros (ex.: `en`) via `I18nConfig`.
6
+ * chaves pontilhadas. O default embutido é inglês (`en`) — os apps continuam
7
+ * funcionando SEM nenhuma configuração. O pt-BR é um locale embutido: basta
8
+ * `i18n: { locale: 'pt-BR' }`. O host também pode sobrescrever chaves pontuais
9
+ * ou fornecer locales inteiros (ex.: `fr`) via `I18nConfig`.
9
10
  */
10
11
  /** Catálogo achatado de chaves de mensagem → strings. */
11
12
  export type AuthMessages = Record<string, string>;
12
13
  export interface I18nConfig {
13
- /** Locale ativo. Default: 'pt-BR'. */
14
+ /** Locale ativo. Default: 'en'. Locale embutido extra: 'pt-BR'. */
14
15
  locale?: string;
15
16
  /**
16
17
  * Locales adicionais e/ou overrides pontuais. As chaves do locale ativo são
17
- * mescladas SOBRE o default pt-BR então o host pode trocar só algumas
18
- * chaves ou trazer um locale novo por completo.
18
+ * mescladas SOBRE o catálogo embutido do locale (ou sobre o default `en`
19
+ * quando o locale não é embutido) então o host pode trocar só algumas
20
+ * chaves, complementar um locale embutido, ou trazer um locale novo por
21
+ * completo.
19
22
  */
20
23
  messages?: Record<string, Partial<AuthMessages>>;
21
24
  }
22
25
  /** Locale default do host-kit. */
23
- export declare const DEFAULT_LOCALE = "pt-BR";
26
+ export declare const DEFAULT_LOCALE = "en";
24
27
  /**
25
- * Catálogo default (pt-BR) — cobre TODAS as strings visíveis ao usuário das
28
+ * Catálogo default (inglês) — cobre TODAS as strings visíveis ao usuário das
26
29
  * views e as mensagens de flash/erro dos controllers. Chaves agrupadas por tela.
27
30
  */
28
31
  export declare const DEFAULT_MESSAGES: {
@@ -90,6 +93,7 @@ export declare const DEFAULT_MESSAGES: {
90
93
  'account.tokens.page_title': string;
91
94
  'account.tokens.title': string;
92
95
  'account.tokens.logout': string;
96
+ 'account.tokens.security': string;
93
97
  'account.tokens.created_notice': string;
94
98
  'account.tokens.name_placeholder': string;
95
99
  'account.tokens.create': string;
@@ -100,6 +104,28 @@ export declare const DEFAULT_MESSAGES: {
100
104
  'account.tokens.scopes': string;
101
105
  'account.tokens.audience': string;
102
106
  'account.tokens.revoke': string;
107
+ 'account.security.page_title': string;
108
+ 'account.security.title': string;
109
+ 'account.security.logout': string;
110
+ 'account.security.current_email': string;
111
+ 'account.security.not_supported': string;
112
+ 'account.security.password_section': string;
113
+ 'account.security.current_password_label': string;
114
+ 'account.security.new_password_label': string;
115
+ 'account.security.change_password_submit': string;
116
+ 'account.security.password_changed': string;
117
+ 'account.security.email_section': string;
118
+ 'account.security.email_intro': string;
119
+ 'account.security.new_email_label': string;
120
+ 'account.security.email_password_label': string;
121
+ 'account.security.change_email_submit': string;
122
+ 'account.security.email_change_requested': string;
123
+ 'account.security.email_changed': string;
124
+ 'account.email_confirmed.page_title': string;
125
+ 'account.email_confirmed.ok_title': string;
126
+ 'account.email_confirmed.ok_body': string;
127
+ 'account.email_confirmed.invalid_title': string;
128
+ 'account.email_confirmed.invalid_body': string;
103
129
  'account.mfa.page_title': string;
104
130
  'account.mfa.title': string;
105
131
  'account.mfa.logout': string;
@@ -140,6 +166,23 @@ export declare const DEFAULT_MESSAGES: {
140
166
  'admin.users.empty': string;
141
167
  'admin.users.roles_placeholder': string;
142
168
  'admin.users.save_roles': string;
169
+ 'admin.users.sessions': string;
170
+ 'admin.sessions.page_title': string;
171
+ 'admin.sessions.title': string;
172
+ 'admin.sessions.account': string;
173
+ 'admin.sessions.back': string;
174
+ 'admin.sessions.not_supported': string;
175
+ 'admin.sessions.revoked_notice': string;
176
+ 'admin.sessions.sessions_section': string;
177
+ 'admin.sessions.sessions_empty': string;
178
+ 'admin.sessions.session_login_ts': string;
179
+ 'admin.sessions.session_amr': string;
180
+ 'admin.sessions.grants_section': string;
181
+ 'admin.sessions.grants_empty': string;
182
+ 'admin.sessions.grant_client': string;
183
+ 'admin.sessions.grant_tokens': string;
184
+ 'admin.sessions.revoke_all': string;
185
+ 'admin.sessions.revoke_confirm': string;
143
186
  'admin.clients.page_title': string;
144
187
  'admin.clients.title': string;
145
188
  'admin.clients.empty': string;
@@ -185,17 +228,321 @@ export declare const DEFAULT_MESSAGES: {
185
228
  'admin.pagination.page': string;
186
229
  'admin.pagination.prev': string;
187
230
  'admin.pagination.next': string;
231
+ 'device.input.title': string;
232
+ 'device.input.intro': string;
233
+ 'device.input.submit': string;
234
+ 'device.input.error_invalid': string;
235
+ 'device.input.error_aborted': string;
236
+ 'device.input.error_generic': string;
237
+ 'device.confirm.title': string;
238
+ 'device.confirm.body': string;
239
+ 'device.confirm.submit': string;
240
+ 'device.confirm.abort': string;
241
+ 'device.success.title': string;
242
+ 'device.success.body': string;
243
+ 'mfa_challenge.required_no_enrollment': string;
188
244
  'errors.invalid_credentials': string;
189
245
  'errors.invalid_code': string;
190
246
  'errors.email_taken': string;
191
247
  'errors.signup_failed': string;
192
248
  'errors.invalid_or_expired_token': string;
193
249
  'errors.account_locked': string;
250
+ 'errors.session_expired': string;
251
+ 'errors.challenge_expired': string;
252
+ 'errors.passkeys_unavailable': string;
253
+ 'errors.no_passkey_registered': string;
254
+ 'mail.common.link_fallback': string;
255
+ 'mail.reset.subject': string;
256
+ 'mail.reset.heading': string;
257
+ 'mail.reset.intro': string;
258
+ 'mail.reset.cta': string;
259
+ 'mail.reset.fallback': string;
260
+ 'mail.reset.expires': string;
261
+ 'mail.verify.subject': string;
262
+ 'mail.verify.heading': string;
263
+ 'mail.verify.intro': string;
264
+ 'mail.verify.cta': string;
265
+ 'mail.verify.fallback': string;
266
+ 'mail.verify.expires': string;
267
+ 'mail.new_login.subject': string;
268
+ 'mail.new_login.heading': string;
269
+ 'mail.new_login.intro': string;
270
+ 'mail.new_login.when': string;
271
+ 'mail.new_login.ip': string;
272
+ 'mail.new_login.device': string;
273
+ 'mail.new_login.fallback': string;
274
+ 'mail.email_change.subject': string;
275
+ 'mail.email_change.heading': string;
276
+ 'mail.email_change.intro': string;
277
+ 'mail.email_change.cta': string;
278
+ 'mail.email_change.fallback': string;
279
+ 'mail.email_change.expires': string;
194
280
  };
195
281
  /**
196
- * Resolve o catálogo ativo: mescla os overrides do locale selecionado SOBRE o
197
- * default pt-BR. Sem config, retorna os defaults intactos. Chaves omitidas pelo
198
- * locale escolhido caem no default pt-BR (fallback de cobertura).
282
+ * Catálogo embutido pt-BR. Espelha TODAS as chaves do default `en`. Ativado
283
+ * com `i18n: { locale: 'pt-BR' }` sem nenhuma config extra de mensagens.
284
+ */
285
+ export declare const PT_BR_MESSAGES: {
286
+ 'common.app_fallback': string;
287
+ 'common.brand_eyebrow': string;
288
+ 'login.page_title': string;
289
+ 'login.title': string;
290
+ 'login.identifier_intro': string;
291
+ 'login.email_label': string;
292
+ 'login.identifier_submit': string;
293
+ 'login.create_account': string;
294
+ 'login.forgot_password': string;
295
+ 'login.divider_or': string;
296
+ 'login.google': string;
297
+ 'login.greeting': string;
298
+ 'login.switch_account': string;
299
+ 'login.password_label': string;
300
+ 'login.submit': string;
301
+ 'signup.page_title': string;
302
+ 'signup.title': string;
303
+ 'signup.intro': string;
304
+ 'signup.name_label': string;
305
+ 'signup.email_label': string;
306
+ 'signup.password_label': string;
307
+ 'signup.submit': string;
308
+ 'signup.have_account': string;
309
+ 'forgot.page_title': string;
310
+ 'forgot.sent_title': string;
311
+ 'forgot.sent_body': string;
312
+ 'forgot.title': string;
313
+ 'forgot.intro': string;
314
+ 'forgot.email_label': string;
315
+ 'forgot.submit': string;
316
+ 'reset.page_title': string;
317
+ 'reset.done_title': string;
318
+ 'reset.done_body': string;
319
+ 'reset.title': string;
320
+ 'reset.intro': string;
321
+ 'reset.password_label': string;
322
+ 'reset.submit': string;
323
+ 'verify_email.page_title': string;
324
+ 'verify_email.verified_title': string;
325
+ 'verify_email.verified_body': string;
326
+ 'verify_email.invalid_title': string;
327
+ 'verify_email.invalid_body': string;
328
+ 'mfa_challenge.page_title': string;
329
+ 'mfa_challenge.title': string;
330
+ 'mfa_challenge.intro': string;
331
+ 'mfa_challenge.code_label': string;
332
+ 'mfa_challenge.submit': string;
333
+ 'mfa_challenge.recovery_summary': string;
334
+ 'mfa_challenge.recovery_submit': string;
335
+ 'mfa_challenge.passkey_button': string;
336
+ 'mfa_challenge.passkey_error': string;
337
+ 'consent.page_title': string;
338
+ 'consent.title': string;
339
+ 'consent.body': string;
340
+ 'consent.submit': string;
341
+ 'account.login.page_title': string;
342
+ 'account.login.title': string;
343
+ 'account.login.intro': string;
344
+ 'account.login.email_label': string;
345
+ 'account.login.password_label': string;
346
+ 'account.login.submit': string;
347
+ 'account.tokens.page_title': string;
348
+ 'account.tokens.title': string;
349
+ 'account.tokens.logout': string;
350
+ 'account.tokens.security': string;
351
+ 'account.tokens.created_notice': string;
352
+ 'account.tokens.name_placeholder': string;
353
+ 'account.tokens.create': string;
354
+ 'account.tokens.empty': string;
355
+ 'account.tokens.created_at': string;
356
+ 'account.tokens.last_used': string;
357
+ 'account.tokens.never_used': string;
358
+ 'account.tokens.scopes': string;
359
+ 'account.tokens.audience': string;
360
+ 'account.tokens.revoke': string;
361
+ 'account.security.page_title': string;
362
+ 'account.security.title': string;
363
+ 'account.security.logout': string;
364
+ 'account.security.current_email': string;
365
+ 'account.security.not_supported': string;
366
+ 'account.security.password_section': string;
367
+ 'account.security.current_password_label': string;
368
+ 'account.security.new_password_label': string;
369
+ 'account.security.change_password_submit': string;
370
+ 'account.security.password_changed': string;
371
+ 'account.security.email_section': string;
372
+ 'account.security.email_intro': string;
373
+ 'account.security.new_email_label': string;
374
+ 'account.security.email_password_label': string;
375
+ 'account.security.change_email_submit': string;
376
+ 'account.security.email_change_requested': string;
377
+ 'account.security.email_changed': string;
378
+ 'account.email_confirmed.page_title': string;
379
+ 'account.email_confirmed.ok_title': string;
380
+ 'account.email_confirmed.ok_body': string;
381
+ 'account.email_confirmed.invalid_title': string;
382
+ 'account.email_confirmed.invalid_body': string;
383
+ 'account.mfa.page_title': string;
384
+ 'account.mfa.title': string;
385
+ 'account.mfa.logout': string;
386
+ 'account.mfa.recovery_codes_notice': string;
387
+ 'account.mfa.enroll_intro': string;
388
+ 'account.mfa.qr_alt': string;
389
+ 'account.mfa.manual_intro': string;
390
+ 'account.mfa.confirm_code_label': string;
391
+ 'account.mfa.activate': string;
392
+ 'account.mfa.enabled_html': string;
393
+ 'account.mfa.disable': string;
394
+ 'account.mfa.disabled_intro': string;
395
+ 'account.mfa.enable': string;
396
+ 'mfa.passkey.section_title': string;
397
+ 'mfa.passkey.section_intro': string;
398
+ 'mfa.passkey.add': string;
399
+ 'mfa.passkey.remove': string;
400
+ 'mfa.passkey.empty': string;
401
+ 'mfa.passkey.unnamed': string;
402
+ 'mfa.passkey.created_at': string;
403
+ 'mfa.passkey.register_error': string;
404
+ 'mfa.passkey.unsupported': string;
405
+ 'admin.nav.dashboard': string;
406
+ 'admin.nav.users': string;
407
+ 'admin.nav.clients': string;
408
+ 'admin.nav.audit': string;
409
+ 'admin.nav.logout': string;
410
+ 'admin.dashboard.page_title': string;
411
+ 'admin.dashboard.title': string;
412
+ 'admin.dashboard.users_count': string;
413
+ 'admin.dashboard.clients_count': string;
414
+ 'admin.dashboard.audit_count': string;
415
+ 'admin.dashboard.recent_title': string;
416
+ 'admin.users.page_title': string;
417
+ 'admin.users.title': string;
418
+ 'admin.users.search_placeholder': string;
419
+ 'admin.users.search': string;
420
+ 'admin.users.empty': string;
421
+ 'admin.users.roles_placeholder': string;
422
+ 'admin.users.save_roles': string;
423
+ 'admin.users.sessions': string;
424
+ 'admin.sessions.page_title': string;
425
+ 'admin.sessions.title': string;
426
+ 'admin.sessions.account': string;
427
+ 'admin.sessions.back': string;
428
+ 'admin.sessions.not_supported': string;
429
+ 'admin.sessions.revoked_notice': string;
430
+ 'admin.sessions.sessions_section': string;
431
+ 'admin.sessions.sessions_empty': string;
432
+ 'admin.sessions.session_login_ts': string;
433
+ 'admin.sessions.session_amr': string;
434
+ 'admin.sessions.grants_section': string;
435
+ 'admin.sessions.grants_empty': string;
436
+ 'admin.sessions.grant_client': string;
437
+ 'admin.sessions.grant_tokens': string;
438
+ 'admin.sessions.revoke_all': string;
439
+ 'admin.sessions.revoke_confirm': string;
440
+ 'admin.clients.page_title': string;
441
+ 'admin.clients.title': string;
442
+ 'admin.clients.empty': string;
443
+ 'admin.clients.confidential': string;
444
+ 'admin.clients.public': string;
445
+ 'admin.clients.grants': string;
446
+ 'admin.clients.redirect_uris': string;
447
+ 'admin.clients.dynamic_notice': string;
448
+ 'admin.clients.static_section': string;
449
+ 'admin.clients.dynamic_section': string;
450
+ 'admin.clients.dynamic_empty': string;
451
+ 'admin.clients.dynamic_not_supported': string;
452
+ 'admin.clients.new': string;
453
+ 'admin.clients.new_title': string;
454
+ 'admin.clients.edit_title': string;
455
+ 'admin.clients.edit': string;
456
+ 'admin.clients.delete': string;
457
+ 'admin.clients.delete_confirm': string;
458
+ 'admin.clients.regenerate_secret': string;
459
+ 'admin.clients.regenerate_confirm': string;
460
+ 'admin.clients.back': string;
461
+ 'admin.clients.cancel': string;
462
+ 'admin.clients.save': string;
463
+ 'admin.clients.create': string;
464
+ 'admin.clients.secret_once_title': string;
465
+ 'admin.clients.secret_once_notice': string;
466
+ 'admin.clients.field_client_id': string;
467
+ 'admin.clients.field_client_id_placeholder': string;
468
+ 'admin.clients.field_client_id_help': string;
469
+ 'admin.clients.field_redirect_uris': string;
470
+ 'admin.clients.field_redirect_uris_help': string;
471
+ 'admin.clients.field_post_logout_uris': string;
472
+ 'admin.clients.field_post_logout_uris_help': string;
473
+ 'admin.clients.field_grant_types': string;
474
+ 'admin.clients.field_auth_method': string;
475
+ 'admin.audit.page_title': string;
476
+ 'admin.audit.title': string;
477
+ 'admin.audit.type_placeholder': string;
478
+ 'admin.audit.subject_placeholder': string;
479
+ 'admin.audit.filter': string;
480
+ 'admin.audit.empty': string;
481
+ 'admin.audit.not_supported': string;
482
+ 'admin.pagination.page': string;
483
+ 'admin.pagination.prev': string;
484
+ 'admin.pagination.next': string;
485
+ 'device.input.title': string;
486
+ 'device.input.intro': string;
487
+ 'device.input.submit': string;
488
+ 'device.input.error_invalid': string;
489
+ 'device.input.error_aborted': string;
490
+ 'device.input.error_generic': string;
491
+ 'device.confirm.title': string;
492
+ 'device.confirm.body': string;
493
+ 'device.confirm.submit': string;
494
+ 'device.confirm.abort': string;
495
+ 'device.success.title': string;
496
+ 'device.success.body': string;
497
+ 'mfa_challenge.required_no_enrollment': string;
498
+ 'errors.invalid_credentials': string;
499
+ 'errors.invalid_code': string;
500
+ 'errors.email_taken': string;
501
+ 'errors.signup_failed': string;
502
+ 'errors.invalid_or_expired_token': string;
503
+ 'errors.account_locked': string;
504
+ 'errors.session_expired': string;
505
+ 'errors.challenge_expired': string;
506
+ 'errors.passkeys_unavailable': string;
507
+ 'errors.no_passkey_registered': string;
508
+ 'mail.common.link_fallback': string;
509
+ 'mail.reset.subject': string;
510
+ 'mail.reset.heading': string;
511
+ 'mail.reset.intro': string;
512
+ 'mail.reset.cta': string;
513
+ 'mail.reset.fallback': string;
514
+ 'mail.reset.expires': string;
515
+ 'mail.verify.subject': string;
516
+ 'mail.verify.heading': string;
517
+ 'mail.verify.intro': string;
518
+ 'mail.verify.cta': string;
519
+ 'mail.verify.fallback': string;
520
+ 'mail.verify.expires': string;
521
+ 'mail.new_login.subject': string;
522
+ 'mail.new_login.heading': string;
523
+ 'mail.new_login.intro': string;
524
+ 'mail.new_login.when': string;
525
+ 'mail.new_login.ip': string;
526
+ 'mail.new_login.device': string;
527
+ 'mail.new_login.fallback': string;
528
+ 'mail.email_change.subject': string;
529
+ 'mail.email_change.heading': string;
530
+ 'mail.email_change.intro': string;
531
+ 'mail.email_change.cta': string;
532
+ 'mail.email_change.fallback': string;
533
+ 'mail.email_change.expires': string;
534
+ };
535
+ /**
536
+ * Locales embutidos no host-kit. O `en` é o default; o `pt-BR` está disponível
537
+ * com `i18n: { locale: 'pt-BR' }` sem nenhuma config de mensagens extra. Os
538
+ * overrides/locales do host (via `I18nConfig.messages`) são mesclados por cima.
539
+ */
540
+ export declare const BUILTIN_MESSAGES: Record<string, AuthMessages>;
541
+ /**
542
+ * Resolve o catálogo ativo. Começa do catálogo embutido do locale selecionado
543
+ * (ou do default `en` quando o locale não é embutido), depois mescla os
544
+ * overrides do host por cima. Sem config, retorna o default `en` intacto.
545
+ * Chaves omitidas caem no default `en` (fallback de cobertura).
199
546
  */
200
547
  export declare function resolveMessages(i18n?: I18nConfig): AuthMessages;
201
548
  /**