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

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 (222) hide show
  1. package/README.md +774 -36
  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 +278 -1
  7. package/dist/AuditLog.d.ts.map +1 -1
  8. package/dist/AuditLog.js +217 -2
  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 +465 -36
  15. package/dist/AuthFlow.d.ts.map +1 -1
  16. package/dist/AuthFlow.js +660 -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 +27 -4
  23. package/dist/Challenge.d.ts.map +1 -1
  24. package/dist/Challenge.js +170 -1
  25. package/dist/Challenge.js.map +1 -1
  26. package/dist/Client.d.ts +378 -0
  27. package/dist/Client.d.ts.map +1 -0
  28. package/dist/Client.js +768 -0
  29. package/dist/Client.js.map +1 -0
  30. package/dist/Crypto.d.ts +9 -1
  31. package/dist/Crypto.d.ts.map +1 -1
  32. package/dist/Crypto.js +65 -1
  33. package/dist/Crypto.js.map +1 -1
  34. package/dist/EffectQbSqliteStorage.d.ts +600 -0
  35. package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
  36. package/dist/EffectQbSqliteStorage.js +1637 -0
  37. package/dist/EffectQbSqliteStorage.js.map +1 -0
  38. package/dist/EmailOtp.d.ts +120 -0
  39. package/dist/EmailOtp.d.ts.map +1 -0
  40. package/dist/EmailOtp.js +286 -0
  41. package/dist/EmailOtp.js.map +1 -0
  42. package/dist/EmailVerification.d.ts +121 -0
  43. package/dist/EmailVerification.d.ts.map +1 -0
  44. package/dist/EmailVerification.js +200 -0
  45. package/dist/EmailVerification.js.map +1 -0
  46. package/dist/HttpApi/Api.d.ts +1956 -0
  47. package/dist/HttpApi/Api.d.ts.map +1 -0
  48. package/dist/HttpApi/Api.js +2325 -0
  49. package/dist/HttpApi/Api.js.map +1 -0
  50. package/dist/HttpApi/Endpoints.d.ts +945 -0
  51. package/dist/HttpApi/Endpoints.d.ts.map +1 -0
  52. package/dist/HttpApi/Endpoints.js +373 -0
  53. package/dist/HttpApi/Endpoints.js.map +1 -0
  54. package/dist/HttpApi/Errors.d.ts +82 -0
  55. package/dist/HttpApi/Errors.d.ts.map +1 -0
  56. package/dist/HttpApi/Errors.js +184 -0
  57. package/dist/HttpApi/Errors.js.map +1 -0
  58. package/dist/HttpApi/Schemas.d.ts +1113 -0
  59. package/dist/HttpApi/Schemas.d.ts.map +1 -0
  60. package/dist/HttpApi/Schemas.js +734 -0
  61. package/dist/HttpApi/Schemas.js.map +1 -0
  62. package/dist/HttpApi/Security.d.ts +159 -0
  63. package/dist/HttpApi/Security.d.ts.map +1 -0
  64. package/dist/HttpApi/Security.js +530 -0
  65. package/dist/HttpApi/Security.js.map +1 -0
  66. package/dist/HttpApi/Transport.d.ts +65 -0
  67. package/dist/HttpApi/Transport.d.ts.map +1 -0
  68. package/dist/HttpApi/Transport.js +311 -0
  69. package/dist/HttpApi/Transport.js.map +1 -0
  70. package/dist/HttpApi/index.d.ts +8 -0
  71. package/dist/HttpApi/index.d.ts.map +1 -0
  72. package/dist/HttpApi/index.js +7 -0
  73. package/dist/HttpApi/index.js.map +1 -0
  74. package/dist/HttpApi.d.ts +2 -0
  75. package/dist/HttpApi.d.ts.map +1 -0
  76. package/dist/HttpApi.js +2 -0
  77. package/dist/HttpApi.js.map +1 -0
  78. package/dist/Identifiers.d.ts.map +1 -1
  79. package/dist/Identifiers.js.map +1 -1
  80. package/dist/Internal.d.ts +7 -0
  81. package/dist/Internal.d.ts.map +1 -0
  82. package/dist/Internal.js +12 -0
  83. package/dist/Internal.js.map +1 -0
  84. package/dist/Jwt.d.ts +271 -0
  85. package/dist/Jwt.d.ts.map +1 -0
  86. package/dist/Jwt.js +512 -0
  87. package/dist/Jwt.js.map +1 -0
  88. package/dist/LoginApproval.d.ts +314 -0
  89. package/dist/LoginApproval.d.ts.map +1 -0
  90. package/dist/LoginApproval.js +551 -0
  91. package/dist/LoginApproval.js.map +1 -0
  92. package/dist/LoginNotification.d.ts +183 -0
  93. package/dist/LoginNotification.d.ts.map +1 -0
  94. package/dist/LoginNotification.js +329 -0
  95. package/dist/LoginNotification.js.map +1 -0
  96. package/dist/LoginRisk.d.ts +73 -0
  97. package/dist/LoginRisk.d.ts.map +1 -0
  98. package/dist/LoginRisk.js +57 -0
  99. package/dist/LoginRisk.js.map +1 -0
  100. package/dist/MagicLink.d.ts +85 -0
  101. package/dist/MagicLink.d.ts.map +1 -0
  102. package/dist/MagicLink.js +206 -0
  103. package/dist/MagicLink.js.map +1 -0
  104. package/dist/Mailer.d.ts +147 -0
  105. package/dist/Mailer.d.ts.map +1 -0
  106. package/dist/Mailer.js +208 -0
  107. package/dist/Mailer.js.map +1 -0
  108. package/dist/OAuth.d.ts +934 -0
  109. package/dist/OAuth.d.ts.map +1 -0
  110. package/dist/OAuth.js +1661 -0
  111. package/dist/OAuth.js.map +1 -0
  112. package/dist/Passkey.d.ts +334 -0
  113. package/dist/Passkey.d.ts.map +1 -0
  114. package/dist/Passkey.js +422 -0
  115. package/dist/Passkey.js.map +1 -0
  116. package/dist/PasskeySimpleWebAuthn.d.ts +11 -0
  117. package/dist/PasskeySimpleWebAuthn.d.ts.map +1 -0
  118. package/dist/PasskeySimpleWebAuthn.js +181 -0
  119. package/dist/PasskeySimpleWebAuthn.js.map +1 -0
  120. package/dist/Password.d.ts +237 -0
  121. package/dist/Password.d.ts.map +1 -0
  122. package/dist/Password.js +641 -0
  123. package/dist/Password.js.map +1 -0
  124. package/dist/Policy.d.ts +7 -4
  125. package/dist/Policy.d.ts.map +1 -1
  126. package/dist/Policy.js +28 -5
  127. package/dist/Policy.js.map +1 -1
  128. package/dist/Privacy.d.ts +18 -0
  129. package/dist/Privacy.d.ts.map +1 -1
  130. package/dist/Privacy.js +63 -3
  131. package/dist/Privacy.js.map +1 -1
  132. package/dist/RateLimiter.d.ts +104 -0
  133. package/dist/RateLimiter.d.ts.map +1 -0
  134. package/dist/RateLimiter.js +118 -0
  135. package/dist/RateLimiter.js.map +1 -0
  136. package/dist/RecoveryCode.d.ts +169 -0
  137. package/dist/RecoveryCode.d.ts.map +1 -0
  138. package/dist/RecoveryCode.js +299 -0
  139. package/dist/RecoveryCode.js.map +1 -0
  140. package/dist/RefreshToken.d.ts +222 -0
  141. package/dist/RefreshToken.d.ts.map +1 -0
  142. package/dist/RefreshToken.js +342 -0
  143. package/dist/RefreshToken.js.map +1 -0
  144. package/dist/SecurityTimeline.d.ts +72 -0
  145. package/dist/SecurityTimeline.d.ts.map +1 -0
  146. package/dist/SecurityTimeline.js +386 -0
  147. package/dist/SecurityTimeline.js.map +1 -0
  148. package/dist/Sessions.d.ts +135 -11
  149. package/dist/Sessions.d.ts.map +1 -1
  150. package/dist/Sessions.js +546 -1
  151. package/dist/Sessions.js.map +1 -1
  152. package/dist/StepUp.d.ts +44 -0
  153. package/dist/StepUp.d.ts.map +1 -0
  154. package/dist/StepUp.js +82 -0
  155. package/dist/StepUp.js.map +1 -0
  156. package/dist/Storage.d.ts +175 -0
  157. package/dist/Storage.d.ts.map +1 -0
  158. package/dist/Storage.js +27 -0
  159. package/dist/Storage.js.map +1 -0
  160. package/dist/StorageMigrations.d.ts +19 -0
  161. package/dist/StorageMigrations.d.ts.map +1 -0
  162. package/dist/StorageMigrations.js +291 -0
  163. package/dist/StorageMigrations.js.map +1 -0
  164. package/dist/Testing.d.ts +9 -1
  165. package/dist/Testing.d.ts.map +1 -1
  166. package/dist/Testing.js +30 -2
  167. package/dist/Testing.js.map +1 -1
  168. package/dist/Totp.d.ts +220 -0
  169. package/dist/Totp.d.ts.map +1 -0
  170. package/dist/Totp.js +477 -0
  171. package/dist/Totp.js.map +1 -0
  172. package/dist/TrustedDevice.d.ts +127 -0
  173. package/dist/TrustedDevice.d.ts.map +1 -0
  174. package/dist/TrustedDevice.js +252 -0
  175. package/dist/TrustedDevice.js.map +1 -0
  176. package/dist/WaitUntil.d.ts +3 -0
  177. package/dist/WaitUntil.d.ts.map +1 -1
  178. package/dist/WaitUntil.js +6 -3
  179. package/dist/WaitUntil.js.map +1 -1
  180. package/dist/Webhook.d.ts +72 -0
  181. package/dist/Webhook.d.ts.map +1 -0
  182. package/dist/Webhook.js +82 -0
  183. package/dist/Webhook.js.map +1 -0
  184. package/dist/alchemy/cloudflare/Email.d.ts +25 -0
  185. package/dist/alchemy/cloudflare/Email.d.ts.map +1 -0
  186. package/dist/alchemy/cloudflare/Email.js +117 -0
  187. package/dist/alchemy/cloudflare/Email.js.map +1 -0
  188. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +34 -0
  189. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  190. package/dist/alchemy/cloudflare/RateLimitDurableObject.js +30 -0
  191. package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -0
  192. package/dist/cloudflare/Email.d.ts +25 -0
  193. package/dist/cloudflare/Email.d.ts.map +1 -0
  194. package/dist/cloudflare/Email.js +153 -0
  195. package/dist/cloudflare/Email.js.map +1 -0
  196. package/dist/cloudflare/RateLimitDurableObject.d.ts +50 -0
  197. package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  198. package/dist/cloudflare/RateLimitDurableObject.js +51 -0
  199. package/dist/cloudflare/RateLimitDurableObject.js.map +1 -0
  200. package/dist/index.d.ts +22 -0
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +22 -0
  203. package/dist/index.js.map +1 -1
  204. package/dist/internal/RateLimitDurableObject.d.ts +32 -0
  205. package/dist/internal/RateLimitDurableObject.d.ts.map +1 -0
  206. package/dist/internal/RateLimitDurableObject.js +80 -0
  207. package/dist/internal/RateLimitDurableObject.js.map +1 -0
  208. package/migrations/0001_auth_storage.sql +32 -0
  209. package/migrations/0002_auth_password.sql +25 -0
  210. package/migrations/0003_auth_login_approval_review.sql +22 -0
  211. package/migrations/0004_auth_trusted_device.sql +12 -0
  212. package/migrations/0005_auth_passkey.sql +17 -0
  213. package/migrations/0006_auth_totp_factor.sql +17 -0
  214. package/migrations/0007_auth_recovery_code.sql +13 -0
  215. package/migrations/0008_auth_api_key.sql +17 -0
  216. package/migrations/0009_auth_refresh_token.sql +21 -0
  217. package/migrations/0010_auth_jwt_revocation.sql +8 -0
  218. package/migrations/0011_auth_oauth_account.sql +16 -0
  219. package/migrations/0012_auth_oauth_provider_token_vault.sql +20 -0
  220. package/migrations/0013_auth_security_timeline.sql +16 -0
  221. package/package.json +161 -16
  222. package/LICENSE +0 -21
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Password.js","sourceRoot":"","sources":["../src/Password.ts"],"names":[],"mappings":"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"}
package/dist/Policy.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { Effect } from "effect";
2
2
  import type { PolicyId } from "./Identifiers.js";
