@things-factory/auth-base 10.1.215 → 10.1.223

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 (132) hide show
  1. package/config/config.development.js +2 -4
  2. package/config/config.production.js +1 -2
  3. package/dist-client/actions/auth.d.ts +1 -0
  4. package/dist-client/actions/auth.js +6 -0
  5. package/dist-client/actions/auth.js.map +1 -1
  6. package/dist-client/reducers/auth.d.ts +8 -0
  7. package/dist-client/reducers/auth.js +8 -2
  8. package/dist-client/reducers/auth.js.map +1 -1
  9. package/dist-client/tsconfig.tsbuildinfo +1 -1
  10. package/dist-server/constants/error-code.d.ts +1 -0
  11. package/dist-server/constants/error-code.js +2 -1
  12. package/dist-server/constants/error-code.js.map +1 -1
  13. package/dist-server/controllers/auth.d.ts +0 -1
  14. package/dist-server/controllers/auth.js +0 -1
  15. package/dist-server/controllers/auth.js.map +1 -1
  16. package/dist-server/controllers/password-setup.d.ts +33 -0
  17. package/dist-server/controllers/password-setup.js +77 -0
  18. package/dist-server/controllers/password-setup.js.map +1 -0
  19. package/dist-server/controllers/reset-password.d.ts +8 -1
  20. package/dist-server/controllers/reset-password.js +21 -11
  21. package/dist-server/controllers/reset-password.js.map +1 -1
  22. package/dist-server/controllers/signin.js +10 -0
  23. package/dist-server/controllers/signin.js.map +1 -1
  24. package/dist-server/index.d.ts +1 -0
  25. package/dist-server/index.js +2 -0
  26. package/dist-server/index.js.map +1 -1
  27. package/dist-server/middlewares/jwt-authenticate-middleware.js +8 -25
  28. package/dist-server/middlewares/jwt-authenticate-middleware.js.map +1 -1
  29. package/dist-server/router/auth-public-process-router.js +3 -41
  30. package/dist-server/router/auth-public-process-router.js.map +1 -1
  31. package/dist-server/service/access-request/access-request.js +2 -2
  32. package/dist-server/service/access-request/access-request.js.map +1 -1
  33. package/dist-server/service/audit/audit-kinds.js +1 -0
  34. package/dist-server/service/audit/audit-kinds.js.map +1 -1
  35. package/dist-server/service/audit/audit-subscriber.d.ts +1 -7
  36. package/dist-server/service/audit/audit-subscriber.js +2 -33
  37. package/dist-server/service/audit/audit-subscriber.js.map +1 -1
  38. package/dist-server/service/audit/index.d.ts +1 -1
  39. package/dist-server/service/index.d.ts +2 -4
  40. package/dist-server/service/index.js +22 -27
  41. package/dist-server/service/index.js.map +1 -1
  42. package/dist-server/service/open-fields.js +0 -2
  43. package/dist-server/service/open-fields.js.map +1 -1
  44. package/dist-server/service/role/role-mutation.js +5 -0
  45. package/dist-server/service/role/role-mutation.js.map +1 -1
  46. package/dist-server/service/role/role-types.d.ts +1 -0
  47. package/dist-server/service/role/role-types.js +4 -0
  48. package/dist-server/service/role/role-types.js.map +1 -1
  49. package/dist-server/service/role/role.d.ts +10 -0
  50. package/dist-server/service/role/role.js +5 -0
  51. package/dist-server/service/role/role.js.map +1 -1
  52. package/dist-server/service/role-template/role-template-gap-resolver.d.ts +2 -2
  53. package/dist-server/service/role-template/role-template-gap-resolver.js +7 -13
  54. package/dist-server/service/role-template/role-template-gap-resolver.js.map +1 -1
  55. package/dist-server/service/role-template/role-template-mutation.d.ts +7 -4
  56. package/dist-server/service/role-template/role-template-mutation.js +15 -15
  57. package/dist-server/service/role-template/role-template-mutation.js.map +1 -1
  58. package/dist-server/service/role-template/role-template-types.d.ts +3 -3
  59. package/dist-server/service/role-template/role-template-types.js.map +1 -1
  60. package/dist-server/service/role-template/role-template.d.ts +14 -15
  61. package/dist-server/service/role-template/role-template.js +8 -8
  62. package/dist-server/service/role-template/role-template.js.map +1 -1
  63. package/dist-server/service/user/user-mutation.d.ts +27 -6
  64. package/dist-server/service/user/user-mutation.js +26 -114
  65. package/dist-server/service/user/user-mutation.js.map +1 -1
  66. package/dist-server/service/user/user-query.d.ts +3 -4
  67. package/dist-server/service/user/user-query.js +7 -32
  68. package/dist-server/service/user/user-query.js.map +1 -1
  69. package/dist-server/service/user/user-types.d.ts +6 -2
  70. package/dist-server/service/user/user-types.js +20 -9
  71. package/dist-server/service/user/user-types.js.map +1 -1
  72. package/dist-server/service/user/user.js +17 -8
  73. package/dist-server/service/user/user.js.map +1 -1
  74. package/dist-server/service/verification-token/verification-token.d.ts +1 -0
  75. package/dist-server/service/verification-token/verification-token.js +1 -0
  76. package/dist-server/service/verification-token/verification-token.js.map +1 -1
  77. package/dist-server/templates/reset-password-email.d.ts +10 -3
  78. package/dist-server/templates/reset-password-email.js +8 -4
  79. package/dist-server/templates/reset-password-email.js.map +1 -1
  80. package/dist-server/tsconfig.tsbuildinfo +1 -1
  81. package/dist-server/utils/verification-token-rule.js +3 -1
  82. package/dist-server/utils/verification-token-rule.js.map +1 -1
  83. package/package.json +2 -2
  84. package/tests/add-user-gates.test.ts +34 -0
  85. package/tests/list-inheritance-db.test.ts +0 -15
  86. package/tests/lock-recovery.test.ts +2 -2
  87. package/tests/open-doors.test.ts +2 -5
  88. package/tests/password-reset-rule-db.test.ts +17 -16
  89. package/tests/password-setup-db.test.ts +213 -0
  90. package/tests/picture-reducer.test.ts +25 -0
  91. package/tests/role-template-gap-db.test.ts +58 -7
  92. package/tests/role-template-seed-db.test.ts +5 -4
  93. package/tests/verification-token-db.test.ts +12 -7
  94. package/translations/en.json +2 -2
  95. package/translations/es.json +2 -2
  96. package/translations/ja.json +2 -2
  97. package/translations/ko.json +2 -2
  98. package/translations/ms.json +2 -2
  99. package/translations/zh.json +2 -2
  100. package/dist-server/controllers/invitation.d.ts +0 -75
  101. package/dist-server/controllers/invitation.js +0 -195
  102. package/dist-server/controllers/invitation.js.map +0 -1
  103. package/dist-server/controllers/utils/make-invitation-token.d.ts +0 -1
  104. package/dist-server/controllers/utils/make-invitation-token.js +0 -9
  105. package/dist-server/controllers/utils/make-invitation-token.js.map +0 -1
  106. package/dist-server/controllers/utils/save-invitation-token.d.ts +0 -5
  107. package/dist-server/controllers/utils/save-invitation-token.js +0 -12
  108. package/dist-server/controllers/utils/save-invitation-token.js.map +0 -1
  109. package/dist-server/service/invitation/index.d.ts +0 -5
  110. package/dist-server/service/invitation/index.js +0 -9
  111. package/dist-server/service/invitation/index.js.map +0 -1
  112. package/dist-server/service/invitation/invitation-mutation.d.ts +0 -20
  113. package/dist-server/service/invitation/invitation-mutation.js +0 -109
  114. package/dist-server/service/invitation/invitation-mutation.js.map +0 -1
  115. package/dist-server/service/invitation/invitation-query.d.ts +0 -23
  116. package/dist-server/service/invitation/invitation-query.js +0 -89
  117. package/dist-server/service/invitation/invitation-query.js.map +0 -1
  118. package/dist-server/service/invitation/invitation-types.d.ts +0 -5
  119. package/dist-server/service/invitation/invitation-types.js +0 -21
  120. package/dist-server/service/invitation/invitation-types.js.map +0 -1
  121. package/dist-server/service/invitation/invitation.d.ts +0 -26
  122. package/dist-server/service/invitation/invitation.js +0 -142
  123. package/dist-server/service/invitation/invitation.js.map +0 -1
  124. package/dist-server/templates/invitation-email.d.ts +0 -6
  125. package/dist-server/templates/invitation-email.js +0 -82
  126. package/dist-server/templates/invitation-email.js.map +0 -1
  127. package/dist-server/utils/invitation-state.d.ts +0 -52
  128. package/dist-server/utils/invitation-state.js +0 -76
  129. package/dist-server/utils/invitation-state.js.map +0 -1
  130. package/tests/invitation-db.test.ts +0 -416
  131. package/tests/invitation-route.test.ts +0 -116
  132. package/tests/invitation-state.test.ts +0 -92
