@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.
- package/README.md +790 -73
- package/dist/ApiKey.d.ts +207 -0
- package/dist/ApiKey.d.ts.map +1 -0
- package/dist/ApiKey.js +275 -0
- package/dist/ApiKey.js.map +1 -0
- package/dist/AuditLog.d.ts +335 -1
- package/dist/AuditLog.d.ts.map +1 -1
- package/dist/AuditLog.js +318 -1
- package/dist/AuditLog.js.map +1 -1
- package/dist/AuthConfig.d.ts +42 -0
- package/dist/AuthConfig.d.ts.map +1 -0
- package/dist/AuthConfig.js +43 -0
- package/dist/AuthConfig.js.map +1 -0
- package/dist/AuthFlow.d.ts +462 -36
- package/dist/AuthFlow.d.ts.map +1 -1
- package/dist/AuthFlow.js +657 -5
- package/dist/AuthFlow.js.map +1 -1
- package/dist/AuthKernel.d.ts +3 -0
- package/dist/AuthKernel.d.ts.map +1 -0
- package/dist/AuthKernel.js +9 -0
- package/dist/AuthKernel.js.map +1 -0
- package/dist/Challenge.d.ts +24 -4
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +167 -1
- package/dist/Challenge.js.map +1 -1
- package/dist/Client.d.ts +449 -0
- package/dist/Client.d.ts.map +1 -0
- package/dist/Client.js +985 -0
- package/dist/Client.js.map +1 -0
- package/dist/Crypto.d.ts +6 -1
- package/dist/Crypto.d.ts.map +1 -1
- package/dist/Crypto.js +62 -1
- package/dist/Crypto.js.map +1 -1
- package/dist/DomainVerification.d.ts +200 -0
- package/dist/DomainVerification.d.ts.map +1 -0
- package/dist/DomainVerification.js +304 -0
- package/dist/DomainVerification.js.map +1 -0
- package/dist/EffectQbSqliteStorage.d.ts +985 -0
- package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
- package/dist/EffectQbSqliteStorage.js +2824 -0
- package/dist/EffectQbSqliteStorage.js.map +1 -0
- package/dist/EmailOtp.d.ts +120 -0
- package/dist/EmailOtp.d.ts.map +1 -0
- package/dist/EmailOtp.js +286 -0
- package/dist/EmailOtp.js.map +1 -0
- package/dist/EmailVerification.d.ts +121 -0
- package/dist/EmailVerification.d.ts.map +1 -0
- package/dist/EmailVerification.js +200 -0
- package/dist/EmailVerification.js.map +1 -0
- package/dist/HttpApi/Api.d.ts +2410 -0
- package/dist/HttpApi/Api.d.ts.map +1 -0
- package/dist/HttpApi/Api.js +3026 -0
- package/dist/HttpApi/Api.js.map +1 -0
- package/dist/HttpApi/Endpoints.d.ts +1073 -0
- package/dist/HttpApi/Endpoints.d.ts.map +1 -0
- package/dist/HttpApi/Endpoints.js +428 -0
- package/dist/HttpApi/Endpoints.js.map +1 -0
- package/dist/HttpApi/Errors.d.ts +114 -0
- package/dist/HttpApi/Errors.d.ts.map +1 -0
- package/dist/HttpApi/Errors.js +230 -0
- package/dist/HttpApi/Errors.js.map +1 -0
- package/dist/HttpApi/Schemas.d.ts +1254 -0
- package/dist/HttpApi/Schemas.d.ts.map +1 -0
- package/dist/HttpApi/Schemas.js +862 -0
- package/dist/HttpApi/Schemas.js.map +1 -0
- package/dist/HttpApi/Security.d.ts +159 -0
- package/dist/HttpApi/Security.d.ts.map +1 -0
- package/dist/HttpApi/Security.js +530 -0
- package/dist/HttpApi/Security.js.map +1 -0
- package/dist/HttpApi/Transport.d.ts +65 -0
- package/dist/HttpApi/Transport.d.ts.map +1 -0
- package/dist/HttpApi/Transport.js +311 -0
- package/dist/HttpApi/Transport.js.map +1 -0
- package/dist/HttpApi/index.d.ts +8 -0
- package/dist/HttpApi/index.d.ts.map +1 -0
- package/dist/HttpApi/index.js +7 -0
- package/dist/HttpApi/index.js.map +1 -0
- package/dist/HttpApi.d.ts +2 -0
- package/dist/HttpApi.d.ts.map +1 -0
- package/dist/HttpApi.js +2 -0
- package/dist/HttpApi.js.map +1 -0
- package/dist/Identifiers.d.ts +3 -0
- package/dist/Identifiers.d.ts.map +1 -1
- package/dist/Identifiers.js +2 -0
- package/dist/Identifiers.js.map +1 -1
- package/dist/IncidentAction.d.ts +80 -0
- package/dist/IncidentAction.d.ts.map +1 -0
- package/dist/IncidentAction.js +158 -0
- package/dist/IncidentAction.js.map +1 -0
- package/dist/Internal.d.ts +7 -0
- package/dist/Internal.d.ts.map +1 -0
- package/dist/Internal.js +12 -0
- package/dist/Internal.js.map +1 -0
- package/dist/Jwt.d.ts +281 -0
- package/dist/Jwt.d.ts.map +1 -0
- package/dist/Jwt.js +721 -0
- package/dist/Jwt.js.map +1 -0
- package/dist/LoginApproval.d.ts +314 -0
- package/dist/LoginApproval.d.ts.map +1 -0
- package/dist/LoginApproval.js +551 -0
- package/dist/LoginApproval.js.map +1 -0
- package/dist/LoginNotification.d.ts +183 -0
- package/dist/LoginNotification.d.ts.map +1 -0
- package/dist/LoginNotification.js +329 -0
- package/dist/LoginNotification.js.map +1 -0
- package/dist/LoginRisk.d.ts +344 -0
- package/dist/LoginRisk.d.ts.map +1 -0
- package/dist/LoginRisk.js +484 -0
- package/dist/LoginRisk.js.map +1 -0
- package/dist/MachineAuth.d.ts +73 -0
- package/dist/MachineAuth.d.ts.map +1 -0
- package/dist/MachineAuth.js +147 -0
- package/dist/MachineAuth.js.map +1 -0
- package/dist/MagicLink.d.ts +85 -0
- package/dist/MagicLink.d.ts.map +1 -0
- package/dist/MagicLink.js +206 -0
- package/dist/MagicLink.js.map +1 -0
- package/dist/Mailer.d.ts +147 -0
- package/dist/Mailer.d.ts.map +1 -0
- package/dist/Mailer.js +208 -0
- package/dist/Mailer.js.map +1 -0
- package/dist/OAuth.d.ts +1890 -0
- package/dist/OAuth.d.ts.map +1 -0
- package/dist/OAuth.js +3063 -0
- package/dist/OAuth.js.map +1 -0
- package/dist/Passkey.d.ts +334 -0
- package/dist/Passkey.d.ts.map +1 -0
- package/dist/Passkey.js +422 -0
- package/dist/Passkey.js.map +1 -0
- package/dist/PasskeySimpleWebAuthn.d.ts +11 -0
- package/dist/PasskeySimpleWebAuthn.d.ts.map +1 -0
- package/dist/PasskeySimpleWebAuthn.js +181 -0
- package/dist/PasskeySimpleWebAuthn.js.map +1 -0
- package/dist/Password.d.ts +237 -0
- package/dist/Password.d.ts.map +1 -0
- package/dist/Password.js +641 -0
- package/dist/Password.js.map +1 -0
- package/dist/Policy.d.ts +7 -4
- package/dist/Policy.d.ts.map +1 -1
- package/dist/Policy.js +28 -5
- package/dist/Policy.js.map +1 -1
- package/dist/Privacy.d.ts +15 -0
- package/dist/Privacy.d.ts.map +1 -1
- package/dist/Privacy.js +58 -1
- package/dist/Privacy.js.map +1 -1
- package/dist/RateLimiter.d.ts +104 -0
- package/dist/RateLimiter.d.ts.map +1 -0
- package/dist/RateLimiter.js +118 -0
- package/dist/RateLimiter.js.map +1 -0
- package/dist/RecoveryCode.d.ts +169 -0
- package/dist/RecoveryCode.d.ts.map +1 -0
- package/dist/RecoveryCode.js +299 -0
- package/dist/RecoveryCode.js.map +1 -0
- package/dist/RefreshToken.d.ts +222 -0
- package/dist/RefreshToken.d.ts.map +1 -0
- package/dist/RefreshToken.js +342 -0
- package/dist/RefreshToken.js.map +1 -0
- package/dist/Retention.d.ts +98 -0
- package/dist/Retention.d.ts.map +1 -0
- package/dist/Retention.js +204 -0
- package/dist/Retention.js.map +1 -0
- package/dist/SecurityTimeline.d.ts +78 -0
- package/dist/SecurityTimeline.d.ts.map +1 -0
- package/dist/SecurityTimeline.js +461 -0
- package/dist/SecurityTimeline.js.map +1 -0
- package/dist/Sessions.d.ts +123 -11
- package/dist/Sessions.d.ts.map +1 -1
- package/dist/Sessions.js +534 -1
- package/dist/Sessions.js.map +1 -1
- package/dist/StepUp.d.ts +44 -0
- package/dist/StepUp.d.ts.map +1 -0
- package/dist/StepUp.js +82 -0
- package/dist/StepUp.js.map +1 -0
- package/dist/Storage.d.ts +73 -5
- package/dist/Storage.d.ts.map +1 -1
- package/dist/Storage.js +11 -1
- package/dist/Storage.js.map +1 -1
- package/dist/StorageMigrations.d.ts +23 -1
- package/dist/StorageMigrations.d.ts.map +1 -1
- package/dist/StorageMigrations.js +462 -2
- package/dist/StorageMigrations.js.map +1 -1
- package/dist/Testing.d.ts +9 -1
- package/dist/Testing.d.ts.map +1 -1
- package/dist/Testing.js +30 -2
- package/dist/Testing.js.map +1 -1
- package/dist/Totp.d.ts +220 -0
- package/dist/Totp.d.ts.map +1 -0
- package/dist/Totp.js +477 -0
- package/dist/Totp.js.map +1 -0
- package/dist/TrustedDevice.d.ts +127 -0
- package/dist/TrustedDevice.d.ts.map +1 -0
- package/dist/TrustedDevice.js +252 -0
- package/dist/TrustedDevice.js.map +1 -0
- package/dist/WaitUntil.d.ts.map +1 -1
- package/dist/WaitUntil.js +1 -1
- package/dist/WaitUntil.js.map +1 -1
- package/dist/Webhook.d.ts +380 -0
- package/dist/Webhook.d.ts.map +1 -0
- package/dist/Webhook.js +592 -0
- package/dist/Webhook.js.map +1 -0
- package/dist/alchemy/cloudflare/Email.d.ts +25 -0
- package/dist/alchemy/cloudflare/Email.d.ts.map +1 -0
- package/dist/alchemy/cloudflare/Email.js +117 -0
- package/dist/alchemy/cloudflare/Email.js.map +1 -0
- package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +34 -0
- package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
- package/dist/alchemy/cloudflare/RateLimitDurableObject.js +30 -0
- package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -0
- package/dist/cloudflare/Email.d.ts +25 -0
- package/dist/cloudflare/Email.d.ts.map +1 -0
- package/dist/cloudflare/Email.js +153 -0
- package/dist/cloudflare/Email.js.map +1 -0
- package/dist/cloudflare/RateLimitDurableObject.d.ts +50 -0
- package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
- package/dist/cloudflare/RateLimitDurableObject.js +51 -0
- package/dist/cloudflare/RateLimitDurableObject.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/RateLimitDurableObject.d.ts +32 -0
- package/dist/internal/RateLimitDurableObject.d.ts.map +1 -0
- package/dist/internal/RateLimitDurableObject.js +80 -0
- package/dist/internal/RateLimitDurableObject.js.map +1 -0
- package/migrations/0002_auth_password.sql +25 -0
- package/migrations/0003_auth_login_approval_review.sql +22 -0
- package/migrations/0004_auth_trusted_device.sql +12 -0
- package/migrations/0005_auth_passkey.sql +17 -0
- package/migrations/0006_auth_totp_factor.sql +17 -0
- package/migrations/0007_auth_recovery_code.sql +13 -0
- package/migrations/0008_auth_api_key.sql +17 -0
- package/migrations/0009_auth_refresh_token.sql +21 -0
- package/migrations/0010_auth_jwt_revocation.sql +8 -0
- package/migrations/0011_auth_oauth_account.sql +16 -0
- package/migrations/0012_auth_oauth_provider_token_vault.sql +20 -0
- package/migrations/0013_auth_security_timeline.sql +16 -0
- package/migrations/0014_auth_webhook_outbox.sql +16 -0
- package/migrations/0015_auth_webhook_replay.sql +7 -0
- package/migrations/0016_auth_login_risk_history.sql +23 -0
- package/migrations/0017_auth_audit_log.sql +17 -0
- package/migrations/0018_auth_domain_verification.sql +18 -0
- package/migrations/0019_auth_oauth_authorization_code.sql +17 -0
- package/migrations/0020_auth_oauth_provider_mode_token.sql +24 -0
- package/migrations/0021_auth_oauth_client_secret.sql +14 -0
- package/migrations/0022_auth_oauth_client.sql +15 -0
- package/migrations/0023_auth_oauth_consent.sql +15 -0
- package/package.json +162 -26
- package/dist/D1Kysely.d.ts +0 -40
- package/dist/D1Kysely.d.ts.map +0 -1
- package/dist/D1Kysely.js +0 -75
- package/dist/D1Kysely.js.map +0 -1
- package/dist/KyselyStorage.d.ts +0 -41
- package/dist/KyselyStorage.d.ts.map +0 -1
- package/dist/KyselyStorage.js +0 -176
- package/dist/KyselyStorage.js.map +0 -1
|
@@ -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
|
|
4
|
-
|
|
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
|
|
33
|
-
export declare const any: <const Policies extends
|
|
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
|
package/dist/Policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Policy.d.ts","sourceRoot":"","sources":["../src/Policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,MAAM,QAAQ,
|
|
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) =>
|
|
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
|
-
?
|
|
47
|
-
:
|
|
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
|
package/dist/Policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Policy.js","sourceRoot":"","sources":["../src/Policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,
|
|
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";
|
|
@@ -22,6 +25,18 @@ export declare class Privacy extends Privacy_base {
|
|
|
22
25
|
export declare namespace Privacy {
|
|
23
26
|
const make: (service: PrivacyService) => PrivacyService;
|
|
24
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>;
|
|
25
40
|
export declare const PrivacyTestLive: Layer.Layer<Privacy, never, never>;
|
|
26
41
|
export {};
|
|
27
42
|
//# sourceMappingURL=Privacy.d.ts.map
|
package/dist/Privacy.d.ts.map
CHANGED
|
@@ -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,
|
|
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,4 +1,6 @@
|
|
|
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
|
}
|
|
@@ -7,9 +9,64 @@ export class Privacy extends Context.Service()("auth/Privacy") {
|
|
|
7
9
|
(function (Privacy) {
|
|
8
10
|
Privacy.make = (service) => Privacy.of(service);
|
|
9
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
|
+
}
|
|
10
67
|
export const PrivacyTestLive = Layer.succeed(Privacy)(Privacy.make({
|
|
11
68
|
emailHash: (email) => Effect.succeed(EmailHash(`test:email:${email}`)),
|
|
12
69
|
ipHash: (ip) => Effect.succeed(IpHash(`test:ip:${ip}`)),
|
|
13
|
-
userAgentHash: (userAgent) => Effect.succeed(UserAgentHash(`test:user-agent:${userAgent}`))
|
|
70
|
+
userAgentHash: (userAgent) => Effect.succeed(UserAgentHash(`test:user-agent:${userAgent}`)),
|
|
14
71
|
}));
|
|
15
72
|
//# sourceMappingURL=Privacy.js.map
|
package/dist/Privacy.js.map
CHANGED
|
@@ -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,
|
|
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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"}
|