3
- import type { CurrentActor } from "./Sessions.js";
4
- export type AuthzDenyReason = "missing-permission" | "missing-role" | "missing-relation" | "missing-grant" | "not-owner" | "not-authenticated" | (string & {});
3
+ import { CurrentSession } from "./Sessions.js";
4
+ import type { CurrentActor, SessionRequirement } from "./Sessions.js";
5
+ export type AuthzDenyReason = "missing-permission" | "missing-role" | "missing-relation" | "missing-grant" | "not-owner" | "not-authenticated" | "session-requirement-unsatisfied" | "email-verification-required" | (string & {});
5
6
  declare const AuthzError_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 & {
6
7
  readonly _tag: "AuthzError";
7
8
  } & Readonly<A>;
@@ -29,11 +30,13 @@ type EffectContext<T> = T extends Effect.Effect<unknown, unknown, infer R> ? R :
29
30
  export declare const isAuthzError: (error: unknown) => error is AuthzError;
30
31
  export declare const allow: Policy;
31
32
  export declare const deny: (reason: AuthzDenyReason, policyId?: PolicyId) => Policy<never>;
32
- export declare const all: <const Policies extends ReadonlyArray<Effect.Effect<unknown, unknown, unknown>>>(...policies: Policies) => Effect.Effect<void, EffectError<Policies[number]>, EffectContext<Policies[number]>>;
33
- export declare const any: <const Policies extends ReadonlyArray<Effect.Effect<unknown, unknown, unknown>>>(...policies: Policies) => Effect.Effect<void, AuthzError | NonAuthzError<EffectError<Policies[number]>>, EffectContext<Policies[number]>>;
33
+ export declare const all: <const Policies extends readonly Effect.Effect<unknown, unknown, unknown>[]>(...policies: Policies) => Effect.Effect<void, EffectError<Policies[number]>, EffectContext<Policies[number]>>;
34
+ export declare const any: <const Policies extends readonly Effect.Effect<unknown, unknown, unknown>[]>(...policies: Policies) => Effect.Effect<void, AuthzError | NonAuthzError<EffectError<Policies[number]>>, EffectContext<Policies[number]>>;
34
35
  export declare const not: <A, E, R>(policy: Effect.Effect<A, E, R>, reason?: AuthzDenyReason) => Effect.Effect<void, AuthzError | NonAuthzError<E>, R>;