@@ -1,92 +0,0 @@
1
- import { InvitationStatus, invitationState, mayAccept } from '../server/utils/invitation-state'
2
-
3
- /**
4
- * What state an invitation is in, and whether its token still opens anything.
5
- *
6
- * The token in an invitation email is a credential: whoever holds it joins a domain. So the
7
- * cases below lean the way credentials lean — an invitation that cannot say it is live is not
8
- * live. The opposite mistake is a link that works forever, which is what the table had before
9
- * (no expiry column at all).
10
- */
11
-
12
- const NOW = new Date('2026-09-20T12:00:00Z')
13
- const LATER = new Date('2026-09-21T12:00:00Z')
14
- const EARLIER = new Date('2026-09-19T12:00:00Z')
15
-
16
- describe('a pending invitation', () => {
17
- it('is pending while its expiry is ahead', () => {
18
- expect(invitationState({ status: 'pending', expiresAt: LATER }, NOW)).toEqual(InvitationStatus.PENDING)
19
- expect(mayAccept({ status: 'pending', expiresAt: LATER }, NOW)).toBe(true)
20
- })
21
-
22
- it('is expired once the expiry has passed, before anything writes that down', () => {
23
- /*
24
- * ⚠ The guard is the clock, not the column. If `expired` were only a written value, the gap
25
- * between the expiry passing and something running to record it would be a window where the
26
- * token still works.
27
- */
28
- expect(invitationState({ status: 'pending', expiresAt: EARLIER }, NOW)).toEqual(InvitationStatus.EXPIRED)
29
- expect(mayAccept({ status: 'pending', expiresAt: EARLIER }, NOW)).toBe(false)
30
- })
31
-
32
- it('is expired exactly at the moment it runs out', () => {
33
- /* The boundary belongs to the dead side — a credential does not get its last instant. */
34
- expect(mayAccept({ status: 'pending', expiresAt: NOW }, NOW)).toBe(false)
35
- })
36
-
37
- it('reads a stored timestamp string the same as a Date', () => {
38
- expect(mayAccept({ status: 'pending', expiresAt: LATER.toISOString() }, NOW)).toBe(true)
39
- expect(mayAccept({ status: 'pending', expiresAt: EARLIER.toISOString() }, NOW)).toBe(false)
40
- })
41
- })
42
-
43
- describe('what an absent value means', () => {
44
- it('no status reads as pending', () => {
45
- /* That is what a row existing meant in the old table, which had no status column. */
46
- expect(invitationState({ expiresAt: LATER }, NOW)).toEqual(InvitationStatus.PENDING)
47
- })
48
-
49
- it('⚠ no expiry reads as expired', () => {
50
- /*
51
- * ⚠ Rows written before this existed have no expiry, and they come from a flow that never
52
- * completed — the link in the email led to no route at all. Reading them as live would keep
53
- * alive tokens that never worked. A credential that cannot say when it dies does not open
54
- * anything.
55
- */
56
- expect(invitationState({ status: 'pending' }, NOW)).toEqual(InvitationStatus.EXPIRED)
57
- expect(invitationState({}, NOW)).toEqual(InvitationStatus.EXPIRED)
58
- expect(mayAccept({ status: 'pending', expiresAt: null }, NOW)).toBe(false)
59
- })
60
-
61
- it('an unreadable timestamp reads as expired too', () => {
62
- expect(mayAccept({ status: 'pending', expiresAt: 'not a date' }, NOW)).toBe(false)
63
- })
64
-
65
- it('no invitation at all is not acceptable', () => {
66
- expect(mayAccept(null, NOW)).toBe(false)
67
- expect(mayAccept(undefined, NOW)).toBe(false)
68
- })
69
- })
70
-
71
- describe('a row that is already finished', () => {
72
- it('stays accepted however long ago it was', () => {
73
- /*
74
- * ⚠ Time does not rewrite history. If an accepted row expired later, the list would stop
75
- * being able to say that this person was invited and came in — which is the whole reason the
76
- * row is kept.
77
- */
78
- expect(invitationState({ status: 'accepted', expiresAt: EARLIER }, NOW)).toEqual(InvitationStatus.ACCEPTED)
79
- expect(invitationState({ status: 'accepted' }, NOW)).toEqual(InvitationStatus.ACCEPTED)
80
- })
81
-
82
- it('stays cancelled', () => {
83
- expect(invitationState({ status: 'cancelled', expiresAt: LATER }, NOW)).toEqual(InvitationStatus.CANCELLED)
84
- })
85
-
86
- it('cannot be accepted, whatever its expiry says', () => {
87
- /* ⚠ A cancelled invitation whose expiry is still ahead must not open anything. */
88
- expect(mayAccept({ status: 'cancelled', expiresAt: LATER }, NOW)).toBe(false)
89
- expect(mayAccept({ status: 'accepted', expiresAt: LATER }, NOW)).toBe(false)
90
- expect(mayAccept({ status: 'expired', expiresAt: LATER }, NOW)).toBe(false)
91
- })
92
- })