@happyvertical/smrt-users 0.52.0 → 0.53.5

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 (82) hide show
  1. package/AGENTS.md +43 -2
  2. package/README.md +227 -2
  3. package/agents/permissions.md +12 -1
  4. package/agents/retention.md +14 -7
  5. package/dist/chunks/{TerminalAuthService-Br64vHtd.js → TerminalAuthService-BdB_0vDA.js} +3492 -2172
  6. package/dist/chunks/TerminalAuthService-BdB_0vDA.js.map +1 -0
  7. package/dist/collections/CliAuthApproveLimitCollection.d.ts +4 -0
  8. package/dist/collections/CliAuthApproveLimitCollection.d.ts.map +1 -1
  9. package/dist/collections/CliAuthRequestCollection.d.ts.map +1 -1
  10. package/dist/collections/LoginAttemptCollection.d.ts +105 -0
  11. package/dist/collections/LoginAttemptCollection.d.ts.map +1 -0
  12. package/dist/collections/LoginAuditEventCollection.d.ts +19 -0
  13. package/dist/collections/LoginAuditEventCollection.d.ts.map +1 -0
  14. package/dist/collections/PinCredentialCollection.d.ts +26 -0
  15. package/dist/collections/PinCredentialCollection.d.ts.map +1 -0
  16. package/dist/collections/RoleCollection.d.ts.map +1 -1
  17. package/dist/collections/RolePermissionCollection.d.ts +4 -0
  18. package/dist/collections/RolePermissionCollection.d.ts.map +1 -1
  19. package/dist/collections/SessionCollection.d.ts +33 -1
  20. package/dist/collections/SessionCollection.d.ts.map +1 -1
  21. package/dist/collections/index.d.ts +3 -0
  22. package/dist/collections/index.d.ts.map +1 -1
  23. package/dist/collections/seeding-transaction.d.ts +43 -0
  24. package/dist/collections/seeding-transaction.d.ts.map +1 -0
  25. package/dist/index.d.ts +5 -4
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +180 -32
  28. package/dist/index.js.map +1 -1
  29. package/dist/manifest.json +3281 -2018
  30. package/dist/migrations/deduplicateRolePermissions.d.ts +23 -0
  31. package/dist/migrations/deduplicateRolePermissions.d.ts.map +1 -0
  32. package/dist/models/CliAuthApproveLimit.d.ts +8 -1
  33. package/dist/models/CliAuthApproveLimit.d.ts.map +1 -1
  34. package/dist/models/LoginAttempt.d.ts +59 -0
  35. package/dist/models/LoginAttempt.d.ts.map +1 -0
  36. package/dist/models/LoginAuditEvent.d.ts +49 -0
  37. package/dist/models/LoginAuditEvent.d.ts.map +1 -0
  38. package/dist/models/PinCredential.d.ts +31 -0
  39. package/dist/models/PinCredential.d.ts.map +1 -0
  40. package/dist/models/RolePermission.d.ts.map +1 -1
  41. package/dist/models/Session.d.ts +69 -1
  42. package/dist/models/Session.d.ts.map +1 -1
  43. package/dist/models/index.d.ts +4 -1
  44. package/dist/models/index.d.ts.map +1 -1
  45. package/dist/retention.d.ts +7 -1
  46. package/dist/retention.d.ts.map +1 -1
  47. package/dist/services/DeviceCredentialService.d.ts +348 -0
  48. package/dist/services/DeviceCredentialService.d.ts.map +1 -0
  49. package/dist/services/LoginAttemptLimiter.d.ts +227 -0
  50. package/dist/services/LoginAttemptLimiter.d.ts.map +1 -0
  51. package/dist/services/MobileAuthService.d.ts.map +1 -1
  52. package/dist/services/OperationPermissionService.d.ts.map +1 -1
  53. package/dist/services/PermissionCatalogService.d.ts.map +1 -1
  54. package/dist/services/SessionPermissionContext.d.ts.map +1 -1
  55. package/dist/services/SessionService.d.ts +56 -1
  56. package/dist/services/SessionService.d.ts.map +1 -1
  57. package/dist/services/TerminalAuthService.d.ts +18 -3
  58. package/dist/services/TerminalAuthService.d.ts.map +1 -1
  59. package/dist/services/index.d.ts +4 -2
  60. package/dist/services/index.d.ts.map +1 -1
  61. package/dist/smrt-knowledge.json +685 -11
  62. package/dist/sveltekit/device-credential-handlers.d.ts +60 -0
  63. package/dist/sveltekit/device-credential-handlers.d.ts.map +1 -0
  64. package/dist/sveltekit/index.d.ts +10 -0
  65. package/dist/sveltekit/index.d.ts.map +1 -1
  66. package/dist/sveltekit/types.d.ts +6 -0
  67. package/dist/sveltekit/types.d.ts.map +1 -1
  68. package/dist/sveltekit.js +184 -4
  69. package/dist/sveltekit.js.map +1 -1
  70. package/package.json +13 -13
  71. package/dist/__tests__/helpers/oidc-test-server.d.ts +0 -45
  72. package/dist/__tests__/helpers/oidc-test-server.d.ts.map +0 -1
  73. package/dist/__tests__/helpers/postgres-rls-reset.d.ts +0 -15
  74. package/dist/__tests__/helpers/postgres-rls-reset.d.ts.map +0 -1
  75. package/dist/chunks/TerminalAuthService-Br64vHtd.js.map +0 -1
  76. package/dist/svelte/components/__tests__/InviteUserModal.test.js +0 -65
  77. package/dist/svelte/components/__tests__/UserAvatar.test.js +0 -31
  78. package/dist/svelte/components/__tests__/UserCard.test.js +0 -39
  79. package/dist/svelte/components/__tests__/UserForm.test.js +0 -50
  80. package/dist/svelte/components/__tests__/UserList.test.js +0 -48
  81. package/dist/svelte/components/__tests__/UserMenu.test.js +0 -83
  82. package/dist/svelte/components/__tests__/UserStatus.test.js +0 -36