35
36
  export declare const check: <A, E, R>(policy: Effect.Effect<A, E, R>) => Effect.Effect<PolicyDecision, NonAuthzError<E>, R>;
36
37
  export declare const checkDetailed: <A, E, R>(policy: Effect.Effect<A, E, R>) => Effect.Effect<PolicyCheckResult<NonAuthzError<E>>, never, R>;
38
+ export declare const requireNoSessionRequirement: (requirement: SessionRequirement, policyId?: PolicyId) => Effect.Effect<void, AuthzError, CurrentSession>;
39
+ export declare const requireEmailVerified: (policyId?: PolicyId) => Effect.Effect<void, AuthzError, CurrentSession>;
37
40
  export declare const require: <A, E, R>(policy: Effect.Effect<A, E, R>) => <B, E2, R2>(effect: Effect.Effect<B, E2, R2>) => Effect.Effect<B, E | E2, R | R2>;
38
41
  export {};
39
42
  //# sourceMappingURL=Policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Policy.d.ts","sourceRoot":"","sources":["../src/Policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Policy.d.ts","sourceRoot":"","sources":["../src/Policy.ts"],"names":[],"mappings":"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"}
package/dist/Policy.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Data, Effect } from "effect";
2
+ import { CurrentSession } from "./Sessions.js";
2
3
  export class AuthzError extends Data.TaggedError("AuthzError") {
3
4
  }
