@effect-auth/core 0.1.0-alpha.10 → 0.1.0-alpha.13

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 (93) hide show
  1. package/README.md +65 -4
  2. package/dist/AuditLog.d.ts +60 -0
  3. package/dist/AuditLog.d.ts.map +1 -1
  4. package/dist/AuditLog.js +105 -0
  5. package/dist/AuditLog.js.map +1 -1
  6. package/dist/AuthKernel.d.ts +1 -1
  7. package/dist/Client.d.ts +72 -1
  8. package/dist/Client.d.ts.map +1 -1
  9. package/dist/Client.js +218 -1
  10. package/dist/Client.js.map +1 -1
  11. package/dist/DomainVerification.d.ts +200 -0
  12. package/dist/DomainVerification.d.ts.map +1 -0
  13. package/dist/DomainVerification.js +304 -0
  14. package/dist/DomainVerification.js.map +1 -0
  15. package/dist/EffectQbSqliteStorage.d.ts +389 -4
  16. package/dist/EffectQbSqliteStorage.d.ts.map +1 -1
  17. package/dist/EffectQbSqliteStorage.js +1191 -4
  18. package/dist/EffectQbSqliteStorage.js.map +1 -1
  19. package/dist/EmailOtp.d.ts +2 -2
  20. package/dist/HttpApi/Api.d.ts +477 -23
  21. package/dist/HttpApi/Api.d.ts.map +1 -1
  22. package/dist/HttpApi/Api.js +705 -4
  23. package/dist/HttpApi/Api.js.map +1 -1
  24. package/dist/HttpApi/Endpoints.d.ts +133 -5
  25. package/dist/HttpApi/Endpoints.d.ts.map +1 -1
  26. package/dist/HttpApi/Endpoints.js +57 -2
  27. package/dist/HttpApi/Endpoints.js.map +1 -1
  28. package/dist/HttpApi/Errors.d.ts +32 -0
  29. package/dist/HttpApi/Errors.d.ts.map +1 -1
  30. package/dist/HttpApi/Errors.js +46 -0
  31. package/dist/HttpApi/Errors.js.map +1 -1
  32. package/dist/HttpApi/Schemas.d.ts +149 -8
  33. package/dist/HttpApi/Schemas.d.ts.map +1 -1
  34. package/dist/HttpApi/Schemas.js +128 -0
  35. package/dist/HttpApi/Schemas.js.map +1 -1
  36. package/dist/Identifiers.d.ts +3 -0
  37. package/dist/Identifiers.d.ts.map +1 -1
  38. package/dist/Identifiers.js +2 -0
  39. package/dist/Identifiers.js.map +1 -1
  40. package/dist/IncidentAction.d.ts +80 -0
  41. package/dist/IncidentAction.d.ts.map +1 -0
  42. package/dist/IncidentAction.js +158 -0
  43. package/dist/IncidentAction.js.map +1 -0
  44. package/dist/Jwt.d.ts +10 -0
  45. package/dist/Jwt.d.ts.map +1 -1
  46. package/dist/Jwt.js +209 -0
  47. package/dist/Jwt.js.map +1 -1
  48. package/dist/LoginNotification.d.ts +1 -1
  49. package/dist/LoginRisk.d.ts +272 -1
  50. package/dist/LoginRisk.d.ts.map +1 -1
  51. package/dist/LoginRisk.js +427 -0
  52. package/dist/LoginRisk.js.map +1 -1
  53. package/dist/MachineAuth.d.ts +73 -0
  54. package/dist/MachineAuth.d.ts.map +1 -0
  55. package/dist/MachineAuth.js +147 -0
  56. package/dist/MachineAuth.js.map +1 -0
  57. package/dist/MagicLink.d.ts +2 -2
  58. package/dist/OAuth.d.ts +957 -1
  59. package/dist/OAuth.d.ts.map +1 -1
  60. package/dist/OAuth.js +1403 -1
  61. package/dist/OAuth.js.map +1 -1
  62. package/dist/Password.d.ts +2 -2
  63. package/dist/Retention.d.ts +98 -0
  64. package/dist/Retention.d.ts.map +1 -0
  65. package/dist/Retention.js +204 -0
  66. package/dist/Retention.js.map +1 -0
  67. package/dist/SecurityTimeline.d.ts +8 -2
  68. package/dist/SecurityTimeline.d.ts.map +1 -1
  69. package/dist/SecurityTimeline.js +75 -0
  70. package/dist/SecurityTimeline.js.map +1 -1
  71. package/dist/StorageMigrations.d.ts +11 -1
  72. package/dist/StorageMigrations.d.ts.map +1 -1
  73. package/dist/StorageMigrations.js +206 -0
  74. package/dist/StorageMigrations.js.map +1 -1
  75. package/dist/Webhook.d.ts +310 -2
  76. package/dist/Webhook.d.ts.map +1 -1
  77. package/dist/Webhook.js +511 -1
  78. package/dist/Webhook.js.map +1 -1
  79. package/dist/index.d.ts +4 -0
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +4 -0
  82. package/dist/index.js.map +1 -1
  83. package/migrations/0014_auth_webhook_outbox.sql +16 -0
  84. package/migrations/0015_auth_webhook_replay.sql +7 -0
  85. package/migrations/0016_auth_login_risk_history.sql +23 -0
  86. package/migrations/0017_auth_audit_log.sql +17 -0
  87. package/migrations/0018_auth_domain_verification.sql +18 -0
  88. package/migrations/0019_auth_oauth_authorization_code.sql +17 -0
  89. package/migrations/0020_auth_oauth_provider_mode_token.sql +24 -0
  90. package/migrations/0021_auth_oauth_client_secret.sql +14 -0
  91. package/migrations/0022_auth_oauth_client.sql +15 -0
  92. package/migrations/0023_auth_oauth_consent.sql +15 -0
  93. package/package.json +17 -1