@@ -0,0 +1,348 @@
1
+ /**
2
+ * DeviceCredentialService — per-person sign-in on an enrolled device,
3
+ * layered on the device's own bearer session (#3276).
4
+ *
5
+ * ## The problem
6
+ *
7
+ * A shared tablet is enrolled once through the terminal device-code grant and
8
+ * holds a long-lived bearer session bound to a *device* account. Everything
9
+ * done on it is attributed to that account. This service lets a person
10
+ * present a short credential (a PIN today; a fob or badge later) **on that
11
+ * device only**, and mints a short-lived session for the person that is
12
+ * valid exactly as long as the device session is.
13
+ *
14
+ * ## The pipeline (shared by every credential kind)
15
+ *
16
+ * 1. Resolve the device bearer token to a live session and require that it
17
+ * was established by device enrollment (`authMethod === 'terminal'` by
18
+ * default) and is not itself a layered session.
19
+ * 2. Ask the host whether this device is still enrolled and active
20
+ * (`assertEnrolledDevice`) — smrt-users does not own a Device object.
21
+ * 3. Reserve a login attempt: subject = whatever the verifier derives from
22
+ * the input, source = the device account.
23
+ * 4. Run the credential verifier. It must do equal work for a missing and a
24
+ * present credential.
25
+ * 5. Require the person to hold an active membership in the device session's
26
+ * tenant — a device credential never widens tenant scope.
27
+ * 6. Ask the host for the device's permission ceiling (`deviceCeiling`,
28
+ * optional) and mint the person's session with `authMethod =
29
+ * verifier.kind` and `parentSessionId = device session`, and return its
30
+ * id. The client sends that id as its bearer from then on;
31
+ * `SessionService.loadSessionContext` enforces parent liveness and exposes
32
+ * `parent` for host gates.
33
+ * 7. On a single-occupant device (the default), end every other person's
34
+ * session on that device: signing in is how people hand the tablet over.
35
+ *
36
+ * ## Whose authority
37
+ *
38
+ * The device session authenticates the tablet; the person's session
39
+ * authorizes the work. Its permissions are resolved from the *person's* own
40
+ * membership in the device tenant (role plus per-membership overrides) on
41
+ * every load — never the device account's — then intersected with the
42
+ * ceiling snapshotted at sign-in, if the host supplied one. Both identities
43
+ * are on the resolved context (`user` and `parent`).
44
+ *
45
+ * Anything that is not an enrolled-device bearer session — a browser cookie
46
+ * session, a mobile session, a layered session — is refused before any
47
+ * credential work, with the same error a wrong credential produces.
48
+ *
49
+ * ## Adding a credential kind
50
+ *
51
+ * Implement {@link DeviceCredentialVerifier} and pass it to
52
+ * {@link DeviceCredentialService.signIn}. {@link PinVerifier} is the
53
+ * reference implementation. A fob verifier differs mainly in that the
54
+ * subject is unknown until the tag is read, which is why `subjectKey` lives
55
+ * on the verifier.
56
+ *
57
+ * @packageDocumentation
58
+ */
59
+ import type { SmrtClassOptions } from '@happyvertical/smrt-core';
60
+ import { UsersPinCredentialCollection } from '../collections/PinCredentialCollection.js';
61
+ import { type SessionAuthMethod } from '../models/Session.js';
62
+ import { InvalidCredentialsError, LoginAttemptLimiter, type LoginAttemptLimiterOptions } from './LoginAttemptLimiter.js';
63
+ import { type PermissionDefinition } from './PermissionCatalogService.js';
64
+ import { type SessionContext } from './SessionService.js';
65
+ /** Default idle timeout of a per-person device session (8 hours — a shift). */
66
+ export declare const DEFAULT_DEVICE_PERSON_IDLE_SECONDS: number;
67
+ /** Default permission required to set, reset, or clear another person's PIN. */
68
+ export declare const DEFAULT_PIN_MANAGE_PERMISSION = "users.pin.manage";
69
+ /** Login-limiter kind reported for PIN attempts. */
70
+ export declare const PIN_LOGIN_KIND = "pin";
71
+ /** Catalog definition for {@link DEFAULT_PIN_MANAGE_PERMISSION}. */
72
+ export declare const PIN_PERMISSION_DEFINITIONS: PermissionDefinition[];
73
+ /** Register the PIN management permission once when the service is used. */
74
+ export declare function ensurePinPermissionsRegistered(): void;
75
+ /** Thrown when the caller is not an enrolled device, or the credential is wrong. */
76
+ export declare class DeviceCredentialError extends InvalidCredentialsError {
77
+ constructor(message?: string);
78
+ }
79
+ /** Thrown by set/reset/clear when the actor may not manage the credential. */
80
+ export declare class DeviceCredentialForbiddenError extends Error {
81
+ constructor(message?: string);
82
+ }
83
+ /** Thrown by set/reset when the new secret fails policy. */
84
+ export declare class DeviceCredentialPolicyError extends Error {
85
+ constructor(message: string);
86
+ }
87
+ /** Everything a verifier gets to see about the device the attempt came from. */
88
+ export interface DeviceSignInContext {
89
+ /** The enrolled device's resolved bearer session. */
90
+ device: SessionContext;
91
+ }
92
+ /**
93
+ * One credential kind. Implementations must do equal work whether or not a
94
+ * credential is enrolled for the subject (compare against a dummy hash).
95
+ */
96
+ export interface DeviceCredentialVerifier<Input> {
97
+ /** Becomes `authMethod` on the minted session and the limiter's audit kind. */
98
+ readonly kind: SessionAuthMethod;
99
+ /** The identifier the limiter keys the subject budget on. */
100
+ subjectKey(input: Input): string;
101
+ /**
102
+ * Returns the authenticated user id, or null for any failure. `stillValid`,
103
+ * when supplied, is called AFTER the session is minted: return false if the
104
+ * credential that was verified has since been rotated or removed, and the
105
+ * sign-in is undone. Checking after the mint is what closes the race with
106
+ * a concurrent reset/clear — their revocation sweep runs after their write,
107
+ * so either this check sees the write or that sweep sees the session.
108
+ */
109
+ verify(input: Input, context: DeviceSignInContext): Promise<DeviceCredentialVerification | null>;
110
+ }
111
+ export interface DeviceCredentialVerification {
112
+ userId: string;
113
+ stillValid?: () => Promise<boolean>;
114
+ }
115
+ export interface DeviceCredentialServiceOptions extends SmrtClassOptions {
116
+ /**
117
+ * Cookie name passed to the {@link SessionService}; should match the host's
118
+ * session cookie so one service resolves cookies and bearers alike.
119
+ */
120
+ sessionCookieName?: string;
121
+ /**
122
+ * Sliding idle timeout of the person's session: it ends this long after
123
+ * its last activity, independently of the device session's own (long)
124
+ * life. Stored on the session, so it slides by this value whichever
125
+ * `SessionService` resolves it. Defaults to
126
+ * {@link DEFAULT_DEVICE_PERSON_IDLE_SECONDS}.
127
+ */
128
+ personIdleSeconds?: number;
129
+ /**
130
+ * Absolute lifetime of the person's session: once this long after sign-in
131
+ * it ends whatever its activity. Default: no absolute cap (the device
132
+ * session's life still bounds it).
133
+ */
134
+ personMaxSeconds?: number;
135
+ /**
136
+ * One person at a time. When true (the default) a successful sign-in ends
137
+ * every other person's session on the same device session, so signing in
138
+ * as the next person is the hand-over. Set false for devices several
139
+ * people stay signed in on at once.
140
+ */
141
+ singleOccupant?: boolean;
142
+ /**
143
+ * Host hook: the most any person may do on this device, as permission
144
+ * slugs. Called on each successful sign-in; a non-null result is
145
+ * snapshotted into the person's session and intersected with their own
146
+ * resolved permissions on every load (an empty array leaves none), and
147
+ * such a session never receives super-admin bypass or system context.
148
+ * Return null for no ceiling (the default). The snapshot is taken at
149
+ * sign-in: a ceiling change applies from each person's next sign-in.
150
+ * Throwing refuses the sign-in without counting a failed attempt.
151
+ */
152
+ deviceCeiling?: (device: SessionContext) => Promise<string[] | null>;
153
+ /**
154
+ * Auth methods that count as an enrolled device session. Defaults to
155
+ * `['terminal']` — the device-code grant is how devices enrol.
156
+ */
157
+ deviceAuthMethods?: SessionAuthMethod[];
158
+ /**
159
+ * Host hook: return false (or throw) when the device session's account is
160
+ * not an enrolled, active device. Either refuses the request; only an
161
+ * explicit `false` is treated as un-enrolment by `loadPersonSession`,
162
+ * which then revokes the person session — a throw (for example a registry
163
+ * outage) refuses that one request without revoking anything. smrt-users guarantees only that the
164
+ * bearer is a live, non-layered device-enrolled session; whether that
165
+ * device is still active is the host's data. Required.
166
+ */
167
+ assertEnrolledDevice: (device: SessionContext) => Promise<boolean | void>;
168
+ /**
169
+ * Shared {@link LoginAttemptLimiter}. When omitted one is created from
170
+ * `limiter` (or defaults). Supplying the host's instance keeps PIN,
171
+ * password and terminal budgets in one table with one audit sink.
172
+ */
173
+ loginLimiter?: LoginAttemptLimiter;
174
+ /** Options for the private limiter when `loginLimiter` is not supplied. */
175
+ limiter?: Omit<LoginAttemptLimiterOptions, keyof SmrtClassOptions>;
176
+ /** Permission slug an administrator needs to manage others' PINs. */
177
+ managePermission?: string;
178
+ /** PIN policy. */
179
+ pin?: PinPolicyOptions;
180
+ }
181
+ export interface PinPolicyOptions {
182
+ /** Minimum digits. Default 4. */
183
+ minLength?: number;
184
+ /** Maximum digits. Default 8. */
185
+ maxLength?: number;
186
+ /**
187
+ * Server-side secret mixed into every hash. Strongly recommended: a 4–8
188
+ * digit secret is only as strong as the pepper once the table leaks.
189
+ */
190
+ pepper?: string;
191
+ /** Reject repeated and sequential digits (`0000`, `1234`, `9876`). Default true. */
192
+ rejectTrivial?: boolean;
193
+ /** scrypt parameters. Defaults: N=2^15, r=8, p=1. */
194
+ scrypt?: {
195
+ N?: number;
196
+ r?: number;
197
+ p?: number;
198
+ };
199
+ }
200
+ export interface DeviceSignInInput {
201
+ /** The device's bearer token (`Authorization: Bearer …`). */
202
+ deviceToken: string;
203
+ ipAddress?: string;
204
+ userAgent?: string;
205
+ }
206
+ export interface DeviceSignInResult {
207
+ /** The person's session id — the new bearer for person-attributed work. */
208
+ sessionId: string;
209
+ userId: string;
210
+ tenantId: string | null;
211
+ authMethod: SessionAuthMethod;
212
+ /** When the session ends if it sees no further activity. */
213
+ expiresAt: string;
214
+ /** When the session ends regardless of activity; null without `personMaxSeconds`. */
215
+ absoluteExpiresAt: string | null;
216
+ /**
217
+ * True when the person must choose a new PIN before continuing. Enforced
218
+ * server-side: this session resolves to no permissions and can only call
219
+ * `setPin`, which ends it; the person then signs in with the new PIN.
220
+ */
221
+ mustReset: boolean;
222
+ }
223
+ export interface PinSignInInput extends DeviceSignInInput {
224
+ userId: string;
225
+ pin: string;
226
+ }
227
+ export interface SetPinInput {
228
+ /** Resolved session of whoever is making the change. */
229
+ actor: SessionContext;
230
+ userId: string;
231
+ pin: string;
232
+ /** Required when a person changes their own PIN from a PIN session. */
233
+ currentPin?: string;
234
+ ipAddress?: string;
235
+ }
236
+ export interface ResetPinInput {
237
+ actor: SessionContext;
238
+ userId: string;
239
+ pin: string;
240
+ ipAddress?: string;
241
+ }
242
+ export interface ClearPinInput {
243
+ actor: SessionContext;
244
+ userId: string;
245
+ ipAddress?: string;
246
+ }
247
+ /**
248
+ * Reference {@link DeviceCredentialVerifier}: `{ userId, pin }` against
249
+ * {@link UsersPinCredential}. Always runs scrypt, against a precomputed dummy
250
+ * hash when the user has no PIN, so timing does not reveal enrollment.
251
+ */
252
+ export declare class PinVerifier implements DeviceCredentialVerifier<PinSignInInput> {
253
+ private readonly credentials;
254
+ private readonly pepper;
255
+ private readonly dummyHash;
256
+ readonly kind: SessionAuthMethod;
257
+ constructor(credentials: UsersPinCredentialCollection, pepper: string, dummyHash: string);
258
+ subjectKey(input: PinSignInInput): string;
259
+ verify(input: PinSignInInput): Promise<DeviceCredentialVerification | null>;
260
+ }
261
+ export declare class DeviceCredentialService {
262
+ private readonly options;
263
+ private readonly personIdleSeconds;
264
+ private readonly personMaxSeconds;
265
+ private readonly singleOccupant;
266
+ private readonly deviceAuthMethods;
267
+ private readonly managePermission;
268
+ private readonly pinPolicy;
269
+ private sessionService;
270
+ /**
271
+ * Resolves *other* sessions (the device bearer, an actor) without touching
272
+ * their expiry: `sessionService` auto-extends with the person idle timeout,
273
+ * which must never be applied to a device session with its own lifetime.
274
+ */
275
+ private readonlySessionService;
276
+ private memberships;
277
+ private users;
278
+ private pinCredentials;
279
+ private limiter;
280
+ private pinVerifier;
281
+ constructor(options: DeviceCredentialServiceOptions);
282
+ static create(options: DeviceCredentialServiceOptions): Promise<DeviceCredentialService>;
283
+ initialize(): Promise<void>;
284
+ /** The reference PIN verifier bound to this service's policy. */
285
+ get pin(): PinVerifier;
286
+ /** The limiter in use (shared or private), for hosts that add verifiers. */
287
+ get loginLimiter(): LoginAttemptLimiter;
288
+ /** PIN sign-in: {@link signIn} with the built-in {@link PinVerifier}. */
289
+ signInWithPin(input: PinSignInInput): Promise<DeviceSignInResult>;
290
+ /**
291
+ * Generic sign-in pipeline. See the module docs for the sequence. Throws
292
+ * {@link DeviceCredentialError} for every refusal that is not a rate limit
293
+ * (not a device, inactive device, unknown user, wrong credential, no
294
+ * membership) and {@link LoginRateLimitError} when the budget is exhausted.
295
+ */
296
+ signIn<Input extends DeviceSignInInput>(verifier: DeviceCredentialVerifier<Input>, input: Input): Promise<DeviceSignInResult>;
297
+ /**
298
+ * Sign the person out. Ends only the person's layered session; the device
299
+ * session is untouched. Returns false for anything that is not a live
300
+ * layered session (never reveals which).
301
+ */
302
+ signOut(personToken: string): Promise<boolean>;
303
+ /**
304
+ * Resolve a person's bearer. Returns null unless it is a live layered
305
+ * session whose parent is still an enrolled device — the host's
306
+ * `assertEnrolledDevice` is consulted on every call, and a person session
307
+ * on a device that fails it is revoked. Hosts that resolve person bearers
308
+ * through their own `SessionService` instead must revoke the device's
309
+ * bearer session when they un-enrol it.
310
+ */
311
+ loadPersonSession(personToken: string): Promise<SessionContext | null>;
312
+ /**
313
+ * Resolve any bearer or cookie session id to its context without applying
314
+ * this service's person TTL to it — for handlers that need the acting
315
+ * session (`setPin` and friends) when the host's hook has not already
316
+ * resolved it into `locals`. A person (layered) session goes through
317
+ * {@link loadPersonSession}: the device's enrollment is re-checked, and
318
+ * resolving it is activity, so it slides by its own idle timeout.
319
+ */
320
+ resolveActor(sessionToken: string): Promise<SessionContext | null>;
321
+ /**
322
+ * A person sets or changes their own PIN, or an administrator sets one for
323
+ * them. A person acting from a PIN session must supply their current PIN
324
+ * (checked through the limiter, so it cannot be used as an oracle); a
325
+ * person acting from any first-class session (browser, mobile) may set it
326
+ * outright, and so may an administrator holding `managePermission`.
327
+ */
328
+ setPin(input: SetPinInput): Promise<void>;
329
+ /**
330
+ * Administrative reset: writes a temporary PIN the person must change on
331
+ * next use, and revokes every live PIN session the person holds.
332
+ */
333
+ resetPin(input: ResetPinInput): Promise<{
334
+ revokedSessions: number;
335
+ }>;
336
+ /** Remove a person's PIN entirely and revoke their live PIN sessions. */
337
+ clearPin(input: ClearPinInput): Promise<{
338
+ revokedSessions: number;
339
+ }>;
340
+ /** Whether the person has a PIN enrolled (for admin UIs; never for login responses). */
341
+ hasPin(userId: string): Promise<boolean>;
342
+ private resolveEnrolledDevice;
343
+ private resolveDeviceCeiling;
344
+ private assertCanManage;
345
+ private assertPinPolicy;
346
+ private writePin;
347
+ }
348
+ //# sourceMappingURL=DeviceCredentialService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeviceCredentialService.d.ts","sourceRoot":"","sources":["../../src/services/DeviceCredentialService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * LoginAttemptLimiter — shared rate limiting and lockout for every
3
+ * credential-based sign-in (#3273).
4
+ *
5
+ * ## Contract
6
+ *
7
+ * ```ts
8
+ * const lease = await limiter.reserve({ kind: 'password', subject: emailKey, source: ip });
9
+ * if (!lease.allowed) throw new LoginRateLimitError(lease.retryAfterSeconds);
10
+ * try {
11
+ * const ok = await verifyCredential(...); // ALWAYS runs — see below
12
+ * if (!ok) { await lease.fail(); throw new InvalidCredentialsError(); }
13
+ * await lease.succeed();
14
+ * } catch (error) {
15
+ * if (!(error instanceof InvalidCredentialsError)) await lease.release();
16
+ * throw error;
17
+ * }
18
+ * ```
19
+ *
20
+ * Two budgets are drawn from independently: the **subject** (the identifier
21
+ * the client submitted — an email key or user id, never a resolved account)
22
+ * and the **source** (client IP, or the device/station the attempt came
23
+ * from). Either one being exhausted refuses the attempt. Both are stored as
24
+ * hashes.
25
+ *
26
+ * ## Non-enumeration
27
+ *
28
+ * The limiter itself cannot tell a known subject from an unknown one: the
29
+ * key is whatever the client typed. Consumers keep that property by running
30
+ * the same credential work for a missing account as for a wrong credential
31
+ * (compare against a precomputed dummy hash) and by surfacing one error for
32
+ * "unknown", "wrong", and "nothing enrolled". A 429 does reveal that *some*
33
+ * client has been hammering that identifier, which is standard and accepted;
34
+ * it must never reveal whether the identifier maps to an account.
35
+ *
36
+ * ## Backoff
37
+ *
38
+ * Inside a window a key gets `maxAttempts` reservations. The failure that
39
+ * exhausts the budget — or that completes another `maxAttempts` consecutive
40
+ * failures, however they were paced across windows — locks the key for
41
+ * `base × factor^n` seconds (capped), where `n` counts consecutive exhausted
42
+ * budgets with no success in between. A success resets the streak; so does
43
+ * going `streakResetSeconds` without a failure. A success resets only the
44
+ * subject's streak. A shared source keeps its history, shedding one failure
45
+ * per `sourceStreakDecaySeconds` since its last failure, so spaced-out
46
+ * mistakes never add up while a burst of guesses still escalates.
47
+ *
48
+ * ## Audit
49
+ *
50
+ * Every decision is reported to a {@link LoginAuditSink}. The default sink
51
+ * persists {@link UsersLoginAuditEvent} rows; pass `audit: false` to disable
52
+ * or supply a sink that forwards to the host's own log.
53
+ *
54
+ * @packageDocumentation
55
+ */
56
+ import type { SmrtClassOptions } from '@happyvertical/smrt-core';
57
+ import type { LoginAttemptScope } from '../models/LoginAttempt.js';
58
+ import type { LoginAuditOutcome } from '../models/LoginAuditEvent.js';
59
+ /** Default reservations per key per window. */
60
+ export declare const DEFAULT_LOGIN_MAX_ATTEMPTS = 5;
61
+ /** Default sliding window (5 minutes). */
62
+ export declare const DEFAULT_LOGIN_ATTEMPT_WINDOW_SECONDS: number;
63
+ /** Default first lockout (1 minute). */
64
+ export declare const DEFAULT_LOGIN_LOCKOUT_BASE_SECONDS = 60;
65
+ /** Default lockout multiplier per consecutive exhausted budget. */
66
+ export declare const DEFAULT_LOGIN_LOCKOUT_FACTOR = 2;
67
+ /** Default lockout ceiling (1 hour). */
68
+ export declare const DEFAULT_LOGIN_LOCKOUT_MAX_SECONDS: number;
69
+ export interface LoginLockoutOptions {
70
+ baseSeconds?: number;
71
+ factor?: number;
72
+ maxSeconds?: number;
73
+ }
74
+ /** One auditable decision. Keys are already hashed; nothing here is raw. */
75
+ export interface LoginAuditEntry {
76
+ kind: string;
77
+ outcome: LoginAuditOutcome;
78
+ subjectKeyHash: string | null;
79
+ sourceKeyHash: string | null;
80
+ retryAfterSeconds?: number;
81
+ occurredAt: Date;
82
+ metadata?: Record<string, unknown>;
83
+ }
84
+ /** Where sign-in decisions are reported. Must not throw into the sign-in path. */
85
+ export interface LoginAuditSink {
86
+ record(entry: LoginAuditEntry): Promise<void>;
87
+ }
88
+ export interface LoginAttemptLimiterOptions extends SmrtClassOptions {
89
+ /** Reservations per key per window. Defaults to {@link DEFAULT_LOGIN_MAX_ATTEMPTS}. */
90
+ maxAttempts?: number;
91
+ /** Sliding window in seconds. Defaults to {@link DEFAULT_LOGIN_ATTEMPT_WINDOW_SECONDS}. */
92
+ windowSeconds?: number;
93
+ /**
94
+ * Exponential lockout once a window's budget is exhausted. `false`
95
+ * disables lockout and keeps only the fixed window (the pre-#3273
96
+ * terminal-approve behaviour).
97
+ */
98
+ lockout?: LoginLockoutOptions | false;
99
+ /**
100
+ * Time since a key's last failure after which its streak is forgiven. Defaults to
101
+ * twice the larger of the window and the lockout ceiling.
102
+ */
103
+ streakResetSeconds?: number;
104
+ /**
105
+ * Gradual forgiveness for SOURCE keys, which are shared (a tablet, an
106
+ * office address) and are not reset by anyone's successful sign-in: one
107
+ * earlier failure is forgiven for each full interval of this length since
108
+ * the source's last failure. Ordinary mistakes spaced further apart than
109
+ * this never accumulate into a lockout of everyone behind the source,
110
+ * while a burst of guesses still escalates because it leaves no time to
111
+ * decay. Defaults to twice the window; `0` disables the decay, leaving only
112
+ * `streakResetSeconds`. Subject keys do not decay: a success resets them.
113
+ */
114
+ sourceStreakDecaySeconds?: number;
115
+ /**
116
+ * Audit destination. Omit for the durable default; `false` records nothing.
117
+ */
118
+ audit?: LoginAuditSink | false;
119
+ /**
120
+ * Optional secret mixed into key hashes so a leaked limiter table cannot be
121
+ * joined against a list of known emails or IPs by brute force.
122
+ */
123
+ keyPepper?: string;
124
+ }
125
+ export interface ReserveLoginAttemptOptions {
126
+ /**
127
+ * Credential kind, for audit only. Keys are shared across kinds on purpose
128
+ * (password, passkey and PIN for one person are one budget); a flow that
129
+ * must not pool with the others prefixes its own subject.
130
+ */
131
+ kind: string;
132
+ /** Identifier the client submitted (email key, user id, tag hash). */
133
+ subject?: string | null;
134
+ /** Client IP, or device/station id. */
135
+ source?: string | null;
136
+ /** Extra audit metadata. Never credentials, session ids, or the subject itself. */
137
+ metadata?: Record<string, unknown>;
138
+ }
139
+ /** A granted reservation. Exactly one of the three methods must be awaited. */
140
+ export interface LoginAttemptLease {
141
+ readonly allowed: true;
142
+ readonly subjectKeyHash: string | null;
143
+ readonly sourceKeyHash: string | null;
144
+ /** The credential was wrong. Keeps the reservation; may lock the key. */
145
+ fail(metadata?: Record<string, unknown>): Promise<LoginFailureOutcome>;
146
+ /** The credential was right. Releases the reservation, resets the streak. */
147
+ succeed(metadata?: Record<string, unknown>): Promise<void>;
148
+ /** Credential work did not run or did not finish. Releases the reservation. */
149
+ release(): Promise<void>;
150
+ }
151
+ export interface LoginFailureOutcome {
152
+ /** True when this failure locked one of the keys out. */
153
+ lockedOut: boolean;
154
+ /** Seconds the client should wait when `lockedOut`. */
155
+ retryAfterSeconds: number | null;
156
+ }
157
+ export interface LoginAttemptDenied {
158
+ readonly allowed: false;
159
+ readonly retryAfterSeconds: number;
160
+ /** True when a lockout (not just a full window) refused the attempt. */
161
+ readonly lockedOut: boolean;
162
+ /** Which budget refused the attempt. */
163
+ readonly scope: LoginAttemptScope;
164
+ }
165
+ export type LoginAttemptDecision = LoginAttemptLease | LoginAttemptDenied;
166
+ /**
167
+ * Thrown by consumers when a reservation is refused. Surface as HTTP 429
168
+ * with `Retry-After: retryAfterSeconds`.
169
+ */
170
+ export declare class LoginRateLimitError extends Error {
171
+ readonly retryAfterSeconds: number;
172
+ readonly lockedOut: boolean;
173
+ constructor(decision: Pick<LoginAttemptDenied, 'retryAfterSeconds' | 'lockedOut'>);
174
+ }
175
+ /**
176
+ * Thrown by consumers for every credential failure — unknown subject, wrong
177
+ * credential, nothing enrolled — so responses cannot enumerate accounts.
178
+ */
179
+ export declare class InvalidCredentialsError extends Error {
180
+ constructor(message?: string);
181
+ }
182
+ /** Default sink: persist every decision as a {@link UsersLoginAuditEvent}. */
183
+ export declare class DurableLoginAuditSink implements LoginAuditSink {
184
+ private readonly events;
185
+ private constructor();
186
+ static create(options: SmrtClassOptions): Promise<DurableLoginAuditSink>;
187
+ record(entry: LoginAuditEntry): Promise<void>;
188
+ }
189
+ export declare class LoginAttemptLimiter {
190
+ private readonly options;
191
+ private readonly maxAttempts;
192
+ private readonly windowMs;
193
+ private readonly lockout;
194
+ private readonly streakResetMs;
195
+ private readonly sourceStreakDecayMs;
196
+ private attempts;
197
+ private audit;
198
+ constructor(options: LoginAttemptLimiterOptions);
199
+ static create(options: LoginAttemptLimiterOptions): Promise<LoginAttemptLimiter>;
200
+ initialize(): Promise<void>;
201
+ /** How long a row this limiter writes must outlive the retention sweep. */
202
+ private get retainMs();
203
+ /** Stable, peppered hash for a key. Exposed so hosts can correlate audit rows. */
204
+ hashKey(scope: LoginAttemptScope, raw: string): string;
205
+ /** Lockout length for the n-th consecutive exhausted budget (0-based). */
206
+ lockoutMsFor(exhaustedBudgets: number): number;
207
+ /**
208
+ * Reserve one attempt against every key supplied. Subject is reserved
209
+ * first; if the source then refuses, the subject reservation is handed
210
+ * back so one noisy source cannot burn every account's budget.
211
+ */
212
+ reserve(input: ReserveLoginAttemptOptions): Promise<LoginAttemptDecision>;
213
+ /** Report an administrative credential event through the same sink. */
214
+ recordManagement(input: {
215
+ kind: string;
216
+ subject?: string | null;
217
+ source?: string | null;
218
+ metadata?: Record<string, unknown>;
219
+ }): Promise<void>;
220
+ /** Prune idle limiter rows (retention sweep). */
221
+ cleanupIdle(options?: {
222
+ dryRun?: boolean;
223
+ }): Promise<number>;
224
+ private releaseAll;
225
+ private report;
226
+ }
227
+ //# sourceMappingURL=LoginAttemptLimiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginAttemptLimiter.d.ts","sourceRoot":"","sources":["../../src/services/LoginAttemptLimiter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MobileAuthService.d.ts","sourceRoot":"","sources":["../../src/services/MobileAuthService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MobileAuthService.d.ts","sourceRoot":"","sources":["../../src/services/MobileAuthService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OperationPermissionService.d.ts","sourceRoot":"","sources":["../../src/services/OperationPermissionService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,iBAAiB,EAEvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,2BAA2B,EAChC,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,MAAM,6BAA6B,GACrC,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,mBAAmB,CAAC;AAExB,MAAM,MAAM,8BAA8B,GACtC,oBAAoB,GACpB,oBAAoB,GACpB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,8BAA8B,GAAG,6BAA6B,CAAC;IACvE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,0BACf,SAAQ,gBAAgB,EACtB,2BAA2B;IAC7B;;OAEG;IACH,UAAU,EAAE,kCAAkC,CAAC;IAC/C;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;CACzD;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,MAAM,OAAO;gBAEV,QAAQ,EAAE,2BAA2B;CAUlD;AAmED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAuEtC;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAOtC"}
1
+ {"version":3,"file":"OperationPermissionService.d.ts","sourceRoot":"","sources":["../../src/services/OperationPermissionService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,iBAAiB,EAEvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,2BAA2B,EAChC,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,MAAM,6BAA6B,GACrC,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,mBAAmB,CAAC;AAExB,MAAM,MAAM,8BAA8B,GACtC,oBAAoB,GACpB,oBAAoB,GACpB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,8BAA8B,GAAG,6BAA6B,CAAC;IACvE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,0BACf,SAAQ,gBAAgB,EACtB,2BAA2B;IAC7B;;OAEG;IACH,UAAU,EAAE,kCAAkC,CAAC;IAC/C;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;CACzD;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,MAAM,OAAO;gBAEV,QAAQ,EAAE,2BAA2B;CAUlD;AAmED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CA0FtC;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAOtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionCatalogService.d.ts","sourceRoot":"","sources":["../../src/services/PermissionCatalogService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PermissionCatalogService.d.ts","sourceRoot":"","sources":["../../src/services/PermissionCatalogService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionPermissionContext.d.ts","sourceRoot":"","sources":["../../src/services/SessionPermissionContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionPermissionContext.d.ts","sourceRoot":"","sources":["../../src/services/SessionPermissionContext.ts"],"names":[],"mappings":"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"}