4
5
  export const isAuthzError = (error) => {
@@ -25,26 +26,48 @@ export const any = (...policies) => {
25
26
  onSuccess: () => Effect.void,
26
27
  onFailure: (error) => isAuthzError(error)
27
28
  ? loop(index + 1, error)
28
- : Effect.fail(error)
29
+ : Effect.fail(error),
29
30
  }));
30
31
  };
31
32
  return loop(0, undefined);
32
33
  };
33
34
  export const not = (policy, reason = "policy-not-satisfied") => policy.pipe(Effect.matchEffect({
34
35
  onSuccess: () => Effect.fail(new AuthzError({ reason })),
35
- onFailure: (error) => (isAuthzError(error) ? Effect.void : Effect.fail(error))
36
+ onFailure: (error) => isAuthzError(error)
37
+ ? Effect.void
38
+ : Effect.fail(error),
36
39
  }));
37
40
  export const check = (policy) => policy.pipe(Effect.matchEffect({
38
41
  onSuccess: () => Effect.succeed({ type: "allowed" }),
39
42
  onFailure: (error) => isAuthzError(error)
40
43
  ? Effect.succeed({ type: "denied", error })
41
- : Effect.fail(error)
44
+ : Effect.fail(error),
42
45
  }));
43
46
  export const checkDetailed = (policy) => policy.pipe(Effect.match({
44
47
  onSuccess: () => ({ type: "allowed" }),
45
48
  onFailure: (error) => isAuthzError(error)
46
- ? ({ type: "denied", error })
47
- : ({ type: "failed", error: error })
49
+ ? { type: "denied", error }
50
+ : { type: "failed", error: error },
48
51
  }));
52
+ export const requireNoSessionRequirement = (requirement, policyId) => Effect.gen(function* () {
53
+ const session = yield* CurrentSession;
54
+ if (session.claims?.requirements?.includes(requirement) === true) {
55
+ return yield* new AuthzError({
56
+ reason: "session-requirement-unsatisfied",
57
+ policyId,
58
+ });
59
+ }
60
+ });
61
+ export const requireEmailVerified = (policyId) => Effect.gen(function* () {
62
+ const session = yield* CurrentSession;
63
+ const { claims } = session;
64
+ if (claims?.emailVerified !== true ||
65
+ claims.requirements?.includes("email_verification") === true) {
66
+ return yield* new AuthzError({
67
+ reason: "email-verification-required",
68
+ policyId,
69
+ });
70
+ }
71
+ });
49
72
  export const require = (policy) => (effect) => Effect.flatMap(policy, () => effect);
50
73
  //# sourceMappingURL=Policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Policy.js","sourceRoot":"","sources":["../src/Policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Policy.js","sourceRoot":"","sources":["../src/Policy.ts"],"names":[],"mappings":"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"}
package/dist/Privacy.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import { Context, Effect, Layer } from "effect";
2
+ import { AuthSecrets } from "./AuthConfig.js";
3
+ import { Crypto } from "./Crypto.js";
4
+ import type { CryptoKey, CryptoService } from "./Crypto.js";
2
5
  import { EmailHash, IpHash, UserAgentHash } from "./Identifiers.js";
3
6
  import type { Email, IpAddress } from "./Identifiers.js";
4
7
  export type PrivacyOperation = "email-hash" | "ip-hash" | "user-agent-hash";
