@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.
Files changed (143) hide show
  1. package/README.md +622 -61
  2. package/dist/AuditLog.d.ts.map +1 -1
  3. package/dist/AuditLog.js +1 -1
  4. package/dist/AuditLog.js.map +1 -1
  5. package/dist/AuthConfig.d.ts +51 -0
  6. package/dist/AuthConfig.d.ts.map +1 -0
  7. package/dist/AuthConfig.js +56 -0
  8. package/dist/AuthConfig.js.map +1 -0
  9. package/dist/AuthFlow.d.ts +292 -35
  10. package/dist/AuthFlow.d.ts.map +1 -1
  11. package/dist/AuthFlow.js +130 -6
  12. package/dist/AuthFlow.js.map +1 -1
  13. package/dist/AuthKernel.d.ts +3 -0
  14. package/dist/AuthKernel.d.ts.map +1 -0
  15. package/dist/AuthKernel.js +9 -0
  16. package/dist/AuthKernel.js.map +1 -0
  17. package/dist/Challenge.d.ts +19 -3
  18. package/dist/Challenge.d.ts.map +1 -1
  19. package/dist/Challenge.js +157 -1
  20. package/dist/Challenge.js.map +1 -1
  21. package/dist/Client.d.ts +36 -0
  22. package/dist/Client.d.ts.map +1 -0
  23. package/dist/Client.js +55 -0
  24. package/dist/Client.js.map +1 -0
  25. package/dist/Crypto.d.ts +6 -1
  26. package/dist/Crypto.d.ts.map +1 -1
  27. package/dist/Crypto.js +62 -1
  28. package/dist/Crypto.js.map +1 -1
  29. package/dist/D1Kysely.d.ts +6 -3
  30. package/dist/D1Kysely.d.ts.map +1 -1
  31. package/dist/D1Kysely.js +8 -5
  32. package/dist/D1Kysely.js.map +1 -1
  33. package/dist/EffectQbSqliteStorage.d.ts +183 -0
  34. package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
  35. package/dist/EffectQbSqliteStorage.js +446 -0
  36. package/dist/EffectQbSqliteStorage.js.map +1 -0
  37. package/dist/EmailOtp.d.ts +117 -0
  38. package/dist/EmailOtp.d.ts.map +1 -0
  39. package/dist/EmailOtp.js +279 -0
  40. package/dist/EmailOtp.js.map +1 -0
  41. package/dist/EmailVerification.d.ts +121 -0
  42. package/dist/EmailVerification.d.ts.map +1 -0
  43. package/dist/EmailVerification.js +201 -0
  44. package/dist/EmailVerification.js.map +1 -0
  45. package/dist/HttpApi/Api.d.ts +175 -0
  46. package/dist/HttpApi/Api.d.ts.map +1 -0
  47. package/dist/HttpApi/Api.js +340 -0
  48. package/dist/HttpApi/Api.js.map +1 -0
  49. package/dist/HttpApi/Endpoints.d.ts +92 -0
  50. package/dist/HttpApi/Endpoints.d.ts.map +1 -0
  51. package/dist/HttpApi/Endpoints.js +48 -0
  52. package/dist/HttpApi/Endpoints.js.map +1 -0
  53. package/dist/HttpApi/Errors.d.ts +82 -0
  54. package/dist/HttpApi/Errors.d.ts.map +1 -0
  55. package/dist/HttpApi/Errors.js +184 -0
  56. package/dist/HttpApi/Errors.js.map +1 -0
  57. package/dist/HttpApi/Schemas.d.ts +86 -0
  58. package/dist/HttpApi/Schemas.d.ts.map +1 -0
  59. package/dist/HttpApi/Schemas.js +63 -0
  60. package/dist/HttpApi/Schemas.js.map +1 -0
  61. package/dist/HttpApi/Security.d.ts +147 -0
  62. package/dist/HttpApi/Security.d.ts.map +1 -0
  63. package/dist/HttpApi/Security.js +439 -0
  64. package/dist/HttpApi/Security.js.map +1 -0
  65. package/dist/HttpApi/Transport.d.ts +31 -0
  66. package/dist/HttpApi/Transport.d.ts.map +1 -0
  67. package/dist/HttpApi/Transport.js +169 -0
  68. package/dist/HttpApi/Transport.js.map +1 -0
  69. package/dist/HttpApi/index.d.ts +8 -0
  70. package/dist/HttpApi/index.d.ts.map +1 -0
  71. package/dist/HttpApi/index.js +7 -0
  72. package/dist/HttpApi/index.js.map +1 -0
  73. package/dist/HttpApi.d.ts +2 -0
  74. package/dist/HttpApi.d.ts.map +1 -0
  75. package/dist/HttpApi.js +2 -0
  76. package/dist/HttpApi.js.map +1 -0
  77. package/dist/Identifiers.d.ts.map +1 -1
  78. package/dist/Identifiers.js.map +1 -1
  79. package/dist/Internal.d.ts +7 -0
  80. package/dist/Internal.d.ts.map +1 -0
  81. package/dist/Internal.js +12 -0
  82. package/dist/Internal.js.map +1 -0
  83. package/dist/KyselyStorage.d.ts +28 -2
  84. package/dist/KyselyStorage.d.ts.map +1 -1
  85. package/dist/KyselyStorage.js +223 -33
  86. package/dist/KyselyStorage.js.map +1 -1
  87. package/dist/Mailer.d.ts +116 -0
  88. package/dist/Mailer.d.ts.map +1 -0
  89. package/dist/Mailer.js +101 -0
  90. package/dist/Mailer.js.map +1 -0
  91. package/dist/Password.d.ts +107 -0
  92. package/dist/Password.d.ts.map +1 -0
  93. package/dist/Password.js +252 -0
  94. package/dist/Password.js.map +1 -0
  95. package/dist/Policy.d.ts +7 -4
  96. package/dist/Policy.d.ts.map +1 -1
  97. package/dist/Policy.js +28 -5
  98. package/dist/Policy.js.map +1 -1
  99. package/dist/Privacy.d.ts +15 -0
  100. package/dist/Privacy.d.ts.map +1 -1
  101. package/dist/Privacy.js +58 -1
  102. package/dist/Privacy.js.map +1 -1
  103. package/dist/RateLimiter.d.ts +104 -0
  104. package/dist/RateLimiter.d.ts.map +1 -0
  105. package/dist/RateLimiter.js +118 -0
  106. package/dist/RateLimiter.js.map +1 -0
  107. package/dist/Sessions.d.ts +73 -11
  108. package/dist/Sessions.d.ts.map +1 -1
  109. package/dist/Sessions.js +412 -1
  110. package/dist/Sessions.js.map +1 -1
  111. package/dist/Storage.d.ts +60 -5
  112. package/dist/Storage.d.ts.map +1 -1
  113. package/dist/Storage.js +11 -1
  114. package/dist/Storage.js.map +1 -1
  115. package/dist/StorageMigrations.d.ts +2 -1
  116. package/dist/StorageMigrations.d.ts.map +1 -1
  117. package/dist/StorageMigrations.js +33 -2
  118. package/dist/StorageMigrations.js.map +1 -1
  119. package/dist/Testing.d.ts +9 -1
  120. package/dist/Testing.d.ts.map +1 -1
  121. package/dist/Testing.js +30 -2
  122. package/dist/Testing.js.map +1 -1
  123. package/dist/WaitUntil.d.ts.map +1 -1
  124. package/dist/WaitUntil.js +1 -1
  125. package/dist/WaitUntil.js.map +1 -1
  126. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +34 -0
  127. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  128. package/dist/alchemy/cloudflare/RateLimitDurableObject.js +30 -0
  129. package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -0
  130. package/dist/cloudflare/RateLimitDurableObject.d.ts +50 -0
  131. package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  132. package/dist/cloudflare/RateLimitDurableObject.js +51 -0
  133. package/dist/cloudflare/RateLimitDurableObject.js.map +1 -0
  134. package/dist/index.d.ts +6 -0
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +6 -0
  137. package/dist/index.js.map +1 -1
  138. package/dist/internal/RateLimitDurableObject.d.ts +32 -0
  139. package/dist/internal/RateLimitDurableObject.d.ts.map +1 -0
  140. package/dist/internal/RateLimitDurableObject.js +80 -0
  141. package/dist/internal/RateLimitDurableObject.js.map +1 -0
  142. package/migrations/0002_auth_password.sql +25 -0
  143. package/package.json +76 -20