package/dist/LoginRisk.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // oxlint-disable import(namespace): Schema.Codec is a type namespace exported by Effect.
2
2
  import { Context, Data, Effect, Layer, Schema } from "effect";
3
+ import { currentUnixMillis } from "./Internal.js";
3
4
  export const LoginRiskLevelSchema = Schema.Literals([
4
5
  "unknown",
5
6
  "low",
@@ -15,6 +16,21 @@ const loginRiskLevelRank = {
15
16
  high: 3,
16
17
  critical: 4,
17
18
  };
19
+ const authAssuranceLevelRank = {
20
+ aal1: 1,
21
+ aal2: 2,
22
+ aal3: 3,
23
+ };
24
+ export const compareLoginRiskLevels = (left, right) => loginRiskLevelRank[left] - loginRiskLevelRank[right];
25
+ export const maxLoginRiskLevel = (levels, emptyLevel = "unknown") => {
26
+ let max = emptyLevel;
27
+ for (const level of levels) {
28
+ if (compareLoginRiskLevels(level, max) > 0) {
29
+ max = level;
30
+ }
31
+ }
32
+ return max;
33
+ };
18
34
  export class LoginRiskSignal extends Schema.Class("LoginRiskSignal")({
19
35
  type: Schema.String,
20
36
  level: Schema.optional(LoginRiskLevelSchema),
@@ -40,12 +56,408 @@ export class LoginRiskContext extends Schema.Class("LoginRiskContext")({
40
56
  export const isLoginRiskContext = Schema.is(LoginRiskContext);
41
57
  export class LoginRiskError extends Data.TaggedError("LoginRiskError") {
42
58
  }
59
+ export class EmailReputationError extends Data.TaggedError("EmailReputationError") {
60
+ }
61
+ export class IpReputationError extends Data.TaggedError("IpReputationError") {
62
+ }
63
+ export class LoginRiskHistoryError extends Data.TaggedError("LoginRiskHistoryError") {
64
+ }
65
+ export class EmailReputation extends Context.Service()("auth/EmailReputation") {
66
+ }
67
+ (function (EmailReputation) {
68
+ EmailReputation.make = (service) => EmailReputation.of(service);
69
+ })(EmailReputation || (EmailReputation = {}));
70
+ export class IpReputation extends Context.Service()("auth/IpReputation") {
71
+ }
72
+ (function (IpReputation) {
73
+ IpReputation.make = (service) => IpReputation.of(service);
74
+ })(IpReputation || (IpReputation = {}));
75
+ export class LoginRiskHistory extends Context.Service()("auth/LoginRiskHistory") {
76
+ }
77
+ (function (LoginRiskHistory) {
78
+ LoginRiskHistory.make = (service) => LoginRiskHistory.of(service);
79
+ })(LoginRiskHistory || (LoginRiskHistory = {}));
43
80
  export class LoginRiskEngine extends Context.Service()("auth/LoginRiskEngine") {
44
81
  }
45
82
  (function (LoginRiskEngine) {
46
83
  LoginRiskEngine.make = (service) => LoginRiskEngine.of(service);
47
84
  LoginRiskEngine.custom = (assess) => LoginRiskEngine.of({ assess });
48
85
  })(LoginRiskEngine || (LoginRiskEngine = {}));
86
+ export const makeLoginRiskSignal = (input) => LoginRiskSignal.make({
87
+ type: input.type,
88
+ ...(input.level === undefined ? {} : { level: input.level }),
89
+ ...(input.metadata === undefined
90
+ ? {}
91
+ : { metadata: structuredClone(input.metadata) }),
92
+ });
93
+ export const makeLoginRiskContext = (input = {}) => {
94
+ const signals = [...(input.signals ?? [])].map(makeLoginRiskSignal);
95
+ const level = input.level ??
96
+ maxLoginRiskLevel(signals.map((signal) => signal.level ?? "unknown"), input.emptyLevel);
97
+ return LoginRiskContext.make({
98
+ level,
99
+ signals,
100
+ ...(input.metadata === undefined
101
+ ? {}
102
+ : { metadata: structuredClone(input.metadata) }),
103
+ });
104
+ };
105
+ export const summarizeLoginRiskContext = (risk) => ({
106
+ level: risk.level,
107
+ signals: risk.signals.map((signal) => ({
108
+ type: signal.type,
109
+ ...(signal.level === undefined ? {} : { level: signal.level }),
110
+ })),
111
+ });
112
+ export const makeLoginRiskAssessment = (input) => ({
113
+ userId: input.userId,
114
+ method: input.method,
115
+ amr: [...input.amr],
116
+ aal: input.aal,
117
+ device: { status: input.device.status },
118
+ risk: summarizeLoginRiskContext(input.risk),
119
+ ...(input.metadata === undefined
120
+ ? {}
121
+ : { metadata: structuredClone(input.metadata) }),
122
+ });
123
+ const compactMetadata = (input) => {
124
+ const entries = Object.entries(input).filter(([, value]) => value !== undefined && (!Array.isArray(value) || value.length > 0));
125
+ return entries.length === 0 ? undefined : Object.fromEntries(entries);
126
+ };
127
+ const loginRiskError = (message, cause) => new LoginRiskError({ message, cause });
128
+ const loginRiskRuleSignals = (result) => {
129
+ if (result === undefined) {
130
+ return [];
131
+ }
132
+ return (Array.isArray(result) ? result : [result]).map(makeLoginRiskSignal);
133
+ };
134
+ const loginRiskRuleOptions = (value) => value === undefined || value === true || value === false ? undefined : value;
135
+ const authAssuranceAtLeast = (actual, minimum) => authAssuranceLevelRank[actual] >= authAssuranceLevelRank[minimum];
136
+ export const makeLoginRiskRule = (assess) => ({ assess });
137
+ export const makeLoginRiskDeviceRule = (options = {}) => makeLoginRiskRule((input) => {
138
+ const { status } = input.device;
139
+ const level = status === "known"
140
+ ? options.knownDeviceLevel
141
+ : status === "new"
142
+ ? (options.newDeviceLevel ?? "medium")
143
+ : (options.unknownDeviceLevel ?? "medium");
144
+ return Effect.succeed(level === undefined
145
+ ? undefined
146
+ : makeLoginRiskSignal({
147
+ type: `${status}-device`,
148
+ level,
149
+ metadata: { status },
150
+ }));
151
+ });
152
+ export const makeLoginRiskEmailVerificationRule = (options = {}) => makeLoginRiskRule((input) => Effect.succeed(input.emailVerified === false
153
+ ? makeLoginRiskSignal({
154
+ type: "unverified-email",
155
+ level: options.unverifiedEmailLevel ?? "medium",
156
+ })
157
+ : undefined));
158
+ export const makeLoginRiskAssuranceRule = (options = {}) => {
159
+ const minimum = options.minimum ?? "aal2";
160
+ const level = options.level ?? "medium";
161
+ return makeLoginRiskRule((input) => Effect.succeed(authAssuranceAtLeast(input.aal, minimum)
162
+ ? undefined
163
+ : makeLoginRiskSignal({
164
+ type: "low-assurance",
165
+ level,
166
+ metadata: { actual: input.aal, minimum },
167
+ })));
168
+ };
169
+ const emailReputationSignals = (result, options) => [
170
+ ...(result.blocked === true
171
+ ? [
172
+ {
173
+ type: "blocked-email",
174
+ level: options.blockedLevel ?? "critical",
175
+ metadata: compactMetadata({ blocked: true, reasons: result.reasons }),
176
+ },
177
+ ]
178
+ : []),
179
+ ...(result.disposable === true
180
+ ? [
181
+ {
182
+ type: "disposable-email",
183
+ level: options.disposableLevel ?? "high",
184
+ metadata: compactMetadata({ disposable: true, reasons: result.reasons }),
185
+ },
186
+ ]
187
+ : []),
188
+ ...(result.suspiciousDomain === true
189
+ ? [
190
+ {
191
+ type: "suspicious-email-domain",
192
+ level: options.suspiciousDomainLevel ?? "medium",
193
+ metadata: compactMetadata({
194
+ suspiciousDomain: true,
195
+ reasons: result.reasons,
196
+ }),
197
+ },
198
+ ]
199
+ : []),
200
+ ...(result.riskLevel === undefined
201
+ ? []
202
+ : [
203
+ {
204
+ type: "email-reputation",
205
+ level: result.riskLevel,
206
+ metadata: compactMetadata({ reasons: result.reasons }),
207
+ },
208
+ ]),
209
+ ];
210
+ const ipReputationSignals = (result, options) => [
211
+ ...(result.blocked === true
212
+ ? [
213
+ {
214
+ type: "blocked-ip",
215
+ level: options.blockedLevel ?? "critical",
216
+ metadata: compactMetadata({ blocked: true, reasons: result.reasons }),
217
+ },
218
+ ]
219
+ : []),
220
+ ...(result.tor === true
221
+ ? [
222
+ {
223
+ type: "tor-ip",
224
+ level: options.torLevel ?? "high",
225
+ metadata: compactMetadata({ tor: true, reasons: result.reasons }),
226
+ },
227
+ ]
228
+ : []),
229
+ ...(result.proxy === true
230
+ ? [
231
+ {
232
+ type: "proxy-ip",
233
+ level: options.proxyLevel ?? "medium",
234
+ metadata: compactMetadata({ proxy: true, reasons: result.reasons }),
235
+ },
236
+ ]
237
+ : []),
238
+ ...(result.vpn === true
239
+ ? [
240
+ {
241
+ type: "vpn-ip",
242
+ level: options.vpnLevel ?? "medium",
243
+ metadata: compactMetadata({ vpn: true, reasons: result.reasons }),
244
+ },
245
+ ]
246
+ : []),
247
+ ...(result.datacenter === true
248
+ ? [
249
+ {
250
+ type: "datacenter-ip",
251
+ level: options.datacenterLevel ?? "medium",
252
+ metadata: compactMetadata({ datacenter: true, reasons: result.reasons }),
253
+ },
254
+ ]
255
+ : []),
256
+ ...(result.riskLevel === undefined
257
+ ? []
258
+ : [
259
+ {
260
+ type: "ip-reputation",
261
+ level: result.riskLevel,
262
+ metadata: compactMetadata({ reasons: result.reasons }),
263
+ },
264
+ ]),
265
+ ];
266
+ const loginRiskHistoryVelocityLevel = (result, options) => {
267
+ if (result.velocityRiskLevel !== undefined) {
268
+ return result.velocityRiskLevel;
269
+ }
270
+ const { failedLoginCountThreshold, loginCountThreshold } = options;
271
+ const matchesLoginCount = loginCountThreshold !== undefined &&
272
+ result.recentLoginCount !== undefined &&
273
+ result.recentLoginCount >= loginCountThreshold;
274
+ const matchesFailedLoginCount = failedLoginCountThreshold !== undefined &&
275
+ result.recentFailedLoginCount !== undefined &&
276
+ result.recentFailedLoginCount >= failedLoginCountThreshold;
277
+ return matchesLoginCount || matchesFailedLoginCount
278
+ ? (options.velocityLevel ?? "high")
279
+ : undefined;
280
+ };
281
+ const loginRiskHistorySignals = (result, options, enabled) => {
282
+ const velocityLevel = enabled.velocity === true
283
+ ? loginRiskHistoryVelocityLevel(result, options)
284
+ : undefined;
285
+ return [
286
+ ...(velocityLevel === undefined
287
+ ? []
288
+ : [
289
+ {
290
+ type: "login-velocity",
291
+ level: velocityLevel,
292
+ metadata: compactMetadata({
293
+ recentLoginCount: result.recentLoginCount,
294
+ recentFailedLoginCount: result.recentFailedLoginCount,
295
+ recentSuccessfulLoginCount: result.recentSuccessfulLoginCount,
296
+ reasons: result.reasons,
297
+ }),
298
+ },
299
+ ]),
300
+ ...(enabled.device === true && result.newDevice === true
301
+ ? [
302
+ {
303
+ type: "new-device-history",
304
+ level: options.newDeviceLevel ?? "medium",
305
+ metadata: compactMetadata({ newDevice: true, reasons: result.reasons }),
306
+ },
307
+ ]
308
+ : []),
309
+ ...(enabled.location === true && result.newLocation === true
310
+ ? [
311
+ {
312
+ type: "new-location",
313
+ level: options.newLocationLevel ?? "medium",
314
+ metadata: compactMetadata({ newLocation: true, reasons: result.reasons }),
315
+ },
316
+ ]
317
+ : []),
318
+ ...(enabled.impossibleTravel === true && result.impossibleTravel === true
319
+ ? [
320
+ {
321
+ type: "impossible-travel",
322
+ level: options.impossibleTravelLevel ?? "critical",
323
+ metadata: compactMetadata({
324
+ impossibleTravel: true,
325
+ reasons: result.reasons,
326
+ }),
327
+ },
328
+ ]
329
+ : []),
330
+ ...(enabled.riskLevel === true && result.riskLevel !== undefined
331
+ ? [
332
+ {
333
+ type: "login-history",
334
+ level: result.riskLevel,
335
+ metadata: compactMetadata({ reasons: result.reasons }),
336
+ },
337
+ ]
338
+ : []),
339
+ ];
340
+ };
341
+ const makeLoginRiskHistoryLookupInput = (input, occurredAt) => ({
342
+ userId: input.userId,
343
+ ...(input.email === undefined ? {} : { email: input.email }),
344
+ occurredAt,
345
+ method: input.method,
346
+ amr: [...input.amr],
347
+ aal: input.aal,
348
+ device: { status: input.device.status },
349
+ ...(input.deviceKey === undefined ? {} : { deviceKey: input.deviceKey }),
350
+ ...(input.locationKey === undefined ? {} : { locationKey: input.locationKey }),
351
+ ...(input.request === undefined ? {} : { request: { ...input.request } }),
352
+ ...(input.metadata === undefined ? {} : { metadata: input.metadata }),
353
+ });
354
+ const makeLoginRiskHistoryRuleFor = (dependencies, enabled) => {
355
+ const options = dependencies.options ?? {};
356
+ const lookupFailure = options.lookupFailure ?? "ignore";
357
+ return makeLoginRiskRule((input) => Effect.gen(function* () {
358
+ const occurredAt = input.occurredAt ?? (yield* currentUnixMillis);
359
+ const lookup = dependencies.loginRiskHistory.lookup(makeLoginRiskHistoryLookupInput(input, occurredAt));
360
+ const handledLookup = lookupFailure === "fail"
361
+ ? lookup.pipe(Effect.mapError((cause) => loginRiskError("Login risk history lookup failed", cause)), Effect.map((result) => result))
362
+ : lookup.pipe(Effect.catchTag("LoginRiskHistoryError", () => Effect.succeed(undefined)));
363
+ const result = yield* handledLookup;
364
+ return result === undefined
365
+ ? undefined
366
+ : loginRiskHistorySignals(result, options, enabled);
367
+ }));
368
+ };
369
+ export const makeEmailReputationRiskRule = (dependencies) => {
370
+ const options = dependencies.options ?? {};
371
+ const lookupFailure = options.lookupFailure ?? "ignore";
372
+ return makeLoginRiskRule((input) => {
373
+ if (input.email === undefined) {
374
+ return Effect.succeed(undefined);
375
+ }
376
+ const lookup = dependencies.emailReputation.lookup({
377
+ email: input.email,
378
+ ...(input.metadata === undefined ? {} : { metadata: input.metadata }),
379
+ });
380
+ const handledLookup = lookupFailure === "fail"
381
+ ? lookup.pipe(Effect.mapError((cause) => loginRiskError("Email reputation lookup failed", cause)), Effect.map((result) => result))
382
+ : lookup.pipe(Effect.catchTag("EmailReputationError", () => Effect.succeed(undefined)));
383
+ return handledLookup.pipe(Effect.map((result) => result === undefined ? undefined : emailReputationSignals(result, options)));
384
+ });
385
+ };
386
+ export const makeIpReputationRiskRule = (dependencies) => {
387
+ const options = dependencies.options ?? {};
388
+ const lookupFailure = options.lookupFailure ?? "ignore";
389
+ return makeLoginRiskRule((input) => {
390
+ if (input.request?.ip === undefined) {
391
+ return Effect.succeed(undefined);
392
+ }
393
+ const { ip, ...request } = input.request;
394
+ const lookup = dependencies.ipReputation.lookup({
395
+ ip,
396
+ request,
397
+ ...(input.metadata === undefined ? {} : { metadata: input.metadata }),
398
+ });
399
+ const handledLookup = lookupFailure === "fail"
400
+ ? lookup.pipe(Effect.mapError((cause) => loginRiskError("IP reputation lookup failed", cause)), Effect.map((result) => result))
401
+ : lookup.pipe(Effect.catchTag("IpReputationError", () => Effect.succeed(undefined)));
402
+ return handledLookup.pipe(Effect.map((result) => result === undefined ? undefined : ipReputationSignals(result, options)));
403
+ });
404
+ };
405
+ export const makeLoginHistoryRiskRule = (dependencies) => makeLoginRiskHistoryRuleFor(dependencies, {
406
+ velocity: true,
407
+ device: true,
408
+ location: true,
409
+ impossibleTravel: true,
410
+ riskLevel: true,
411
+ });
412
+ export const makeLoginVelocityRiskRule = (dependencies) => makeLoginRiskHistoryRuleFor(dependencies, {
413
+ velocity: true,
414
+ });
415
+ export const makeLoginDeviceHistoryRiskRule = (dependencies) => makeLoginRiskHistoryRuleFor(dependencies, {
416
+ device: true,
417
+ });
418
+ export const makeImpossibleTravelRiskRule = (dependencies) => makeLoginRiskHistoryRuleFor(dependencies, {
419
+ impossibleTravel: true,
420
+ });
421
+ export const makeLoginRiskEngine = (options = {}) => {
422
+ const rules = options.rules ?? [];
423
+ return LoginRiskEngine.make({
424
+ assess: (input) => Effect.gen(function* () {
425
+ const signals = [];
426
+ for (const rule of rules) {
427
+ signals.push(...loginRiskRuleSignals(yield* rule.assess(input)));
428
+ }
429
+ return makeLoginRiskContext({
430
+ signals,
431
+ emptyLevel: options.emptyLevel,
432
+ ...(options.metadata === undefined ? {} : { metadata: options.metadata }),
433
+ });
434
+ }),
435
+ });
436
+ };
437
+ export const makeLoginRiskEngineBasic = (options = {}) => {
438
+ const rules = [];
439
+ if (options.device !== false) {
440
+ rules.push(makeLoginRiskDeviceRule(loginRiskRuleOptions(options.device)));
441
+ }
442
+ if (options.emailVerification !== false) {
443
+ rules.push(makeLoginRiskEmailVerificationRule(loginRiskRuleOptions(options.emailVerification)));
444
+ }
445
+ if (options.assurance !== undefined && options.assurance !== false) {
446
+ rules.push(makeLoginRiskAssuranceRule(loginRiskRuleOptions(options.assurance)));
447
+ }
448
+ rules.push(...(options.rules ?? []));
449
+ return makeLoginRiskEngine({
450
+ rules,
451
+ emptyLevel: options.emptyLevel ?? "low",
452
+ ...(options.metadata === undefined ? {} : { metadata: options.metadata }),
453
+ });
454
+ };
455
+ export const assessLoginRisk = (input) => LoginRiskEngine.use((engine) => engine.assess(input));
456
+ export const lookupEmailReputation = (input) => EmailReputation.use((service) => service.lookup(input));
457
+ export const lookupIpReputation = (input) => IpReputation.use((service) => service.lookup(input));
458
+ export const lookupLoginRiskHistory = (input) => LoginRiskHistory.use((service) => service.lookup(input));
459
+ export const recordLoginRiskHistory = (input) => LoginRiskHistory.use((service) => service.record(input));
460
+ export const deleteLoginRiskHistoryBefore = (input) => LoginRiskHistory.use((service) => service.deleteBefore(input));
49
461
  export const defaultLoginRiskContext = LoginRiskContext.make({
50
462
  level: "unknown",
51
463
  signals: [],
@@ -54,4 +466,19 @@ export const makeLoginRiskEngineNoop = () => LoginRiskEngine.make({
54
466
  assess: () => Effect.succeed(defaultLoginRiskContext),
55
467
  });
56
468
  export const LoginRiskEngineNoopLive = Layer.succeed(LoginRiskEngine, makeLoginRiskEngineNoop());
469
+ export const LoginRiskEngineBasicLive = (options) => Layer.succeed(LoginRiskEngine)(makeLoginRiskEngineBasic(options));
470
+ export const makeEmailReputationNoop = () => EmailReputation.make({
471
+ lookup: () => Effect.succeed({}),
472
+ });
473
+ export const EmailReputationNoopLive = Layer.succeed(EmailReputation)(makeEmailReputationNoop());
474
+ export const makeIpReputationNoop = () => IpReputation.make({
475
+ lookup: () => Effect.succeed({}),
476
+ });
477
+ export const IpReputationNoopLive = Layer.succeed(IpReputation)(makeIpReputationNoop());
478
+ export const makeLoginRiskHistoryNoop = () => LoginRiskHistory.make({
479
+ lookup: () => Effect.succeed({}),
480
+ record: () => Effect.void,
481
+ deleteBefore: () => Effect.succeed(0),
482
+ });
483
+ export const LoginRiskHistoryNoopLive = Layer.succeed(LoginRiskHistory)(makeLoginRiskHistoryNoop());
57
484
  //# sourceMappingURL=LoginRisk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoginRisk.js","sourceRoot":"","sources":["../src/LoginRisk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LoginRisk.js","sourceRoot":"","sources":["../src/LoginRisk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { Effect } from "effect";
2
+ import type { Duration } from "effect";
3
+ import type { ApiKeyId, ApiKeyInfo, ApiKeyVerificationService } from "./ApiKey.js";
4
+ import type { UserId, UnixMillis } from "./Identifiers.js";
5
+ import type { JwtAudience, JwtClaims, JwtKeyInfo, JwtVerifierService } from "./Jwt.js";
6
+ export type MachineCredentialKind = "api_key" | "jwt";
7
+ export type MachineAuthErrorReason = "missing_bearer" | "invalid_api_key" | "invalid_jwt" | "missing_scope" | "verification_failed";
8
+ declare const MachineAuthError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
9
+ readonly _tag: "MachineAuthError";
10
+ } & Readonly<A>;
11
+ export declare class MachineAuthError extends MachineAuthError_base<{
12
+ readonly reason: MachineAuthErrorReason;
13
+ readonly message: string;
14
+ readonly cause?: unknown;
15
+ }> {
16
+ }
17
+ export interface MachineActorMetadataFields {
18
+ readonly tenantId?: string;
19
+ readonly serviceAccountId?: string;
20
+ }
21
+ export interface MachineApiKeyActor extends MachineActorMetadataFields {
22
+ readonly kind: "api_key";
23
+ readonly userId: UserId;
24
+ readonly keyId: ApiKeyId;
25
+ readonly scopes: readonly string[];
26
+ readonly key: ApiKeyInfo;
27
+ }
28
+ export interface MachineJwtActor extends MachineActorMetadataFields {
29
+ readonly kind: "jwt";
30
+ readonly subject: string | undefined;
31
+ readonly jwtId?: string;
32
+ readonly scopes: readonly string[];
33
+ readonly claims: JwtClaims;
34
+ readonly key: JwtKeyInfo;
35
+ }
36
+ export type MachineActor = MachineApiKeyActor | MachineJwtActor;
37
+ export interface MachineActorFieldOptions {
38
+ readonly tenantIdField?: string;
39
+ readonly serviceAccountIdField?: string;
40
+ }
41
+ export interface VerifyMachineApiKeyOptions extends MachineActorFieldOptions {
42
+ readonly apiKeyVerification: ApiKeyVerificationService;
43
+ readonly headers: Headers;
44
+ readonly requiredScopes?: readonly string[];
45
+ readonly now?: UnixMillis;
46
+ readonly verificationMetadata?: Readonly<Record<string, unknown>>;
47
+ }
48
+ export interface VerifyMachineJwtOptions extends MachineActorFieldOptions {
49
+ readonly jwtVerifier: JwtVerifierService;
50
+ readonly headers: Headers;
51
+ readonly requiredScopes?: readonly string[];
52
+ readonly issuer?: string;
53
+ readonly audience?: JwtAudience;
54
+ readonly now?: UnixMillis;
55
+ readonly clockTolerance?: Duration.Duration;
56
+ }
57
+ export declare const bearerToken: (headers: Headers) => string | undefined;
58
+ export declare const apiKeyPrefixFromSecret: (secret: string) => string;
59
+ export declare const jwtClaimScopes: (claims: JwtClaims) => readonly string[];
60
+ export declare const apiKeyMachineActor: (key: ApiKeyInfo, options?: MachineActorFieldOptions) => MachineApiKeyActor;
61
+ export declare const jwtMachineActor: (input: {
62
+ readonly claims: JwtClaims;
63
+ readonly key: JwtKeyInfo;
64
+ readonly scopes?: readonly string[];
65
+ }, options?: MachineActorFieldOptions) => MachineJwtActor;
66
+ export declare const requireMachineScopes: <A extends MachineActor>(input: {
67
+ readonly actor: A;
68
+ readonly scopes: readonly string[];
69
+ }) => Effect.Effect<A, MachineAuthError>;
70
+ export declare const verifyMachineApiKey: (options: VerifyMachineApiKeyOptions) => Effect.Effect<MachineApiKeyActor, MachineAuthError>;
71
+ export declare const verifyMachineJwt: (options: VerifyMachineJwtOptions) => Effect.Effect<MachineJwtActor, MachineAuthError>;
72
+ export {};
73
+ //# sourceMappingURL=MachineAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MachineAuth.d.ts","sourceRoot":"","sources":["../src/MachineAuth.ts"],"names":[],"mappings":"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"}