@@ -19,6 +22,21 @@ export interface PrivacyService {
19
22
  declare const Privacy_base: Context.ServiceClass<Privacy, "auth/Privacy", PrivacyService>;
20
23
  export declare class Privacy extends Privacy_base {
21
24
  }
25
+ export declare namespace Privacy {
26
+ const make: (service: PrivacyService) => PrivacyService;
27
+ }
28
+ export interface PrivacyOptions {
29
+ readonly secret: CryptoKey;
30
+ readonly normalizeEmail?: (email: Email) => string;
31
+ readonly normalizeIp?: (ip: IpAddress) => string;
32
+ readonly normalizeUserAgent?: (userAgent: string) => string;
33
+ }
34
+ export interface PrivacyDependencies extends PrivacyOptions {
35
+ readonly crypto: CryptoService;
36
+ }
37
+ export declare const makeHmacPrivacy: (dependencies: PrivacyDependencies) => PrivacyService;
38
+ export declare function PrivacyLive(options: PrivacyOptions): Layer.Layer<Privacy, never, Crypto>;
39
+ export declare function PrivacyLive(): Layer.Layer<Privacy, never, Crypto | AuthSecrets>;
22
40
  export declare const PrivacyTestLive: Layer.Layer<Privacy, never, never>;
23
41
  export {};
24
42
  //# sourceMappingURL=Privacy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Privacy.d.ts","sourceRoot":"","sources":["../src/Privacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,SAAS,GAAG,iBAAiB,CAAA;;;;AAE3E,qBAAa,YAAa,SAAQ,kBAAiC;IACjE,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC;CAAG;AAEL,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IAC5E,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACvE,QAAQ,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;CAC1F;;AAED,qBAAa,OAAQ,SAAQ,YAA0D;CAAG;AAE1F,eAAO,MAAM,eAAe,oCAI1B,CAAA"}
1
+ {"version":3,"file":"Privacy.d.ts","sourceRoot":"","sources":["../src/Privacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEtD,OAAO,EAAqB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,SAAS,GAAG,iBAAiB,CAAC;;;;AAE5E,qBAAa,YAAa,SAAQ,kBAAiC;IACjE,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;AAEL,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7E,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxE,QAAQ,CAAC,aAAa,EAAE,CACtB,SAAS,EAAE,MAAM,KACd,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;CACjD;;AAED,qBAAa,OAAQ,SAAQ,YAE5B;CAAG;AAEJ,yBAAiB,OAAO,CAAC;IAChB,MAAM,IAAI,GAAI,SAAS,cAAc,KAAG,cAC1B,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAmDD,eAAO,MAAM,eAAe,GAC1B,cAAc,mBAAmB,KAChC,cA6CF,CAAC;AAEF,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,GACtB,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACvC,wBAAgB,WAAW,IAAI,KAAK,CAAC,KAAK,CACxC,OAAO,EACP,KAAK,EACL,MAAM,GAAG,WAAW,CACrB,CAAC;AAoBF,eAAO,MAAM,eAAe,oCAO3B,CAAC"}
package/dist/Privacy.js CHANGED
@@ -1,12 +1,72 @@
1
1
  import { Context, Data, Effect, Layer } from "effect";
2
+ import { AuthPrivacyConfig, AuthSecrets } from "./AuthConfig.js";
3
+ import { Crypto } from "./Crypto.js";
2
4
  import { EmailHash, IpHash, UserAgentHash } from "./Identifiers.js";
3
5
  export class PrivacyError extends Data.TaggedError("PrivacyError") {
4
6
  }
5
7
  export class Privacy extends Context.Service()("auth/Privacy") {
6
8
  }
7
- export const PrivacyTestLive = Layer.succeed(Privacy)({
9
+ (function (Privacy) {
10
+ Privacy.make = (service) => Privacy.of(service);
11
+ })(Privacy || (Privacy = {}));
12
+ const hmacNamespace = "auth.privacy.v1";
13
+ const normalizeEmail = (email) => String(email).trim().toLowerCase();
14
+ const normalizeIp = (ip) => String(ip).trim();
15
+ const normalizeUserAgent = (userAgent) => userAgent.trim().replaceAll(/\s+/g, " ");
16
+ const normalizeInput = (operation, normalize, input) => Effect.try({
17
+ try: () => normalize(input),
18
+ catch: (cause) => new PrivacyError({
19
+ operation,
20
+ message: "Failed to normalize privacy input",
21
+ cause,
22
+ }),
23
+ });
24
+ const hmacHash = (dependencies, operation, kind, normalized, brand) => dependencies.crypto
25
+ .hmacSha256({
26
+ key: dependencies.secret,
27
+ data: `${hmacNamespace}.${kind}:${normalized}`,
28
+ })
29
+ .pipe(Effect.map(brand), Effect.mapError((cause) => new PrivacyError({
30
+ operation,
31
+ message: "Failed to hash privacy input",
32
+ cause,
33
+ })));
34
+ export const makeHmacPrivacy = (dependencies) => {
35
+ const emailNormalizer = dependencies.normalizeEmail ?? normalizeEmail;
36
+ const ipNormalizer = dependencies.normalizeIp ?? normalizeIp;
37
+ const userAgentNormalizer = dependencies.normalizeUserAgent ?? normalizeUserAgent;
38
+ return Privacy.make({
39
+ emailHash: Effect.fn("auth.privacy.email_hash")(function* (email) {
40
+ const normalized = yield* normalizeInput("email-hash", emailNormalizer, email);
41
+ return yield* hmacHash(dependencies, "email-hash", "email", normalized, EmailHash);
42
+ }),
43
+ ipHash: Effect.fn("auth.privacy.ip_hash")(function* (ip) {
44
+ const normalized = yield* normalizeInput("ip-hash", ipNormalizer, ip);
45
+ return yield* hmacHash(dependencies, "ip-hash", "ip", normalized, IpHash);
46
+ }),
47
+ userAgentHash: Effect.fn("auth.privacy.user_agent_hash")(function* (userAgent) {
48
+ const normalized = yield* normalizeInput("user-agent-hash", userAgentNormalizer, userAgent);
49
+ return yield* hmacHash(dependencies, "user-agent-hash", "user-agent", normalized, UserAgentHash);
50
+ }),
51
+ });
52
+ };
53
+ export function PrivacyLive(options) {
54
+ return Layer.effect(Privacy)(Effect.gen(function* () {
55
+ const crypto = yield* Crypto;
56
+ const resolvedOptions = options ??
57
+ {
58
+ ...(yield* AuthPrivacyConfig),
59
+ secret: (yield* AuthSecrets).privacy,
60
+ };
61
+ return makeHmacPrivacy({
62
+ ...resolvedOptions,
63
+ crypto,
64
+ });
65
+ }));
66
+ }
67
+ export const PrivacyTestLive = Layer.succeed(Privacy)(Privacy.make({
8
68
  emailHash: (email) => Effect.succeed(EmailHash(`test:email:${email}`)),
9
69
  ipHash: (ip) => Effect.succeed(IpHash(`test:ip:${ip}`)),
10
- userAgentHash: (userAgent) => Effect.succeed(UserAgentHash(`test:user-agent:${userAgent}`))
11
- });
70
+ userAgentHash: (userAgent) => Effect.succeed(UserAgentHash(`test:user-agent:${userAgent}`)),
71
+ }));
12
72
  //# sourceMappingURL=Privacy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Privacy.js","sourceRoot":"","sources":["../src/Privacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAKnE,MAAM,OAAO,YAAa,SAAQ,IAAI,CAAC,WAAW,CAAC,cAAc,CAI/D;CAAG;AAQL,MAAM,OAAO,OAAQ,SAAQ,OAAO,CAAC,OAAO,EAA2B,CAAC,cAAc,CAAC;CAAG;AAE1F,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;IACtE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACvD,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;CAC5F,CAAC,CAAA"}
1
+ {"version":3,"file":"Privacy.js","sourceRoot":"","sources":["../src/Privacy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import type { Duration } from "effect";
2
+ import { Brand, Context, Effect, Layer } from "effect";
3
+ import { RateLimiter as PersistenceRateLimiter } from "effect/unstable/persistence";
4
+ import type { EmailHash, IpHash, UserAgentHash } from "./Identifiers.js";
5
+ export type RateLimitAlgorithm = "fixed-window" | "token-bucket";
6
+ export type RateLimitPolicyId = Brand.Branded<string, "auth/RateLimitPolicyId">;
7
+ export type RateLimitKey = Brand.Branded<string, "auth/RateLimitKey">;
8
+ export type RateLimitKeyKind = string;
9
+ export declare const RateLimitKey: {
10
+ readonly global: RateLimitKey;
11
+ readonly emailHash: (emailHash: EmailHash) => RateLimitKey;
12
+ readonly ipHash: (ipHash: IpHash) => RateLimitKey;
13
+ readonly userAgentHash: (userAgentHash: UserAgentHash) => RateLimitKey;
14
+ readonly customHash: (kind: RateLimitKeyKind, hash: string) => RateLimitKey;
15
+ readonly combine: (kind: RateLimitKeyKind, first: RateLimitKey, ...rest: readonly RateLimitKey[]) => RateLimitKey;
16
+ };
17
+ export interface RateLimitRule {
18
+ readonly id: RateLimitPolicyId;
19
+ readonly key: RateLimitKey;
20
+ readonly algorithm: RateLimitAlgorithm;
21
+ readonly window: Duration.Duration;
22
+ readonly limit: number;
23
+ readonly tokens?: number;
24
+ }
25
+ export interface RateLimitPolicy {
26
+ readonly rules: readonly RateLimitRule[];
27
+ }
28
+ interface RateLimitRuleInput {
29
+ readonly id: string;
30
+ readonly key: RateLimitKey;
31
+ readonly window: Duration.Duration;
32
+ readonly limit: number;
33
+ readonly tokens?: number;
34
+ }
35
+ interface RateLimitByInput {
36
+ readonly id: string;
37
+ readonly by: RateLimitKey;
38
+ readonly window: Duration.Duration;
39
+ readonly limit: number;
40
+ readonly tokens?: number;
41
+ }
42
+ export declare const RateLimitPolicy: {
43
+ readonly fixedWindow: (input: RateLimitRuleInput) => RateLimitPolicy;
44
+ readonly fixedWindowBy: (input: RateLimitByInput) => RateLimitPolicy;
45
+ readonly tokenBucket: (input: RateLimitRuleInput) => RateLimitPolicy;
46
+ readonly tokenBucketBy: (input: RateLimitByInput) => RateLimitPolicy;
47
+ readonly all: (...policies: readonly RateLimitPolicy[]) => RateLimitPolicy;
48
+ };
49
+ export interface RateLimitConsumeResult {
50
+ readonly policyId: RateLimitPolicyId;
51
+ readonly limit: number;
52
+ readonly remaining: number;
53
+ readonly resetAfter: Duration.Duration;
54
+ }
55
+ export type RateLimitDecision = {
56
+ readonly type: "allowed";
57
+ readonly results: readonly RateLimitConsumeResult[];
58
+ } | {
59
+ readonly type: "denied";
60
+ readonly policyId: RateLimitPolicyId;
61
+ readonly retryAfter: Duration.Duration;
62
+ readonly limit: number;
63
+ readonly remaining: number;
64
+ };
65
+ declare const RateLimitExceededError_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 & {
66
+ readonly _tag: "RateLimitExceededError";
67
+ } & Readonly<A>;
68
+ export declare class RateLimitExceededError extends RateLimitExceededError_base<{
69
+ readonly policyId: RateLimitPolicyId;
70
+ readonly retryAfter: Duration.Duration;
71
+ readonly limit: number;
72
+ readonly remaining: number;
73
+ }> {
74
+ }
75
+ declare const RateLimitStoreError_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 & {
76
+ readonly _tag: "RateLimitStoreError";
77
+ } & Readonly<A>;
78
+ export declare class RateLimitStoreError extends RateLimitStoreError_base<{
79
+ readonly message: string;
80
+ readonly cause?: unknown;
81
+ }> {
82
+ }
83
+ export type RateLimitError = RateLimitExceededError | RateLimitStoreError;
84
+ export interface RateLimiterService {
85
+ readonly consume: (policy: RateLimitPolicy) => Effect.Effect<RateLimitDecision, RateLimitStoreError>;
86
+ readonly require: (policy: RateLimitPolicy) => Effect.Effect<void, RateLimitError>;
87
+ }
88
+ declare const RateLimiter_base: Context.ServiceClass<RateLimiter, "auth/RateLimiter", RateLimiterService>;
89
+ export declare class RateLimiter extends RateLimiter_base {
90
+ }
91
+ export declare namespace RateLimiter {
92
+ const make: (service: RateLimiterService) => RateLimiterService;
93
+ }
94
+ export interface RateLimiterDependencies {
95
+ readonly limiter: PersistenceRateLimiter.RateLimiter;
96
+ }
97
+ export declare const makeRateLimiter: (dependencies: RateLimiterDependencies) => RateLimiterService;
98
+ export declare const consume: (policy: RateLimitPolicy) => Effect.Effect<RateLimitDecision, RateLimitStoreError, RateLimiter>;
99
+ export declare const require: (policy: RateLimitPolicy) => Effect.Effect<void, RateLimitError, RateLimiter>;
100
+ export declare const withRateLimit: (policy: RateLimitPolicy) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | RateLimitError, R | RateLimiter>;
101
+ export declare const RateLimiterLive: Layer.Layer<RateLimiter, never, PersistenceRateLimiter.RateLimiter>;
102
+ export declare const RateLimiterMemoryLive: Layer.Layer<RateLimiter>;
103
+ export {};
104
+ //# sourceMappingURL=RateLimiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../src/RateLimiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import { Brand, Context, Data, Effect, Layer } from "effect";
2
+ import { RateLimiter as PersistenceRateLimiter } from "effect/unstable/persistence";
3
+ const makeRateLimitPolicyId = Brand.nominal();
4
+ const makeRateLimitKey = Brand.nominal();
5
+ const encodeKeySegment = (value) => encodeURIComponent(value);
6
+ const rateLimitKey = (...segments) => makeRateLimitKey(segments.map(encodeKeySegment).join(":"));
7
+ const combineRateLimitKey = (kind, first, ...rest) => makeRateLimitKey([encodeKeySegment(kind), first, ...rest].join(":"));
8
+ export const RateLimitKey = {
9
+ global: rateLimitKey("global"),
10
+ emailHash: (emailHash) => rateLimitKey("email", emailHash),
11
+ ipHash: (ipHash) => rateLimitKey("ip", ipHash),
12
+ userAgentHash: (userAgentHash) => rateLimitKey("user-agent", userAgentHash),
13
+ customHash: (kind, hash) => rateLimitKey(kind, hash),
14
+ combine: combineRateLimitKey,
15
+ };
16
+ const makePolicy = (rule) => ({
17
+ rules: [rule],
18
+ });
19
+ const byInputToRuleInput = (input) => ({
20
+ id: input.id,
21
+ key: input.by,
22
+ limit: input.limit,
23
+ tokens: input.tokens,
24
+ window: input.window,
25
+ });
26
+ export const RateLimitPolicy = {
27
+ fixedWindow: (input) => makePolicy({
28
+ ...input,
29
+ id: makeRateLimitPolicyId(input.id),
30
+ algorithm: "fixed-window",
31
+ }),
32
+ fixedWindowBy: (input) => RateLimitPolicy.fixedWindow(byInputToRuleInput(input)),
33
+ tokenBucket: (input) => makePolicy({
34
+ ...input,
35
+ id: makeRateLimitPolicyId(input.id),
36
+ algorithm: "token-bucket",
37
+ }),
38
+ tokenBucketBy: (input) => RateLimitPolicy.tokenBucket(byInputToRuleInput(input)),
39
+ all: (...policies) => ({
40
+ rules: policies.flatMap((policy) => policy.rules),
41
+ }),
42
+ };
43
+ export class RateLimitExceededError extends Data.TaggedError("RateLimitExceededError") {
44
+ }
45
+ export class RateLimitStoreError extends Data.TaggedError("RateLimitStoreError") {
46
+ }
47
+ export class RateLimiter extends Context.Service()("auth/RateLimiter") {
48
+ }
49
+ (function (RateLimiter) {
50
+ RateLimiter.make = (service) => RateLimiter.of(service);
51
+ })(RateLimiter || (RateLimiter = {}));
52
+ const storageKey = (rule) => `${rule.id}:${rule.key}`;
53
+ const storeError = (cause) => new RateLimitStoreError({
54
+ message: "Failed to consume rate limit",
55
+ cause,
56
+ });
57
+ const deniedDecision = (rule, reason) => ({
58
+ type: "denied",
59
+ policyId: rule.id,
60
+ retryAfter: reason.retryAfter,
61
+ limit: reason.limit,
62
+ remaining: reason.remaining,
63
+ });
64
+ export const makeRateLimiter = (dependencies) => {
65
+ const consumePolicy = Effect.fn("auth.rate_limiter.consume")(function* (policy) {
66
+ const results = [];
67
+ for (const rule of policy.rules) {
68
+ const ruleResult = yield* dependencies.limiter
69
+ .consume({
70
+ algorithm: rule.algorithm,
71
+ key: storageKey(rule),
72
+ limit: rule.limit,
73
+ onExceeded: "fail",
74
+ tokens: rule.tokens,
75
+ window: rule.window,
76
+ })
77
+ .pipe(Effect.matchEffect({
78
+ onSuccess: (result) => Effect.succeed({ type: "allowed", result }),
79
+ onFailure: (error) => error.reason._tag === "RateLimitExceeded"
80
+ ? Effect.succeed(deniedDecision(rule, error.reason))
81
+ : Effect.fail(storeError(error)),
82
+ }));
83
+ if (ruleResult.type === "denied") {
84
+ return ruleResult;
85
+ }
86
+ results.push({
87
+ policyId: rule.id,
88
+ limit: ruleResult.result.limit,
89
+ remaining: ruleResult.result.remaining,
90
+ resetAfter: ruleResult.result.resetAfter,
91
+ });
92
+ }
93
+ return { type: "allowed", results };
94
+ });
95
+ return RateLimiter.make({
96
+ consume: consumePolicy,
97
+ require: Effect.fn("auth.rate_limiter.require")(function* (policy) {
98
+ const decision = yield* consumePolicy(policy);
99
+ if (decision.type === "denied") {
100
+ return yield* new RateLimitExceededError({
101
+ policyId: decision.policyId,
102
+ retryAfter: decision.retryAfter,
103
+ limit: decision.limit,
104
+ remaining: decision.remaining,
105
+ });
106
+ }
107
+ }),
108
+ });
109
+ };
110
+ export const consume = (policy) => RateLimiter.use((rateLimiter) => rateLimiter.consume(policy));
111
+ export const require = (policy) => RateLimiter.use((rateLimiter) => rateLimiter.require(policy));
112
+ export const withRateLimit = (policy) => (effect) => Effect.flatMap(require(policy), () => effect);
113
+ export const RateLimiterLive = Layer.effect(RateLimiter, Effect.gen(function* () {
114
+ const limiter = yield* PersistenceRateLimiter.RateLimiter;
115
+ return makeRateLimiter({ limiter });
116
+ }));
117
+ export const RateLimiterMemoryLive = RateLimiterLive.pipe(Layer.provide(PersistenceRateLimiter.layer), Layer.provide(PersistenceRateLimiter.layerStoreMemory));
118
+ //# sourceMappingURL=RateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../src/RateLimiter.ts"],"names":[],"mappings":"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"}