@effect-auth/core 0.1.0-alpha.1 → 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 (255) hide show
  1. package/README.md +790 -73
  2. package/dist/ApiKey.d.ts +207 -0
  3. package/dist/ApiKey.d.ts.map +1 -0
  4. package/dist/ApiKey.js +275 -0
  5. package/dist/ApiKey.js.map +1 -0
  6. package/dist/AuditLog.d.ts +335 -1
  7. package/dist/AuditLog.d.ts.map +1 -1
  8. package/dist/AuditLog.js +318 -1
  9. package/dist/AuditLog.js.map +1 -1
  10. package/dist/AuthConfig.d.ts +42 -0
  11. package/dist/AuthConfig.d.ts.map +1 -0
  12. package/dist/AuthConfig.js +43 -0
  13. package/dist/AuthConfig.js.map +1 -0
  14. package/dist/AuthFlow.d.ts +462 -36
  15. package/dist/AuthFlow.d.ts.map +1 -1
  16. package/dist/AuthFlow.js +657 -5
  17. package/dist/AuthFlow.js.map +1 -1
  18. package/dist/AuthKernel.d.ts +3 -0
  19. package/dist/AuthKernel.d.ts.map +1 -0
  20. package/dist/AuthKernel.js +9 -0
  21. package/dist/AuthKernel.js.map +1 -0
  22. package/dist/Challenge.d.ts +24 -4
  23. package/dist/Challenge.d.ts.map +1 -1
  24. package/dist/Challenge.js +167 -1
  25. package/dist/Challenge.js.map +1 -1
  26. package/dist/Client.d.ts +449 -0
  27. package/dist/Client.d.ts.map +1 -0
  28. package/dist/Client.js +985 -0
  29. package/dist/Client.js.map +1 -0
  30. package/dist/Crypto.d.ts +6 -1
  31. package/dist/Crypto.d.ts.map +1 -1
  32. package/dist/Crypto.js +62 -1
  33. package/dist/Crypto.js.map +1 -1
  34. package/dist/DomainVerification.d.ts +200 -0
  35. package/dist/DomainVerification.d.ts.map +1 -0
  36. package/dist/DomainVerification.js +304 -0
  37. package/dist/DomainVerification.js.map +1 -0
  38. package/dist/EffectQbSqliteStorage.d.ts +985 -0
  39. package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
  40. package/dist/EffectQbSqliteStorage.js +2824 -0
  41. package/dist/EffectQbSqliteStorage.js.map +1 -0
  42. package/dist/EmailOtp.d.ts +120 -0
  43. package/dist/EmailOtp.d.ts.map +1 -0
  44. package/dist/EmailOtp.js +286 -0
  45. package/dist/EmailOtp.js.map +1 -0
  46. package/dist/EmailVerification.d.ts +121 -0
  47. package/dist/EmailVerification.d.ts.map +1 -0
  48. package/dist/EmailVerification.js +200 -0
  49. package/dist/EmailVerification.js.map +1 -0
  50. package/dist/HttpApi/Api.d.ts +2410 -0
  51. package/dist/HttpApi/Api.d.ts.map +1 -0
  52. package/dist/HttpApi/Api.js +3026 -0
  53. package/dist/HttpApi/Api.js.map +1 -0
  54. package/dist/HttpApi/Endpoints.d.ts +1073 -0
  55. package/dist/HttpApi/Endpoints.d.ts.map +1 -0
  56. package/dist/HttpApi/Endpoints.js +428 -0
  57. package/dist/HttpApi/Endpoints.js.map +1 -0
  58. package/dist/HttpApi/Errors.d.ts +114 -0
  59. package/dist/HttpApi/Errors.d.ts.map +1 -0
  60. package/dist/HttpApi/Errors.js +230 -0
  61. package/dist/HttpApi/Errors.js.map +1 -0
  62. package/dist/HttpApi/Schemas.d.ts +1254 -0
  63. package/dist/HttpApi/Schemas.d.ts.map +1 -0
  64. package/dist/HttpApi/Schemas.js +862 -0
  65. package/dist/HttpApi/Schemas.js.map +1 -0
  66. package/dist/HttpApi/Security.d.ts +159 -0
  67. package/dist/HttpApi/Security.d.ts.map +1 -0
  68. package/dist/HttpApi/Security.js +530 -0
  69. package/dist/HttpApi/Security.js.map +1 -0
  70. package/dist/HttpApi/Transport.d.ts +65 -0
  71. package/dist/HttpApi/Transport.d.ts.map +1 -0
  72. package/dist/HttpApi/Transport.js +311 -0
  73. package/dist/HttpApi/Transport.js.map +1 -0
  74. package/dist/HttpApi/index.d.ts +8 -0
  75. package/dist/HttpApi/index.d.ts.map +1 -0
  76. package/dist/HttpApi/index.js +7 -0
  77. package/dist/HttpApi/index.js.map +1 -0
  78. package/dist/HttpApi.d.ts +2 -0
  79. package/dist/HttpApi.d.ts.map +1 -0
  80. package/dist/HttpApi.js +2 -0
  81. package/dist/HttpApi.js.map +1 -0
  82. package/dist/Identifiers.d.ts +3 -0
  83. package/dist/Identifiers.d.ts.map +1 -1
  84. package/dist/Identifiers.js +2 -0
  85. package/dist/Identifiers.js.map +1 -1
  86. package/dist/IncidentAction.d.ts +80 -0
  87. package/dist/IncidentAction.d.ts.map +1 -0
  88. package/dist/IncidentAction.js +158 -0
  89. package/dist/IncidentAction.js.map +1 -0
  90. package/dist/Internal.d.ts +7 -0
  91. package/dist/Internal.d.ts.map +1 -0
  92. package/dist/Internal.js +12 -0
  93. package/dist/Internal.js.map +1 -0
  94. package/dist/Jwt.d.ts +281 -0
  95. package/dist/Jwt.d.ts.map +1 -0
  96. package/dist/Jwt.js +721 -0
  97. package/dist/Jwt.js.map +1 -0
  98. package/dist/LoginApproval.d.ts +314 -0
  99. package/dist/LoginApproval.d.ts.map +1 -0
  100. package/dist/LoginApproval.js +551 -0
  101. package/dist/LoginApproval.js.map +1 -0
  102. package/dist/LoginNotification.d.ts +183 -0
  103. package/dist/LoginNotification.d.ts.map +1 -0
  104. package/dist/LoginNotification.js +329 -0
  105. package/dist/LoginNotification.js.map +1 -0
  106. package/dist/LoginRisk.d.ts +344 -0
  107. package/dist/LoginRisk.d.ts.map +1 -0
  108. package/dist/LoginRisk.js +484 -0
  109. package/dist/LoginRisk.js.map +1 -0
  110. package/dist/MachineAuth.d.ts +73 -0
  111. package/dist/MachineAuth.d.ts.map +1 -0
  112. package/dist/MachineAuth.js +147 -0
  113. package/dist/MachineAuth.js.map +1 -0
  114. package/dist/MagicLink.d.ts +85 -0
  115. package/dist/MagicLink.d.ts.map +1 -0
  116. package/dist/MagicLink.js +206 -0
  117. package/dist/MagicLink.js.map +1 -0
  118. package/dist/Mailer.d.ts +147 -0
  119. package/dist/Mailer.d.ts.map +1 -0
  120. package/dist/Mailer.js +208 -0
  121. package/dist/Mailer.js.map +1 -0
  122. package/dist/OAuth.d.ts +1890 -0
  123. package/dist/OAuth.d.ts.map +1 -0
  124. package/dist/OAuth.js +3063 -0
  125. package/dist/OAuth.js.map +1 -0
  126. package/dist/Passkey.d.ts +334 -0
  127. package/dist/Passkey.d.ts.map +1 -0
  128. package/dist/Passkey.js +422 -0
  129. package/dist/Passkey.js.map +1 -0
  130. package/dist/PasskeySimpleWebAuthn.d.ts +11 -0
  131. package/dist/PasskeySimpleWebAuthn.d.ts.map +1 -0
  132. package/dist/PasskeySimpleWebAuthn.js +181 -0
  133. package/dist/PasskeySimpleWebAuthn.js.map +1 -0
  134. package/dist/Password.d.ts +237 -0
  135. package/dist/Password.d.ts.map +1 -0
  136. package/dist/Password.js +641 -0
  137. package/dist/Password.js.map +1 -0
  138. package/dist/Policy.d.ts +7 -4
  139. package/dist/Policy.d.ts.map +1 -1
  140. package/dist/Policy.js +28 -5
  141. package/dist/Policy.js.map +1 -1
  142. package/dist/Privacy.d.ts +15 -0
  143. package/dist/Privacy.d.ts.map +1 -1
  144. package/dist/Privacy.js +58 -1
  145. package/dist/Privacy.js.map +1 -1
  146. package/dist/RateLimiter.d.ts +104 -0
  147. package/dist/RateLimiter.d.ts.map +1 -0
  148. package/dist/RateLimiter.js +118 -0
  149. package/dist/RateLimiter.js.map +1 -0
  150. package/dist/RecoveryCode.d.ts +169 -0
  151. package/dist/RecoveryCode.d.ts.map +1 -0
  152. package/dist/RecoveryCode.js +299 -0
  153. package/dist/RecoveryCode.js.map +1 -0
  154. package/dist/RefreshToken.d.ts +222 -0
  155. package/dist/RefreshToken.d.ts.map +1 -0
  156. package/dist/RefreshToken.js +342 -0
  157. package/dist/RefreshToken.js.map +1 -0
  158. package/dist/Retention.d.ts +98 -0
  159. package/dist/Retention.d.ts.map +1 -0
  160. package/dist/Retention.js +204 -0
  161. package/dist/Retention.js.map +1 -0
  162. package/dist/SecurityTimeline.d.ts +78 -0
  163. package/dist/SecurityTimeline.d.ts.map +1 -0
  164. package/dist/SecurityTimeline.js +461 -0
  165. package/dist/SecurityTimeline.js.map +1 -0
  166. package/dist/Sessions.d.ts +123 -11
  167. package/dist/Sessions.d.ts.map +1 -1
  168. package/dist/Sessions.js +534 -1
  169. package/dist/Sessions.js.map +1 -1
  170. package/dist/StepUp.d.ts +44 -0
  171. package/dist/StepUp.d.ts.map +1 -0
  172. package/dist/StepUp.js +82 -0
  173. package/dist/StepUp.js.map +1 -0
  174. package/dist/Storage.d.ts +73 -5
  175. package/dist/Storage.d.ts.map +1 -1
  176. package/dist/Storage.js +11 -1
  177. package/dist/Storage.js.map +1 -1
  178. package/dist/StorageMigrations.d.ts +23 -1
  179. package/dist/StorageMigrations.d.ts.map +1 -1
  180. package/dist/StorageMigrations.js +462 -2
  181. package/dist/StorageMigrations.js.map +1 -1
  182. package/dist/Testing.d.ts +9 -1
  183. package/dist/Testing.d.ts.map +1 -1
  184. package/dist/Testing.js +30 -2
  185. package/dist/Testing.js.map +1 -1
  186. package/dist/Totp.d.ts +220 -0
  187. package/dist/Totp.d.ts.map +1 -0
  188. package/dist/Totp.js +477 -0
  189. package/dist/Totp.js.map +1 -0
  190. package/dist/TrustedDevice.d.ts +127 -0
  191. package/dist/TrustedDevice.d.ts.map +1 -0
  192. package/dist/TrustedDevice.js +252 -0
  193. package/dist/TrustedDevice.js.map +1 -0
  194. package/dist/WaitUntil.d.ts.map +1 -1
  195. package/dist/WaitUntil.js +1 -1
  196. package/dist/WaitUntil.js.map +1 -1
  197. package/dist/Webhook.d.ts +380 -0
  198. package/dist/Webhook.d.ts.map +1 -0
  199. package/dist/Webhook.js +592 -0
  200. package/dist/Webhook.js.map +1 -0
  201. package/dist/alchemy/cloudflare/Email.d.ts +25 -0
  202. package/dist/alchemy/cloudflare/Email.d.ts.map +1 -0
  203. package/dist/alchemy/cloudflare/Email.js +117 -0
  204. package/dist/alchemy/cloudflare/Email.js.map +1 -0
  205. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +34 -0
  206. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  207. package/dist/alchemy/cloudflare/RateLimitDurableObject.js +30 -0
  208. package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -0
  209. package/dist/cloudflare/Email.d.ts +25 -0
  210. package/dist/cloudflare/Email.d.ts.map +1 -0
  211. package/dist/cloudflare/Email.js +153 -0
  212. package/dist/cloudflare/Email.js.map +1 -0
  213. package/dist/cloudflare/RateLimitDurableObject.d.ts +50 -0
  214. package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  215. package/dist/cloudflare/RateLimitDurableObject.js +51 -0
  216. package/dist/cloudflare/RateLimitDurableObject.js.map +1 -0
  217. package/dist/index.d.ts +25 -0
  218. package/dist/index.d.ts.map +1 -1
  219. package/dist/index.js +25 -0
  220. package/dist/index.js.map +1 -1
  221. package/dist/internal/RateLimitDurableObject.d.ts +32 -0
  222. package/dist/internal/RateLimitDurableObject.d.ts.map +1 -0
  223. package/dist/internal/RateLimitDurableObject.js +80 -0
  224. package/dist/internal/RateLimitDurableObject.js.map +1 -0
  225. package/migrations/0002_auth_password.sql +25 -0
  226. package/migrations/0003_auth_login_approval_review.sql +22 -0
  227. package/migrations/0004_auth_trusted_device.sql +12 -0
  228. package/migrations/0005_auth_passkey.sql +17 -0
  229. package/migrations/0006_auth_totp_factor.sql +17 -0
  230. package/migrations/0007_auth_recovery_code.sql +13 -0
  231. package/migrations/0008_auth_api_key.sql +17 -0
  232. package/migrations/0009_auth_refresh_token.sql +21 -0
  233. package/migrations/0010_auth_jwt_revocation.sql +8 -0
  234. package/migrations/0011_auth_oauth_account.sql +16 -0
  235. package/migrations/0012_auth_oauth_provider_token_vault.sql +20 -0
  236. package/migrations/0013_auth_security_timeline.sql +16 -0
  237. package/migrations/0014_auth_webhook_outbox.sql +16 -0
  238. package/migrations/0015_auth_webhook_replay.sql +7 -0
  239. package/migrations/0016_auth_login_risk_history.sql +23 -0
  240. package/migrations/0017_auth_audit_log.sql +17 -0
  241. package/migrations/0018_auth_domain_verification.sql +18 -0
  242. package/migrations/0019_auth_oauth_authorization_code.sql +17 -0
  243. package/migrations/0020_auth_oauth_provider_mode_token.sql +24 -0
  244. package/migrations/0021_auth_oauth_client_secret.sql +14 -0
  245. package/migrations/0022_auth_oauth_client.sql +15 -0
  246. package/migrations/0023_auth_oauth_consent.sql +15 -0
  247. package/package.json +162 -26
  248. package/dist/D1Kysely.d.ts +0 -40
  249. package/dist/D1Kysely.d.ts.map +0 -1
  250. package/dist/D1Kysely.js +0 -75
  251. package/dist/D1Kysely.js.map +0 -1
  252. package/dist/KyselyStorage.d.ts +0 -41
  253. package/dist/KyselyStorage.d.ts.map +0 -1
  254. package/dist/KyselyStorage.js +0 -176
  255. package/dist/KyselyStorage.js.map +0 -1
