@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
package/dist/index.js CHANGED
@@ -1,12 +1,37 @@
1
1
  export const packageName = "@effect-auth/core";
2
+ export * from "./ApiKey.js";
2
3
  export * from "./AuditLog.js";
4
+ export * from "./AuthConfig.js";
3
5
  export * from "./AuthFlow.js";
6
+ export * from "./AuthKernel.js";
4
7
  export * from "./Challenge.js";
5
8
  export * from "./Crypto.js";
9
+ export * from "./DomainVerification.js";
10
+ export * from "./EmailOtp.js";
11
+ export * from "./EmailVerification.js";
6
12
  export * from "./Identifiers.js";
13
+ export * from "./IncidentAction.js";
14
+ export * from "./Jwt.js";
15
+ export * from "./LoginApproval.js";
16
+ export * from "./LoginNotification.js";
17
+ export * from "./LoginRisk.js";
18
+ export * from "./MachineAuth.js";
19
+ export * from "./Mailer.js";
20
+ export * from "./MagicLink.js";
21
+ export * from "./OAuth.js";
22
+ export * from "./Password.js";
23
+ export * from "./Passkey.js";
7
24
  export * from "./Policy.js";
8
25
  export * from "./Privacy.js";
26
+ export * from "./RecoveryCode.js";
27
+ export * from "./RefreshToken.js";
28
+ export * from "./Retention.js";
9
29
  export * from "./Sessions.js";
30
+ export * from "./SecurityTimeline.js";
10
31
  export * from "./Storage.js";
32
+ export * from "./StepUp.js";
33
+ export * from "./Totp.js";
34
+ export * from "./TrustedDevice.js";
11
35
  export * from "./WaitUntil.js";