@@ -0,0 +1,92 @@
1
+ import { HttpApiEndpoint, HttpApiSchema } from "effect/unstable/httpapi";
2
+ import { AuthBadRequestError, AuthEmailAlreadyRegisteredError, AuthInternalError, AuthInvalidCredentialsError, AuthPolicyDeniedError, AuthRateLimitedError, AuthUnauthenticatedError } from "./Errors.js";
3
+ export declare const passwordSignInEndpoint: HttpApiEndpoint.HttpApiEndpoint<"signIn", "POST", "/sign-in", HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<import("effect/Schema").Struct<{
4
+ readonly email: import("effect/Schema").brand<import("effect/Schema").String, "auth/Email">;
5
+ readonly password: import("effect/Schema").String;
6
+ }>>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
7
+ readonly type: import("effect/Schema").Literal<"authenticated">;
8
+ readonly expiresAt: import("effect/Schema").Number;
9
+ readonly aal: import("effect/Schema").Literals<readonly ["aal1", "aal2", "aal3"]>;
10
+ readonly amr: import("effect/Schema").$Array<import("effect/Schema").String>;
11
+ readonly claims: import("effect/Schema").optional<import("effect/Schema").Struct<{
12
+ readonly emailVerified: import("effect/Schema").optional<import("effect/Schema").Boolean>;
13
+ readonly requirements: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").String>>;
14
+ }>>;
15
+ }>, import("effect/Schema").Struct<{
16
+ readonly type: import("effect/Schema").Literal<"requires_mfa">;
17
+ readonly flowId: import("effect/Schema").String;
18
+ readonly factors: import("effect/Schema").$Array<import("effect/Schema").Struct<{
19
+ readonly type: import("effect/Schema").String;
20
+ }>>;
21
+ }>, import("effect/Schema").Struct<{
22
+ readonly type: import("effect/Schema").Literal<"requires_email_verification">;
23
+ readonly flowId: import("effect/Schema").String;
24
+ }>, import("effect/Schema").Struct<{
25
+ readonly type: import("effect/Schema").Literal<"requires_passkey_enrollment">;
26
+ readonly flowId: import("effect/Schema").String;
27
+ }>]>>, HttpApiEndpoint.Json<typeof AuthBadRequestError | typeof AuthInvalidCredentialsError | typeof AuthPolicyDeniedError | typeof AuthRateLimitedError | typeof AuthInternalError>, never, never>;
28
+ export declare const passwordSignUpEndpoint: HttpApiEndpoint.HttpApiEndpoint<"signUp", "POST", "/sign-up", HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<import("effect/Schema").Struct<{
29
+ readonly email: import("effect/Schema").brand<import("effect/Schema").String, "auth/Email">;
30
+ readonly password: import("effect/Schema").String;
31
+ readonly emailVerified: import("effect/Schema").optional<import("effect/Schema").Boolean>;
32
+ readonly metadata: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>;
33
+ }>>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
34
+ readonly type: import("effect/Schema").Literal<"authenticated">;
35
+ readonly expiresAt: import("effect/Schema").Number;
36
+ readonly aal: import("effect/Schema").Literals<readonly ["aal1", "aal2", "aal3"]>;
37
+ readonly amr: import("effect/Schema").$Array<import("effect/Schema").String>;
38
+ readonly claims: import("effect/Schema").optional<import("effect/Schema").Struct<{
39
+ readonly emailVerified: import("effect/Schema").optional<import("effect/Schema").Boolean>;
40
+ readonly requirements: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").String>>;
41
+ }>>;
42
+ }>, import("effect/Schema").Struct<{
43
+ readonly type: import("effect/Schema").Literal<"requires_mfa">;
44
+ readonly flowId: import("effect/Schema").String;
45
+ readonly factors: import("effect/Schema").$Array<import("effect/Schema").Struct<{
46
+ readonly type: import("effect/Schema").String;
47
+ }>>;
48
+ }>, import("effect/Schema").Struct<{
49
+ readonly type: import("effect/Schema").Literal<"requires_email_verification">;
50
+ readonly flowId: import("effect/Schema").String;
51
+ }>, import("effect/Schema").Struct<{
52
+ readonly type: import("effect/Schema").Literal<"requires_passkey_enrollment">;
53
+ readonly flowId: import("effect/Schema").String;
54
+ }>]>>, HttpApiEndpoint.Json<typeof AuthBadRequestError | typeof AuthPolicyDeniedError | typeof AuthRateLimitedError | typeof AuthEmailAlreadyRegisteredError | typeof AuthInternalError>, never, never>;
55
+ export declare const currentSessionEndpoint: HttpApiEndpoint.HttpApiEndpoint<"current", "GET", "/session", HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<import("effect/Schema").Struct<{
56
+ readonly type: import("effect/Schema").Literal<"authenticated">;
57
+ readonly userId: import("effect/Schema").String;
58
+ readonly sessionId: import("effect/Schema").String;
59
+ readonly authTime: import("effect/Schema").Number;
60
+ readonly expiresAt: import("effect/Schema").Number;
61
+ readonly aal: import("effect/Schema").Literals<readonly ["aal1", "aal2", "aal3"]>;
62
+ readonly amr: import("effect/Schema").$Array<import("effect/Schema").String>;
63
+ readonly claims: import("effect/Schema").optional<import("effect/Schema").Struct<{
64
+ readonly emailVerified: import("effect/Schema").optional<import("effect/Schema").Boolean>;
65
+ readonly requirements: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").String>>;
66
+ }>>;
67
+ }>>, HttpApiEndpoint.Json<typeof AuthUnauthenticatedError | typeof AuthInternalError>, never, never>;
68
+ export declare const refreshSessionEndpoint: HttpApiEndpoint.HttpApiEndpoint<"refresh", "POST", "/session/refresh", HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<import("effect/Schema").Struct<{
69
+ readonly type: import("effect/Schema").Literal<"authenticated">;
70
+ readonly userId: import("effect/Schema").String;
71
+ readonly sessionId: import("effect/Schema").String;
72
+ readonly authTime: import("effect/Schema").Number;
73
+ readonly expiresAt: import("effect/Schema").Number;
74
+ readonly aal: import("effect/Schema").Literals<readonly ["aal1", "aal2", "aal3"]>;
75
+ readonly amr: import("effect/Schema").$Array<import("effect/Schema").String>;
76
+ readonly claims: import("effect/Schema").optional<import("effect/Schema").Struct<{
77
+ readonly emailVerified: import("effect/Schema").optional<import("effect/Schema").Boolean>;
78
+ readonly requirements: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").String>>;
79
+ }>>;
80
+ }>>, HttpApiEndpoint.Json<typeof AuthUnauthenticatedError | typeof AuthInternalError>, never, never>;
81
+ export declare const logoutEndpoint: HttpApiEndpoint.HttpApiEndpoint<"logout", "POST", "/logout", HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<HttpApiSchema.NoContent>, HttpApiEndpoint.Json<typeof AuthInternalError>, never, never>;
82
+ export declare const emailVerificationStartEndpoint: HttpApiEndpoint.HttpApiEndpoint<"start", "POST", "/start", HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<import("effect/Schema").Struct<{
83
+ readonly userId: import("effect/Schema").brand<import("effect/Schema").String, "auth/UserId">;
84
+ readonly email: import("effect/Schema").brand<import("effect/Schema").String, "auth/Email">;
85
+ readonly secret: import("effect/Schema").optional<import("effect/Schema").String>;
86
+ readonly metadata: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Unknown>>;
87
+ }>>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<HttpApiSchema.NoContent>, HttpApiEndpoint.Json<typeof AuthBadRequestError | typeof AuthRateLimitedError | typeof AuthInternalError>, never, never>;
88
+ export declare const emailVerificationVerifyEndpoint: HttpApiEndpoint.HttpApiEndpoint<"verify", "POST", "/verify", HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<import("effect/Schema").Struct<{
89
+ readonly challengeId: import("effect/Schema").brand<import("effect/Schema").String, "auth/ChallengeId">;
90
+ readonly secret: import("effect/Schema").optional<import("effect/Schema").String>;
91
+ }>>, HttpApiEndpoint.StringTree<never>, HttpApiEndpoint.Json<HttpApiSchema.NoContent>, HttpApiEndpoint.Json<typeof AuthBadRequestError | typeof AuthInternalError>, never, never>;
92
+ //# sourceMappingURL=Endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Endpoints.d.ts","sourceRoot":"","sources":["../../src/HttpApi/Endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEzE,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,EACjB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,aAAa,CAAC;AAUrB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;mMAclC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;uMAclC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;oGAOlC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;oGAOlC,CAAC;AAEF,eAAO,MAAM,cAAc,iTAGzB,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;+MAQ1C,CAAC;AAEF,eAAO,MAAM,+BAA+B;;;iLAQ3C,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { HttpApiEndpoint, HttpApiSchema } from "effect/unstable/httpapi";
2
+ import { AuthBadRequestError, AuthEmailAlreadyRegisteredError, AuthInternalError, AuthInvalidCredentialsError, AuthPolicyDeniedError, AuthRateLimitedError, AuthUnauthenticatedError, } from "./Errors.js";
3
+ import { CurrentSessionHttpBody, EmailVerificationStartBody, EmailVerificationVerifyBody, PasswordAuthSuccess, PasswordSignInBody, PasswordSignUpBody, } from "./Schemas.js";
4
+ export const passwordSignInEndpoint = HttpApiEndpoint.post("signIn", "/sign-in", {
5
+ payload: PasswordSignInBody,
6
+ success: PasswordAuthSuccess,
7
+ error: [
8
+ AuthBadRequestError,
9
+ AuthInvalidCredentialsError,
10
+ AuthPolicyDeniedError,
11
+ AuthRateLimitedError,
12
+ AuthInternalError,
13
+ ],
14
+ });
15
+ export const passwordSignUpEndpoint = HttpApiEndpoint.post("signUp", "/sign-up", {
16
+ payload: PasswordSignUpBody,
17
+ success: PasswordAuthSuccess,
18
+ error: [
19
+ AuthBadRequestError,
20
+ AuthEmailAlreadyRegisteredError,
21
+ AuthPolicyDeniedError,
22
+ AuthRateLimitedError,
23
+ AuthInternalError,
24
+ ],
25
+ });
26
+ export const currentSessionEndpoint = HttpApiEndpoint.get("current", "/session", {
27
+ success: CurrentSessionHttpBody,
28
+ error: [AuthUnauthenticatedError, AuthInternalError],
29
+ });
30
+ export const refreshSessionEndpoint = HttpApiEndpoint.post("refresh", "/session/refresh", {
31
+ success: CurrentSessionHttpBody,
32
+ error: [AuthUnauthenticatedError, AuthInternalError],
33
+ });
34
+ export const logoutEndpoint = HttpApiEndpoint.post("logout", "/logout", {
35
+ success: HttpApiSchema.NoContent,
36
+ error: [AuthInternalError],
37
+ });
38
+ export const emailVerificationStartEndpoint = HttpApiEndpoint.post("start", "/start", {
39
+ payload: EmailVerificationStartBody,
40
+ success: HttpApiSchema.NoContent,
41
+ error: [AuthBadRequestError, AuthRateLimitedError, AuthInternalError],
42
+ });
43
+ export const emailVerificationVerifyEndpoint = HttpApiEndpoint.post("verify", "/verify", {
44
+ payload: EmailVerificationVerifyBody,
45
+ success: HttpApiSchema.NoContent,
46
+ error: [AuthBadRequestError, AuthInternalError],
47
+ });
48
+ //# sourceMappingURL=Endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Endpoints.js","sourceRoot":"","sources":["../../src/HttpApi/Endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEzE,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,EACjB,2BAA2B,EAC3B,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,IAAI,CACxD,QAAQ,EACR,UAAU,EACV;IACE,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,mBAAmB;IAC5B,KAAK,EAAE;QACL,mBAAmB;QACnB,2BAA2B;QAC3B,qBAAqB;QACrB,oBAAoB;QACpB,iBAAiB;KAClB;CACF,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,IAAI,CACxD,QAAQ,EACR,UAAU,EACV;IACE,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,mBAAmB;IAC5B,KAAK,EAAE;QACL,mBAAmB;QACnB,+BAA+B;QAC/B,qBAAqB;QACrB,oBAAoB;QACpB,iBAAiB;KAClB;CACF,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,GAAG,CACvD,SAAS,EACT,UAAU,EACV;IACE,OAAO,EAAE,sBAAsB;IAC/B,KAAK,EAAE,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;CACrD,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,IAAI,CACxD,SAAS,EACT,kBAAkB,EAClB;IACE,OAAO,EAAE,sBAAsB;IAC/B,KAAK,EAAE,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;CACrD,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE;IACtE,OAAO,EAAE,aAAa,CAAC,SAAS;IAChC,KAAK,EAAE,CAAC,iBAAiB,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,eAAe,CAAC,IAAI,CAChE,OAAO,EACP,QAAQ,EACR;IACE,OAAO,EAAE,0BAA0B;IACnC,OAAO,EAAE,aAAa,CAAC,SAAS;IAChC,KAAK,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,CAAC;CACtE,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG,eAAe,CAAC,IAAI,CACjE,QAAQ,EACR,SAAS,EACT;IACE,OAAO,EAAE,2BAA2B;IACpC,OAAO,EAAE,aAAa,CAAC,SAAS;IAChC,KAAK,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;CAChD,CACF,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { Schema } from "effect";
2
+ import { HttpApiMiddleware } from "effect/unstable/httpapi";
3
+ export type AuthHttpErrorCode = "bad_request" | "unauthenticated" | "invalid_credentials" | "policy_denied" | "rate_limited" | "email_already_registered" | "request_rejected" | "internal_error";
4
+ export declare const AuthHttpErrorCode: Schema.Literals<readonly ["bad_request", "unauthenticated", "invalid_credentials", "policy_denied", "rate_limited", "email_already_registered", "request_rejected", "internal_error"]>;
5
+ export type AuthValidationIssueCode = "required" | "invalid_type" | "invalid_value" | "unexpected_key" | "forbidden";
6
+ export declare const AuthValidationIssueCode: Schema.Literals<readonly ["required", "invalid_type", "invalid_value", "unexpected_key", "forbidden"]>;
7
+ export declare const AuthValidationIssue: Schema.Struct<{
8
+ readonly path: Schema.$Array<Schema.String>;
9
+ readonly code: Schema.Literals<readonly ["required", "invalid_type", "invalid_value", "unexpected_key", "forbidden"]>;
10
+ readonly message: Schema.String;
11
+ }>;
12
+ export type AuthValidationIssue = Schema.Schema.Type<typeof AuthValidationIssue>;
13
+ declare const AuthBadRequestError_base: Schema.Class<AuthBadRequestError, Schema.TaggedStruct<"AuthBadRequestError", {
14
+ readonly code: Schema.Literal<"bad_request">;
15
+ readonly message: Schema.String;
16
+ readonly issues: Schema.optional<Schema.$Array<Schema.Struct<{
17
+ readonly path: Schema.$Array<Schema.String>;
18
+ readonly code: Schema.Literals<readonly ["required", "invalid_type", "invalid_value", "unexpected_key", "forbidden"]>;
19
+ readonly message: Schema.String;
20
+ }>>>;
21
+ }>, import("effect/Cause").YieldableError>;
22
+ export declare class AuthBadRequestError extends AuthBadRequestError_base {
23
+ }
24
+ declare const AuthUnauthenticatedError_base: Schema.Class<AuthUnauthenticatedError, Schema.TaggedStruct<"AuthUnauthenticatedError", {
25
+ readonly code: Schema.Literal<"unauthenticated">;
26
+ readonly message: Schema.String;
27
+ }>, import("effect/Cause").YieldableError>;
28
+ export declare class AuthUnauthenticatedError extends AuthUnauthenticatedError_base {
29
+ }
30
+ declare const AuthInvalidCredentialsError_base: Schema.Class<AuthInvalidCredentialsError, Schema.TaggedStruct<"AuthInvalidCredentialsError", {
31
+ readonly code: Schema.Literal<"invalid_credentials">;
32
+ readonly message: Schema.String;
33
+ }>, import("effect/Cause").YieldableError>;
34
+ export declare class AuthInvalidCredentialsError extends AuthInvalidCredentialsError_base {
35
+ }
36
+ declare const AuthPolicyDeniedError_base: Schema.Class<AuthPolicyDeniedError, Schema.TaggedStruct<"AuthPolicyDeniedError", {
37
+ readonly code: Schema.Literal<"policy_denied">;
38
+ readonly message: Schema.String;
39
+ }>, import("effect/Cause").YieldableError>;
40
+ export declare class AuthPolicyDeniedError extends AuthPolicyDeniedError_base {
41
+ }
42
+ declare const AuthRateLimitedError_base: Schema.Class<AuthRateLimitedError, Schema.TaggedStruct<"AuthRateLimitedError", {
43
+ readonly code: Schema.Literal<"rate_limited">;
44
+ readonly message: Schema.String;
45
+ readonly retryAfter: Schema.Duration;
46
+ }>, import("effect/Cause").YieldableError>;
47
+ export declare class AuthRateLimitedError extends AuthRateLimitedError_base {
48
+ get retryAfterSeconds(): number;
49
+ }
50
+ declare const AuthEmailAlreadyRegisteredError_base: Schema.Class<AuthEmailAlreadyRegisteredError, Schema.TaggedStruct<"AuthEmailAlreadyRegisteredError", {
51
+ readonly code: Schema.Literal<"email_already_registered">;
52
+ readonly message: Schema.String;
53
+ }>, import("effect/Cause").YieldableError>;
54
+ export declare class AuthEmailAlreadyRegisteredError extends AuthEmailAlreadyRegisteredError_base {
55
+ }
56
+ declare const AuthRequestRejectedError_base: Schema.Class<AuthRequestRejectedError, Schema.TaggedStruct<"AuthRequestRejectedError", {
57
+ readonly code: Schema.Literal<"request_rejected">;
58
+ readonly message: Schema.String;
59
+ }>, import("effect/Cause").YieldableError>;
60
+ export declare class AuthRequestRejectedError extends AuthRequestRejectedError_base {
61
+ }
62
+ declare const AuthInternalError_base: Schema.Class<AuthInternalError, Schema.TaggedStruct<"AuthInternalError", {
63
+ readonly code: Schema.Literal<"internal_error">;
64
+ readonly message: Schema.String;
65
+ }>, import("effect/Cause").YieldableError>;
66
+ export declare class AuthInternalError extends AuthInternalError_base {
67
+ }
68
+ export type AuthHttpError = AuthBadRequestError | AuthUnauthenticatedError | AuthInvalidCredentialsError | AuthPolicyDeniedError | AuthRateLimitedError | AuthEmailAlreadyRegisteredError | AuthRequestRejectedError | AuthInternalError;
69
+ export declare const AuthHttpError: Schema.Union<readonly [typeof AuthBadRequestError, typeof AuthUnauthenticatedError, typeof AuthInvalidCredentialsError, typeof AuthPolicyDeniedError, typeof AuthRateLimitedError, typeof AuthEmailAlreadyRegisteredError, typeof AuthRequestRejectedError, typeof AuthInternalError]>;
70
+ declare const AuthSchemaErrorMiddleware_base: HttpApiMiddleware.ServiceClass<AuthSchemaErrorMiddleware, "auth/AuthSchemaErrorMiddleware", {
71
+ requires: never;
72
+ provides: never;
73
+ error: typeof AuthBadRequestError;
74
+ clientError: never;
75
+ requiredForClient: false;
76
+ security: never;
77
+ }, HttpApiMiddleware.HttpApiMiddleware<never, typeof AuthBadRequestError, never>>;
78
+ export declare class AuthSchemaErrorMiddleware extends AuthSchemaErrorMiddleware_base {
79
+ }
80
+ export declare const AuthSchemaErrorMiddlewareLive: import("effect/Layer").Layer<AuthSchemaErrorMiddleware, never, never>;
81
+ export {};
82
+ //# sourceMappingURL=Errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../src/HttpApi/Errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAe,MAAM,QAAQ,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,iBAAiB,GACjB,qBAAqB,GACrB,eAAe,GACf,cAAc,GACd,0BAA0B,GAC1B,kBAAkB,GAClB,gBAAgB,CAAC;AAErB,eAAO,MAAM,iBAAiB,wLASnB,CAAC;AAEZ,MAAM,MAAM,uBAAuB,GAC/B,UAAU,GACV,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,eAAO,MAAM,uBAAuB,wGAMzB,CAAC;AAEZ,eAAO,MAAM,mBAAmB;;;;EAI9B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAClD,OAAO,mBAAmB,CAC3B,CAAC;;;;;;;;;;AAEF,qBAAa,mBAAoB,SAAQ,wBAQxC;CAAG;;;;;AAEJ,qBAAa,wBAAyB,SAAQ,6BAO7C;CAAG;;;;;AAEJ,qBAAa,2BAA4B,SAAQ,gCAOhD;CAAG;;;;;AAEJ,qBAAa,qBAAsB,SAAQ,0BAO1C;CAAG;;;;;;AAEJ,qBAAa,oBAAqB,SAAQ,yBAQzC;IACC,IAAI,iBAAiB,IAAI,MAAM,CAE9B;CACF;;;;;AAED,qBAAa,+BAAgC,SAAQ,oCAOpD;CAAG;;;;;AAEJ,qBAAa,wBAAyB,SAAQ,6BAO7C;CAAG;;;;;AAEJ,qBAAa,iBAAkB,SAAQ,sBAOtC;CAAG;AAEJ,MAAM,MAAM,aAAa,GACrB,mBAAmB,GACnB,wBAAwB,GACxB,2BAA2B,GAC3B,qBAAqB,GACrB,oBAAoB,GACpB,+BAA+B,GAC/B,wBAAwB,GACxB,iBAAiB,CAAC;AAEtB,eAAO,MAAM,aAAa,wRASxB,CAAC;;;;;;;;;AAEH,qBAAa,yBAA0B,SAAQ,8BAG9C;CAAG;AAwHJ,eAAO,MAAM,6BAA6B,uEAcvC,CAAC"}
@@ -0,0 +1,184 @@
1
+ import { Duration, Effect, Schema, SchemaIssue } from "effect";
2
+ import { HttpApiMiddleware } from "effect/unstable/httpapi";
3
+ export const AuthHttpErrorCode = Schema.Literals([
4
+ "bad_request",
5
+ "unauthenticated",
6
+ "invalid_credentials",
7
+ "policy_denied",
8
+ "rate_limited",
9
+ "email_already_registered",
10
+ "request_rejected",
11
+ "internal_error",
12
+ ]);
13
+ export const AuthValidationIssueCode = Schema.Literals([
14
+ "required",
15
+ "invalid_type",
16
+ "invalid_value",
17
+ "unexpected_key",
18
+ "forbidden",
19
+ ]);
20
+ export const AuthValidationIssue = Schema.Struct({
21
+ path: Schema.Array(Schema.String),
22
+ code: AuthValidationIssueCode,
23
+ message: Schema.String,
24
+ });
25
+ export class AuthBadRequestError extends Schema.TaggedErrorClass()("AuthBadRequestError", {
26
+ code: Schema.Literal("bad_request"),
27
+ message: Schema.String,
28
+ issues: Schema.optional(Schema.Array(AuthValidationIssue)),
29
+ }, { httpApiStatus: 400 }) {
30
+ }
31
+ export class AuthUnauthenticatedError extends Schema.TaggedErrorClass()("AuthUnauthenticatedError", {
32
+ code: Schema.Literal("unauthenticated"),
33
+ message: Schema.String,
34
+ }, { httpApiStatus: 401 }) {
35
+ }
36
+ export class AuthInvalidCredentialsError extends Schema.TaggedErrorClass()("AuthInvalidCredentialsError", {
37
+ code: Schema.Literal("invalid_credentials"),
38
+ message: Schema.String,
39
+ }, { httpApiStatus: 401 }) {
40
+ }
41
+ export class AuthPolicyDeniedError extends Schema.TaggedErrorClass()("AuthPolicyDeniedError", {
42
+ code: Schema.Literal("policy_denied"),
43
+ message: Schema.String,
44
+ }, { httpApiStatus: 403 }) {
45
+ }
46
+ export class AuthRateLimitedError extends Schema.TaggedErrorClass()("AuthRateLimitedError", {
47
+ code: Schema.Literal("rate_limited"),
48
+ message: Schema.String,
49
+ retryAfter: Schema.Duration,
50
+ }, { httpApiStatus: 429 }) {
51
+ get retryAfterSeconds() {
52
+ return Math.ceil(Duration.toMillis(this.retryAfter) / 1000);
53
+ }
54
+ }
55
+ export class AuthEmailAlreadyRegisteredError extends Schema.TaggedErrorClass()("AuthEmailAlreadyRegisteredError", {
56
+ code: Schema.Literal("email_already_registered"),
57
+ message: Schema.String,
58
+ }, { httpApiStatus: 409 }) {
59
+ }
60
+ export class AuthRequestRejectedError extends Schema.TaggedErrorClass()("AuthRequestRejectedError", {
61
+ code: Schema.Literal("request_rejected"),
62
+ message: Schema.String,
63
+ }, { httpApiStatus: 403 }) {
64
+ }
65
+ export class AuthInternalError extends Schema.TaggedErrorClass()("AuthInternalError", {
66
+ code: Schema.Literal("internal_error"),
67
+ message: Schema.String,
68
+ }, { httpApiStatus: 500 }) {
69
+ }
70
+ export const AuthHttpError = Schema.Union([
71
+ AuthBadRequestError,
72
+ AuthUnauthenticatedError,
73
+ AuthInvalidCredentialsError,
74
+ AuthPolicyDeniedError,
75
+ AuthRateLimitedError,
76
+ AuthEmailAlreadyRegisteredError,
77
+ AuthRequestRejectedError,
78
+ AuthInternalError,
79
+ ]);
80
+ export class AuthSchemaErrorMiddleware extends HttpApiMiddleware.Service()("auth/AuthSchemaErrorMiddleware", { error: AuthBadRequestError }) {
81
+ }
82
+ const maxValidationIssues = 10;
83
+ const validationLeafCode = (issue) => {
84
+ switch (issue._tag) {
85
+ case "MissingKey": {
86
+ return "required";
87
+ }
88
+ case "InvalidType": {
89
+ return "invalid_type";
90
+ }
91
+ case "UnexpectedKey": {
92
+ return "unexpected_key";
93
+ }
94
+ case "Forbidden": {
95
+ return "forbidden";
96
+ }
97
+ case "InvalidValue":
98
+ case "OneOf": {
99
+ return "invalid_value";
100
+ }
101
+ }
102
+ };
103
+ const validationLeafMessage = (issue) => {
104
+ switch (issue._tag) {
105
+ case "MissingKey": {
106
+ return "Required";
107
+ }
108
+ case "InvalidType": {
109
+ return "Invalid type";
110
+ }
111
+ case "UnexpectedKey": {
112
+ return "Unexpected field";
113
+ }
114
+ case "Forbidden": {
115
+ return "Forbidden";
116
+ }
117
+ case "InvalidValue":
118
+ case "OneOf": {
119
+ return "Invalid value";
120
+ }
121
+ }
122
+ };
123
+ const validationCodeFormatter = SchemaIssue.makeFormatterStandardSchemaV1({
124
+ leafHook: validationLeafCode,
125
+ checkHook: (issue) => issue.issue._tag === "InvalidValue" ? "invalid_value" : undefined,
126
+ });
127
+ const validationMessageFormatter = SchemaIssue.makeFormatterStandardSchemaV1({
128
+ leafHook: validationLeafMessage,
129
+ checkHook: (issue) => issue.issue._tag === "InvalidValue" ? "Invalid value" : undefined,
130
+ });
131
+ const validationIssueCodeFromString = (code) => {
132
+ switch (code) {
133
+ case "required":
134
+ case "invalid_type":
135
+ case "unexpected_key":
136
+ case "forbidden":
137
+ case "invalid_value": {
138
+ return code;
139
+ }
140
+ default: {
141
+ return "invalid_value";
142
+ }
143
+ }
144
+ };
145
+ const validationIssueMessageFromString = (message) => {
146
+ switch (message) {
147
+ case "Required":
148
+ case "Invalid type":
149
+ case "Unexpected field":
150
+ case "Forbidden":
151
+ case "Invalid value": {
152
+ return message;
153
+ }
154
+ default: {
155
+ return "Invalid value";
156
+ }
157
+ }
158
+ };
159
+ const validationPathSegment = (segment) => {
160
+ const key = typeof segment === "object" && segment !== null && "key" in segment
161
+ ? segment.key
162
+ : segment;
163
+ return String(key);
164
+ };
165
+ const validationIssuePath = (path) => path?.map(validationPathSegment) ?? [];
166
+ const validationIssuesFromSchemaIssue = (issue) => {
167
+ const codes = validationCodeFormatter(issue).issues;
168
+ return validationMessageFormatter(issue)
169
+ .issues.slice(0, maxValidationIssues)
170
+ .map((schemaIssue, index) => ({
171
+ path: validationIssuePath(schemaIssue.path),
172
+ code: validationIssueCodeFromString(codes[index]?.message),
173
+ message: validationIssueMessageFromString(schemaIssue.message),
174
+ }));
175
+ };
176
+ export const AuthSchemaErrorMiddlewareLive = HttpApiMiddleware.layerSchemaErrorTransform(AuthSchemaErrorMiddleware, (error) => {
177
+ const issues = validationIssuesFromSchemaIssue(error.cause.issue);
178
+ return Effect.fail(new AuthBadRequestError({
179
+ code: "bad_request",
180
+ message: "Invalid request",
181
+ ...(issues.length > 0 ? { issues } : {}),
182
+ }));
183
+ });
184
+ //# sourceMappingURL=Errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Errors.js","sourceRoot":"","sources":["../../src/HttpApi/Errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import { Schema } from "effect";
2
+ export declare const PasswordSignInBody: Schema.Struct<{
3
+ readonly email: Schema.brand<Schema.String, "auth/Email">;
4
+ readonly password: Schema.String;
5
+ }>;
6
+ export declare const PasswordSignUpBody: Schema.Struct<{
7
+ readonly email: Schema.brand<Schema.String, "auth/Email">;
8
+ readonly password: Schema.String;
9
+ readonly emailVerified: Schema.optional<Schema.Boolean>;
10
+ readonly metadata: Schema.optional<Schema.$Record<Schema.String, Schema.Unknown>>;
11
+ }>;
12
+ export declare const EmailVerificationStartBody: Schema.Struct<{
13
+ readonly userId: Schema.brand<Schema.String, "auth/UserId">;
14
+ readonly email: Schema.brand<Schema.String, "auth/Email">;
15
+ readonly secret: Schema.optional<Schema.String>;
16
+ readonly metadata: Schema.optional<Schema.$Record<Schema.String, Schema.Unknown>>;
17
+ }>;
18
+ export declare const EmailVerificationVerifyBody: Schema.Struct<{
19
+ readonly challengeId: Schema.brand<Schema.String, "auth/ChallengeId">;
20
+ readonly secret: Schema.optional<Schema.String>;
21
+ }>;
22
+ export declare const SessionClaimsHttpBody: Schema.Struct<{
23
+ readonly emailVerified: Schema.optional<Schema.Boolean>;
24
+ readonly requirements: Schema.optional<Schema.$Array<Schema.String>>;
25
+ }>;
26
+ export declare const AuthenticatedHttpBody: Schema.Struct<{
27
+ readonly type: Schema.Literal<"authenticated">;
28
+ readonly expiresAt: Schema.Number;
29
+ readonly aal: Schema.Literals<readonly ["aal1", "aal2", "aal3"]>;
30
+ readonly amr: Schema.$Array<Schema.String>;
31
+ readonly claims: Schema.optional<Schema.Struct<{
32
+ readonly emailVerified: Schema.optional<Schema.Boolean>;
33
+ readonly requirements: Schema.optional<Schema.$Array<Schema.String>>;
34
+ }>>;
35
+ }>;
36
+ export declare const CurrentSessionHttpBody: Schema.Struct<{
37
+ readonly type: Schema.Literal<"authenticated">;
38
+ readonly userId: Schema.String;
39
+ readonly sessionId: Schema.String;
40
+ readonly authTime: Schema.Number;
41
+ readonly expiresAt: Schema.Number;
42
+ readonly aal: Schema.Literals<readonly ["aal1", "aal2", "aal3"]>;
43
+ readonly amr: Schema.$Array<Schema.String>;
44
+ readonly claims: Schema.optional<Schema.Struct<{
45
+ readonly emailVerified: Schema.optional<Schema.Boolean>;
46
+ readonly requirements: Schema.optional<Schema.$Array<Schema.String>>;
47
+ }>>;
48
+ }>;
49
+ export declare const RequiresMfaHttpBody: Schema.Struct<{
50
+ readonly type: Schema.Literal<"requires_mfa">;
51
+ readonly flowId: Schema.String;
52
+ readonly factors: Schema.$Array<Schema.Struct<{
53
+ readonly type: Schema.String;
54
+ }>>;
55
+ }>;
56
+ export declare const RequiresEmailVerificationHttpBody: Schema.Struct<{
57
+ readonly type: Schema.Literal<"requires_email_verification">;
58
+ readonly flowId: Schema.String;
59
+ }>;
60
+ export declare const RequiresPasskeyEnrollmentHttpBody: Schema.Struct<{
61
+ readonly type: Schema.Literal<"requires_passkey_enrollment">;
62
+ readonly flowId: Schema.String;
63
+ }>;
64
+ export declare const PasswordAuthSuccess: Schema.Union<readonly [Schema.Struct<{
65
+ readonly type: Schema.Literal<"authenticated">;
66
+ readonly expiresAt: Schema.Number;
67
+ readonly aal: Schema.Literals<readonly ["aal1", "aal2", "aal3"]>;
68
+ readonly amr: Schema.$Array<Schema.String>;
69
+ readonly claims: Schema.optional<Schema.Struct<{
70
+ readonly emailVerified: Schema.optional<Schema.Boolean>;
71
+ readonly requirements: Schema.optional<Schema.$Array<Schema.String>>;
72
+ }>>;
73
+ }>, Schema.Struct<{
74
+ readonly type: Schema.Literal<"requires_mfa">;
75
+ readonly flowId: Schema.String;
76
+ readonly factors: Schema.$Array<Schema.Struct<{
77
+ readonly type: Schema.String;
78
+ }>>;
79
+ }>, Schema.Struct<{
80
+ readonly type: Schema.Literal<"requires_email_verification">;
81
+ readonly flowId: Schema.String;
82
+ }>, Schema.Struct<{
83
+ readonly type: Schema.Literal<"requires_passkey_enrollment">;
84
+ readonly flowId: Schema.String;
85
+ }>]>;
86
+ //# sourceMappingURL=Schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schemas.d.ts","sourceRoot":"","sources":["../../src/HttpApi/Schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAQhC,eAAO,MAAM,kBAAkB;;;EAG7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;EAK7B,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;EAKrC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;EAGtC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;EAGhC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;EAMhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EASjC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;EAI9B,CAAC;AAEH,eAAO,MAAM,iCAAiC;;;EAG5C,CAAC;AAEH,eAAO,MAAM,iCAAiC;;;EAG5C,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;IAK9B,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { Schema } from "effect";
2
+ import { ChallengeIdSchema, EmailSchema, UserIdSchema, } from "../Identifiers.js";
3
+ export const PasswordSignInBody = Schema.Struct({
4
+ email: EmailSchema,
5
+ password: Schema.String,
6
+ });
7
+ export const PasswordSignUpBody = Schema.Struct({
8
+ email: EmailSchema,
9
+ password: Schema.String,
10
+ emailVerified: Schema.optional(Schema.Boolean),
11
+ metadata: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),
12
+ });
13
+ export const EmailVerificationStartBody = Schema.Struct({
14
+ userId: UserIdSchema,
15
+ email: EmailSchema,
16
+ secret: Schema.optional(Schema.String),
17
+ metadata: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),
18
+ });
19
+ export const EmailVerificationVerifyBody = Schema.Struct({
20
+ challengeId: ChallengeIdSchema,
21
+ secret: Schema.optional(Schema.String),
22
+ });
23
+ export const SessionClaimsHttpBody = Schema.Struct({
24
+ emailVerified: Schema.optional(Schema.Boolean),
25
+ requirements: Schema.optional(Schema.Array(Schema.String)),
26
+ });
27
+ export const AuthenticatedHttpBody = Schema.Struct({
28
+ type: Schema.Literal("authenticated"),
29
+ expiresAt: Schema.Number,
30
+ aal: Schema.Literals(["aal1", "aal2", "aal3"]),
31
+ amr: Schema.Array(Schema.String),
32
+ claims: Schema.optional(SessionClaimsHttpBody),
33
+ });
34
+ export const CurrentSessionHttpBody = Schema.Struct({
35
+ type: Schema.Literal("authenticated"),
36
+ userId: Schema.String,
37
+ sessionId: Schema.String,
38
+ authTime: Schema.Number,
39
+ expiresAt: Schema.Number,
40
+ aal: Schema.Literals(["aal1", "aal2", "aal3"]),
41
+ amr: Schema.Array(Schema.String),
42
+ claims: Schema.optional(SessionClaimsHttpBody),
43
+ });
44
+ export const RequiresMfaHttpBody = Schema.Struct({
45
+ type: Schema.Literal("requires_mfa"),
46
+ flowId: Schema.String,
47
+ factors: Schema.Array(Schema.Struct({ type: Schema.String })),
48
+ });
49
+ export const RequiresEmailVerificationHttpBody = Schema.Struct({
50
+ type: Schema.Literal("requires_email_verification"),
51
+ flowId: Schema.String,
52
+ });
53
+ export const RequiresPasskeyEnrollmentHttpBody = Schema.Struct({
54
+ type: Schema.Literal("requires_passkey_enrollment"),
55
+ flowId: Schema.String,
56
+ });
57
+ export const PasswordAuthSuccess = Schema.Union([
58
+ AuthenticatedHttpBody,
59
+ RequiresMfaHttpBody,
60
+ RequiresEmailVerificationHttpBody,
61
+ RequiresPasskeyEnrollmentHttpBody,
62
+ ]);
63
+ //# sourceMappingURL=Schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schemas.js","sourceRoot":"","sources":["../../src/HttpApi/Schemas.ts"],"names":[],"mappings":"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"}