@effect-auth/core 0.1.0-alpha.1 → 0.1.0-alpha.2
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 +622 -61
- package/dist/AuditLog.d.ts.map +1 -1
- package/dist/AuditLog.js +1 -1
- package/dist/AuditLog.js.map +1 -1
- package/dist/AuthConfig.d.ts +51 -0
- package/dist/AuthConfig.d.ts.map +1 -0
- package/dist/AuthConfig.js +56 -0
- package/dist/AuthConfig.js.map +1 -0
- package/dist/AuthFlow.d.ts +292 -35
- package/dist/AuthFlow.d.ts.map +1 -1
- package/dist/AuthFlow.js +130 -6
- 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 +19 -3
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +157 -1
- package/dist/Challenge.js.map +1 -1
- package/dist/Client.d.ts +36 -0
- package/dist/Client.d.ts.map +1 -0
- package/dist/Client.js +55 -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/D1Kysely.d.ts +6 -3
- package/dist/D1Kysely.d.ts.map +1 -1
- package/dist/D1Kysely.js +8 -5
- package/dist/D1Kysely.js.map +1 -1
- package/dist/EffectQbSqliteStorage.d.ts +183 -0
- package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
- package/dist/EffectQbSqliteStorage.js +446 -0
- package/dist/EffectQbSqliteStorage.js.map +1 -0
- package/dist/EmailOtp.d.ts +117 -0
- package/dist/EmailOtp.d.ts.map +1 -0
- package/dist/EmailOtp.js +279 -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 +201 -0
- package/dist/EmailVerification.js.map +1 -0
- package/dist/HttpApi/Api.d.ts +175 -0
- package/dist/HttpApi/Api.d.ts.map +1 -0
- package/dist/HttpApi/Api.js +340 -0
- package/dist/HttpApi/Api.js.map +1 -0
- package/dist/HttpApi/Endpoints.d.ts +92 -0
- package/dist/HttpApi/Endpoints.d.ts.map +1 -0
- package/dist/HttpApi/Endpoints.js +48 -0
- package/dist/HttpApi/Endpoints.js.map +1 -0
- package/dist/HttpApi/Errors.d.ts +82 -0
- package/dist/HttpApi/Errors.d.ts.map +1 -0
- package/dist/HttpApi/Errors.js +184 -0
- package/dist/HttpApi/Errors.js.map +1 -0
- package/dist/HttpApi/Schemas.d.ts +86 -0
- package/dist/HttpApi/Schemas.d.ts.map +1 -0
- package/dist/HttpApi/Schemas.js +63 -0
- package/dist/HttpApi/Schemas.js.map +1 -0
- package/dist/HttpApi/Security.d.ts +147 -0
- package/dist/HttpApi/Security.d.ts.map +1 -0
- package/dist/HttpApi/Security.js +439 -0
- package/dist/HttpApi/Security.js.map +1 -0
- package/dist/HttpApi/Transport.d.ts +31 -0
- package/dist/HttpApi/Transport.d.ts.map +1 -0
- package/dist/HttpApi/Transport.js +169 -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.map +1 -1
- package/dist/Identifiers.js.map +1 -1
- 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/KyselyStorage.d.ts +28 -2
- package/dist/KyselyStorage.d.ts.map +1 -1
- package/dist/KyselyStorage.js +223 -33
- package/dist/KyselyStorage.js.map +1 -1
- package/dist/Mailer.d.ts +116 -0
- package/dist/Mailer.d.ts.map +1 -0
- package/dist/Mailer.js +101 -0
- package/dist/Mailer.js.map +1 -0
- package/dist/Password.d.ts +107 -0
- package/dist/Password.d.ts.map +1 -0
- package/dist/Password.js +252 -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/Sessions.d.ts +73 -11
- package/dist/Sessions.d.ts.map +1 -1
- package/dist/Sessions.js +412 -1
- package/dist/Sessions.js.map +1 -1
- package/dist/Storage.d.ts +60 -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 +2 -1
- package/dist/StorageMigrations.d.ts.map +1 -1
- package/dist/StorageMigrations.js +33 -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/WaitUntil.d.ts.map +1 -1
- package/dist/WaitUntil.js +1 -1
- package/dist/WaitUntil.js.map +1 -1
- 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/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 +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -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/package.json +76 -20
package/dist/AuditLog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuditLog.d.ts","sourceRoot":"","sources":["../src/AuditLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"AuditLog.d.ts","sourceRoot":"","sources":["../src/AuditLog.ts"],"names":[],"mappings":"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"}
|
package/dist/AuditLog.js
CHANGED
|
@@ -7,6 +7,6 @@ export class AuditLog extends Context.Service()("auth/AuditLog") {
|
|
|
7
7
|
AuditLog.make = (service) => AuditLog.of(service);
|
|
8
8
|
})(AuditLog || (AuditLog = {}));
|
|
9
9
|
export const AuditLogNoopLive = Layer.succeed(AuditLog)(AuditLog.make({
|
|
10
|
-
emit: () => Effect.void
|
|
10
|
+
emit: () => Effect.void,
|
|
11
11
|
}));
|
|
12
12
|
//# sourceMappingURL=AuditLog.js.map
|
package/dist/AuditLog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuditLog.js","sourceRoot":"","sources":["../src/AuditLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"AuditLog.js","sourceRoot":"","sources":["../src/AuditLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAatD,MAAM,OAAO,aAAc,SAAQ,IAAI,CAAC,WAAW,CAAC,eAAe,CAGjE;CAAG;AA6DL,MAAM,OAAO,QAAS,SAAQ,OAAO,CAAC,OAAO,EAA6B,CACxE,eAAe,CAChB;CAAG;AAEJ,WAAiB,QAAQ;IACV,aAAI,GAAG,CAAC,OAAwB,EAAmB,EAAE,CAChE,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,EAHgB,QAAQ,KAAR,QAAQ,QAGxB;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CACrD,QAAQ,CAAC,IAAI,CAAC;IACZ,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;CACxB,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Context, Layer } from "effect";
|
|
2
|
+
import type { EmailVerificationSessionPolicyOptions } from "./AuthFlow.js";
|
|
3
|
+
import type { ChallengeOptions } from "./Challenge.js";
|
|
4
|
+
import { Crypto } from "./Crypto.js";
|
|
5
|
+
import type { CryptoError, CryptoKey } from "./Crypto.js";
|
|
6
|
+
import type { EmailOtpOptions } from "./EmailOtp.js";
|
|
7
|
+
import type { EmailVerificationOptions } from "./EmailVerification.js";
|
|
8
|
+
import type { Pbkdf2PasswordHasherOptions } from "./Password.js";
|
|
9
|
+
import type { PrivacyOptions } from "./Privacy.js";
|
|
10
|
+
import type { SessionCookieOptions, SessionsOptions } from "./Sessions.js";
|
|
11
|
+
export interface AuthSecretsShape {
|
|
12
|
+
readonly session: CryptoKey;
|
|
13
|
+
readonly challenge: CryptoKey;
|
|
14
|
+
readonly privacy: CryptoKey;
|
|
15
|
+
}
|
|
16
|
+
declare const AuthSecrets_base: Context.ServiceClass<AuthSecrets, "auth/AuthSecrets", AuthSecretsShape>;
|
|
17
|
+
export declare class AuthSecrets extends AuthSecrets_base {
|
|
18
|
+
}
|
|
19
|
+
export declare namespace AuthSecrets {
|
|
20
|
+
const make: (secrets: AuthSecretsShape) => AuthSecretsShape;
|
|
21
|
+
}
|
|
22
|
+
export declare const AuthSecretsLive: (secrets: AuthSecretsShape) => Layer.Layer<AuthSecrets, never, never>;
|
|
23
|
+
export interface AuthSecretsFromRootOptions {
|
|
24
|
+
readonly root: CryptoKey;
|
|
25
|
+
readonly namespace?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare const AuthSecretsFromRootLive: (options: AuthSecretsFromRootOptions) => Layer.Layer<AuthSecrets, CryptoError, Crypto>;
|
|
28
|
+
export type AuthSessionsConfig = Omit<SessionsOptions, "secret">;
|
|
29
|
+
export type AuthChallengeConfig = Omit<ChallengeOptions, "secret">;
|
|
30
|
+
export type AuthPrivacyConfig = Omit<PrivacyOptions, "secret">;
|
|
31
|
+
export declare const AuthSessionsConfig: Context.Reference<AuthSessionsConfig>;
|
|
32
|
+
export declare const AuthSessionCookieConfig: Context.Reference<SessionCookieOptions>;
|
|
33
|
+
export declare const AuthChallengeConfig: Context.Reference<AuthChallengeConfig>;
|
|
34
|
+
export declare const AuthPrivacyConfig: Context.Reference<AuthPrivacyConfig>;
|
|
35
|
+
export declare const AuthPasswordHasherConfig: Context.Reference<Pbkdf2PasswordHasherOptions>;
|
|
36
|
+
export declare const AuthEmailVerificationConfig: Context.Reference<EmailVerificationOptions>;
|
|
37
|
+
export declare const AuthEmailOtpConfig: Context.Reference<EmailOtpOptions>;
|
|
38
|
+
export declare const AuthEmailVerificationSessionPolicyConfig: Context.Reference<EmailVerificationSessionPolicyOptions>;
|
|
39
|
+
export interface AuthDomainConfigOptions {
|
|
40
|
+
readonly sessions?: AuthSessionsConfig;
|
|
41
|
+
readonly sessionCookie?: SessionCookieOptions;
|
|
42
|
+
readonly challenge?: AuthChallengeConfig;
|
|
43
|
+
readonly privacy?: AuthPrivacyConfig;
|
|
44
|
+
readonly passwordHasher?: Pbkdf2PasswordHasherOptions;
|
|
45
|
+
readonly emailOtp?: EmailOtpOptions;
|
|
46
|
+
readonly emailVerification?: EmailVerificationOptions;
|
|
47
|
+
readonly emailVerificationSessionPolicy?: EmailVerificationSessionPolicyOptions;
|
|
48
|
+
}
|
|
49
|
+
export declare const AuthDomainConfigLive: (options?: AuthDomainConfigOptions) => Layer.Layer<never, never, never>;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=AuthConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthConfig.d.ts","sourceRoot":"","sources":["../src/AuthConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,KAAK,EAAY,MAAM,QAAQ,CAAC;AAE1D,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;CAC7B;;AAED,qBAAa,WAAY,SAAQ,gBAGV;CAAG;AAE1B,yBAAiB,WAAW,CAAC;IACpB,MAAM,IAAI,GAAI,SAAS,gBAAgB,KAAG,gBACxB,CAAC;CAC3B;AAED,eAAO,MAAM,eAAe,GAAI,SAAS,gBAAgB,2CACF,CAAC;AAExD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAiBD,eAAO,MAAM,uBAAuB,GAClC,SAAS,0BAA0B,kDAapC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AACjE,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AACnE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AAE/D,eAAO,MAAM,kBAAkB,uCAG9B,CAAC;AAEF,eAAO,MAAM,uBAAuB,yCAGnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,wCAG/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,sCAG7B,CAAC;AAEF,eAAO,MAAM,wBAAwB,gDAGjC,CAAC;AAEL,eAAO,MAAM,2BAA2B,6CAGpC,CAAC;AAEL,eAAO,MAAM,kBAAkB,oCAG9B,CAAC;AAEF,eAAO,MAAM,wCAAwC,0DAIlD,CAAC;AAEJ,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,2BAA2B,CAAC;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IACtD,QAAQ,CAAC,8BAA8B,CAAC,EAAE,qCAAqC,CAAC;CACjF;AAED,eAAO,MAAM,oBAAoB,GAAI,UAAS,uBAA4B,qCA4BvE,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Context, Effect, Layer, Redacted } from "effect";
|
|
2
|
+
import { Crypto } from "./Crypto.js";
|
|
3
|
+
export class AuthSecrets extends Context.Service()("auth/AuthSecrets") {
|
|
4
|
+
}
|
|
5
|
+
(function (AuthSecrets) {
|
|
6
|
+
AuthSecrets.make = (secrets) => AuthSecrets.of(secrets);
|
|
7
|
+
})(AuthSecrets || (AuthSecrets = {}));
|
|
8
|
+
export const AuthSecretsLive = (secrets) => Layer.succeed(AuthSecrets)(AuthSecrets.make(secrets));
|
|
9
|
+
const deriveSecret = (root, namespace, purpose) => Effect.gen(function* () {
|
|
10
|
+
const crypto = yield* Crypto;
|
|
11
|
+
const value = yield* crypto.hmacSha256({
|
|
12
|
+
key: root,
|
|
13
|
+
data: `${namespace}.${purpose}`,
|
|
14
|
+
});
|
|
15
|
+
return Redacted.make(value);
|
|
16
|
+
});
|
|
17
|
+
export const AuthSecretsFromRootLive = (options) => {
|
|
18
|
+
const namespace = options.namespace ?? "auth.secret.v1";
|
|
19
|
+
return Layer.effect(AuthSecrets)(Effect.gen(function* () {
|
|
20
|
+
return AuthSecrets.make({
|
|
21
|
+
session: yield* deriveSecret(options.root, namespace, "session"),
|
|
22
|
+
challenge: yield* deriveSecret(options.root, namespace, "challenge"),
|
|
23
|
+
privacy: yield* deriveSecret(options.root, namespace, "privacy"),
|
|
24
|
+
});
|
|
25
|
+
}));
|
|
26
|
+
};
|
|
27
|
+
export const AuthSessionsConfig = Context.Reference("auth/config/Sessions", { defaultValue: () => ({}) });
|
|
28
|
+
export const AuthSessionCookieConfig = Context.Reference("auth/config/SessionCookie", { defaultValue: () => ({}) });
|
|
29
|
+
export const AuthChallengeConfig = Context.Reference("auth/config/Challenge", { defaultValue: () => ({}) });
|
|
30
|
+
export const AuthPrivacyConfig = Context.Reference("auth/config/Privacy", { defaultValue: () => ({}) });
|
|
31
|
+
export const AuthPasswordHasherConfig = Context.Reference("auth/config/PasswordHasher", {
|
|
32
|
+
defaultValue: () => ({}),
|
|
33
|
+
});
|
|
34
|
+
export const AuthEmailVerificationConfig = Context.Reference("auth/config/EmailVerification", {
|
|
35
|
+
defaultValue: () => ({}),
|
|
36
|
+
});
|
|
37
|
+
export const AuthEmailOtpConfig = Context.Reference("auth/config/EmailOtp", { defaultValue: () => ({}) });
|
|
38
|
+
export const AuthEmailVerificationSessionPolicyConfig = Context.Reference("auth/config/EmailVerificationSessionPolicy", { defaultValue: () => ({}) });
|
|
39
|
+
export const AuthDomainConfigLive = (options = {}) => Layer.mergeAll(options.sessions === undefined
|
|
40
|
+
? Layer.empty
|
|
41
|
+
: Layer.succeed(AuthSessionsConfig)(options.sessions), options.sessionCookie === undefined
|
|
42
|
+
? Layer.empty
|
|
43
|
+
: Layer.succeed(AuthSessionCookieConfig)(options.sessionCookie), options.challenge === undefined
|
|
44
|
+
? Layer.empty
|
|
45
|
+
: Layer.succeed(AuthChallengeConfig)(options.challenge), options.privacy === undefined
|
|
46
|
+
? Layer.empty
|
|
47
|
+
: Layer.succeed(AuthPrivacyConfig)(options.privacy), options.passwordHasher === undefined
|
|
48
|
+
? Layer.empty
|
|
49
|
+
: Layer.succeed(AuthPasswordHasherConfig)(options.passwordHasher), options.emailOtp === undefined
|
|
50
|
+
? Layer.empty
|
|
51
|
+
: Layer.succeed(AuthEmailOtpConfig)(options.emailOtp), options.emailVerification === undefined
|
|
52
|
+
? Layer.empty
|
|
53
|
+
: Layer.succeed(AuthEmailVerificationConfig)(options.emailVerification), options.emailVerificationSessionPolicy === undefined
|
|
54
|
+
? Layer.empty
|
|
55
|
+
: Layer.succeed(AuthEmailVerificationSessionPolicyConfig)(options.emailVerificationSessionPolicy));
|
|
56
|
+
//# sourceMappingURL=AuthConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthConfig.js","sourceRoot":"","sources":["../src/AuthConfig.ts"],"names":[],"mappings":"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"}
|
package/dist/AuthFlow.d.ts
CHANGED
|
@@ -1,59 +1,310 @@
|
|
|
1
|
-
import { Context, Effect } from "effect";
|
|
2
|
-
import
|
|
3
|
-
import type {
|
|
1
|
+
import { Context, Data, Effect, Layer } from "effect";
|
|
2
|
+
import { AuthFlowId } from "./Identifiers.js";
|
|
3
|
+
import type { Email, OAuthProviderId, UserId } from "./Identifiers.js";
|
|
4
|
+
import { Sessions } from "./Sessions.js";
|
|
5
|
+
import type { AuthAssuranceLevel, AuthMethodReference, IssuedSession, SessionCreateError, SessionClaims, SessionsService } from "./Sessions.js";
|
|
4
6
|
export type AuthMethod = "password" | "email-otp" | "magic-link" | "passkey" | "oauth" | "totp" | "backup-code" | (string & {});
|
|
5
|
-
export type
|
|
7
|
+
export type EmailVerificationSessionMode = "allow-unverified" | "limited-session" | "require-before-session";
|
|
8
|
+
export interface EmailVerificationSessionPolicyOptions {
|
|
9
|
+
readonly mode?: EmailVerificationSessionMode;
|
|
10
|
+
}
|
|
11
|
+
export interface EmailVerificationSessionPolicyInput {
|
|
12
|
+
readonly claims?: SessionClaims;
|
|
13
|
+
}
|
|
14
|
+
export type EmailVerificationSessionPolicyDecision = {
|
|
15
|
+
readonly _tag: "CreateSession";
|
|
16
|
+
readonly claims?: SessionClaims;
|
|
17
|
+
} | {
|
|
18
|
+
readonly _tag: "RequiresEmailVerification";
|
|
19
|
+
};
|
|
20
|
+
export interface EmailVerificationSessionPolicyService {
|
|
21
|
+
readonly decide: (input: EmailVerificationSessionPolicyInput) => Effect.Effect<EmailVerificationSessionPolicyDecision>;
|
|
22
|
+
}
|
|
23
|
+
declare const EmailVerificationSessionPolicy_base: Context.ServiceClass<EmailVerificationSessionPolicy, "auth/EmailVerificationSessionPolicy", EmailVerificationSessionPolicyService>;
|
|
24
|
+
export declare class EmailVerificationSessionPolicy extends EmailVerificationSessionPolicy_base {
|
|
25
|
+
}
|
|
26
|
+
export declare namespace EmailVerificationSessionPolicy {
|
|
27
|
+
const make: (service: EmailVerificationSessionPolicyService) => EmailVerificationSessionPolicyService;
|
|
28
|
+
}
|
|
29
|
+
export declare const makeEmailVerificationSessionPolicy: (options?: EmailVerificationSessionPolicyOptions) => EmailVerificationSessionPolicyService;
|
|
30
|
+
export declare const EmailVerificationSessionPolicyLive: (options?: EmailVerificationSessionPolicyOptions) => Layer.Layer<EmailVerificationSessionPolicy, never, never>;
|
|
6
31
|
export interface MfaFactor {
|
|
7
32
|
readonly type: "totp" | "backup-code" | "passkey" | (string & {});
|
|
8
33
|
}
|
|
9
|
-
export interface PrimaryFactorResult {
|
|
34
|
+
export interface PrimaryFactorResult<Method extends AuthMethod = AuthMethod> {
|
|
10
35
|
readonly userId: UserId;
|
|
11
|
-
readonly
|
|
12
|
-
readonly
|
|
36
|
+
readonly email?: Email;
|
|
37
|
+
readonly method: Method;
|
|
38
|
+
readonly amr: readonly AuthMethodReference[];
|
|
13
39
|
readonly aal: AuthAssuranceLevel;
|
|
40
|
+
readonly claims?: SessionClaims;
|
|
14
41
|
}
|
|
15
42
|
export interface MfaCompleteInput {
|
|
16
43
|
readonly flowId: AuthFlowId;
|
|
17
44
|
readonly method: AuthMethod;
|
|
18
|
-
readonly amr:
|
|
45
|
+
readonly amr: readonly AuthMethodReference[];
|
|
19
46
|
readonly aal: AuthAssuranceLevel;
|
|
20
47
|
}
|
|
21
|
-
export interface AuthFlowCompleteInput {
|
|
48
|
+
export interface AuthFlowCompleteInput<Method extends AuthMethod = AuthMethod> {
|
|
22
49
|
readonly userId: UserId;
|
|
23
|
-
readonly method:
|
|
24
|
-
readonly amr:
|
|
50
|
+
readonly method: Method;
|
|
51
|
+
readonly amr: readonly AuthMethodReference[];
|
|
25
52
|
readonly aal: AuthAssuranceLevel;
|
|
53
|
+
readonly claims?: SessionClaims;
|
|
26
54
|
}
|
|
27
|
-
export type AuthResult = {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
55
|
+
export type AuthResult = Data.TaggedEnum<{
|
|
56
|
+
Authenticated: {
|
|
57
|
+
readonly session: IssuedSession;
|
|
58
|
+
};
|
|
59
|
+
RequiresMfa: {
|
|
60
|
+
readonly flowId: AuthFlowId;
|
|
61
|
+
readonly factors: readonly MfaFactor[];
|
|
62
|
+
};
|
|
63
|
+
RequiresEmailVerification: {
|
|
64
|
+
readonly flowId: AuthFlowId;
|
|
65
|
+
readonly userId?: UserId;
|
|
66
|
+
readonly email?: Email;
|
|
67
|
+
};
|
|
68
|
+
RequiresPasskeyEnrollment: {
|
|
69
|
+
readonly flowId: AuthFlowId;
|
|
70
|
+
};
|
|
71
|
+
RequiresExplicitLinking: {
|
|
72
|
+
readonly flowId: AuthFlowId;
|
|
73
|
+
readonly provider: OAuthProviderId;
|
|
74
|
+
};
|
|
75
|
+
InvalidCredentials: {};
|
|
76
|
+
AccountDisabled: {};
|
|
77
|
+
PolicyDenied: {
|
|
78
|
+
readonly reason?: string;
|
|
79
|
+
};
|
|
80
|
+
}>;
|
|
81
|
+
export declare const AuthResult: {
|
|
82
|
+
readonly RequiresEmailVerification: Data.TaggedEnum.ConstructorFrom<{
|
|
83
|
+
readonly _tag: "RequiresEmailVerification";
|
|
84
|
+
readonly flowId: AuthFlowId;
|
|
85
|
+
readonly userId?: UserId | undefined;
|
|
86
|
+
readonly email?: Email | undefined;
|
|
87
|
+
}, "_tag">;
|
|
88
|
+
readonly Authenticated: Data.TaggedEnum.ConstructorFrom<{
|
|
89
|
+
readonly _tag: "Authenticated";
|
|
90
|
+
readonly session: IssuedSession;
|
|
91
|
+
}, "_tag">;
|
|
92
|
+
readonly RequiresMfa: Data.TaggedEnum.ConstructorFrom<{
|
|
93
|
+
readonly _tag: "RequiresMfa";
|
|
94
|
+
readonly flowId: AuthFlowId;
|
|
95
|
+
readonly factors: readonly MfaFactor[];
|
|
96
|
+
}, "_tag">;
|
|
97
|
+
readonly RequiresPasskeyEnrollment: Data.TaggedEnum.ConstructorFrom<{
|
|
98
|
+
readonly _tag: "RequiresPasskeyEnrollment";
|
|
99
|
+
readonly flowId: AuthFlowId;
|
|
100
|
+
}, "_tag">;
|
|
101
|
+
readonly RequiresExplicitLinking: Data.TaggedEnum.ConstructorFrom<{
|
|
102
|
+
readonly _tag: "RequiresExplicitLinking";
|
|
103
|
+
readonly flowId: AuthFlowId;
|
|
104
|
+
readonly provider: OAuthProviderId;
|
|
105
|
+
}, "_tag">;
|
|
106
|
+
readonly InvalidCredentials: Data.TaggedEnum.ConstructorFrom<{
|
|
107
|
+
readonly _tag: "InvalidCredentials";
|
|
108
|
+
}, "_tag">;
|
|
109
|
+
readonly AccountDisabled: Data.TaggedEnum.ConstructorFrom<{
|
|
110
|
+
readonly _tag: "AccountDisabled";
|
|
111
|
+
}, "_tag">;
|
|
112
|
+
readonly PolicyDenied: Data.TaggedEnum.ConstructorFrom<{
|
|
113
|
+
readonly _tag: "PolicyDenied";
|
|
114
|
+
readonly reason?: string | undefined;
|
|
115
|
+
}, "_tag">;
|
|
116
|
+
readonly $is: <Tag extends "RequiresEmailVerification" | "Authenticated" | "RequiresMfa" | "RequiresPasskeyEnrollment" | "RequiresExplicitLinking" | "InvalidCredentials" | "AccountDisabled" | "PolicyDenied">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
117
|
+
readonly _tag: "RequiresEmailVerification";
|
|
118
|
+
readonly flowId: AuthFlowId;
|
|
119
|
+
readonly userId?: UserId | undefined;
|
|
120
|
+
readonly email?: Email | undefined;
|
|
121
|
+
}, {
|
|
122
|
+
readonly _tag: Tag;
|
|
123
|
+
}> | Extract<{
|
|
124
|
+
readonly _tag: "Authenticated";
|
|
125
|
+
readonly session: IssuedSession;
|
|
126
|
+
}, {
|
|
127
|
+
readonly _tag: Tag;
|
|
128
|
+
}> | Extract<{
|
|
129
|
+
readonly _tag: "RequiresMfa";
|
|
130
|
+
readonly flowId: AuthFlowId;
|
|
131
|
+
readonly factors: readonly MfaFactor[];
|
|
132
|
+
}, {
|
|
133
|
+
readonly _tag: Tag;
|
|
134
|
+
}> | Extract<{
|
|
135
|
+
readonly _tag: "RequiresPasskeyEnrollment";
|
|
136
|
+
readonly flowId: AuthFlowId;
|
|
137
|
+
}, {
|
|
138
|
+
readonly _tag: Tag;
|
|
139
|
+
}> | Extract<{
|
|
140
|
+
readonly _tag: "RequiresExplicitLinking";
|
|
141
|
+
readonly flowId: AuthFlowId;
|
|
142
|
+
readonly provider: OAuthProviderId;
|
|
143
|
+
}, {
|
|
144
|
+
readonly _tag: Tag;
|
|
145
|
+
}> | Extract<{
|
|
146
|
+
readonly _tag: "InvalidCredentials";
|
|
147
|
+
}, {
|
|
148
|
+
readonly _tag: Tag;
|
|
149
|
+
}> | Extract<{
|
|
150
|
+
readonly _tag: "AccountDisabled";
|
|
151
|
+
}, {
|
|
152
|
+
readonly _tag: Tag;
|
|
153
|
+
}> | Extract<{
|
|
154
|
+
readonly _tag: "PolicyDenied";
|
|
155
|
+
readonly reason?: string | undefined;
|
|
156
|
+
}, {
|
|
157
|
+
readonly _tag: Tag;
|
|
158
|
+
}>;
|
|
159
|
+
readonly $match: {
|
|
160
|
+
<Cases extends {
|
|
161
|
+
readonly RequiresEmailVerification: (args: {
|
|
162
|
+
readonly _tag: "RequiresEmailVerification";
|
|
163
|
+
readonly flowId: AuthFlowId;
|
|
164
|
+
readonly userId?: UserId | undefined;
|
|
165
|
+
readonly email?: Email | undefined;
|
|
166
|
+
}) => any;
|
|
167
|
+
readonly Authenticated: (args: {
|
|
168
|
+
readonly _tag: "Authenticated";
|
|
169
|
+
readonly session: IssuedSession;
|
|
170
|
+
}) => any;
|
|
171
|
+
readonly RequiresMfa: (args: {
|
|
172
|
+
readonly _tag: "RequiresMfa";
|
|
173
|
+
readonly flowId: AuthFlowId;
|
|
174
|
+
readonly factors: readonly MfaFactor[];
|
|
175
|
+
}) => any;
|
|
176
|
+
readonly RequiresPasskeyEnrollment: (args: {
|
|
177
|
+
readonly _tag: "RequiresPasskeyEnrollment";
|
|
178
|
+
readonly flowId: AuthFlowId;
|
|
179
|
+
}) => any;
|
|
180
|
+
readonly RequiresExplicitLinking: (args: {
|
|
181
|
+
readonly _tag: "RequiresExplicitLinking";
|
|
182
|
+
readonly flowId: AuthFlowId;
|
|
183
|
+
readonly provider: OAuthProviderId;
|
|
184
|
+
}) => any;
|
|
185
|
+
readonly InvalidCredentials: (args: {
|
|
186
|
+
readonly _tag: "InvalidCredentials";
|
|
187
|
+
}) => any;
|
|
188
|
+
readonly AccountDisabled: (args: {
|
|
189
|
+
readonly _tag: "AccountDisabled";
|
|
190
|
+
}) => any;
|
|
191
|
+
readonly PolicyDenied: (args: {
|
|
192
|
+
readonly _tag: "PolicyDenied";
|
|
193
|
+
readonly reason?: string | undefined;
|
|
194
|
+
}) => any;
|
|
195
|
+
}>(cases: Cases): (value: {
|
|
196
|
+
readonly _tag: "RequiresEmailVerification";
|
|
197
|
+
readonly flowId: AuthFlowId;
|
|
198
|
+
readonly userId?: UserId | undefined;
|
|
199
|
+
readonly email?: Email | undefined;
|
|
200
|
+
} | {
|
|
201
|
+
readonly _tag: "Authenticated";
|
|
202
|
+
readonly session: IssuedSession;
|
|
203
|
+
} | {
|
|
204
|
+
readonly _tag: "RequiresMfa";
|
|
205
|
+
readonly flowId: AuthFlowId;
|
|
206
|
+
readonly factors: readonly MfaFactor[];
|
|
207
|
+
} | {
|
|
208
|
+
readonly _tag: "RequiresPasskeyEnrollment";
|
|
209
|
+
readonly flowId: AuthFlowId;
|
|
210
|
+
} | {
|
|
211
|
+
readonly _tag: "RequiresExplicitLinking";
|
|
212
|
+
readonly flowId: AuthFlowId;
|
|
213
|
+
readonly provider: OAuthProviderId;
|
|
214
|
+
} | {
|
|
215
|
+
readonly _tag: "InvalidCredentials";
|
|
216
|
+
} | {
|
|
217
|
+
readonly _tag: "AccountDisabled";
|
|
218
|
+
} | {
|
|
219
|
+
readonly _tag: "PolicyDenied";
|
|
220
|
+
readonly reason?: string | undefined;
|
|
221
|
+
}) => import("effect/Unify").Unify<ReturnType<Cases["RequiresEmailVerification" | "Authenticated" | "RequiresMfa" | "RequiresPasskeyEnrollment" | "RequiresExplicitLinking" | "InvalidCredentials" | "AccountDisabled" | "PolicyDenied"]>>;
|
|
222
|
+
<Cases extends {
|
|
223
|
+
readonly RequiresEmailVerification: (args: {
|
|
224
|
+
readonly _tag: "RequiresEmailVerification";
|
|
225
|
+
readonly flowId: AuthFlowId;
|
|
226
|
+
readonly userId?: UserId | undefined;
|
|
227
|
+
readonly email?: Email | undefined;
|
|
228
|
+
}) => any;
|
|
229
|
+
readonly Authenticated: (args: {
|
|
230
|
+
readonly _tag: "Authenticated";
|
|
231
|
+
readonly session: IssuedSession;
|
|
232
|
+
}) => any;
|
|
233
|
+
readonly RequiresMfa: (args: {
|
|
234
|
+
readonly _tag: "RequiresMfa";
|
|
235
|
+
readonly flowId: AuthFlowId;
|
|
236
|
+
readonly factors: readonly MfaFactor[];
|
|
237
|
+
}) => any;
|
|
238
|
+
readonly RequiresPasskeyEnrollment: (args: {
|
|
239
|
+
readonly _tag: "RequiresPasskeyEnrollment";
|
|
240
|
+
readonly flowId: AuthFlowId;
|
|
241
|
+
}) => any;
|
|
242
|
+
readonly RequiresExplicitLinking: (args: {
|
|
243
|
+
readonly _tag: "RequiresExplicitLinking";
|
|
244
|
+
readonly flowId: AuthFlowId;
|
|
245
|
+
readonly provider: OAuthProviderId;
|
|
246
|
+
}) => any;
|
|
247
|
+
readonly InvalidCredentials: (args: {
|
|
248
|
+
readonly _tag: "InvalidCredentials";
|
|
249
|
+
}) => any;
|
|
250
|
+
readonly AccountDisabled: (args: {
|
|
251
|
+
readonly _tag: "AccountDisabled";
|
|
252
|
+
}) => any;
|
|
253
|
+
readonly PolicyDenied: (args: {
|
|
254
|
+
readonly _tag: "PolicyDenied";
|
|
255
|
+
readonly reason?: string | undefined;
|
|
256
|
+
}) => any;
|
|
257
|
+
}>(value: {
|
|
258
|
+
readonly _tag: "RequiresEmailVerification";
|
|
259
|
+
readonly flowId: AuthFlowId;
|
|
260
|
+
readonly userId?: UserId | undefined;
|
|
261
|
+
readonly email?: Email | undefined;
|
|
262
|
+
} | {
|
|
263
|
+
readonly _tag: "Authenticated";
|
|
264
|
+
readonly session: IssuedSession;
|
|
265
|
+
} | {
|
|
266
|
+
readonly _tag: "RequiresMfa";
|
|
267
|
+
readonly flowId: AuthFlowId;
|
|
268
|
+
readonly factors: readonly MfaFactor[];
|
|
269
|
+
} | {
|
|
270
|
+
readonly _tag: "RequiresPasskeyEnrollment";
|
|
271
|
+
readonly flowId: AuthFlowId;
|
|
272
|
+
} | {
|
|
273
|
+
readonly _tag: "RequiresExplicitLinking";
|
|
274
|
+
readonly flowId: AuthFlowId;
|
|
275
|
+
readonly provider: OAuthProviderId;
|
|
276
|
+
} | {
|
|
277
|
+
readonly _tag: "InvalidCredentials";
|
|
278
|
+
} | {
|
|
279
|
+
readonly _tag: "AccountDisabled";
|
|
280
|
+
} | {
|
|
281
|
+
readonly _tag: "PolicyDenied";
|
|
282
|
+
readonly reason?: string | undefined;
|
|
283
|
+
}, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["RequiresEmailVerification" | "Authenticated" | "RequiresMfa" | "RequiresPasskeyEnrollment" | "RequiresExplicitLinking" | "InvalidCredentials" | "AccountDisabled" | "PolicyDenied"]>>;
|
|
284
|
+
};
|
|
43
285
|
};
|
|
44
|
-
|
|
45
|
-
readonly _tag:
|
|
286
|
+
export type AuthResultOf<Tag extends AuthResult["_tag"]> = Extract<AuthResult, {
|
|
287
|
+
readonly _tag: Tag;
|
|
288
|
+
}>;
|
|
289
|
+
export type AuthenticatedResult = AuthResultOf<"Authenticated">;
|
|
290
|
+
type CommonPrimaryFactorResult = AuthResultOf<"Authenticated" | "RequiresMfa" | "RequiresEmailVerification" | "RequiresPasskeyEnrollment" | "PolicyDenied">;
|
|
291
|
+
export type AuthFlowPrimaryFactorResult<Method extends AuthMethod = AuthMethod> = CommonPrimaryFactorResult | (Method extends "oauth" ? AuthResultOf<"RequiresExplicitLinking"> : never);
|
|
292
|
+
export type AuthFlowMfaResult = AuthResultOf<"Authenticated" | "PolicyDenied">;
|
|
293
|
+
declare const AuthFlowStateError_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 & {
|
|
294
|
+
readonly _tag: "AuthFlowStateError";
|
|
46
295
|
} & Readonly<A>;
|
|
47
|
-
export declare class
|
|
296
|
+
export declare class AuthFlowStateError extends AuthFlowStateError_base<{
|
|
48
297
|
readonly message: string;
|
|
49
298
|
readonly cause?: unknown;
|
|
50
299
|
}> {
|
|
51
300
|
}
|
|
301
|
+
export type AuthFlowCompleteError = SessionCreateError;
|
|
302
|
+
export type AuthFlowError = AuthFlowStateError | AuthFlowCompleteError;
|
|
52
303
|
export interface AuthFlowService {
|
|
53
|
-
readonly startPrimaryFactor: (input: PrimaryFactorResult) => Effect.Effect<
|
|
54
|
-
readonly completePrimaryFactor: (input: PrimaryFactorResult) => Effect.Effect<
|
|
55
|
-
readonly completeMfa: (input: MfaCompleteInput) => Effect.Effect<
|
|
56
|
-
readonly complete: (input: AuthFlowCompleteInput) => Effect.Effect<
|
|
304
|
+
readonly startPrimaryFactor: <Method extends AuthMethod>(input: PrimaryFactorResult<Method>) => Effect.Effect<AuthFlowPrimaryFactorResult<Method>, AuthFlowCompleteError>;
|
|
305
|
+
readonly completePrimaryFactor: <Method extends AuthMethod>(input: PrimaryFactorResult<Method>) => Effect.Effect<AuthFlowPrimaryFactorResult<Method>, AuthFlowCompleteError>;
|
|
306
|
+
readonly completeMfa: (input: MfaCompleteInput) => Effect.Effect<AuthFlowMfaResult, AuthFlowStateError>;
|
|
307
|
+
readonly complete: <Method extends AuthMethod>(input: AuthFlowCompleteInput<Method>) => Effect.Effect<AuthenticatedResult, AuthFlowCompleteError>;
|
|
57
308
|
}
|
|
58
309
|
declare const AuthFlow_base: Context.ServiceClass<AuthFlow, "auth/AuthFlow", AuthFlowService>;
|
|
59
310
|
export declare class AuthFlow extends AuthFlow_base {
|
|
@@ -61,6 +312,12 @@ export declare class AuthFlow extends AuthFlow_base {
|
|
|
61
312
|
export declare namespace AuthFlow {
|
|
62
313
|
const make: (service: AuthFlowService) => AuthFlowService;
|
|
63
314
|
}
|
|
64
|
-
export
|
|
315
|
+
export interface AuthFlowDependencies {
|
|
316
|
+
readonly sessions: SessionsService;
|
|
317
|
+
readonly emailVerificationSessionPolicy?: EmailVerificationSessionPolicyService;
|
|
318
|
+
}
|
|
319
|
+
export declare const makeAuthFlow: (dependencies: AuthFlowDependencies) => AuthFlowService;
|
|
320
|
+
export declare const AuthFlowLive: Layer.Layer<AuthFlow, never, Sessions>;
|
|
321
|
+
export declare const AuthFlowLiveWithEmailVerificationPolicy: (options?: EmailVerificationSessionPolicyOptions) => Layer.Layer<AuthFlow, never, Sessions>;
|
|
65
322
|
export {};
|
|
66
323
|
//# sourceMappingURL=AuthFlow.d.ts.map
|
package/dist/AuthFlow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthFlow.d.ts","sourceRoot":"","sources":["../src/AuthFlow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"AuthFlow.d.ts","sourceRoot":"","sources":["../src/AuthFlow.ts"],"names":[],"mappings":"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"}
|