@@ -0,0 +1,98 @@
1
+ import { Effect } from "effect";
2
+ import { UnixMillis } from "./Identifiers.js";
3
+ import type { UserId } from "./Identifiers.js";
4
+ import type { WebhookOutboxStatus } from "./Webhook.js";
5
+ export type AuthRetentionCleanupOperation = "auditLog" | "securityTimeline" | "loginRiskHistory" | "oauthConsent" | "oauthProviderModeToken" | "webhookOutbox" | "webhookReplay";
6
+ declare const AuthRetentionCleanupError_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 & {
7
+ readonly _tag: "AuthRetentionCleanupError";
8
+ } & Readonly<A>;
9
+ export declare class AuthRetentionCleanupError extends AuthRetentionCleanupError_base<{
10
+ readonly operation: AuthRetentionCleanupOperation;
11
+ readonly message: string;
12
+ readonly cause?: unknown;
13
+ }> {
14
+ }
15
+ interface RetentionMillisCutoff {
16
+ readonly retentionMillis: number;
17
+ }
18
+ interface OccurredAtCutoff {
19
+ readonly beforeOccurredAt: UnixMillis;
20
+ }
21
+ interface UpdatedAtCutoff {
22
+ readonly beforeUpdatedAt: UnixMillis;
23
+ }
24
+ type OccurredAtRetentionCutoff = RetentionMillisCutoff | OccurredAtCutoff;
25
+ type UpdatedAtRetentionCutoff = RetentionMillisCutoff | UpdatedAtCutoff;
26
+ export type AuditLogRetentionCleanupInput = OccurredAtRetentionCutoff & {
27
+ readonly userId?: UserId;
28
+ };
29
+ export type SecurityTimelineRetentionCleanupInput = OccurredAtRetentionCutoff & {
30
+ readonly userId?: UserId;
31
+ };
32
+ export type LoginRiskHistoryRetentionCleanupInput = OccurredAtRetentionCutoff & {
33
+ readonly userId?: UserId;
34
+ };
35
+ export type WebhookOutboxRetentionCleanupInput = UpdatedAtRetentionCutoff & {
36
+ readonly statuses?: readonly [WebhookOutboxStatus, ...WebhookOutboxStatus[]];
37
+ readonly endpointKey?: string;
38
+ };
39
+ interface OAuthProviderModeTokenRetentionCutoffs {
40
+ readonly beforeExpiresAt?: UnixMillis;
41
+ readonly beforeRevokedAt?: UnixMillis;
42
+ readonly beforeRotatedAt?: UnixMillis;
43
+ readonly expiredRetentionMillis?: number;
44
+ readonly revokedRetentionMillis?: number;
45
+ readonly rotatedRetentionMillis?: number;
46
+ }
47
+ export type OAuthProviderModeTokenRetentionCleanupInput = (OAuthProviderModeTokenRetentionCutoffs & {
48
+ readonly beforeExpiresAt: UnixMillis;
49
+ }) | (OAuthProviderModeTokenRetentionCutoffs & {
50
+ readonly beforeRevokedAt: UnixMillis;
51
+ }) | (OAuthProviderModeTokenRetentionCutoffs & {
52
+ readonly beforeRotatedAt: UnixMillis;
53
+ }) | (OAuthProviderModeTokenRetentionCutoffs & {
54
+ readonly expiredRetentionMillis: number;
55
+ }) | (OAuthProviderModeTokenRetentionCutoffs & {
56
+ readonly revokedRetentionMillis: number;
57
+ }) | (OAuthProviderModeTokenRetentionCutoffs & {
58
+ readonly rotatedRetentionMillis: number;
59
+ });
60
+ interface OAuthConsentRetentionCutoffs {
61
+ readonly beforeExpiresAt?: UnixMillis;
62
+ readonly beforeRevokedAt?: UnixMillis;
63
+ readonly expiredRetentionMillis?: number;
64
+ readonly revokedRetentionMillis?: number;
65
+ }
66
+ export type OAuthConsentRetentionCleanupInput = (OAuthConsentRetentionCutoffs & {
67
+ readonly beforeExpiresAt: UnixMillis;
68
+ }) | (OAuthConsentRetentionCutoffs & {
69
+ readonly beforeRevokedAt: UnixMillis;
70
+ }) | (OAuthConsentRetentionCutoffs & {
71
+ readonly expiredRetentionMillis: number;
72
+ }) | (OAuthConsentRetentionCutoffs & {
73
+ readonly revokedRetentionMillis: number;
74
+ });
75
+ export interface AuthRetentionCleanupInput {
76
+ readonly now?: UnixMillis;
77
+ readonly auditLog?: AuditLogRetentionCleanupInput;
78
+ readonly securityTimeline?: SecurityTimelineRetentionCleanupInput;
79
+ readonly loginRiskHistory?: LoginRiskHistoryRetentionCleanupInput;
80
+ readonly oauthConsent?: OAuthConsentRetentionCleanupInput;
81
+ readonly oauthProviderModeToken?: OAuthProviderModeTokenRetentionCleanupInput;
82
+ readonly webhookOutbox?: WebhookOutboxRetentionCleanupInput;
83
+ readonly webhookReplay?: boolean;
84
+ }
85
+ export interface AuthRetentionCleanupResult {
86
+ readonly auditLogDeleted: number;
87
+ readonly securityTimelineDeleted: number;
88
+ readonly loginRiskHistoryDeleted: number;
89
+ readonly oauthConsentsDeleted: number;
90
+ readonly oauthProviderModeTokensDeleted: number;
91
+ readonly webhookOutboxDeleted: number;
92
+ readonly webhookReplayDeleted: number;
93
+ readonly totalDeleted: number;
94
+ }
95
+ export declare const defaultWebhookOutboxRetentionStatuses: readonly ["delivered", "failed", "dead_lettered"];
96
+ export declare const runAuthRetentionCleanup: (input?: AuthRetentionCleanupInput) => Effect.Effect<AuthRetentionCleanupResult, AuthRetentionCleanupError>;
97
+ export {};
98
+ //# sourceMappingURL=Retention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Retention.d.ts","sourceRoot":"","sources":["../src/Retention.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ import { Data, Effect, Option } from "effect";
2
+ import { AuditLogStore } from "./AuditLog.js";
3
+ import { UnixMillis } from "./Identifiers.js";
4
+ import { currentUnixMillis } from "./Internal.js";
5
+ import { LoginRiskHistory } from "./LoginRisk.js";
6
+ import { OAuthConsentStore, OAuthProviderModeTokenStore } from "./OAuth.js";
7
+ import { SecurityTimelineStore } from "./SecurityTimeline.js";
8
+ import { WebhookOutboxStore, WebhookReplayStore } from "./Webhook.js";
9
+ export class AuthRetentionCleanupError extends Data.TaggedError("AuthRetentionCleanupError") {
10
+ }
11
+ export const defaultWebhookOutboxRetentionStatuses = [
12
+ "delivered",
13
+ "failed",
14
+ "dead_lettered",
15
+ ];
16
+ const cutoffFromRetentionMillis = (now, retentionMillis) => UnixMillis(Number(now) - Math.max(0, retentionMillis));
17
+ const occurredAtCutoff = (input, now) => "beforeOccurredAt" in input
18
+ ? input.beforeOccurredAt
19
+ : cutoffFromRetentionMillis(now, input.retentionMillis);
20
+ const updatedAtCutoff = (input, now) => "beforeUpdatedAt" in input
21
+ ? input.beforeUpdatedAt
22
+ : cutoffFromRetentionMillis(now, input.retentionMillis);
23
+ const cleanupError = (operation, cause) => new AuthRetentionCleanupError({
24
+ operation,
25
+ message: `Auth retention cleanup ${operation} failed`,
26
+ cause,
27
+ });
28
+ const missingServiceError = (operation) => new AuthRetentionCleanupError({
29
+ operation,
30
+ message: `Auth retention cleanup ${operation} requires its store service`,
31
+ });
32
+ const summary = (input) => ({
33
+ ...input,
34
+ totalDeleted: input.auditLogDeleted +
35
+ input.securityTimelineDeleted +
36
+ input.loginRiskHistoryDeleted +
37
+ input.oauthConsentsDeleted +
38
+ input.oauthProviderModeTokensDeleted +
39
+ input.webhookOutboxDeleted +
40
+ input.webhookReplayDeleted,
41
+ });
42
+ const cleanupAuditLog = (input, now) => {
43
+ if (input === undefined) {
44
+ return Effect.succeed(0);
45
+ }
46
+ return Effect.gen(function* () {
47
+ const store = yield* Effect.serviceOption(AuditLogStore);
48
+ if (Option.isNone(store)) {
49
+ return yield* Effect.fail(missingServiceError("auditLog"));
50
+ }
51
+ return yield* store.value.deleteBefore({
52
+ beforeOccurredAt: occurredAtCutoff(input, now),
53
+ ...(input.userId === undefined ? {} : { userId: input.userId }),
54
+ }).pipe(Effect.mapError((cause) => cleanupError("auditLog", cause)));
55
+ });
56
+ };
57
+ const cleanupSecurityTimeline = (input, now) => {
58
+ if (input === undefined) {
59
+ return Effect.succeed(0);
60
+ }
61
+ return Effect.gen(function* () {
62
+ const store = yield* Effect.serviceOption(SecurityTimelineStore);
63
+ if (Option.isNone(store)) {
64
+ return yield* Effect.fail(missingServiceError("securityTimeline"));
65
+ }
66
+ return yield* store.value.deleteBefore({
67
+ beforeOccurredAt: occurredAtCutoff(input, now),
68
+ ...(input.userId === undefined ? {} : { userId: input.userId }),
69
+ }).pipe(Effect.mapError((cause) => cleanupError("securityTimeline", cause)));
70
+ });
71
+ };
72
+ const cleanupLoginRiskHistory = (input, now) => {
73
+ if (input === undefined) {
74
+ return Effect.succeed(0);
75
+ }
76
+ return Effect.gen(function* () {
77
+ const store = yield* Effect.serviceOption(LoginRiskHistory);
78
+ if (Option.isNone(store)) {
79
+ return yield* Effect.fail(missingServiceError("loginRiskHistory"));
80
+ }
81
+ return yield* store.value.deleteBefore({
82
+ beforeOccurredAt: occurredAtCutoff(input, now),
83
+ ...(input.userId === undefined ? {} : { userId: input.userId }),
84
+ }).pipe(Effect.mapError((cause) => cleanupError("loginRiskHistory", cause)));
85
+ });
86
+ };
87
+ const cleanupWebhookOutbox = (input, now) => {
88
+ if (input === undefined) {
89
+ return Effect.succeed(0);
90
+ }
91
+ return Effect.gen(function* () {
92
+ const store = yield* Effect.serviceOption(WebhookOutboxStore);
93
+ if (Option.isNone(store)) {
94
+ return yield* Effect.fail(missingServiceError("webhookOutbox"));
95
+ }
96
+ return yield* store.value.deleteBefore({
97
+ beforeUpdatedAt: updatedAtCutoff(input, now),
98
+ statuses: input.statuses ?? defaultWebhookOutboxRetentionStatuses,
99
+ ...(input.endpointKey === undefined ? {} : { endpointKey: input.endpointKey }),
100
+ }).pipe(Effect.mapError((cause) => cleanupError("webhookOutbox", cause)));
101
+ });
102
+ };
103
+ const oauthProviderModeTokenCutoffs = (input, now) => {
104
+ const beforeExpiresAt = input.beforeExpiresAt ??
105
+ (input.expiredRetentionMillis === undefined
106
+ ? undefined
107
+ : cutoffFromRetentionMillis(now, input.expiredRetentionMillis));
108
+ const beforeRevokedAt = input.beforeRevokedAt ??
109
+ (input.revokedRetentionMillis === undefined
110
+ ? undefined
111
+ : cutoffFromRetentionMillis(now, input.revokedRetentionMillis));
112
+ const beforeRotatedAt = input.beforeRotatedAt ??
113
+ (input.rotatedRetentionMillis === undefined
114
+ ? undefined
115
+ : cutoffFromRetentionMillis(now, input.rotatedRetentionMillis));
116
+ if (beforeExpiresAt === undefined &&
117
+ beforeRevokedAt === undefined &&
118
+ beforeRotatedAt === undefined) {
119
+ return undefined;
120
+ }
121
+ return {
122
+ ...(beforeExpiresAt === undefined ? {} : { beforeExpiresAt }),
123
+ ...(beforeRevokedAt === undefined ? {} : { beforeRevokedAt }),
124
+ ...(beforeRotatedAt === undefined ? {} : { beforeRotatedAt }),
125
+ };
126
+ };
127
+ const cleanupOAuthProviderModeToken = (input, now) => {
128
+ if (input === undefined) {
129
+ return Effect.succeed(0);
130
+ }
131
+ return Effect.gen(function* () {
132
+ const store = yield* Effect.serviceOption(OAuthProviderModeTokenStore);
133
+ if (Option.isNone(store)) {
134
+ return yield* Effect.fail(missingServiceError("oauthProviderModeToken"));
135
+ }
136
+ const cutoffs = oauthProviderModeTokenCutoffs(input, now);
137
+ if (cutoffs === undefined) {
138
+ return 0;
139
+ }
140
+ return yield* store.value.deleteRetired(cutoffs).pipe(Effect.mapError((cause) => cleanupError("oauthProviderModeToken", cause)));
141
+ });
142
+ };
143
+ const oauthConsentCutoffs = (input, now) => {
144
+ const beforeExpiresAt = input.beforeExpiresAt ??
145
+ (input.expiredRetentionMillis === undefined
146
+ ? undefined
147
+ : cutoffFromRetentionMillis(now, input.expiredRetentionMillis));
148
+ const beforeRevokedAt = input.beforeRevokedAt ??
149
+ (input.revokedRetentionMillis === undefined
150
+ ? undefined
151
+ : cutoffFromRetentionMillis(now, input.revokedRetentionMillis));
152
+ if (beforeExpiresAt === undefined && beforeRevokedAt === undefined) {
153
+ return undefined;
154
+ }
155
+ return {
156
+ ...(beforeExpiresAt === undefined ? {} : { beforeExpiresAt }),
157
+ ...(beforeRevokedAt === undefined ? {} : { beforeRevokedAt }),
158
+ };
159
+ };
160
+ const cleanupOAuthConsent = (input, now) => {
161
+ if (input === undefined) {
162
+ return Effect.succeed(0);
163
+ }
164
+ return Effect.gen(function* () {
165
+ const store = yield* Effect.serviceOption(OAuthConsentStore);
166
+ if (Option.isNone(store)) {
167
+ return yield* Effect.fail(missingServiceError("oauthConsent"));
168
+ }
169
+ const cutoffs = oauthConsentCutoffs(input, now);
170
+ if (cutoffs === undefined) {
171
+ return 0;
172
+ }
173
+ return yield* store.value.deleteInactive(cutoffs).pipe(Effect.mapError((cause) => cleanupError("oauthConsent", cause)));
174
+ });
175
+ };
176
+ const cleanupWebhookReplay = (enabled, now) => enabled === true
177
+ ? Effect.gen(function* () {
178
+ const store = yield* Effect.serviceOption(WebhookReplayStore);
179
+ if (Option.isNone(store)) {
180
+ return yield* Effect.fail(missingServiceError("webhookReplay"));
181
+ }
182
+ return yield* store.value.deleteExpired({ now }).pipe(Effect.mapError((cause) => cleanupError("webhookReplay", cause)));
183
+ })
184
+ : Effect.succeed(0);
185
+ export const runAuthRetentionCleanup = (input = {}) => Effect.gen(function* () {
186
+ const now = input.now ?? (yield* currentUnixMillis);
187
+ const auditLogDeleted = yield* cleanupAuditLog(input.auditLog, now);
188
+ const securityTimelineDeleted = yield* cleanupSecurityTimeline(input.securityTimeline, now);
189
+ const loginRiskHistoryDeleted = yield* cleanupLoginRiskHistory(input.loginRiskHistory, now);
190
+ const oauthConsentsDeleted = yield* cleanupOAuthConsent(input.oauthConsent, now);
191
+ const oauthProviderModeTokensDeleted = yield* cleanupOAuthProviderModeToken(input.oauthProviderModeToken, now);
192
+ const webhookOutboxDeleted = yield* cleanupWebhookOutbox(input.webhookOutbox, now);
193
+ const webhookReplayDeleted = yield* cleanupWebhookReplay(input.webhookReplay, now);
194
+ return summary({
195
+ auditLogDeleted,
196
+ securityTimelineDeleted,
197
+ loginRiskHistoryDeleted,
198
+ oauthConsentsDeleted,
199
+ oauthProviderModeTokensDeleted,
200
+ webhookOutboxDeleted,
201
+ webhookReplayDeleted,
202
+ });
203
+ });
204
+ //# sourceMappingURL=Retention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Retention.js","sourceRoot":"","sources":["../src/Retention.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { Brand, Context, Effect, Layer } from "effect";
2
+ import type * as OptionTypes from "effect/Option";
3
+ import { AuditLog } from "./AuditLog.js";
4
+ import type { AuditActor, AuditLogService, AuditRequest, AuthAuditEvent } from "./AuditLog.js";
5
+ import type { UnixMillis, UserId } from "./Identifiers.js";
6
+ export type SecurityTimelineEventId = Brand.Branded<string, "auth/SecurityTimelineEventId">;
7
+ export declare const SecurityTimelineEventId: Brand.Constructor<SecurityTimelineEventId>;
8
+ export type SecurityTimelineEventType = AuthAuditEvent["type"];
9
+ export type SecurityTimelineEventCategory = "api_key" | "auth" | "incident" | "jwt" | "mfa" | "oauth" | "policy" | "refresh_token" | "risk" | "session";
10
+ export type SecurityTimelineEventSeverity = "info" | "warning" | "critical";
11
+ export interface SecurityTimelineEvent {
12
+ readonly id: SecurityTimelineEventId;
13
+ readonly userId: UserId;
14
+ readonly type: SecurityTimelineEventType;
15
+ readonly category: SecurityTimelineEventCategory;
16
+ readonly severity: SecurityTimelineEventSeverity;
17
+ readonly occurredAt: UnixMillis;
18
+ readonly summary: string;
19
+ readonly actor?: AuditActor;
20
+ readonly request?: AuditRequest;
21
+ readonly metadata?: Readonly<Record<string, unknown>>;
22
+ }
23
+ export interface SecurityTimelineListByUserInput {
24
+ readonly userId: UserId;
25
+ readonly limit?: number;
26
+ readonly beforeOccurredAt?: UnixMillis;
27
+ readonly types?: readonly SecurityTimelineEventType[];
28
+ readonly categories?: readonly SecurityTimelineEventCategory[];
29
+ }
30
+ export interface SecurityTimelineDeleteBeforeInput {
31
+ readonly beforeOccurredAt: UnixMillis;
32
+ readonly userId?: UserId;
33
+ }
34
+ export type SecurityTimelineStoreOperation = "insert" | "list" | "deleteBefore";
35
+ declare const SecurityTimelineStoreError_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 & {
36
+ readonly _tag: "SecurityTimelineStoreError";
37
+ } & Readonly<A>;
38
+ export declare class SecurityTimelineStoreError extends SecurityTimelineStoreError_base<{
39
+ readonly operation: SecurityTimelineStoreOperation;
40
+ readonly message: string;
41
+ readonly cause?: unknown;
42
+ }> {
43
+ }
44
+ export interface SecurityTimelineStoreService {
45
+ readonly insert: (event: SecurityTimelineEvent) => Effect.Effect<void, SecurityTimelineStoreError>;
46
+ readonly listByUser: (input: SecurityTimelineListByUserInput) => Effect.Effect<readonly SecurityTimelineEvent[], SecurityTimelineStoreError>;
47
+ readonly deleteBefore: (input: SecurityTimelineDeleteBeforeInput) => Effect.Effect<number, SecurityTimelineStoreError>;
48
+ }
49
+ declare const SecurityTimelineStore_base: Context.ServiceClass<SecurityTimelineStore, "auth/SecurityTimelineStore", SecurityTimelineStoreService>;
50
+ export declare class SecurityTimelineStore extends SecurityTimelineStore_base {
51
+ }
52
+ export declare namespace SecurityTimelineStore {
53
+ const make: (service: SecurityTimelineStoreService) => SecurityTimelineStoreService;
54
+ }
55
+ export interface SecurityTimelineAuditProjectionOptions {
56
+ readonly id?: SecurityTimelineEventId;
57
+ }
58
+ export type SecurityTimelineAuditProjectionFailure = "ignore" | "fail";
59
+ export interface SecurityTimelineAuditLogOptions {
60
+ readonly timelineEventId?: (event: AuthAuditEvent) => SecurityTimelineEventId | undefined;
61
+ readonly projectionFailure?: SecurityTimelineAuditProjectionFailure;
62
+ }
63
+ export declare const securityTimelineEventFromAuditEvent: (event: AuthAuditEvent, options?: SecurityTimelineAuditProjectionOptions) => OptionTypes.Option<SecurityTimelineEvent>;
64
+ export declare const insert: (event: SecurityTimelineEvent) => Effect.Effect<void, SecurityTimelineStoreError, SecurityTimelineStore>;
65
+ export declare const listByUser: (input: SecurityTimelineListByUserInput) => Effect.Effect<readonly SecurityTimelineEvent[], SecurityTimelineStoreError, SecurityTimelineStore>;
66
+ export declare const deleteBefore: (input: SecurityTimelineDeleteBeforeInput) => Effect.Effect<number, SecurityTimelineStoreError, SecurityTimelineStore>;
67
+ export declare const recordAuditEvent: (event: AuthAuditEvent, options?: SecurityTimelineAuditProjectionOptions) => Effect.Effect<OptionTypes.Option<SecurityTimelineEvent>, SecurityTimelineStoreError, SecurityTimelineStore>;
68
+ export declare const makeSecurityTimelineAuditLog: (dependencies: {
69
+ readonly auditLog: AuditLogService;
70
+ readonly securityTimeline: SecurityTimelineStoreService;
71
+ readonly options?: SecurityTimelineAuditLogOptions;
72
+ }) => AuditLogService;
73
+ export declare const SecurityTimelineAuditLogLive: (options?: SecurityTimelineAuditLogOptions) => Layer.Layer<AuditLog, never, AuditLog | SecurityTimelineStore>;
74
+ export declare const filterSecurityTimelineEvents: (events: Iterable<SecurityTimelineEvent>, input: SecurityTimelineListByUserInput) => readonly SecurityTimelineEvent[];
75
+ export declare const makeSecurityTimelineStoreMemory: () => SecurityTimelineStoreService;
76
+ export declare const SecurityTimelineStoreMemoryLive: Layer.Layer<SecurityTimelineStore, never, never>;
77
+ export {};
78
+ //# sourceMappingURL=SecurityTimeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityTimeline.d.ts","sourceRoot":"","sources":["../src/SecurityTimeline.ts"],"names":[],"mappings":"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"}