36
+ export * from "./Webhook.js";
12
37
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,mBAA4B,CAAA;AAEvD,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,mBAA4B,CAAC;AAExD,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { Effect, Layer } from "effect";
2
+ import { RateLimiter as PersistenceRateLimiter } from "effect/unstable/persistence";
3
+ export interface RateLimitDurableObjectFixedWindowInput {
4
+ readonly tokens: number;
5
+ readonly refillMillis: number;
6
+ readonly limit: number | undefined;
7
+ }
8
+ export interface RateLimitDurableObjectTokenBucketInput {
9
+ readonly tokens: number;
10
+ readonly limit: number;
11
+ readonly refillMillis: number;
12
+ readonly allowOverflow: boolean;
13
+ }
14
+ export interface RateLimitDurableObjectStorage {
15
+ readonly get: <T = unknown>(key: string) => Effect.Effect<T | undefined, unknown>;
16
+ readonly put: <T>(key: string, value: T) => Effect.Effect<void, unknown>;
17
+ readonly transaction: <A>(body: (transaction: RateLimitDurableObjectStorage) => Effect.Effect<A, unknown>) => Effect.Effect<A, unknown>;
18
+ }
19
+ export interface RateLimitDurableObjectApi {
20
+ readonly fixedWindow: (input: RateLimitDurableObjectFixedWindowInput) => Effect.Effect<readonly [count: number, ttl: number], unknown>;
21
+ readonly tokenBucket: (input: RateLimitDurableObjectTokenBucketInput) => Effect.Effect<number, unknown>;
22
+ }
23
+ export interface RateLimitDurableObjectNamespace {
24
+ readonly getByName: (name: string) => RateLimitDurableObjectApi;
25
+ }
26
+ export interface RateLimitDurableObjectStoreOptions {
27
+ readonly namespace: RateLimitDurableObjectNamespace;
28
+ readonly prefix?: string;
29
+ }
30
+ export declare const makeRateLimitDurableObjectApi: (storage: RateLimitDurableObjectStorage) => RateLimitDurableObjectApi;
31
+ export declare const makeRateLimitDurableObjectStoreLayer: (options: RateLimitDurableObjectStoreOptions) => Layer.Layer<PersistenceRateLimiter.RateLimiterStore>;
32
+ //# sourceMappingURL=RateLimitDurableObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimitDurableObject.d.ts","sourceRoot":"","sources":["../../src/internal/RateLimitDurableObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,WAAW,IAAI,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAEpF,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,EACxB,GAAG,EAAE,MAAM,KACR,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EACtB,IAAI,EAAE,CACJ,WAAW,EAAE,6BAA6B,KACvC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,WAAW,EAAE,CACpB,KAAK,EAAE,sCAAsC,KAC1C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACnE,QAAQ,CAAC,WAAW,EAAE,CACpB,KAAK,EAAE,sCAAsC,KAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,yBAAyB,CAAC;CACjE;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,SAAS,EAAE,+BAA+B,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA4BD,eAAO,MAAM,6BAA6B,GACxC,SAAS,6BAA6B,KACrC,yBA+DD,CAAC;AAEH,eAAO,MAAM,oCAAoC,GAC/C,SAAS,kCAAkC,KAC1C,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,gBAAgB,CA2BrD,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { Clock, Duration, Effect, Layer } from "effect";
2
+ import { RateLimiter as PersistenceRateLimiter } from "effect/unstable/persistence";
3
+ const fixedWindowKey = "fixed-window";
4
+ const tokenBucketKey = "token-bucket";
5
+ const nonZeroMillis = (millis) => Math.max(1, millis);
6
+ const storeError = (operation, cause) => new PersistenceRateLimiter.RateLimiterError({
7
+ reason: new PersistenceRateLimiter.RateLimitStoreError({
8
+ message: `Cloudflare Durable Object rate limit store failed during ${operation}`,
9
+ cause,
10
+ }),
11
+ });
12
+ export const makeRateLimitDurableObjectApi = (storage) => ({
13
+ fixedWindow: (input) => storage.transaction((transaction) => Effect.gen(function* () {
14
+ const now = yield* Clock.currentTimeMillis;
15
+ const refillMillis = nonZeroMillis(input.refillMillis);
16
+ let counter = yield* transaction.get(fixedWindowKey);
17
+ if (!counter || counter.expiresAt <= now) {
18
+ counter = { count: 0, expiresAt: now };
19
+ }
20
+ const nextCount = counter.count + input.tokens;
21
+ const currentTtl = Math.max(0, counter.expiresAt - now);
22
+ if (input.limit !== undefined && nextCount > input.limit) {
23
+ return [nextCount, currentTtl];
24
+ }
25
+ const next = {
26
+ count: nextCount,
27
+ expiresAt: counter.expiresAt + refillMillis * input.tokens,
28
+ };
29
+ yield* transaction.put(fixedWindowKey, next);
30
+ return [next.count, Math.max(0, next.expiresAt - now)];
31
+ })),
32
+ tokenBucket: (input) => storage.transaction((transaction) => Effect.gen(function* () {
33
+ const now = yield* Clock.currentTimeMillis;
34
+ const refillMillis = nonZeroMillis(input.refillMillis);
35
+ let bucket = yield* transaction.get(tokenBucketKey);
36
+ if (!bucket) {
37
+ bucket = { tokens: input.limit, lastRefill: now };
38
+ }
39
+ else {
40
+ const elapsed = now - bucket.lastRefill;
41
+ const tokensToAdd = Math.floor(elapsed / refillMillis);
42
+ if (tokensToAdd > 0) {
43
+ bucket = {
44
+ tokens: Math.min(input.limit, bucket.tokens + tokensToAdd),
45
+ lastRefill: bucket.lastRefill + tokensToAdd * refillMillis,
46
+ };
47
+ }
48
+ }
49
+ const remaining = bucket.tokens - input.tokens;
50
+ if (input.allowOverflow || remaining >= 0) {
51
+ yield* transaction.put(tokenBucketKey, {
52
+ tokens: remaining,
53
+ lastRefill: bucket.lastRefill,
54
+ });
55
+ }
56
+ return remaining;
57
+ })),
58
+ });
59
+ export const makeRateLimitDurableObjectStoreLayer = (options) => {
60
+ const prefix = options.prefix ?? "effect-auth:rate-limit:";
61
+ const object = (key) => options.namespace.getByName(`${prefix}${key}`);
62
+ return Layer.sync(PersistenceRateLimiter.RateLimiterStore, () => PersistenceRateLimiter.RateLimiterStore.of({
63
+ fixedWindow: (input) => object(input.key)
64
+ .fixedWindow({
65
+ tokens: input.tokens,
66
+ refillMillis: Duration.toMillis(input.refillRate),
67
+ limit: input.limit,
68
+ })
69
+ .pipe(Effect.mapError((cause) => storeError("fixedWindow", cause))),
70
+ tokenBucket: (input) => object(input.key)
71
+ .tokenBucket({
72
+ tokens: input.tokens,
73
+ limit: input.limit,
74
+ refillMillis: Duration.toMillis(input.refillRate),
75
+ allowOverflow: input.allowOverflow,
76
+ })
77
+ .pipe(Effect.mapError((cause) => storeError("tokenBucket", cause))),
78
+ }));
79
+ };
80
+ //# sourceMappingURL=RateLimitDurableObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimitDurableObject.js","sourceRoot":"","sources":["../../src/internal/RateLimitDurableObject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ create table if not exists auth_user (
2
+ id text primary key,
3
+ email text not null,
4
+ email_verified integer not null,
5
+ created_at integer not null,
6
+ updated_at integer not null,
7
+ disabled_at integer,
8
+ metadata text
9
+ );
10
+
11
+ create unique index if not exists auth_user_email_idx on auth_user (email);
12
+
13
+ create table if not exists auth_credential (
14
+ id text primary key,
15
+ user_id text not null,
16
+ type text not null,
17
+ password_hash text,
18
+ created_at integer not null,
19
+ updated_at integer not null,
20
+ revoked_at integer,
21
+ metadata text
22
+ );
23
+
24
+ create index if not exists auth_credential_user_id_idx on auth_credential (user_id);
25
+ create unique index if not exists auth_credential_user_type_idx on auth_credential (user_id, type);
@@ -0,0 +1,22 @@
1
+ create table if not exists auth_login_approval_review (
2
+ approval_challenge_id text primary key,
3
+ flow_id text not null,
4
+ user_id text not null,
5
+ channel text not null,
6
+ reason text not null,
7
+ session_binding text not null,
8
+ same_device_required integer not null,
9
+ status text not null,
10
+ created_at integer not null,
11
+ expires_at integer not null,
12
+ reviewed_at integer,
13
+ reviewed_by text,
14
+ denied_reason text,
15
+ risk text,
16
+ metadata text,
17
+ review_metadata text
18
+ );
19
+
20
+ create index if not exists auth_login_approval_review_flow_id_idx on auth_login_approval_review (flow_id);
21
+ create index if not exists auth_login_approval_review_user_id_idx on auth_login_approval_review (user_id);
22
+ create index if not exists auth_login_approval_review_status_expires_at_idx on auth_login_approval_review (status, expires_at);
@@ -0,0 +1,12 @@
1
+ create table if not exists auth_trusted_device (
2
+ user_id text not null,
3
+ token_hash text not null,
4
+ created_at integer not null,
5
+ last_seen_at integer not null,
6
+ expires_at integer not null,
7
+ metadata text,
8
+ primary key (user_id, token_hash)
9
+ );
10
+
11
+ create index if not exists auth_trusted_device_user_id_idx on auth_trusted_device (user_id);
12
+ create index if not exists auth_trusted_device_expires_at_idx on auth_trusted_device (expires_at);
@@ -0,0 +1,17 @@
1
+ create table if not exists auth_passkey_credential (
2
+ id text primary key,
3
+ user_id text not null,
4
+ credential_id text not null,
5
+ public_key text not null,
6
+ sign_count integer not null,
7
+ transports text,
8
+ backed_up integer,
9
+ created_at integer not null,
10
+ last_used_at integer,
11
+ revoked_at integer,
12
+ metadata text
13
+ );
14
+
15
+ create unique index if not exists auth_passkey_credential_credential_id_idx on auth_passkey_credential (credential_id);
16
+ create index if not exists auth_passkey_credential_user_id_idx on auth_passkey_credential (user_id);
17
+ create index if not exists auth_passkey_credential_revoked_at_idx on auth_passkey_credential (revoked_at);
@@ -0,0 +1,17 @@
1
+ create table if not exists auth_totp_factor (
2
+ id text primary key,
3
+ user_id text not null,
4
+ secret text not null,
5
+ algorithm text not null,
6
+ digits integer not null,
7
+ period integer not null,
8
+ created_at integer not null,
9
+ confirmed_at integer,
10
+ last_used_at integer,
11
+ revoked_at integer,
12
+ metadata text
13
+ );
14
+
15
+ create index if not exists auth_totp_factor_user_id_idx on auth_totp_factor (user_id);
16
+ create index if not exists auth_totp_factor_confirmed_at_idx on auth_totp_factor (confirmed_at);
17
+ create index if not exists auth_totp_factor_revoked_at_idx on auth_totp_factor (revoked_at);
@@ -0,0 +1,13 @@
1
+ create table if not exists auth_recovery_code (
2
+ id text primary key,
3
+ user_id text not null,
4
+ code_hash text not null,
5
+ created_at integer not null,
6
+ used_at integer,
7
+ revoked_at integer,
8
+ metadata text
9
+ );
10
+
11
+ create index if not exists auth_recovery_code_user_id_idx on auth_recovery_code (user_id);
12
+ create index if not exists auth_recovery_code_used_at_idx on auth_recovery_code (used_at);
13
+ create index if not exists auth_recovery_code_revoked_at_idx on auth_recovery_code (revoked_at);
@@ -0,0 +1,17 @@
1
+ create table if not exists auth_api_key (
2
+ id text primary key,
3
+ user_id text not null,
4
+ prefix text not null,
5
+ secret_hash text not null,
6
+ scopes text not null,
7
+ created_at integer not null,
8
+ expires_at integer,
9
+ last_used_at integer,
10
+ revoked_at integer,
11
+ metadata text
12
+ );
13
+
14
+ create unique index if not exists auth_api_key_prefix_idx on auth_api_key (prefix);
15
+ create index if not exists auth_api_key_user_id_idx on auth_api_key (user_id);
16
+ create index if not exists auth_api_key_expires_at_idx on auth_api_key (expires_at);
17
+ create index if not exists auth_api_key_revoked_at_idx on auth_api_key (revoked_at);
@@ -0,0 +1,21 @@
1
+ create table if not exists auth_refresh_token (
2
+ id text primary key,
3
+ family_id text not null,
4
+ user_id text not null,
5
+ secret_hash text not null,
6
+ created_at integer not null,
7
+ expires_at integer not null,
8
+ last_used_at integer,
9
+ rotated_at integer,
10
+ replaced_by_id text,
11
+ revoked_at integer,
12
+ reuse_detected_at integer,
13
+ metadata text
14
+ );
15
+
16
+ create unique index if not exists auth_refresh_token_secret_hash_idx on auth_refresh_token (secret_hash);
17
+ create index if not exists auth_refresh_token_family_id_idx on auth_refresh_token (family_id);
18
+ create index if not exists auth_refresh_token_user_id_idx on auth_refresh_token (user_id);
19
+ create index if not exists auth_refresh_token_expires_at_idx on auth_refresh_token (expires_at);
20
+ create index if not exists auth_refresh_token_rotated_at_idx on auth_refresh_token (rotated_at);
21
+ create index if not exists auth_refresh_token_revoked_at_idx on auth_refresh_token (revoked_at);
@@ -0,0 +1,8 @@
1
+ create table if not exists auth_jwt_revocation (
2
+ jwt_id text primary key,
3
+ revoked_at integer not null,
4
+ expires_at integer,
5
+ reason text
6
+ );
7
+
8
+ create index if not exists auth_jwt_revocation_expires_at_idx on auth_jwt_revocation (expires_at);
@@ -0,0 +1,16 @@
1
+ create table if not exists auth_oauth_account (
2
+ id text primary key,
3
+ provider_id text not null,
4
+ provider_account_id text not null,
5
+ user_id text not null,
6
+ email text,
7
+ email_verified integer,
8
+ created_at integer not null,
9
+ updated_at integer not null,
10
+ unlinked_at integer,
11
+ metadata text
12
+ );
13
+
14
+ create unique index if not exists auth_oauth_account_provider_account_idx on auth_oauth_account (provider_id, provider_account_id);
15
+ create index if not exists auth_oauth_account_user_id_idx on auth_oauth_account (user_id);
16
+ create index if not exists auth_oauth_account_unlinked_at_idx on auth_oauth_account (unlinked_at);
@@ -0,0 +1,20 @@
1
+ create table if not exists auth_oauth_provider_token_vault (
2
+ account_id text primary key,
3
+ user_id text not null,
4
+ provider_id text not null,
5
+ provider_account_id text not null,
6
+ access_token_ciphertext text not null,
7
+ refresh_token_ciphertext text,
8
+ id_token_ciphertext text,
9
+ token_type text not null,
10
+ scopes text,
11
+ expires_at integer,
12
+ updated_at integer not null,
13
+ revoked_at integer,
14
+ revocation_reason text
15
+ );
16
+
17
+ create index if not exists auth_oauth_provider_token_vault_user_id_idx on auth_oauth_provider_token_vault (user_id);
18
+ create index if not exists auth_oauth_provider_token_vault_provider_account_idx on auth_oauth_provider_token_vault (provider_id, provider_account_id);
19
+ create index if not exists auth_oauth_provider_token_vault_expires_at_idx on auth_oauth_provider_token_vault (expires_at);
20
+ create index if not exists auth_oauth_provider_token_vault_revoked_at_idx on auth_oauth_provider_token_vault (revoked_at);
@@ -0,0 +1,16 @@
1
+ create table if not exists auth_security_timeline (
2
+ id text primary key,
3
+ user_id text not null,
4
+ type text not null,
5
+ category text not null,
6
+ severity text not null,
7
+ occurred_at integer not null,
8
+ summary text not null,
9
+ actor text,
10
+ request text,
11
+ metadata text
12
+ );
13
+
14
+ create index if not exists auth_security_timeline_user_occurred_at_idx on auth_security_timeline (user_id, occurred_at);
15
+ create index if not exists auth_security_timeline_type_idx on auth_security_timeline (type);
16
+ create index if not exists auth_security_timeline_category_idx on auth_security_timeline (category);
@@ -0,0 +1,16 @@
1
+ create table if not exists auth_webhook_outbox (
2
+ id text primary key,
3
+ endpoint_key text not null,
4
+ event text not null,
5
+ status text not null,
6
+ attempts integer not null,
7
+ next_attempt_at integer not null,
8
+ created_at integer not null,
9
+ updated_at integer not null,
10
+ delivered_at integer,
11
+ last_error text
12
+ );
13
+
14
+ create index if not exists auth_webhook_outbox_due_idx on auth_webhook_outbox (next_attempt_at, status);
15
+ create index if not exists auth_webhook_outbox_endpoint_due_idx on auth_webhook_outbox (endpoint_key, next_attempt_at);
16
+ create index if not exists auth_webhook_outbox_status_idx on auth_webhook_outbox (status);
@@ -0,0 +1,7 @@
1
+ create table if not exists auth_webhook_replay (
2
+ id text primary key,
3
+ expires_at integer not null,
4
+ created_at integer not null
5
+ );
6
+
7
+ create index if not exists auth_webhook_replay_expires_at_idx on auth_webhook_replay (expires_at);
@@ -0,0 +1,23 @@
1
+ create table if not exists auth_login_risk_history (
2
+ id text primary key,
3
+ user_id text not null,
4
+ occurred_at integer not null,
5
+ outcome text not null,
6
+ method text not null,
7
+ amr text not null,
8
+ aal text not null,
9
+ device_status text not null,
10
+ device_key text,
11
+ location_key text,
12
+ country text,
13
+ region text,
14
+ latitude_micro integer,
15
+ longitude_micro integer,
16
+ risk_level text,
17
+ created_at integer not null
18
+ );
19
+
20
+ create index if not exists auth_login_risk_history_user_occurred_at_idx on auth_login_risk_history (user_id, occurred_at);
21
+ create index if not exists auth_login_risk_history_user_device_key_idx on auth_login_risk_history (user_id, device_key);
22
+ create index if not exists auth_login_risk_history_user_location_key_idx on auth_login_risk_history (user_id, location_key);
23
+ create index if not exists auth_login_risk_history_occurred_at_idx on auth_login_risk_history (occurred_at);
@@ -0,0 +1,17 @@
1
+ create table if not exists auth_audit_log (
2
+ id text,
3
+ type text not null,
4
+ user_id text,
5
+ actor_user_id text,
6
+ occurred_at integer not null,
7
+ request_ip_hash text,
8
+ request_user_agent_hash text,
9
+ event text not null,
10
+ created_at integer not null
11
+ );
12
+
13
+ create index if not exists auth_audit_log_id_idx on auth_audit_log (id);
14
+ create index if not exists auth_audit_log_user_occurred_at_idx on auth_audit_log (user_id, occurred_at);
15
+ create index if not exists auth_audit_log_actor_user_occurred_at_idx on auth_audit_log (actor_user_id, occurred_at);
16
+ create index if not exists auth_audit_log_type_occurred_at_idx on auth_audit_log (type, occurred_at);
17
+ create index if not exists auth_audit_log_occurred_at_idx on auth_audit_log (occurred_at);
@@ -0,0 +1,18 @@
1
+ create table if not exists auth_domain_verification (
2
+ id text primary key,
3
+ owner_id text not null,
4
+ domain text not null,
5
+ proof_method text not null,
6
+ proof_token text not null,
7
+ status text not null,
8
+ created_at integer not null,
9
+ expires_at integer not null,
10
+ verified_at integer,
11
+ revoked_at integer,
12
+ last_checked_at integer,
13
+ metadata text
14
+ );
15
+
16
+ create unique index if not exists auth_domain_verification_owner_domain_idx on auth_domain_verification (owner_id, domain);
17
+ create index if not exists auth_domain_verification_domain_idx on auth_domain_verification (domain);
18
+ create index if not exists auth_domain_verification_status_expires_at_idx on auth_domain_verification (status, expires_at);
@@ -0,0 +1,17 @@
1
+ create table if not exists auth_oauth_authorization_code (
2
+ code_hash text primary key,
3
+ client_id text not null,
4
+ subject text not null,
5
+ redirect_uri text not null,
6
+ scopes text not null,
7
+ code_challenge text,
8
+ code_challenge_method text,
9
+ issued_at integer not null,
10
+ expires_at integer not null,
11
+ consumed_at integer,
12
+ metadata text
13
+ );
14
+
15
+ create index if not exists auth_oauth_authorization_code_client_expires_at_idx on auth_oauth_authorization_code (client_id, expires_at);
16
+ create index if not exists auth_oauth_authorization_code_expires_at_idx on auth_oauth_authorization_code (expires_at);
17
+ create index if not exists auth_oauth_authorization_code_consumed_at_idx on auth_oauth_authorization_code (consumed_at);
@@ -0,0 +1,24 @@
1
+ create table if not exists auth_oauth_provider_mode_token (
2
+ token_hash text primary key,
3
+ token_type text not null,
4
+ client_id text not null,
5
+ subject text not null,
6
+ scopes text not null,
7
+ issued_at integer not null,
8
+ expires_at integer not null,
9
+ issuer text,
10
+ audience text,
11
+ jwt_id text,
12
+ revoked_at integer,
13
+ revocation_reason text,
14
+ rotated_at integer,
15
+ replaced_by_token_hash text,
16
+ metadata text
17
+ );
18
+
19
+ create index if not exists auth_oauth_provider_mode_token_client_expires_at_idx on auth_oauth_provider_mode_token (client_id, expires_at);
20
+ create index if not exists auth_oauth_provider_mode_token_subject_idx on auth_oauth_provider_mode_token (subject);
21
+ create index if not exists auth_oauth_provider_mode_token_expires_at_idx on auth_oauth_provider_mode_token (expires_at);
22
+ create index if not exists auth_oauth_provider_mode_token_revoked_at_idx on auth_oauth_provider_mode_token (revoked_at);
23
+ create index if not exists auth_oauth_provider_mode_token_rotated_at_idx on auth_oauth_provider_mode_token (rotated_at);
24
+ create index if not exists auth_oauth_provider_mode_token_jwt_id_idx on auth_oauth_provider_mode_token (jwt_id);
@@ -0,0 +1,14 @@
1
+ create table if not exists auth_oauth_client_secret (
2
+ prefix text primary key,
3
+ client_id text not null,
4
+ secret_hash text not null,
5
+ authentication_methods text not null,
6
+ created_at integer not null,
7
+ expires_at integer,
8
+ last_used_at integer,
9
+ revoked_at integer,
10
+ metadata text
11
+ );
12
+
13
+ create index if not exists auth_oauth_client_secret_client_prefix_idx on auth_oauth_client_secret (client_id, prefix);
14
+ create index if not exists auth_oauth_client_secret_client_id_idx on auth_oauth_client_secret (client_id);
@@ -0,0 +1,15 @@
1
+ create table if not exists auth_oauth_client (
2
+ id text primary key,
3
+ type text not null,
4
+ status text not null,
5
+ name text,
6
+ redirect_uris text not null,
7
+ allowed_grant_types text not null,
8
+ allowed_response_types text not null,
9
+ allowed_scopes text,
10
+ created_at integer,
11
+ updated_at integer,
12
+ metadata text
13
+ );
14
+
15
+ create index if not exists auth_oauth_client_status_idx on auth_oauth_client (status);
@@ -0,0 +1,15 @@
1
+ create table if not exists auth_oauth_consent (
2
+ id text primary key,
3
+ user_id text not null,
4
+ client_id text not null,
5
+ scopes text not null,
6
+ granted_at integer not null,
7
+ expires_at integer,
8
+ revoked_at integer,
9
+ metadata text
10
+ );
11
+
12
+ create unique index if not exists auth_oauth_consent_user_client_idx on auth_oauth_consent (user_id, client_id);
13
+ create index if not exists auth_oauth_consent_user_id_idx on auth_oauth_consent (user_id);
14
+ create index if not exists auth_oauth_consent_expires_at_idx on auth_oauth_consent (expires_at);
15
+ create index if not exists auth_oauth_consent_revoked_at_idx on auth_oauth_consent (revoked_at);